公众号旧文
TCP 和 UDP 的本质区别是什么?
我们都知道,TCP 是可靠的,UDP 是不可靠的。
但如果追问一句:
为什么 TCP 可靠?UDP 又差在哪?
可能有一些人就要卡壳了。
这两个协议的本质区别,不在可靠不可靠这种表述。
而在一个更底层的问题:
谁来保证数据的正确送达?
一、先看本质:责任在谁手里
把网络通信想象成寄快递。
- TCP:快递公司负责送到、签收、丢了赔
- UDP:你自己扔出去,对方收不收不管
也就是说:
TCP 把可靠性内置在协议里, UDP 把可靠性交给应用层自己决定。
这才是最核心的区别。
二、TCP 做了什么?
TCP 之所以可靠,是因为它做了很多额外的事情:
1. 建立连接(握手)
通信前要先确认双方都在线(三次握手)。 “你在吗?” “我在,你呢?” “我也在,可以说话了”
2. 数据确认(ACK)
每一段数据发送后,对方都要回复收到。
如果没收到,就要重新发送。
3. 顺序保证
TCP 会给每一段数据编号,确保数据按顺序还原,不会乱。
4. 丢包重传
如果某一段数据丢了,TCP 会自动补发。
5. 流量控制 + 拥塞控制
避免把对方打爆。
TCP = 带管理、带监督、带补救机制的传输方式。
三、UDP 为什么什么都不管?
UDP 就完全相反了。
它的设计理念是能发就行,剩下的不管。
具体表现为:
- 不建立连接
- 不确认是否收到
- 不保证顺序
- 不重传
- 不控制流量
就像你往空中扔纸飞机,对方接不接,全看缘分。
四、那为什么还要 UDP?
看到这里,很多人会觉得 UDP 这么粗糙,存在的意义是什么?
TCP 的问题
它的可靠性是有代价的:
- 延迟高(握手 + 确认)
- 开销大(维护状态)
- 速度受限制(拥塞控制)
UDP 的优势
UDP 的优点刚好相反:
- 延迟低(不用握手)
- 速度快(直接发)
- 开销小(无状态)
五、现实世界中两者各有地盘
TCP 用在
- 网页(HTTP / HTTPS)
- 文件下载
- 邮件
必须正确,一点儿都不能错。
UDP 用在
- 视频直播
- 在线游戏
- 语音通话
宁可丢一点儿,也不能卡。
当 实时性 > 完整性 时,就选 UDP。
六、一个更深层的理解
TCP 和 UDP,本质是两种设计哲学。
TCP 的哲学是“我帮你搞定一切,你只管用”。
- 对开发者友好
- 成本由协议承担
- 稳定优先
UDP 的哲学是“我只提供能力,怎么用你自己决定”。
- 对系统更灵活
- 性能更极致
- 控制权在应用层
这也是为什么后来出现了很多基于 UDP 的可靠协议:
- QUIC(HTTP/3 的底层)
- 各种游戏自定义协议
它们用 UDP 做底座,自己实现可靠性。
如果只记一句话:
TCP 和 UDP 的本质区别,不是可靠与否,而是可靠性由谁负责。
- TCP:协议帮你兜底
- UDP:你自己负责
这也是网络世界里一个很典型的分层思想:
底层越简单,上层越自由。