UDP(用户数据报协议)和TCP(传输控制协议)是互联网传输层的核心协议。
TCP/UDP依赖网络层的IP协议进行数据包的路由和转发(IP协议提供无连接的、不可靠的传输服务)。
TCP/UDP通过端口号(Port)区分同一主机上的不同进程,而IP协议通过IP地址区分不同主机。
TCP和UDP均属于OSI参考模型的第四层(传输层),或TCP/IP模型的第二层(传输层)。
bash
OSI模型:物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层。
TCP/IP模型:网络接口层 → 网络层 → 传输层 → 应用层。
传输层负责端到端(End-to-End)的通信,即从源主机的某个进程(Port)到目标主机的对应进程(Port)的数据传输。它屏蔽了网络层的细节(如IP地址、路由),为应用层提供统一的接口。
TCP/UDP在设计目标、连接方式、可靠性、性能等方面存在显著差异。
1. 设计目标
-
TCP:
- 面向连接:提供可靠的、有序的、无差错的数据传输,确保数据完整到达。
- 适用场景:需要高可靠性的应用,如文件传输(FTP)、网页浏览(HTTP)、邮件(SMTP)等。
-
UDP:
- 无连接:不保证数据传输的可靠性,仅提供"尽力而为"的服务。
- 适用场景:对实时性要求高、允许少量丢包的应用,如视频流(RTMP)、在线游戏、DNS查询、VoIP(如微信语音)等。
2. 连接方式
-
TCP:
- 三次握手建立连接:通信前需通过SYN、SYN-ACK、ACK报文交换建立连接,确保双方准备好数据传输。
- 四次挥手断开连接:通信结束后需通过FIN、ACK等报文释放连接,避免资源泄漏。
- 状态机:TCP维护连接状态(如ESTABLISHED、CLOSED),需跟踪每个连接的生命周期。
-
UDP:
- 无连接:无需建立或释放连接,每个数据包独立发送,接收方直接处理。
- 无状态:不维护连接状态,发送方和接收方无需同步信息。
3. 可靠性
-
TCP:
- 确认机制:接收方收到数据后返回ACK确认,发送方未收到ACK会重传(超时重传)。
- 序列号与排序:每个数据包分配唯一序列号,接收方按序重组数据,丢包时等待重传。
- 流量控制:通过滑动窗口机制动态调整发送速率,避免接收方缓冲区溢出。
- 拥塞控制:根据网络拥塞情况(如丢包、延迟)调整发送速率(如慢启动、拥塞避免算法)。
-
UDP:
- 无确认机制:不保证数据包到达,也不重传丢失的包。
- 无排序:数据包可能乱序到达,应用层需自行处理排序和丢包。
- 无流量/拥塞控制:发送方以固定速率发送数据,可能引发网络拥塞。
4. 性能
-
TCP:
- 开销大:每个数据包需携带序列号、确认号、窗口大小等额外字段(头部20-60字节)。
- 延迟高:三次握手、四次挥手及重传机制增加延迟,不适合实时应用。
- 带宽利用率高:通过拥塞控制优化网络利用率,但可能因重传浪费带宽。
-
UDP:
- 开销小:头部仅8字节(源端口、目的端口、长度、校验和),适合传输小数据包。
- 延迟低:无连接建立和确认过程,数据包可直接发送,适合实时应用。
- 带宽利用率不稳定:无拥塞控制,可能因突发流量导致丢包或网络拥塞。
5. 头部结构
| 字段 | TCP头部(20-60字节) | UDP头部(8字节) |
|---|---|---|
| 源端口 | √(2字节) | √(2字节) |
| 目的端口 | √(2字节) | √(2字节) |
| 序列号 | √(4字节,用于排序和重传) | × |
| 确认号 | √(4字节,确认已收到数据) | × |
| 窗口大小 | √(2字节,流量控制) | × |
| 校验和 | √(2字节,检测错误) | √(2字节,检测错误) |
| 其他字段 | 标志位(如SYN、ACK)、紧急指针、选项等 | × |
6. 典型应用场景
-
TCP:
- 文件传输:FTP、SFTP、HTTP/HTTPS(网页下载)。
- 邮件服务:SMTP、IMAP、POP3。
- 远程登录:SSH、Telnet。
- 数据库操作:MySQL、PostgreSQL。
-
UDP:
- 实时音视频:Zoom、微信语音、抖音直播(RTMP协议)。
- 在线游戏:MOBA类游戏(如《英雄联盟》)需低延迟。
- DNS查询:域名解析需快速响应,允许少量丢包。
- 物联网(IoT):传感器数据传输(如温度、湿度监测),对实时性要求高于可靠性。
- DHCP:动态分配IP地址,需快速完成交换。
7. 安全性
-
TCP:
- 易受攻击:如SYN洪水攻击(伪造大量SYN请求耗尽服务器资源)。
- 防护机制:可通过防火墙、SYN Cookie、限速等缓解。
- 加密协议:常与TLS/SSL结合(如HTTPS),提供端到端加密。
-
UDP:
- 同样易受攻击:如UDP洪水攻击(发送大量伪造UDP包)。
- 防护难度高:因无连接状态,传统防火墙难以有效过滤。
- 加密协议:常与DTLS(UDP版TLS)结合,用于VoIP等场景。
8. 协议扩展性
-
TCP:
- 扩展复杂:新增功能(如多路径TCP、快速重传)需修改协议栈,兼容性要求高。
- 标准化严格:需通过IETF严格评审(如RFC文档)。
-
UDP:
- 扩展灵活:应用层可自定义协议(如QUIC基于UDP实现多路复用和加密)。
- 创新空间大:适合实验性协议(如WebRTC的SRTP)。
总结对比表
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 高(确认、重传、排序) | 低(尽力而为) |
| 性能 | 开销大、延迟高 | 开销小、延迟低 |
| 适用场景 | 文件传输、邮件、网页 | 实时音视频、游戏、DNS |
| 头部大小 | 20-60字节 | 8字节 |
| 流量控制 | √(滑动窗口) | × |
| 拥塞控制 | √(慢启动、拥塞避免) | × |
| 扩展性 | 低(需修改协议栈) | 高(应用层自定义) |
选择建议
- 选TCP:若数据完整性、顺序性至关重要(如文件下载、数据库操作)。
- 选UDP:若对实时性要求极高,且能容忍少量丢包(如视频会议、在线游戏)。
- 折中方案:部分协议(如QUIC、WebRTC)基于UDP实现类似TCP的功能(如可靠传输、拥塞控制),兼顾性能与可靠性。