MTU大小由什么决定,最小值是多少?TCP通信时,如果一包数据大于1MTU是否会被拆包?

如题所述

第1个回答  2022-11-18

设置多大的MTU值取决于你的上网方式 

光纤:1500 

PPPoE/ADSL:1492 

Dial Up/Modem:576 

不明白为何你关注最小值,那就像关注小孩能吞下多小的米这种事情一样

如果要讨论最小的话题:

以以太网封装为例,它要求min帖=46,小于46,它自动充补;那么46+6(src mac)+6(dst mac)+2(protocol)=60,如果再加下尾部的4位CRC,就是64;

对于IP包来讲,好像没有最小的要求吧?至少我平时没有注意过这个问题,已尝试过发送只有20字节的IP头的包;

对于TCP包来讲,是允许没有数据的包,如SYN包等等

IP分片是很多资料常讲的内容,但是我倒是觉得分不分片其实不重要,重要的是另一个东西。一个

数据包穿过一个大的网络,它其间会穿过多个网络,每个网络的MTU值是不同的。就像木桶效应一样,我们应该有一种有效的手段,来发现这个值,最笨的方法或许是先

用traceroute查看所有节点,然后一个个ping??

IP包头中,用了三个标志来描述一个分片包:

1、分片标志:如果一个包被分片了,被置于1,最后一个分片除外;——这样,对于接收端来讲,可以根据这个标志位做为重组的重

要依据之一;

2、分片偏移标志:光有一个标志位说明“自己是不是分片包”是不够的,偏移标志位说明了自己这个分片拉于原始数据报的什么位置,

很明显,这两个标志一结合,就很容易重组分片包了。

3、不允许分片标志:如果数据包强行设置了这个标志,那么在应该分片的时候,数据包将被丢弃,然事收到一份ICMP不可达差错,告诉你,需要分片。

在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP跳的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的传输单元的最大值。

RFC 1191描述了“路径最大传输单元发现方法”,这是一种确定两个IP主机之间路径最大传输单元的技术,其目的是为了避免IP分片。在这项技术中,源地址将数据报的DF(Don't Fragment,不要分片)位置位,再逐渐增大发送的数据报的大小——路径上任何需要将分组进行分片的设备都会将这种数据报丢弃并返回一个“数据报过大”的ICMP响应到源地址——这样,源主机就“学习”到了不用进行分片就能通过这条路径的最大的最大传输单元了。

不幸的是,越来越多的网络封杀了ICMP的传输(譬如说为了防范DDOS攻击)——这使得路径最大传输单元发现方法不能正常工作,其常见表现就是一个连接在低数据流量的情况下可以正常工作,但一旦有大量数据同时发送,就会立即挂起(例如在使用IRC的时候,客户会发现在发送了一个禁止IP欺骗的ping之后就得不到任何响应了,这是因为该连接被大量的欢迎消息堵塞了)。而且,在一个使用因特网协议的网络中,从源地址到目的地址的“路径”常常会为了响应各种各样的事件(负载均衡、拥塞、断电等等)而被动态地修改——这可能导致路径最大传输单元在传输过程中发生改变——有时甚至是反复的改变。其结果是,在主机寻找新的可以安全工作的最大传输单元的同时,更多的分组被丢失掉了。