一、TCP的三次握手(建立连接)
sequenceDiagram
participant Client as 客户端
participant Server as 服务端
Client->>Server: SYN (seq=x)
Server->>Client: SYN-ACK (seq=y, ack=x+1)
Client->>Server: ACK (ack=y+1)
三次握手设计原理:
-
防止历史连接干扰
通过第三次ACK确认,能检测到旧SYN包的无效连接请求(若旧SYN延迟到达,服务端会响应旧seq值,客户端会发现矛盾并发送RST取消连接) -
双方能力验证
- 第一次握手:验证客户端的发送能力
- 第二次握手:验证服务端的接收+发送能力
- 第三次握手:验证客户端的接收能力
二、TCP的四次挥手(关闭连接)
sequenceDiagram
participant A as 主动关闭方
participant B as 被动关闭方
A->>B: FIN (seq=u)
B->>A: ACK (ack=u+1)
B->>A: FIN (seq=v)
A->>B: ACK (ack=v+1)
四次挥手设计原理:
-
全双工关闭独立
TCP是全双工协议,每个方向需要独立关闭(如同高铁双轨道需分别拆除) -
处理残存数据
收到第一次FIN后,被动关闭方需要时间处理缓冲区的剩余数据 -
TIME_WAIT状态
主动关闭方最后等待2MSL(最大报文生存时间),确保:- 可靠终止:最后的ACK丢失时能重传
- 清除旧包:保证网络中残留报文过期
三、TCP vs UDP对比分析
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 有序、无丢失、无重复 | 尽力交付,可能丢包/乱序 |
| 传输效率 | 低(交互多、头部长) | 高(无握手、头简短) |
| 流量控制 | 滑动窗口机制 | 无 |
| 拥塞控制 | 动态调整速率(慢启动等) | 无 |
| 应用场景 | 文件传输、HTTP、邮件 | 视频会议、DNS、在线游戏 |
pie
title 典型应用占比
"TCP" : 65
"UDP" : 35
四、协议发展对比
| 维度 | TCP发展 | UDP发展 |
|---|---|---|
| 演进方向 | 增强可靠性 | 增强实时性 |
| 新技术案例 | TCP Fast Open (TFO) | QUIC(基于UDP的可靠传输协议) |
| 创新特征 | 选择性确认(SACK)、零窗口探测 | 多路复用、前向纠错(FEC) |
| 典型成果 | 支持HTTP/1.1、HTTPS | 支撑HTTP/3、WebRTC |
| 硬件优化 | 大文件传输专用网卡 | 低延迟网络硬件加速 |
关键结论:
-
TCP/UDP本质差异
- TCP是保证正确性的「可靠信使」
- UDP是追求速度的「快递小哥」
-
技术融合趋势
graph LR 传统TCP-->HTTP/3 传统UDP-->|QUIC协议|HTTP/3现代协议(如HTTP/3)通过QUIC在UDP基础上实现TCP的可靠性,同时保持低延迟特性
-
选择标准
- 需要可靠传输:银行交易(选TCP)
- 需要实时响应:直播弹幕(选UDP)
- 混合需求:视频会议(UDP+前向纠错)