学习笔记:浏览器工作原理与实践
一、大概
- 数据包是如何送达主机:IP
- 主机是如何将数据包交给应用: UDP
- 主机是如何将数据包 完整 的交给应用: TCP
二、详情
1. IP(Internet Protocol):把数据包送达目的主机
访问任何网站实际上只是你的计算机(主机A)向另外一台计算机(主机B)请求信息。而请求信息时我们需要找到主机B的地址,即 IP地址
为了方便理解,我先把网络简单分为三层结构,如下图

在网络层主机A把数据和IP头打包成新的IP数据包交给底层,其中IP头包括了源IP地址(A的IP地址)、目标IP地址(B的IP地址,用于B反馈信息)、生存时间、IP版本等信息。
数据包要在互联网上进行传输,就要符合网际协议(Internet Protocol,简称 IP)标准。而IP就是负责把IP数据包传送到对方电脑。
2. UDP(User Datagram Protocol):把数据包送达应用程序
IP 是非常底层的协议,只负责把数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个程序,是交给浏览器还是交给王者荣耀?因此,需要基于 IP 之上开发能和应用打交道的协议,最常见的是“用户数据包协议(User Datagram Protocol)”,简称 UDP。
为了支持 UDP 协议,我把前面的三层结构扩充为四层结构,在网络层和上层之间增加了传输层,如下图所示

UDP头中包括源端口号(主机A某应用的端口号)、目的端口号(主机B某应用的端口号)等信息。
端口号是什么?
每个想访问网络的程序都需要绑定一个端口号,通过端口号 UDP 就能把指定的数据包发送给指定的程序。
IP 通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序。
UDP 不能保证数据可靠性,但是传输速度却非常快
在使用 UDP 发送数据时,有各种因素会导致数据包出错,虽然 UDP 可以校验数据是否正确,但是对于错误的数据包,UDP 并不提供重发机制,只是丢弃当前的包,而且 UDP 在发送之后也无法知道是否能达到目的地。
3. TCP(Transmission Control Protocol):把数据完整地送达应用程序
对于浏览器请求,或者邮件这类要求数据传输可靠性(reliability)的应用,如果使用 UDP 来传输会存在两个问题:
- 数据包在传输过程中容易丢失;
- 大文件会被拆分成很多小的数据包来传输,这些小的数据包会经过不同的路由,并在不同的时间到达接收端,而 UDP 协议并不知道如何组装这些数据包,从而把这些数据包还原成完整的文件。
因此引入了可以TCP
TCP相对于UDP来说有两个优点
- 对于数据包丢失的情况,TCP 提供重传机制;
- TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。
TCP的传输和UDP类似,如图

和 UDP 头一样,TCP 头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包。
TCP完整的连接过程

TCP 为了保证数据传输的可靠性,牺牲了数据包的传输速度,因为“三次握手”和“数据包校验机制”等把传输过程中的数据包的数量提高了一倍。
网友评论