一、TCP (Transmission Control Protocol)
基本概念
- 面向连接:通信前需建立双向连接(三次握手)
- 可靠性保障:通过确认机制、重传机制、校验和等确保数据无误且有序
- 流式传输:数据被视为无结构的字节流,无固定边界
核心特性
-
可靠传输
- 序列号与确认号(ACK)机制跟踪数据包
- 超时重传:未收到ACK则自动重发
- 数据校验:通过校验和检测损坏包
-
流量控制
- 滑动窗口协议:接收方通过窗口大小动态控制发送速率
-
拥塞控制
- 慢启动、拥塞避免、快速重传、快速恢复算法
- 动态调整发送窗口(cwnd)
-
有序传输
- 序列号保证接收端按序重组数据
-
连接管理
- 三次握手建立连接:
客户端 → SYN → 服务端 客户端 ← SYN+ACK ← 服务端 客户端 → ACK → 服务端 - 四次挥手终止连接:
主动方 → FIN → 被动方 主动方 ← ACK ← 被动方 主动方 ← FIN ← 被动方 主动方 → ACK → 被动方
- 三次握手建立连接:
TCP 头部结构(20字节基础)
| 字段 | 长度 | 功能说明 |
|---|---|---|
| 源端口 | 16位 | 发送方端口号 |
| 目的端口 | 16位 | 接收方端口号 |
| 序列号 | 32位 | 数据字节流的定位 |
| 确认号 | 32位 | 期望接收的下一个字节序号 |
| 数据偏移 | 4位 | TCP头部长度(单位:4字节) |
| 控制位 | 6位 | URG/ACK/PSH/RST/SYN/FIN 标志 |
| 窗口大小 | 16位 | 接收窗口可用空间 |
| 校验和 | 16位 | 头和数据完整性校验 |
| 紧急指针 | 16位 | URG标志有效时紧急数据位置 |
二、UDP (User Datagram Protocol)
基本概念
- 无连接:直接发送数据,无需预先建立连接
- 尽最大努力交付:不保证可靠性,可能丢包或乱序
- 面向报文:保留应用层报文边界
核心特性
-
低延迟
- 无连接建立/断开开销
- 无确认/重传机制
-
无拥塞控制
- 适合实时应用(容忍部分丢失)
-
头部开销小
- 固定8字节头部(TCP至少20字节)
UDP 头部结构(8字节)
| 字段 | 长度 | 功能说明 |
|---|---|---|
| 源端口 | 16位 | 可选,可为0 |
| 目的端口 | 16位 | 必需,目标端口 |
| 长度 | 16位 | UDP报文总长度(头+数据) |
| 校验和 | 16位 | 可选(IPv4),IPv6强制使用 |
三、关键差异对比
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 高(确认/重传) | 低(可能丢包) |
| 数据顺序 | 保证有序 | 不保证顺序 |
| 传输速度 | 较慢(控制机制多) | 极快(头部开销小) |
| 流量控制 | 滑动窗口支持 | 无内置机制 |
| 拥塞控制 | 复杂算法管理 | 无控制 |
| 头部大小 | 20-60字节 | 固定8字节 |
| 适用场景 | 文件传输、Web浏览、邮件 | 视频流、DNS、VoIP、游戏 |
四、典型应用场景
TCP 适用场景
- 可靠性要求高:HTTP/HTTPS、FTP、SMTP
- 大数据量传输:文件下载、数据库同步
- 需要有序交付:远程桌面(SSH/RDP)
UDP 适用场景
- 实时性优先:视频会议(Zoom)、在线游戏
- 广播/组播:IPTV、DHCP
- 简单查询响应:DNS、SNMP
- 容忍丢包:VoIP(如Skype)
五、协议选择策略
注:现代协议如QUIC(HTTP/3基础)融合TCP可靠性+UDP效率,在应用层实现优化传输。
此对比总结覆盖核心原理、结构差异及实践应用,可作为网络协议选型的技术参考依据。