0%

浏览器原理学习笔记-网络数据包的传输

衡量 Web 页面性能有个重要的指标叫做:FP(First Paint),是指从页面加载到首次开始绘制的时长。更少的FP意味着更多的PV,更高的参与度、以及转换率。影响其的一个很重要的因素就是网络加载速度

想要优化网页的加载速度,需要对网络有一个深入的认识。

数据包的传输过程

互联网实际是一套理论和协议组成的体系架构。其中,因为有了协议这一众所周知的规则和标准,各方都同意使用 的前提下,那么它们的通信之间将变得毫无障碍。

互联网中的数据是通过数据包来传输的。发送的数据很大的话,会被拆成很多小的包来传输。例如音频数据就并不是一个大的文件。

1.IP:数据包送往目标主机

如果想把数据包从主机 A 发送给 B,在传输之前,数据包会有B的IP地址信息,这样在传输过程中才能正确寻址。数据包上还会附加上A的IP信息,有了这些信息B才可以回复信息给主机A。这些信息都会放在一个叫IP头都数据结构里面,它是IP数据包开头的信息,包含IP版本、源IP地址、目标IP地址、生存时间等。具体了解)

为了便于理解,可以把网络简单分成三层结构:

image-20200518093817351

过程是这样的:

  • 上层将有“极客时间”的数据交给网络层
  • 网络层再将IP头附加到数据包上,组成新的IP数据包,交给底层
  • 底层通过物理网络将数据包传给B
  • 数据包被传输到主机B的网络层,主机B拆开数据包的IP信息,并把拆开的数据部分交给上层
  • 最后,数据就到主机B的上层了

UDP:数据包送到应用层序

IP是底层的协议,它只负责传送数据包到对方的电脑,但是对方电脑不知道把数据包交给哪一个程序。因此有了基于IP之上开发能和应用打交道的协议,最常见的就是“用户数据协议”(User Datagram Protocol),简称UDP

UDP中最重要的信号是端口号,每个想访问网络的应用程序都得绑定一个端口号。通过端口号就能把指定的数据包发给指定的应用程序,IP通过地址信息来发包到主机,UDP根据端口号来发包到应用程序。和IP头一样,端口号会被装进UDP头里面,UDP头再和原始的数据包合并成新的UDP数据包。UDP同时也包括源端口号和目标端口号。

为了支持UDP,现在的网络的三层传输结构可以扩充为四层结构,在网络层和上层之间增加了传输层,如下图所示:

image-20200518094858296

现在的过程就成了:

  • 上层将含有传输信息的数据包给传输层
  • 传输层会在数据包上加上UDP头,组成一个UDP的数据包,再将UDP包交给网络层
  • 网络层附加IP头,组成IP数据包给底层
  • 数据包传输到主机B的网络层并被解析,部分数据被丢(IP)
  • 传输层中,数据包中的UDP头被拆开,被根据UDP中提供的端口信息,把数据给应用程序
  • 最后数据包到了B的上层应用程序

使用UDP发送数据的时候,有各种因素会导致数据包出错,UDP可以校验数据是否正确,但错误的包并不会提供重发的机制,只是丢弃当前包,而且在发送之后也不知道能否达到目的地。

UDP不能保证数据可靠,但是传输速度却很快。

TCP:数据完整送达应用程序

对于一些要求数据传输可靠的应用程序,例如邮件和浏览器请求,UDP带来的问题:

  • 数据包在传输过程中容易丢失
  • 大文件被拆成许多小的数据包来传输,小的数据包过不同的路由,不同时间到接收端,UDP协议不知道怎么组装这些数据包,从而将数据包还原成完整的组件

为了解决这些问题,TCP(传输控制协议)就出现了。他是一种面向连接的、可靠的、基于字节流的传输层通信协议。优点相较于TCP有:

  • 对于数据包丢失的情况,TCP提供重传机制
  • TCP引入数据包排序机制,保证将乱序的数据包组合成一个完整的文件

和UDP头一样,TCP头除了包含目标端口和本机端口之外,还提供了排序序列号来重排数据包。

image-20200518100357594

TCP 的传输模型整体上来看是和UDP差不多的。不同的地方在于,通过TCP头的信息保证了一块大的数据大传输完整性。

完成的TCP连接生命周期包括:建立连接传输数据断开连接

image-20200518141751565

  • 建立连接。这个阶段通过“三次握手”来建立client 和server之间的通信。TCP提供面向连接的通信传输。面向连接是在数据通信开始之前先做好两端之间的准备工作。三次握手指在建立TCP,客户端和服务端要发送三个数据包以确认连接。
  • 传输数据。这个阶段,接收端要对每个数据包进行确认操作。会返回给发送端一个确认消息,发送端没收到的话,就会启动重发机制。大的文件包也会根据TCP头中的序列号去进行一个拼接。
  • 断开连接。数据传输完成之后,来一波四次挥手。

TCP为了保证数据传输的可靠性和稳定性,牺牲了传输速度。