公众号旧文

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:你自己负责

这也是网络世界里一个很典型的分层思想:

底层越简单,上层越自由。