MTU为1500,为什么IPv6中首片长度是1496?

MTU为1500,为什么IPv6中首片长度是1496?
ping6 ipv6Address -s 1500

这个命令会产生一个分片,通过 wireshark 观察,第一个分片包的长度是 1496(来自第 3 层),由于 MTU 是 1500,所以这个 1496 的长度让我很疑惑,它是从哪里来的?

答案1

这只是我自己关于 IPv6 MTU 的参考。我需要一些问题添加到 - 我选择你。

首先是我们的以太网数据包,通常我们会忽略它:

+-------------------------+
| Ethernet - 16 bytes     |
|  6 byte destination MAC |
|  6 byte source MAC      |
|  4 byte type            |
+-------------------------+
|                         |
/  1,500 byte payload     /
|                         |
+-------------------------+

现在我们添加 IPv4 或 IPv6 标头:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    |                         |
/ 1,480 payload           /    / 1,460 payload           /
|                         |    |                         |
+-------------------------+    +-------------------------+

接下来我们添加我的 PPPoE 连接的实际情况,它从数据包中取出 8 个字节用于 PPPoE PADS 标签:

+-------------------------+
| Ethernet - 12 bytes     |
|  6 byte destination MAC |
|  6 byte source MAC      |
|  4 byte type            |
+-------------------------+
| PPPoE PADS - 8 bytes    |
+-------------------------+
|                         |
/ 1,492 payload           /
|                         |
+-------------------------+

这减少了我们的 IPv4 和 IPv6 流量可用的 MTU:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    |                         |
/ 1,472 payload           /    / 1,452 payload           /
|                         |    |                         |
+-------------------------+    +-------------------------+

然后,就我而言,我使用飓风电气6in4 隧道因为我的 ISP 不提供原生 IPv6 连接。这意味着我的 IPv6 流量被包裹在 IPv4 数据包中:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv4 - 20 bytes         |
|  10  byte control flags |    |  10  byte control flags |
|  2 byte total length    |    |  2 byte total length    |
|  4 byte source addr     |    |  4 byte source addr     |
|  4 byte dest addr       |    |  4 byte dest addr       |
+-------------------------+    +-------------------------+
|                         |    | IPv6 - 40 bytes         |
|                         |    |  6 byte control flags   |
|                         |    |  2 byte payload length  |
|                         |    |  16 byte source addr    |
|                         |    |                         |
|                         |    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    |                         |
/ 1,472 payload           /    / 1,432 payload           /
|                         |    |                         |
+-------------------------+    +-------------------------+

但重要的数字是最大传输单元,这是 IPv4 或 IPv6 自身可用的大小(包括其标头):

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
|                         |    | IPv4 - 20 bytes         |
/ MTU = 1492              /    |  10  byte control flags |
|                         |    |  2 byte total length    |
+-------------------------+    |  4 byte source addr     |
                               |  4 byte dest addr       |
                               +-------------------------+
                               |                         |
                               / MTU = 1472              |
                               |                         |
                               +-------------------------+

接下来是关于有效载荷大小,用于 ping 某人时不碎裂标志。ICMP 在 IP 上运行,并添加自己的报头开销:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
| ICMP - 8 bytes          |    |                         |
+-------------------------+    +-------------------------|    
|                         |    | ICMP - 8 bytes          |
|                         |    +-------------------------+
|                         |    |                         |
/ 1,472 ping payload      /    / 1,452 ping payload      /
|                         |    |                         |
+-------------------------+    +-------------------------+

笔记: 这就是为什么1,452在需要进行分段之前,可以使用字节有效负载进行 ping 操作。

就我的情况而言,使用 PPPoE PADS 标签的开销:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
| ICMP - 8 bytes          |    |                         |
+-------------------------+    +-------------------------|    
|                         |    | ICMP - 8 bytes          |
|                         |    +-------------------------+
|                         |    |                         |
/ 1,464 ping payload      /    / 1,444 ping payload      /
|                         |    |                         |
+-------------------------+    +-------------------------+

我的额外开销6合4

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv4 - 20 bytes         |
|  10  byte control flags |    |  10  byte control flags |
|  2 byte total length    |    |  2 byte total length    |
|  4 byte source addr     |    |  4 byte source addr     |
|  4 byte dest addr       |    |  4 byte dest addr       |
+-------------------------+    +-------------------------+
| ICMP - 8 bytes          |    | IPv6 - 40 bytes         |
+-------------------------+    |  6 byte control flags   |    
|                         |    |  2 byte payload length  |
|                         |    |  16 byte source addr    |
|                         |    |                         |
|                         |    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    | ICMP - 8 bytes          |
|                         |    +-------------------------+
|                         |    |                         |
/ 1,464 ping payload      /    / 1,424 ping payload      /
|                         |    |                         |
+-------------------------+    +-------------------------+

现在你明白为什么我只能 ping 1,424 字节的有效载荷了。

答案2

如果您在不支持 VLAN 标记的接口上使用 VLAN 标记,则会看到这种情况。802.1Q VLAN 标记需要额外的 4 个字节。如果您的 NIC 本身支持它们,则它支持 1522 字节(而不是旧的 1518 字节)以太网帧,因此您仍然可以拥有 1500 字节的 MTU。如果您的 NIC 本身不支持它,您可以在软件中支持它,但您必须将 MTU 缩小到 1496,以便整个内容适合您的 NIC 支持的旧 1518 字节帧。

答案3

层通信协议的最大传输单元 (MTU) 是该层可以向前传递的最大协议数据单元的大小(以字节为单位)。对于使用 PPPoA/VC-MUX 的 IP over DSL 连接的示例,再次选择像以前一样填充 31 个 ATM 单元,我们获得理想的最佳减小 MTU 数值 1478 = 31*48-10,其中考虑到 10 个字节的开销,包括 2 个字节的点对点协议开销和 8 个字节的 AAL5 开销。这使得通过 ATM 传输的 1478 字节数据包的总成本为 31*53=1643 字节,这些数据包通过 ATM 传输到 PPPoA。对于使用 PPPoA 通过 ADSL 发送 IP 的情况,1478 这个数字将是包括 IP 报头在内的 IP 数据包的总长度。因此,在这个例子中,保持自我强加的减小的 1478 的 MTU 而不是发送总长度 1500 的 IP 数据包,可以在 ATM 层为每个数据包节省 53 个字节,但代价是 IP 数据包的长度减少了 22 个字节。

RFC 2516 规定 PPPoE/DSL 连接的最大 MTU 为 1492 字节:1500 字节最大以太网有效负载减去 8 字节 PPPoE 报头(2 字节用于 PPP 开销,6 字节用于 PPPoE 报头)。这不一定能填充整数个 ATM 单元。数据链路层是计算机网络七层 OSI 模型的第 2 层。它对应于或属于 TCP/IP 参考模型的链路层的一部分。您确实在第 3 层进行测量,因此差异很明显。由于您使用的网络类型,4 个字节用于网络管理目的。

答案4

您使用的是 DSL 吗?PPPoE 标头占用 8 个字节。

相关内容