TCP 和 UDP的区别
大约 3 分钟
TCP 和 UDP 的主要区别
1. 连接方式
TCP(Transmission Control Protocol):面向连接的协议
- 在数据传输前需要建立连接(三次握手)
- 数据传输完成后需要断开连接(四次挥手)
- 提供可靠的端到端通信
UDP(User Datagram Protocol):无连接协议
- 发送数据前不需要建立连接
- 直接发送数据包,无需握手过程
- 不保证数据的可靠传输
2. 可靠性
TCP:
- 提供可靠的数据传输
- 确保数据完整性和顺序性
- 有确认机制、重传机制、流量控制和拥塞控制
UDP:
- 不保证数据传输的可靠性
- 可能出现丢包、重复包、乱序等问题
- 没有确认机制和重传机制
3. 传输效率
TCP:
- 由于需要维护连接状态和可靠性机制,开销较大
- 传输速度相对较慢
- 适用于对数据完整性要求高的场景
UDP:
- 无需维护连接状态,开销小
- 传输速度快,实时性好
- 适用于对实时性要求高的场景
4. 数据格式
TCP:面向字节流
- 将数据看作连续的字节流
- 没有明确的边界概念
- 可能出现粘包问题
UDP:面向数据报
- 以数据报为单位传输
- 每个数据报有明确边界
- 不会出现粘包问题
应用场景举例
TCP 应用场景:
网页浏览(HTTP/HTTPS)
// 浏览器与服务器建立TCP连接获取网页内容 // 确保网页数据完整无误地传输 fetch('https://example.com') .then(response => response.text()) .then(data => console.log(data));文件传输(FTP)
- 传输大文件时需要确保每个字节都正确接收
- 允许重传机制保证文件完整性
电子邮件(SMTP/POP3/IMAP)
- 邮件内容必须完整准确地传输
- 不能容忍数据丢失
UDP 应用场景:
视频直播/视频通话
// WebRTC 使用 UDP 传输音视频数据 const configuration = { iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] }; const peerConnection = new RTCPeerConnection(configuration); // 实时音视频传输更注重实时性而非完整性在线游戏
- 游戏中的位置更新、动作同步等
- 旧的位置信息即使丢失也无关紧要,新的信息更重要
DNS 查询
- DNS 查询通常使用 UDP 协议
- 查询响应要求快速,少量丢包可重新查询
性能对比总结
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 需要建立连接 | 无连接 |
| 可靠性 | 高(确保数据完整) | 低(可能丢包) |
| 速度 | 较慢 | 较快 |
| 开销 | 大 | 小 |
| 数据边界 | 无(字节流) | 有(数据报) |
| 适用场景 | 文件传输、网页浏览 | 实时应用、流媒体 |
选择 TCP 还是 UDP 主要取决于应用的需求:如果需要确保数据的完整性和可靠性,则选择 TCP;如果更注重传输速度和实时性,可以容忍少量数据丢失,则选择 UDP。