我正在研究IP碎片和MTU。我所知道的是MTU是物理介质的属性,因为它可以处理的数据量不需要分割数据。机器上的默认MTU设置为1500。通过在网上阅读,我知道有28个字节是为ICMP预留的,所以我的实际MTU是1472字节。
如果我将DF位设置为1,将数据包大小设置为1472,则会得到ping响应,并且我看到Wireshark中的流量也是相同的。
ping 8.8.8.8 -f -l 1472
Pinging 8.8.8.8 with 1472 bytes of data:
Reply from 8.8.8.8: bytes=68 (sent 1472) time=60ms TTL=113
Reply from 8.8.8.8: bytes=68 (sent 1472) time=67ms TTL=113
Reply from 8.8.8.8: bytes=68 (sent 1472) time=77ms TTL=113
Reply from 8.8.8.8: bytes=68 (sent 1472) time=44ms TTL=113但是,如果我使用1473数据包大小,我得到以下信息:
C:\Users\admin>ping 8.8.8.8 -f -l 1473
Pinging 8.8.8.8 with 1473 bytes of data:
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.当我启动这个Ping时,我有一个Wireshark在运行,但是我从来没有在Wireshark上看到过这个。为什么在Wireshark上没有看到这个?我的意思是我不应该看到一些ICMP的回应吗?我相信,如果我的机器上的TCP/IP堆栈看到DF位被设置并且MTU超过了,那么它本身会丢弃数据包吗?有人能确认一下吗?
此外,如果我删除DF标志,那么我确实在Wireshark中看到了ICMP页面,但是ping失败了:
C:\Users\admin>ping 8.8.8.8 -l 1473
Pinging 8.8.8.8 with 1473 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.为什么会失败呢?我尝试从1500到1501手动更改机器上的MTU。
MTU MediaSenseState Bytes In Bytes Out Interface
------ --------------- --------- --------- -------------
4294967295 1 54991843 0 Loopback Pseudo-Interface 1
1500 5 0 0 Wi-Fi
1500 5 0 0 Ethernet
1500 5 0 0 Local Area Connection* 14
1500 5 0 0 Local Area Connection* 15
**1501 1 114787330 26005606 Ethernet 2**
1500 1 0 755762 VirtualBox Host-Only Network即使在增加MTU之后,我也会得到请求超时。有人能解释一下吗?这是因为我的机器容量仍然是1500字节,将其更改为1500字节不会产生任何影响吗?
发布于 2020-07-09 23:01:20
通过在网上阅读,我知道有28个字节是为ICMP预留的,所以我的实际MTU是1472字节。
不,MTU是数据链路协议的有效负载的大小.对于以太网来说,是1500。你混淆了网络层。网络层,例如IP,数据包是数据链路协议的有效载荷,所以MTU是网络数据包可以有多大,但是网络数据包不需要像MTU那么大。
IPv4数据包(包括IPv4数据包报头)可以高达65,535字节,这比您可以找到的任何MTU都大得多。IPv6的做法不同,其有效负载可以高达65,535,不包括IPv6数据包报头(还有一个选项报头,允许IPv6有效负载高达4,294,967,295)。
尽管ICMP是IP ( IPv4和IPv6)的一个组成部分,但它被视为传输层协议,因此它是IP的有效负载。是的,有一个ICMP报头,就像UDP或TCP报头一样。
您似乎希望将传输层的最大有效负载大小计算为MTU,但这是不正确的,它是数据链路协议有效负载的最大大小。TCP有一个名为MSS的东西,它为您提供了最大TCP段大小,但除此之外,您还需要从封装协议中计算最大数据大小。
想想WWW吧。它的数据是HTML,但是这些数据由HTTP或HTTPS封装,然后由TCP封装,然后由一个IP版本封装,然后由数据链接协议封装。MTU只反映数据链路有效负载的最大大小,但您需要确定其他协议用于确定可以在每个数据包中发送的最大数据大小,这将因堆栈中使用的协议而有所不同。
设置DF位意味着路径中的中间设备,例如路由器,不允许在传输过程中分割IPv4分组。IPv6没有这个标志,因为IPv6的路径中根本不允许分割。现在我们有了PMTUD,这是IPv6所必需的,因为IPv6必须在其工作的路径中有一个最小的MTU为1280。许多OSes和应用程序现在也使用IPv4的PMTUD,这是最好的方法。
现在,大多数智能企业都会丢弃数据包碎片以防止碎片攻击,而碎片是资源密集型的,这就是为什么使用IPv6从IP中删除它的原因。
我尝试从1500到1501手动更改机器上的MTU。
不要乱来,除非你有非标准的巨型框架支持,而且你真的知道你在做什么。以太网MTU是1500。一些供应商允许支持大型帧,但是必须通过帧路径启用它,否则帧将被简单地丢弃在路径中。
https://networkengineering.stackexchange.com/questions/68927
复制相似问题