TCP 与 UDP 协议详解
1. TCP 连接建立的三次握手过程
TCP 通过三次握手建立可靠连接,具体流程如下(图示使用 Mermaid 描述):
- 第一次握手:客户端发送
SYN
报文(SYN=1),包含初始序列号seq=x
,进入SYN_SENT
状态 - 第二次握手:服务器返回
SYN-ACK
报文(SYN=1, ACK=1),包含自己的序列号seq=y
和对客户端序列号的确认ack=x+1
,进入SYN_RCVD
状态 - 第三次握手:客户端发送
ACK
报文(ACK=1),包含seq=x+1
和ack=y+1
,双方进入ESTABLISHED
状态
2. TCP 连接终止的四次挥手过程
连接终止需要四次交互(图示包含可能出现的 TIME_WAIT 状态):
- 第一次挥手:主动关闭方发送
FIN
报文(FIN=1,seq=u),进入FIN_WAIT_1
状态 - 第二次挥手:被动关闭方返回
ACK
(ACK=1,ack=u+1),进入CLOSE_WAIT
状态,主动方进入FIN_WAIT_2
- 第三次挥手:被动关闭方发送
FIN
报文(FIN=1,seq=v),进入LAST_ACK
状态 - 第四次挥手:主动关闭方发送
ACK
(ACK=1,ack=v+1),进入TIME_WAIT
状态(持续 2MSL 时间)
3. TCP 与 UDP 协议对比
通过表格对比关键特性差异:
特性 | TCP | UDP |
---|---|---|
连接方式 | 面向连接(Connection-Oriented) | 无连接(Connectionless) |
可靠性 | 通过确认重传机制保证 | 不保证数据到达 |
数据顺序 | 保证按序到达 | 不保证顺序 |
流量控制 | 滑动窗口机制 | 无内置机制 |
拥塞控制 | 慢启动、拥塞避免算法 | 无流量控制 |
首部大小 | 20-60 字节 | 8 字节固定 |
传输速度 | 较慢(需建立连接和确认) | 较快(直接发送数据报) |
典型应用场景 | 网页浏览(HTTP)、文件传输(FTP) | 视频流(RTP)、DNS 查询 |
4. 技术细节解析
4.1 为什么需要三次握手?
通过数学公式解释可避免历史连接问题:
实际上需要三次交互来确保双方收发能力正常,防止失效的 SYN 请求突然到达导致资源浪费。
4.2 TIME_WAIT 状态的意义
保持 2MSL(Maximum Segment Lifetime)时间:
典型值为 60 秒(MSL 通常设为 30 秒)。主要作用:
- 确保最后一个 ACK 能到达对端
- 允许旧数据报在网络中消失
5. 应用场景示例
text
TCP 典型应用:
- 电子邮件传输(SMTP)
- 数据库复制
- 远程终端(SSH)
UDP 典型应用:
- 实时多人游戏(如 FPS 游戏)
- VoIP 通话(如 Skype)
- IoT 传感器数据传输
6. 协议选择建议
根据网络需求矩阵选择协议:
需求维度 | 选择 TCP | 选择 UDP |
---|---|---|
数据完整性要求高 | ✓ | ✗ |
实时性要求高 | ✗ | ✓ |
网络环境稳定 | ✓ | ✓ |
需要节省带宽 | ✗(有控制信息开销) | ✓(头部开销小) |
以下表格总结了 TCP 和 UDP 的主要区别:
对比维度 | TCP | UDP |
---|---|---|
连接方式 | 面向连接(三次握手建立连接) | 无连接 |
可靠性 | 可靠传输(确认机制、重传机制) | 不可靠传输(无确认、可能丢包) |
传输效率 | 较低(因控制机制增加开销) | 较高(无复杂控制) |
流量控制 | 支持(滑动窗口机制) | 不支持 |
拥塞控制 | 支持(慢启动、拥塞避免等算法) | 不支持 |
数据顺序保证 | 保证数据按序到达 | 不保证顺序 |
头部大小 | 较大(20-60 字节) | 较小(固定 8 字节) |
典型应用场景 | 网页浏览、文件传输、电子邮件 | 视频流、在线游戏、DNS 查询 |
关键差异示意图
公式补充说明
TCP 可靠性公式(丢包重传概率):
其中
p
为单次传输成功率,n
为最大重传次数。UDP 传输速率(理论上限):
由于无流量控制,UDP 可接近物理带宽极限。