Skip to content

TCP 与 UDP 协议详解

1. TCP 连接建立的三次握手过程

TCP 通过三次握手建立可靠连接,具体流程如下(图示使用 Mermaid 描述):

  1. 第一次握手:客户端发送 SYN 报文(SYN=1),包含初始序列号 seq=x,进入 SYN_SENT 状态
  2. 第二次握手:服务器返回 SYN-ACK 报文(SYN=1, ACK=1),包含自己的序列号 seq=y 和对客户端序列号的确认 ack=x+1,进入 SYN_RCVD 状态
  3. 第三次握手:客户端发送 ACK 报文(ACK=1),包含 seq=x+1ack=y+1,双方进入 ESTABLISHED 状态

2. TCP 连接终止的四次挥手过程

连接终止需要四次交互(图示包含可能出现的 TIME_WAIT 状态):

  1. 第一次挥手:主动关闭方发送 FIN 报文(FIN=1,seq=u),进入 FIN_WAIT_1 状态
  2. 第二次挥手:被动关闭方返回 ACK(ACK=1,ack=u+1),进入 CLOSE_WAIT 状态,主动方进入 FIN_WAIT_2
  3. 第三次挥手:被动关闭方发送 FIN 报文(FIN=1,seq=v),进入 LAST_ACK 状态
  4. 第四次挥手:主动关闭方发送 ACK(ACK=1,ack=v+1),进入 TIME_WAIT 状态(持续 2MSL 时间)

3. TCP 与 UDP 协议对比

通过表格对比关键特性差异:

特性TCPUDP
连接方式面向连接(Connection-Oriented)无连接(Connectionless)
可靠性通过确认重传机制保证不保证数据到达
数据顺序保证按序到达不保证顺序
流量控制滑动窗口机制无内置机制
拥塞控制慢启动、拥塞避免算法无流量控制
首部大小20-60 字节8 字节固定
传输速度较慢(需建立连接和确认)较快(直接发送数据报)
典型应用场景网页浏览(HTTP)、文件传输(FTP)视频流(RTP)、DNS 查询

4. 技术细节解析

4.1 为什么需要三次握手?

通过数学公式解释可避免历史连接问题:

最少需要 log2(3)=2 次往返确认\text{最少需要 } \lceil log_2(3) \rceil = 2 \text{ 次往返确认}

实际上需要三次交互来确保双方收发能力正常,防止失效的 SYN 请求突然到达导致资源浪费。

4.2 TIME_WAIT 状态的意义

保持 2MSL(Maximum Segment Lifetime)时间:

TIME_WAIT 持续时间=2×MSL\text{TIME\_WAIT 持续时间} = 2 \times \text{MSL}

典型值为 60 秒(MSL 通常设为 30 秒)。主要作用:

  1. 确保最后一个 ACK 能到达对端
  2. 允许旧数据报在网络中消失

5. 应用场景示例

text
TCP 典型应用:
- 电子邮件传输(SMTP)
- 数据库复制
- 远程终端(SSH)

UDP 典型应用:
- 实时多人游戏(如 FPS 游戏)
- VoIP 通话(如 Skype)
- IoT 传感器数据传输

6. 协议选择建议

根据网络需求矩阵选择协议:

需求维度选择 TCP选择 UDP
数据完整性要求高
实时性要求高
网络环境稳定
需要节省带宽✗(有控制信息开销)✓(头部开销小)

以下表格总结了 TCP 和 UDP 的主要区别:

对比维度TCPUDP
连接方式面向连接(三次握手建立连接)无连接
可靠性可靠传输(确认机制、重传机制)不可靠传输(无确认、可能丢包)
传输效率较低(因控制机制增加开销)较高(无复杂控制)
流量控制支持(滑动窗口机制)不支持
拥塞控制支持(慢启动、拥塞避免等算法)不支持
数据顺序保证保证数据按序到达不保证顺序
头部大小较大(20-60 字节)较小(固定 8 字节)
典型应用场景网页浏览、文件传输、电子邮件视频流、在线游戏、DNS 查询

关键差异示意图


公式补充说明

  1. TCP 可靠性公式(丢包重传概率):

    Psuccess=1(1p)nP_{success} = 1 - (1 - p)^n

    其中 p 为单次传输成功率,n 为最大重传次数。

  2. UDP 传输速率(理论上限):

    Rmax=BandwidthPacket SizeR_{max} = \frac{Bandwidth}{Packet\ Size}

    由于无流量控制,UDP 可接近物理带宽极限。