🔌 第二章 用电信号传输TCP/IP数据
📄 一句话概括

UDP 不对账、不重发、不握手——发了就算;DNS 查询这类【短、快、丢了无妨】的消息正合适。

📝 本节和前面几节的关系

TCP 全套机制讲完了;本篇认识它的极简兄弟——UDP。

一、UDP 的全部

头部只 8 字节:源端口、目的端口、长度、校验和—— 没有连接、没有序号、没有窗口。

二、取舍的逻辑

TCP 的可靠是用开销换的; 若消息短到一包装下、丢了重查也便宜,开销就是纯浪费。

三、动手 Demo:UDP 和 TCP 怎么选

一张对比表:

for a, b, c in [('TCP','要(序号+ACK+重发)','消息必须完整'),
               ('UDP','不要,发了就发','短、快、丢了无妨')]:
    print('%-4s %-18s %s' % (a, b, c))

实跑输出:

--------------------------------------------------------------------
UDP 和 TCP 怎么选
--------------------------------------------------------------------
  一个数说明分工:

  协议     要不要对账              适合
  --------------------------------------------------
  TCP      要(序号+ACK+重发)     消息必须完整
  UDP      不要,发了就发          短、快、丢了无妨
  --------------------------------------------------

  DNS 查询选 UDP:一条消息装得下,重查一次也便宜——
  为一次查询铺整套对账机制不划算。

教材点名的场景是 DNS 查询——1.2.4 节那个 UDP 53。

30 秒实验

  1. 对比 TCP 头(20+ 字节)和 UDP 头(8 字节)。
  2. 想想 FTP 传文件为什么必须 TCP。
  3. 数数一次 DNS 查询若用 TCP 要多几次往返。

常见误区

  1. 以为 UDP 是【劣质 TCP】——它是按需取舍的另一个工具。
  2. 以为 UDP 完全不可靠到不能用于业务——可自建轻量重传。
自测三问(点开对答案) 1. UDP 头部几个字段? —— 源端口、目的端口、长度、校验和。 2. DNS 查询为什么用 UDP? —— 短、快、丢了重查便宜。 3. UDP 保证送达吗? —— 不保证。

相关笔记