在IPv6中,MTU为 1500,为什么第一个 fragment 长度为 1496?

分享于 

12分钟阅读

电脑

  繁體 雙語

问题:


ping6 ipv6Address -s 1500



这里命令将生成一个 fragment。 通过wireshark观察,1st fragment的包长度为 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连接的实现,它的数据包用于PPPoE垫标签的8字节:


+-------------------------+


| 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/


| | | |


+-------------------------+ +-------------------------+



,我使用的是飓风 Electrictunneling隧道,因为我的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/


| | | |


+-------------------------+ +-------------------------+



但是重要的数字是 MTU,它是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 字节负载之前,你可以用字节有效负载。

在我的示例中,使用PPPoE焊盘标记的开销:


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/


| | | |


+-------------------------+ +-------------------------+



还有我额外的费用开销为 ::


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/


| | | |


+-------------------------+ +-------------------------+



你知道为什么我只能用 1,424字节的负载来 ping。


回答 2:

如果你在一个不支持它的接口上有VLAN标记,你会看到这个。 802.1 Q VLAN标记需要额外 4字节。 如果NIC本机支持,它支持 1522-byte ( 而不是旧的1518 -byte ) 以太网帧,因此你仍然可以拥有 1500字节的MTU。 if的网卡不支持本机,你可以在软件中支持它,但是你必须把MTU压缩到 1496,这样你的网卡就能适应你所支持的老的1518-byte 框架。


回答 3:

层通信协议最大传输单元( MTU ) 是层可以通过的最大协议数据单元的字节大小( 以字节为单位)。 例如通过使用 pppoa/vc多路复用器,我们再选择填充 31个ATM单元,然后再选择填充 1478 ATM信元。我们得到的是一个 31字节的desired Protocol MTU overhead字节和 8字节的AAL5开销。 这给了通过ATM传递给PPPoA的字节数据包传输的总开销为字节的总成本。 在使用PPPoA发送IP的情况下,1478的数字将是包含IP报头的IP数据包的总长度。 在这个例子中,为了节省 1478字节的带宽,而不是发送总长度为 1500的IP包,在ATM层中保留 53个字节,代价是减少了IP包的长度。

RFC 2516为 1492字节的pppoe/dsl连接指定了最大 MTU: 1500字节最大以太网负载减去PPPoE报头( PPP开销的2字节,PPPoE报头的6字节)的8字节。 这不一定会填充ATM单元的整数。 数据链路层是计算机网络七层OSI模型层 2层。 它对应于 tcp/ip参考模型的链路层,或者是它的一部分。 你在第 3层进行度量,因此差异很明显。 由于你所使用的网络类型,你使用 4字节来进行网络管理。



Fragment  IPV6  MTU  
相关文章