从输入URL到页面加载完成的过程-数据包组装过程

    网络各层数据包的组装过程是比较复杂的,由于每一层都有各自的职责,所以在各层组装时的首部都会携带一些特定的标识。下面先给出一个组装图,再一一到来:

     从输入URL到页面加载完成的过程-数据包组装过程

                                                          图:数据包组装过程


1、组装TCP报文段,TCP的全部功能都体现在它首部中各自段的作用:

     从输入URL到页面加载完成的过程-数据包组装过程

解释其中几个比较重要的部分:

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个。

***:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置

确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP报文段的***字段的值是这个确认号。

窗口大小:窗口指的是发送本报文段的一方的接收窗口,而不是自己的发送窗口。窗口值作为接收方让发送方设置其发送窗口的依据。

校验和:提供额外的可靠性,检验报文段是否正确。具体如何校验,参考其他资料。


2、IP数据报组装需要首部和数据部分,数据部分即是TCP报文段。IP 数据报的格式示意图:

                  从输入URL到页面加载完成的过程-数据包组装过程

                                                图: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设备是如何转换的呢?

     从输入URL到页面加载完成的过程-数据包组装过程

                                                  图:NAT路由器的工作原理

          从输入URL到页面加载完成的过程-数据包组装过程

                                                 图:NAT地址转换表举例

    在客户端的局域网内,数据包的发送是以MAC帧首部的源MAC地址和目的MAC地址来寻找机器的,而到了NAT路由器,它会解开数据包,根据转换表,把IP数据报的首部中的源IP地址替换为新的IP地址(公网IP)

3、MAC帧格式,数据链路层需要解决的问题:

     封装成帧(如下图)、透明传输(数据部分加入转义符,头尾加入标识符)、差错检测(CRC)

              从输入URL到页面加载完成的过程-数据包组装过程

                                                          图:用帧首部和帧尾部进行封装成帧

    从输入URL到页面加载完成的过程-数据包组装过程

                                                              图:以太网帧格式

其中比较重要的是目的地址和源地址,这个地址就是硬件地址(网卡地址或mac地址),通过arp和rarp协议,可以把ip转换成mac地址,此时就会把源机器的mac地址和目标机器(服务器)的ip地址放于首部中。在网络中的路由器间进行传输时,路由器会不断的把mac帧首部的目的地址和源地址进行更换,以便找到下一个路由器。

      从输入URL到页面加载完成的过程-数据包组装过程

                                                    图:mac帧传输使用硬件地址

注意:1)、虽然在IP数据报的首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。

         2)、可以看出,传输过程中,IP数据报中的IP地址是不会变的,而MAC帧首部的源地址和目的地址要发生变化。在局域网的链路层,只能看见MAC帧。

         3)、IP层抽象的互联网却屏蔽了下层这些很复杂的细节。


    到此,基本完成了网络各层的封装,每层的作用基本可以体现在首部和尾部的字段中,不过我们不必较真,知道其中几个比较重要的字段就可以,因为我们关注的是数据包怎么传输(本文已可以看到解答)?如何进行差错检测?TCP如何控制传输速度,从而避免拥塞?未解答的问题,会在后面的文章中解答。

 

   参考书籍:《计算机网络》 第五版 谢希仁


转载于:https://my.oschina.net/xiaotian120/blog/269804