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

以太网 MTU 1500 扣掉 IP 头与 TCP 头,一次只能装 1460 字节(MSS)——大消息按 MSS 切块,每块独立编序号。

📝 本节和前面几节的关系

2.3.1 说【攒够一块】;本篇量一量这一块到底多大。

一、三把尺子

MTU=以太网一帧最多 1500 字节; IP 头+TCP 头=典型 40 字节; MSS=1500-40=1460,一次真正能装的数据。

二、拆分与拼装

8000 字节响应=5 x 1460+700,共 6 块; 每块带序号出门,收方按序号拼回原样。

三、动手 Demo:大消息怎么拆

尺子与账目:

mtu, ip, tcp = 1500, 20, 20
mss = mtu - ip - tcp
print('MSS =', mss)
total = 8000
n, rest = divmod(total, mss)
print('拆成:', n, '块满的 +', rest, '字节')

实跑输出:

--------------------------------------------------------------------
大消息怎么拆
--------------------------------------------------------------------
  MTU 1500(以太网)扣掉头部,一次只能装 1460 字节:

  项目                  字节数
  -----------------------------
  以太网 MTU            1500
  - IP 头(典型)       20
  - TCP 头(典型)      20
  = MSS(一次可装)     1460
  -----------------------------

  一条 8000 字节的 HTTP 响应要拆 6 块:
  5 x 1460 + 700 —— 每块独立编序号,对面再拼回来。

⭐ 2026 现状:数据中心常开巨帧(MTU 9000),MSS 相应放大—— 互联网公网链路仍以 1500 为准。

30 秒实验

  1. 算算 1MB 文件按 MSS 要拆多少块。
  2. Wireshark 里找 max segment size 协商值。
  3. 如果 MTU 只有 576,重算 MSS 和块数。

常见误区

  1. 以为 MTU 就是能装的数据量——还要扣两层头。
  2. 以为拆分是收方随便拼——按序号有序拼装。
自测三问(点开对答案) 1. MSS 怎么算出来? —— MTU 减去 IP 头和 TCP 头。 2. 8000 字节按 MSS 拆几块? —— 6 块(5 满+1 尾)。 3. 拆分后靠什么保证拼对? —— 每块的序号。

相关笔记