前端笔记-02-TCP与UDP

118 阅读4分钟
在网络中,一个文件通常被拆分成很多数据包来传输,然而数据包在传输过程中有很大概率丢失或者出错,那么如何保证页面文件完整地送达浏览器呢

1.IP把数据包送达目的主机

计算机的地址成为IP地址,访问任何网站实际上访问的是另一台计算机上的信息,如果要把一个数据包从主机A发送到主机B,那么在传输前需要把主机B的IP地址和主机A的IP地址放在数据包的IP头里,IP头是IP数据包开头的信息,包含IP版本、源IP地址、目标IP地址等等

一个数据包从主机A到主机B的旅程:

  • 上层将数据包交给网络层
  • 网络层为数据包附加上IP头,组成新的IP数据包 并交给底层
  • 底层通过物理网络将数据传输到主机B的网络层
  • 主机B在网络层拆开数据包的IP头信息并将数据部分交给上层
  • 最终数据包就到达主机B的上层了

2.UDP:把数据包送达应用程序

IP只负责将数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个应用程序,因此需要基于IP上开发能和应用打交道的协议,最常见的是 用户数据包协议,简称UDP。

UDP中一个重要的信息就是端口号,每个想访问网络的程序都要绑定一个端口号,通过端口号就可以把指定的数据包发送给对应的应用程序了,和IP头一样,端口号会被装进UDP头里,UDP头再和原始数据包组成新的UDP数据包,UDP头中除了目的端口号还有源端口号信息。

可以看出,与上面的3层网络传输模型对比,4层网络传输模型多了一个传输层。传输层会在数据包前面附上UDP头,组成新的UDP数据包,再将新的UDP数据包交给网络层,到了主机B的传输层,将数据包的UDP头拆开,根据UDP中提供的端口号 将数据交给上层对应的应用程序

在使用UDP发送数据时,有各种因素会导致数据包出错,对于错误的数据包,UDP不提供重发机制 会丢弃当前包,虽然UDP不能保证数据传输的完整性,但传输速度非常快,所以UDP会应用在关注速度 不追求数据完整性的领域 例如游戏,在线视频等。

3.TCP:把数据包完整送达应用程序

对于浏览器请求,如果使用UDP来传输会存在两个问题:

  • 传输过程中数据包容易丢失
  • 大文件会被拆分成许多个数据包,而UDP协议不知道如何组装这些数据包并将其还原成完整的文件。

因此引入了TCP(传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议,相比于UDP,TCP有如下几个特点

  • 对于丢失的数据包,提供重传机制
  • TCP引入了数据包排序机制,可以把混乱的数据包还原成一个完整的文件

和UDP头一样,TCP头除了包含本地端口和目标端口以外,还提供了用户排序的序列号,以便接收端通过序号来重组数据包

从上图可以看出,TCP网络传输模型跟UDP差不多,只是在TCP头存储了用来排序的序列号,用来在接收端重组数据包

接下来看下完整的TCP连接过程

  • 首先,通过三次握手建立客户端于服务器之间的连接,所谓的三次握手指的就是客户端和服务器总共需要发送3个数据包来建立一个TCP链接
  • 其次,传输阶段,接收端需要对每个数据包进行确认操作,否则服务端将会判断该数据包丢失并触发重传机制,最后在数据包传输完成后通过TCP头里的序号将数据包排序并组装成一个完整的文件。
  • 最后,断开链接,通过四次挥手来保证双方都能断开连接。

因此,TCP为了保证数据的完整性,通过 "三次握手" 和 "数据包校验机制" 等把传输过程中的数据包数量提升了一倍,因此传输速率不如UDP