1.常见网络词汇
- 交换机:用于组件局域网
- 路由器:实现局域网之间的通信
- 三层交换机:集成了 交换机 & 路由器的功能
- IP:用于在网络中确定主机的位置
一个IP地址分为网络地址和主机地址,网络地址相同的IP属于同一个网段,同一个网段的IP才能相互通信,,而网络地址的确认是通过子网掩码的 - 子网掩码:用于确认IP地址的网络地址
IP:192.168.1.199 11000000.10101000.00000001.11000111 子网掩码:255.255.255.0 11111111.11111111.11111111.00000000 此时,网络地址就是前24位 + 主机地址是后8位
- DHCP:在局域网内给电脑分配IP地址
- 端口:用于确认电脑中不同应用程序的
端口的取值范围:0 ~ 65535,很多端口在计算机的内部已被使用,我们平时自定义时尽量选择5000之后的端口。
- 域名:就是某个IP地址的中文名字
让域名和IP创建对应关系,用户只需要记住域名就可以了
www.baidu.com --> 110.242.68.3 www.taobao.com --> 121.18.239.232
电脑寻找IP地址的过程
第一步:在自己电脑的DNS缓存记录中寻找 域名对应的IP,如果未命中,则执行下一步。 第二步:在自己电脑的hosts文件中寻找,如果未命中,则执行下一步 第三步:在自己电脑上找到DNS配置的地址(本地域名服务器),去这个地址寻找域名对应的IP,如果未命中,则执行下一步。 第四步:去根域名服务器中询问(全球共13台根域名服务器,距离中国最近的一台是在日本)
2.BS/CS架构
在平时开发中我们会经常听到BS、CS架构,这分别是什么呢?
- CS架构:是Client和Server的简称,需要程序员开发客户端和服务端,如QQ,微信
- BS架构:Browser和Server的简称,程序员只需要开发服务端,客户端由浏览器代替,如京东商城
而对于我们学习web开发,就是采用BS架构的,即网站开发
3.OSI七层模型
定义:模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系
模型一共分为以下七层:
- 应用层: 网络服务和用户之间的一个接口,可以规定数据格式等
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP - 表示层: 对用户数据进行编码,压缩,加密等操作
格式有,JPEG、ASCll、EBCDIC、加密格式等 - 会话层: 负责与目标建立,中断连接
- 传输层: 建立端口到端口的通信,即确定双方的端口
协议有:TCP UDP - 网络层: 确立目标的IP地址
协议有:ICMP IGMP IP(IPV4 IPV6) - 数据链路层:对数据进行分组,设置目标mac地址等
- 物理层:将二进制数据在物理媒介上传输
每一层都有自己的作用,7层互相合作,实现数据的交互,我们可以想象成寄快递
发快递方就是发数据的电脑,将物品通过快递一层层的包装,最后通过网络传输给了接收方,也就是接数据的电脑,然后将外包装一层层剥离开,最终拿到物品
4.UDP/TCP协议
4.1 TCP 和 UDP
协议就是一种规定,规定双方收发数据
UDP:(User Data Protocol),用户数据报协议,是一个无连接的面向数据报文的传输层协议,因为是无连接的,UDP的可靠性较差,它只负责将数据发送出去,不能保证数据到达对方。UDP没有超时重发,传输速度较快
TCP:(Transmission Control Protocol):是面向连接的协议,在数据发送前,双发会建立可靠的连接,TCP是可靠的,有重发机制
思考:两种协议该如何选择呢?
当我们传输数据的时候,追求速度,对少量数据的丢失是允许的,可以采用UDP通讯,如视频直播,语音通话
当我们对数据要求严格,必须保证数据的准确性,我们就可以采用TCP通信,如文件传输
4.2 TCP的三次握手
思考:为什么需要三次握手而不是两次?
这是为了防止,因为已失效的请求报文,突然又传到服务器,引起错误
假设采用两次握手建立连接,客户端向服务端发送一个syn包请求建立连接,因为某些未知的原因,并没有到达服务器,在中间某个网络节点产生了滞留,为了建立连接,客户端会重发syn包,这次的数据包正常送达,服务端发送syn+ack之后就建立起了连接,但是第一包数据阻塞的网络突然恢复,第一包syn包又送达到服务端,这是服务端会认为客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的ack包,自然不会认为连接建立成功,所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。
4.3 数据传输
一包数据可能会被拆成多包发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题?针对这些问题,tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- 序号:seq序号,32bits(4bytes)。用来标识从TCP源端口向目的端口发送的字节流,发起方发送数据时对此进行标记。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
- 确认号:ack序号,32bits。是期望收到对方的下一个报文段的数据的第一个字节的序号。只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
4.4 TCP的四次挥手
处于连接状态的客户端和服务端,都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭,假设客户端主动发起连接关闭请求,他给服务端发起一包FIN包,标识要关闭连接,自己进入终止等待1装填,服务端收到FIN包,发送一包ACK包,标识自己进入了关闭等待状态,客户端进入终止等待2状态。这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,发送一包FIN包,最后进入确认状态,这是第3次挥手,客户端收到之后恢复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。为什么客户端要等待超时时间这是为了保证对方已经收到ACK包,因为假设客户端发送完最后一包ACK包后释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在 最后确认状态,如果等待一段时间,这时服务端会因为没有收到ack包重发FIN包,客户端会响应 这个FIN包进行重发ack包,并刷新超时时间,这个机制跟第三次握手一样。也是为了保证在不可靠的网络链路中进行可靠的连接断开确认。