← 网络基础学习第 4 / 55 章入门30 分钟

模块零 · 全景与基础

段、包、帧、比特

同一份数据,在传输层叫「段」、网络层叫「包」、链路层叫「帧」、物理层叫「比特」。搞不清这四个名字,看抓包结果时就会一片混乱。本章还要讲清两件相关的事:MTU 是什么、包太大了会怎样。

本章要解决的问题:同一份数据,在传输层叫「段」、网络层叫「包」、链路层叫「帧」、物理层叫「比特」。搞不清这四个名字,看抓包结果时就会一片混乱。本章还要讲清两件相关的事:MTU 是什么、包太大了会怎样。

本章的证据来源:历史实测记录(各接口 MTU、MTU 边界探测、网卡计数器)。分片与路径 MTU 发现的规则出自 RFC 791(IPv4)与 RFC 1191(PMTU 发现)。

先从一个例子理解概念

同一封信装进不同容器,会有“信、信封、快递袋”等名字。网络中的段、包、帧,也是不同协议层看到的容器名称。

先有内容,再有容器

程序交出的内容可以先叫应用数据。TCP把字节流组织成段;IP传送包或数据报;以太网等链路使用帧。这些名字表示不同层的格式与职责,不表示多份独立的原内容。

线路上传的是信号:比特与字节

比特是0/1信息单位,字节是8个比特。真实物理层会把比特编码为信号;不能说网络里的每个比特都直接对应一个独立电压状态。

包太大怎么办:分段与分片

TCP分段是在传输层按字节流组织段;IP分片是把一个过大的IP数据报拆成多个分片。目的端把分片拼回去叫重组。它们处于不同层,不是同一种操作。

找出路径能装多大:路径MTU

一条路径经过多段链路,能通过的包大小会受限制。路径MTU描述这条路径的大小约束;PMTUD(路径MTU发现)是探测和调整的机制,不是某个固定数字。

下面再用这些概念看原理、命令和结果。规范与官方资料列在本章末尾,类比只帮助理解,不代替协议规则。

四个名字,四种作用域

上一章那张"层层加头"的图里,每一层的产物都有专门的名字。这不是程序员喜欢造词,而是因为它们的适用范围完全不同。

层名字英文作用范围类比
应用层数据 / 报文data / message两个程序之间信的内容
传输层段(TCP)/ 数据报(UDP)segment / datagram两个程序之间(跨网络)写给你的整封信
网络层包packet两台主机之间(可跨多个网络)贴了地址的包裹
链路层帧frame同一段链路内一段路上的运输车
物理层比特bit电信号本身车轮压过路面的痕迹

关键区别在"作用范围"这一列:

  • 帧只在同一段链路内有效。你的电脑到路由器之间是一段链路,路由器到下一台路由器是另一段。帧头里的 MAC 地址在一段链路之外就没意义了。
  • 包可以从起点一路到终点,跨过无数段链路。IP 地址全程有效。
  • 段标记的是"哪个程序的哪一段数据",端到端有效。

MTU:一帧最多能装多少

MTU(Maximum Transmission Unit,最大传输单元)的定义要说得准确一点:

注意"网络层数据"这几个字 —— MTU 不包含以太网帧头(14 字节)和帧尾(4 字节)。所以一个装满的以太网帧在线路上是 1500 + 18 = 1518 字节,而它的 MTU 是 1500。

历史实测记录各接口的 MTU:

InterfaceAlias                     NlMtu
-------------                      -----
WLAN                                1500
以太网                                1500
以太网 3                              1200
FlClash                             9000
vEthernet (WSL (Hyper-V firewall))  1500

同一个概念,不同接口取值不同,为什么?

MTU出现在哪为什么是这个值
1500几乎所有以太网和 Wi-Fi以太网的历史标准,全世界的事实约定
9000FlClash TUN虚拟接口IP MTU配置,不证明物理以太网支持巨型帧
1200以太网 3保守值,通常是为了配合隧道/加密封装

1500 这个数字是怎么来的

它来自以太网的原始设计,是个工程折中:

  • 太小:包头占比上升,有效带宽利用率下降
  • 太大:一个帧传输出错就要重传整帧,重传代价高;而且大的帧会长时间占用共享介质,其他设备要等更久

1500 在两者之间取得了平衡,被 IEEE 802.3 采纳,后来成了全世界的事实标准。1500 是常见基本以太网载荷上限;巨型帧、隧道等配置可能使用不同 IP MTU。

包太大了怎么办:分片

如果应用层要发 5000 字节的数据,而链路的 MTU 只有 1500,会怎样?

要区分传输层分段与IP分片:TCP通常先按MSS组织多个段,UDP大数据报才可能遇到IP分片。下面描述过大IP数据报的处理,而不是所有5000字节应用写入必然分片:

方式一:分片(Fragmentation)

把一个 IP 包真的切成几块,每块都带上一个自己的 IP 头。假设原始数据 3000 字节、链路 MTU 是 1500:

分片内容(假设原IP载荷3000字节)IP总长度MF 标志片偏移
第 1 片IP 头 + 前 1480 字节15001(后面还有)0
第 2 片IP 头 + 第 1481–2960 字节15001(后面还有)185
第 3 片IP 头 + 剩下 40 字节600(这是最后一片)370

IP 头里有三个字段专门为分片服务:

字段作用
DF(Don't Fragment)置 1 表示"不许分片",谁分片谁就丢弃并报错
MF(More Fragments)置 1 表示"后面还有分片"
片偏移这一片在原始数据里的位置,接收方靠它拼回去

关键:重组只发生在最终目的地。 中间的路由器只管转发每一片,不会去重组 —— 因为它们可能各走不同的路,而且重组会消耗大量内存。

分片的代价很大

缺少任一分片就不能完成该 IP 数据报的重组。 IP 不提供重传;TCP 可重传相关字节,UDP应用则可能自行重试,也可能不恢复。

这就是为什么现代网络尽量避免分片,转而使用下面这种方式。

方式二:路径 MTU 发现(PMTUD)

发送方通常从出口接口的MTU或已缓存的路径信息出发,把包发出去并把 DF 位置 1(禁止分片)。

如果路径中间有某段链路的 MTU 更小(比如隧道只有 1400),那台设备会:

  1. 丢包
  2. 回一个 ICMP 报文,内容是"需要分片但设置了禁止分片"(类型 3,代码 4),并告诉发送方自己的 MTU 是多少
  3. 发送方收到后,把包改小重发,并记住这条路径的 MTU

Windows 可把本地出口MTU检查失败或收到的ICMP类型3代码4显示为类似错误。只看这行文本,不能证明中间路由器确实发回了ICMP;需要抓包区分本地错误与远端通知。

比特与字节:最常见的单位坑

「比特」和「字节」差 8 倍,这个差别制造了互联网上最常见的一个误解。

单位含义常见场景
bit(比特,小写 b)一个 0 或 1带宽:Mbps、Gbps
Byte(字节,大写 B)8 个比特文件大小、下载速度:MB、MB/s

运营商说的"100 兆宽带",单位是 Mbps(兆比特每秒):

100 Mbps ÷ 8 = 12.5 MB/s
 500 Mbps ÷ 8 = 62.5 MB/s
1000 Mbps ÷ 8 = 125 MB/s

所以100 Mbps对应的理论数据率上限是12.5 MB/s;应用下载还受协议开销等因素影响,不是 100 MB/s。 这不是运营商骗人,是单位不同 —— 但它们从来不主动说清这一点。

实测:平均每个包有多大

本机 WLAN 网卡的累计统计:

ReceivedBytes          : 187065778945      收到 1870 亿字节
ReceivedUnicastPackets : 333281415         收到 3.3 亿个包
SentBytes              : 327653373263      发出 3276 亿字节
SentUnicastPackets     : 446155662         发出 4.5 亿个包

两个数字相除:

收:187065778945 ÷ 333281415 ≈ 561 字节/包
发:327653373263 ÷ 446155662 ≈ 734 字节/包

历史字节数除以单播包数约为561;分子/分母口径未核实,不能直接当成平均IP载荷或带宽利用率。

常见误解

误解一:"包和帧是一回事"

不是。一个包可能被拆成多个帧(IP 分片时),普通以太网承载IP时,一个帧载荷承载一个IP数据报或一个分片;其他聚合或隧道机制应另行说明。而且帧有"链路范围"的限制,包没有。

误解二:"MTU 是 1500 字节的帧"

不准确。MTU 1500 指的是网络层数据最多 1500 字节;加上以太网帧头和帧尾,线路上实际是 1518 字节。这两个数字经常被人混用,看文档时要留意。

误解三:"100M 宽带 = 100MB/s"

差 8 倍。100 Mbps = 12.5 MB/s。

误解四:"MTU 设大一点能提速"

不一定。设大了如果路径中间有更小的 MTU,反而会引发分片或丢包。接口MTU反映该接口能力;发送方应让具体路径上的IP包适配路径MTU,而不是把所有接口都改成某条路径的最小值,这也是 PMTUD 自动在做的事。历史值1200的来源尚未核实,不能确定是人工设置还是软件/驱动配置。

本章小结

结论类型
段(传输层)/ 包(网络层)/ 帧(链路层)/ 比特(信息单位,在物理层编码传输)作用域不同定义
帧只在同一段链路内有效,包可以端到端标准
MTU 指链路层能承载的网络层数据上限,不含以太网帧头帧尾定义
本机 MTU:WLAN 1500、FlClash 9000、以太网 3 1200实测
1500 来自以太网标准,是包头开销与重传代价的折中标准
分片只在必要时发生,重组只在最终目的地进行标准
任一分片缺失会导致重组失败,是否重传由上层决定标准
PMTUD 靠 ICMP 通知发送方调小包;ICMP 被屏蔽会导致诡异故障标准
1 字节 = 8 比特;100 Mbps = 12.5 MB/s标准
历史计数器比值约561,未核对口径,不等于逐包载荷平均值历史观察

自测题

6 题 · 先自己答,再展开对照

  1. 为什么说"帧"的作用范围比"包"小?
    普通二层帧只承载当前链路上的传输;无NAT等转换时,IP源/目的地址可保持跨跳有效。若经过NAT,地址可能改写。
  2. MTU 1500 的链路上,一个装满的以太网帧在网线上是多少字节?多出来的是什么?
    基本无标签以太网MAC帧是1518字节,包含14字节头和4字节FCS;不计前导码、SFD和帧间隙,也不能直接套用到Wi-Fi。
  3. 一个 3000 字节的 IP 包要经过 MTU 1500 的链路,被分成 3 片。如果第 2 片丢了,发送方需要重传多少数据?
    不能仅由IP分片信息判断重传量。IP自身不重传;若上层是TCP,由TCP按确认与恢复算法重传相关字节;UDP应用可能不重试。还需区分“原IP包总长”与“IP载荷长度”。
  4. 为什么中间的路由器不负责重组分片?
    因为分片可能各走不同的路径,而且重组需要缓存和超时管理。 如果让每台中间路由器都负责重组,会消耗大量内存、增加延迟,还可能被攻击者利用(发送大量不完整分片耗尽路由器资源)。所以设计上把重组放在最终目的地。
  5. 运营商说"500 兆宽带",理论下载速度上限是多少 MB/s?
    62.5 MB/s。 500 Mbps ÷ 8 = 62.5 MB/s。注意这是理论上限,实际受协议开销、服务器带宽、Wi-Fi 干扰等因素影响,通常达不到。
  6. 某网站能打开首页,但下载大文件总是失败。为什么可能和 MTU 有关?
    因为小包能过、大包过不去。 首页的请求和响应都很小,不会触发 MTU 限制;下载大文件时数据包接近 MTU 满负荷,一旦路径中间某段链路的 MTU 更小(比如 VPN 隧道),包就会被丢弃。如果同时屏蔽了 ICMP,发送方收不到"请调小包"的通知,就会一直重试大包、一直失败 —— 表现正是"能打开网页但下载不了大文件"。解决办法是用 ping -f -l 手工探测路径 MTU(就是上一章那个实验)。

参考资料与适用范围

修订核对日期:2026-10-13。规则按所列协议与实现范围理解;文中的原始命令输出是历史观察,不表示本次重新实测。跨版本、代理/隧道及不同捕获位置需要另行核对。

正文源自 m0-04-段包帧比特.md · 共 10 节 · 6 道自测题