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 个字节。