TCP/IP 协议是如何在浏览器工作的

网际协议(Internet Protocol,简称 IP)标准

互联网中的每个设备都具有一个地址,这个地址被称为IP地址,在浏览器中访问访问网站实际上是一台设备向另一台设备获取数据的行为。

IP是如何工作的

如果想要把一个数据包从主机A发送的主机B,在发送前,这个数据包会被附加上主机B的Ip地址信息,并且B主机可以返回数据给A,所以还要附加主机A的Ip地址信息。这些附加信息会被装到一个叫IP头的数据结构里,Ip头包含了Ip版本,源Ip地址,目标Ip地址,生存时间等信息。
将数据包从主机A发送到主机B可以简单的归纳为以下几个步骤:

  1. 主机A上层将数据包发送到网络层
    1. 网络层将Ip头附加到数据包上并交给底层
    2. 底层通过物理网络将数据包发送到主机B
    3. 数据包被传输到主机B的网络层,网络层拆开数据包的Ip头信息
    4. 最终,网络层将数据包传输到主机B上层

用户数据包协议(User Datagram Protocol),简称 UDP

IP是非常底层的协议,只负责把数据包传送到目标设备,但不知道数据包应该交给那个程序。 所以需要在IP只上使用能和应用程序打交道的协议, 最常见的是UDP协议,UDP中最重要的信息是端口号,在电脑中,每个想访问网络的设备都需要一个端口号(如HTTP服务器的默认端口号一般是80, Mysql的默认端口号是3306)。 通过端口号UDP可以将数据包正确的发送给应用程序。 所以IP通过Ip地址将数据包发送到目标主机,UDP通过端口号将数据分发给正确的目标程序。 和Ip头一样,端口号会被装载到UDP头中,UDP头再和原始数据包合并组成新的 UDP 数据包。 UDP头中除了目标端口号,还会包含源端口号。
在支持UDP协议后,Ip网络的三层结构(上层,网络层,底层)可以被扩充为4层,在网络层和上层之间增加了传输层。
将数据包从主机A发送到主机B可以简单的归纳为以下几个步骤:

  1. 上层将数据包发送到传输层
    1. 传输层会在数据包前面附加上 UDP 头,组成新的 UDP 数据包,再将新的 UDP 数据包交给网络层
    2. 网络层将Ip头附加到数据包上并交给底层
    3. 底层通过物理网络将数据包发送到主机B
    4. 数据包被传输到主机B的网络层,网络层拆开数据包的Ip头信息,并将数据包交给传输层
    5. 在传输层,数据包中的 UDP 头会被拆开,并根据 UDP 中所提供的端口号,把数据部分交给上层的应用程序
    6. 最终,主机B上层应用程序获得数据包
      在使用 UDP 发送数据时,有各种因素会导致数据包出错,虽然 UDP 可以校验数据是否正确,但是对于错误的数据包,UDP 并不提供重发机制,只是丢弃当前的包,而且 UDP 在发送之后也无法知道是否能达到目的地。虽说 UDP 不能保证数据可靠性,但是传输速度却非常快,所以 UDP 会应用在一些关注速度、但不那么严格要求数据完整性的领域,如在线视频、互动游戏等。

TCP(Transmission Control Protocol,传输控制协议)

对于浏览器请求,要求数据传输的可靠性。如果使用 UDP 来传输会存在两个问题:

  1. 数据包在传输过程中容易丢失
    1. 大文件会被拆分成很多小的数据包来传输,这些小的数据包会经过不同的路由,并在不同的时间到达接收端,而 UDP 协议并不知道如何组装这些数据包,从而把这些数据包还原成完整的文件。