从输入URL到页面加载完成的过程-数据包组装过程
网络各层数据包的组装过程是比较复杂的,由于每一层都有各自的职责,所以在各层组装时的首部都会携带一些特定的标识。下面先给出一个组装图,再一一到来:
1、组装TCP报文段,TCP的全部功能都体现在它首部中各自段的作用:
解释其中几个比较重要的部分:
- 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个。
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。
窗口大小:窗口指的是发送本报文段的一方的接收窗口,而不是自己的发送窗口。窗口值作为接收方让发送方设置其发送窗口的依据。
校验和:提供额外的可靠性,检验报文段是否正确。具体如何校验,参考其他资料。
2、IP数据报组装需要首部和数据部分,数据部分即是TCP报文段。
IP 数据报的格式示意图:
解释其中几个比较重要的部分:
版本:占 4 位,指 IP 协议的版本,目前的 IP 协议版本号为 4 (即 IPv4)
总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU
首部校验和:只检验数据报的首部,但不包括数据部分。
源地址、目的地址:表示此报文段发送方的IP地址和接收方的IP地址,此时假如电脑使用wifi上网(即组成局域网),那么发送方的ip为内网IP(如192.168.1.10),可想而知,在接收方发送数据回来时,是找不到这个IP地址的,因此在出口的NAT设备上,会把此IP数据报的源IP地址换为出口IP(也就是公网IP,如119.147.215.58),那么NAT设备是如何转换的呢?
- 在客户端的局域网内,数据包的发送是以MAC帧首部的源MAC地址和目的MAC地址来寻找机器的,而到了NAT路由器,它会解开数据包,根据转换表,把IP数据报的首部中的源IP地址替换为新的IP地址(公网IP)
3、MAC帧格式,数据链路层需要解决的问题:
- 封装成帧(如下图)、透明传输(数据部分加入转义符,头尾加入标识符)、差错检测(CRC)
- 其中比较重要的是目的地址和源地址,这个地址就是硬件地址(网卡地址或mac地址),通过arp和rarp协议,可以把ip转换成mac地址,此时就会把源机器的mac地址和目标机器(服务器)的ip地址放于首部中。在网络中的路由器间进行传输时,路由器会不断的把mac帧首部的目的地址和源地址进行更换,以便找到下一个路由器。
注意:
1)、虽然在IP数据报的首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。
2)、可以看出,传输过程中,IP数据报中的IP地址是不会变的,而MAC帧首部的源地址和目的地址要发生变化。在局域网的链路层,只能看见MAC帧。
3)、IP层抽象的互联网却屏蔽了下层这些很复杂的细节。
到此,基本完成了网络各层的封装,每层的作用基本可以体现在首部和尾部的字段中,不过我们不必较真,知道其中几个比较重要的字段就可以,因为我们关注的是数据包怎么传输(本文已可以看到解答)?