本文目录导读:

TCP(传输控制协议)和 UDP(用户数据报协议)是传输层的两大核心协议,它们的核心区别可以通过一个比喻来理解:
TCP很像“打电话”: 需要先拨号建立连接(三次握手),通话时双方能确认你是否听清,通话结束要挂断(四次挥手),它很可靠,但效率稍低。
UDP很像“寄明信片”: 直接扔进邮筒,不需要提前打招呼,也不保证对方一定能收到,到达顺序也可能乱,它很灵活、效率高,但不可靠。
以下是它们的具体区分维度:
连接性
- TCP:面向连接
- 通信前必须建立连接(三次握手),通信结束后需要释放连接(四次挥手)。
- 例子: 打电话前必须确认对方在听。
- UDP:无连接
- 不需要建立连接,直接发送数据包。
- 例子: 直接在广播里喊一句话,不管谁听不听。
可靠性
- TCP:可靠传输
- 有确认机制: 接收方收到数据后,会回复确认,如果发送方没收到确认,会自动重传。
- 有顺序保证: 数据包到达乱序时,接收方会重新排序,确保应用层拿到的数据是完整的顺序流。
- 结果: 无差错、不丢失、不重复、按序到达。
- UDP:尽最大努力交付(不可靠)
- 无确认机制: 发送后就不管了,不管对方收没收到。
- 无顺序保证: 如果发的是“1、2、3”,对方可能收到“2、1、3”或只收到“1、3”。
- 结果: 可能丢失、可能重复、可能乱序。
传输方式
- TCP:面向字节流
- 把应用层的数据看作一连串无结构的字节流,它不知道数据包的边界(比如发送方发了两个“你好”,接收方可能一次收到“你好好你”)。
- 特点: 像水管里流动的水,没有严格的“数据块”划分。
- UDP:面向报文
- 保留应用层传递下来的报文边界,应用程序发送一个“Hello”,接收方读到的就是完整的“Hello”,不会把它和别的报文合并。
- 特点: 像寄包裹,每个包裹是独立的。
速度与开销
- TCP:速度较慢,开销大
- 因为要维护连接状态、发送确认、重传、排序、流量控制(慢启动、拥塞避免)等复杂机制。
- 头部开销: 头部最短20字节(无选项时)。
- UDP:速度较快,开销小
- 没有复杂的连接维护和可靠性控制,发就完了”。
- 头部开销: 头部固定只有8字节。
应用场景(对比记忆)
| 协议 | 典型应用 | 为什么选这个协议? |
|---|---|---|
| TCP | 文件传输(FTP)、网页浏览(HTTP/HTTPS)、邮件(SMTP/IMAP)、远程登录(SSH) | 要求数据完整、准确、有序。 网页少加载一个字图片都可能出错,文件缺个字节就损坏。 |
| UDP | 视频直播、网络游戏(如FPS射击游戏)、语音通话(VoIP)、DNS查询、DHCP | 要求低延迟,可以容忍少量丢包。 直播卡一下可以忍,但延迟高就很烦;游戏里牺牲一点精度(丢几个包)换实时响应更重要。 |
总结表
| 特性 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接(需三次握手) | 无连接 |
| 可靠性 | 可靠(确认、重传、排序) | 不可靠(尽最大努力) |
| 传输单位 | 字节流 | 报文 |
| 速度 | 较慢 | 较快 |
| 头部大小 | 20-60字节 | 8字节 |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有(慢启动、拥塞避免) | 无 |
| 数据边界 | 无(流式) | 有(保留报文边界) |
快速判断口诀
TCP稳如老狗,保证不丢;UDP快如闪电,丢了不管。
当你在网络编程中需要“下载文件、浏览网页、发邮件”时,用 TCP;需要“看直播、打游戏、语音通话”时,用 UDP。
标签: UDP
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。