计算机网络:UDP协议和TCP协议详解

287 阅读7分钟

网络协议

已知网络协议分层模型有很多层,例如,物理层,数据链路层,网络层等等。而每一层都有自己的协议,比如网络层的IP协议,ICMP协议。 接下来我们主要讨论两个个协议,分别是传输层的TCP协议和UDP协议

UDP

UDP(User Datagram Protocol,用户数据报协议)是一种简单的传输层协议,以下从多个方面对其进行详细介绍:

  1. UDP是面向无连接的(知道对面的ip地址后可以直接传输数据),就像发送快递包裹一样,发送方直接将数据报文发送出去,而不关心接收方是否准备好接收。
  2. 只做数据报文的搬运工 (不增加额外的报文头部)。

UDP数据报格式一般分为四个部分:

  1. 源端口号:占16位,标识发送端应用程序使用的端口号

  2. 目的端口号:同样占 16 位,指定数据报要发送到的目标端口号

  3. 长度:占 16 位,记录整个 UDP 数据报的长度,包括首部和数据部分

  4. 校验和:占 16 位,用于检测数据报在传输过程中是否发生错误。(发生错误一般直接丢弃)

image.png 3. 从 UDP数据报格式 中可以看出。UDP有以下特点:

  • 不保证数据包的有序性
  • 不保证数据的可靠性(丢包)
  1. UDP没有拥塞控制

首先我们要知道拥塞是什么:

在计算机网络中,当网络中的流量过大,导致网络的性能下降,如数据包的延迟增加、吞吐量降低甚至出现数据包丢失等情况时,就认为网络发生了拥塞。打个比方,就像城市道路上车辆过多时,会出现交通拥堵,车辆行驶速度变慢甚至停滞不前。

拥塞控制就是计算机网络中一种重要的机制,用于防止网络出现拥塞并在拥塞发生时进行缓解,确保网络能够高效、稳定地运行。 而UDP的设计目标是提供一种简单、高效的无连接传输服务,它更注重数据的快速传输和低延迟,而不是可靠性和流量控制。当没有了拥塞控制,也就减少协议的复杂性,提高传输效率。

大白话总结

UDP是比较不可靠的协议,直接发,不在乎对方是否能拿到,有可能丢,但是传输速率快,延迟很低

应用场景

对实时性要求高的传输场景一般会用到UDP协议:

  1. 直播
  2. 游戏
  3. 视频会议
  4. 网络电话

TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,下面从多个方面对其进行详细介绍:

  1. TCP是面向连接的,在进行数据传输之前,TCP 需要在发送方和接收方之间建立一条可靠的连接。这个连接建立过程就像打电话前先拨号并等待对方接听一样,确保双方都准备好进行数据交换。

3.TCP数据报的头部信息多

  • Sequence Number(序列号)
    实例:若发送方发送数据序列号为 1000,长度为 500,接收方确认号为 1500,表示已接收 1000-1499 的数据。

  • Acknowledgment Number(确认号)

  • Window Size 窗口大小 (网络环境支持传输多少字节的数据)

  • 标识符

    URG=1 紧急报文

    ACK=1 确认报文

    PSH=1 接收端应该立即将数据传给应用层

    RST=1 复位连接

    SYN=1 TCP报文标志位,该位为1时表示发起一个新连接

    seq sequence number,报文初始序列号,代表发送的第一个字节的序号

image.png

  1. TCP是有序的:

TCP 为每个数据字节分配一个序列号,接收方根据序列号将接收到的数据段按正确的顺序重新组装成完整的数据。如果收到的数据包顺序不正确,接收方会将其缓存起来,等待缺失的数据包到达后再进行组装。这样不会造成丢包

  1. TCP的拥塞控制:

拥塞控制是 TCP 为了避免网络拥塞而采取的一种机制,主要有以下几种算法:

  • 慢启动:开始时,发送方以较小的拥塞窗口发送数据,每收到一个确认,拥塞窗口就按指数增长,快速增加发送量。
  • 拥塞避免:当拥塞窗口达到一定阈值后,进入此阶段,发送方每收到一个确认,拥塞窗口线性增加,避免网络拥塞。
  • 快重传和快恢复:接收方发现报文段失序,会立即发送重复确认。发送方收到连续三个相同的重复确认时,就认为报文段丢失,立即重传,无需等待超时。执行快重传后进入快恢复阶段,发送方将慢启动阈值设为当前拥塞窗口的一半,拥塞窗口设为慢启动阈值加 3 倍最大报文段长度,然后采用拥塞避免算法继续发送数据
  1. TCP的三次握手
    1. 客户端发送给 SYN 报文 ,请求建立连接 (客户端进入 SYN-SEND状态)
    1. 服务端收到 SYN报文,回复 SYN+ACK 报文 (服务端进入 SYN-RECEIVED状态)
    1. 客户端收到 SYN+ACK 报文 回复 ACK报文 (客户端和服务器端进入 ESTABLISHED)

面试常考题:

为什么要三次握手,两次不行吗?

不行,如果是两次握手,客户端发送给 SYN 报文 ,请求建立连接,服务端收到 SYN报文,回复 SYN+ACK 报文。这两个步骤完成后就连接,可能会出现下列情况:客户端发了请求连接的报文A,但是由于网络问题,A报文丢失了于是客户端会再发一个请求连接B,服务端收到这个B,回复一个确认报文,客户端和服务端此时就开始通信,通信结束后断开连接。但是如果此时A报文有可能再次出现在网络环境中被服务端接收到,此时服务端会再回复一个确认报文,并且进入ESTABLISHED 状态,等待客户端发的报文,但是此时客户端已经下线,服务端就会一直等待客户端的通讯,造成资源的浪费。

  1. TCP四次挥手
    1. 客户端向服务端发送 FIN报文,请求断开连接(客户端进入 FIN-WAIT-1状态)
    1. 服务端收到 FIN 报文 回复 ACK报文 (服务端进入 CLOSE-WAIT状态)
    1. 服务端将未传输完的数据传输完后,向客户端发送 FIN 报文,请求断开连接 (服务端进入 LAST-ACK状态)
    1. 客户端收到 FIN 报文,回复 ACK 报文 (客户端进入 TIME-WAIT 状态 一段时间后CLOSEED) 此时服务端进入 COLOSEED状态

大白话总结

TCP协议是可靠的协议,在发送数据报之前,会三次握手建立连接,有确认应答机制和超时重传机制,会对数据进行排序,还有实现流量控制的滑动窗口机制。传输速率较慢,但是数据完整。

应用场景 适用于对数据准确性和完整性要求较高的场景,如:

  1. 文件传输
  2. 网页浏览
  3. 电子邮件

结语

最后以一个对比来叙述UDP和TCP的区别

对比项目TCPUDP
连接方式面向连接无连接
可靠性可靠不可靠
传输效率相对较低相对较高
应用场景文件传输、网页浏览等视频直播、音频通话等
首部开销较大(20 字节)较小(8 字节)