MTU原理及相关问题分析
一、MTU的定义及相关概念:
Mtu即最大传输单元,全称为Maximum Transmission Unit,是指通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。由于定义的模糊性,在此也介绍几个相关的名词,MRU、PMTU、MSS和JUMBO FRAME,供大家甄别。
二、MTU涉及主要原理:
1、常见网络的MTU值:
IP网络以包为单位进行信息传递,那么,一次传送多大的包合适、多大的包最高效就成为一个核心问题之一。MTU就是决定在什么样的物理网络传送多大数据包大的事实标准,不同类型网络由于物理特性、发展阶段不同,其MTU的默认值也不尽相同,以下是摘录的各类网络及其默认MTU值:
对于windows操作系统来讲,其以太网网卡MTU默认为1500,但可以通过修改工具或修改注册表进行修改,但只能改小,不能改大,即只能修改为小于或等于1500字节。
2、PMTU 发现过程:
对于一个基于网络的应用来讲,如果应用穿过网络的MTU与PMTU相等,那么应用穿过网络的效率最高,或者说,应用通过主机网卡发出的最大数据包与PMTU越接近(指小于等于PMTU),应用穿过网络的效率越高,原因是有效的避免了分片和重组。
为了达到这个目的,一些操作系统支持自动发现路径MTU的功能,具体过程为:
路由器接口上收到一个报文长度大于本接口MTU值的报文,如果该报文被打上不分片的标记,将丢弃本报文,并且返回一个ICMP差错报文,通知报文发起者丢弃原因。报文发起者将发送比较小的报文。通过多次上述报文协商,将得到对于某一个固定路径上的最小Mtu值,这个过程叫做"Mtu Discovery"[详见RFC1191]。
了解了MTU发现的原理,举一个实例验证PMTU变化过程:
在上图所示实验网络中,由三层设备模拟PPPOE拨号,实现接入宽带IP网。三层设备上行以太网口默认MTU为1482字节。抓包结果显示如下:
将三层设备上行以太网口默认MTU改为1000字节。抓包结果显示如下:
3、"PMTU"发现存在的问题:
由于互联网上路由器或其它网络设备的配置的无法统一规范,某些运营商或网站考虑到网络安全和其它需要,有时会把ICMP报文过滤掉,此外,PMTU牵涉到主机、各类交换机、路由器、防火墙等网络设备,这些主机和网络设备没有有效的手段实现PMTU的协商和交互,这样Mtu Discovery不能正常运行,影响应用正常运行,即实质上目前没有有效的手段来发现PMTU。
互联网上的网络设备,遇到MTU发现报文或必须将IP包分片但DF设置为1时,路由器可采用以下任一种方式(从网上摘录):
发送符合 RFC 792 中最初定义的"ICMP DesTInaTIon Unreachable-FragmentaTIon Needed and DF Set"消息,然后丢弃该包。原始消息格式中不包含有关转发失败的链路的 IP MTU 的信息。(导致PMTU无法正常发现)
? 发送符合 RFC 1191 中重新定义的"ICMP DesTInation Unreachable-Fragmentation Needed and DF Set"消息,然后丢弃该包。此新消息格式包含一个 MTU 字段,可指出转发失败的链路的 IP MTU。(PMTU可能会正常发现)
RFC 1191 定义了路径 MTU (PMTU) 发现,它使得源和目的 TCP 对等方能够动态地发现二者之间路径的IP MTU,从而发现该路径的 TCP MSS。一旦收到符合 RFC 1191 定义的"Destination Unreachable-Fragmentation Needed and DF Set"消息,TCP 就会将该连接的 MSS 调整为指定 IP MTU 减去 TCP 和 IP 报头的大小。这样,在该 TCP 连接上发送的后续包就不会超过最大大小,无需分段即可在该路径上传输。
直接丢弃包。直接丢弃需分段但 DF 标记设置为 1 的包的路由器称为 PMTU 黑洞路由器。
总之,PMTU的不可发现性,导致因MTU问题引起的应用系统无法正常运行情况时有发生。
4、超过MTU值的数据包分片、重组过程:
IP包的格式如下:
IP包的分片重组牵涉到IP包头的几个重要字段,主要是标识符、标识位、偏移量,分别详述如下:
标识符(Identification):在发送数据包前,发送主机给每个数据包一个ID值,放在16位的标识符字段中。此ID用于标识唯一的数据报或数据流。接收主机利用此ID对收到的数据报进行重组。当分片的IP数据报从源地址发送到目的地址的时候,由于网络延迟或者不同的传输路径的关系,在到达目的主机时,这些分片数据报并不总是有序的到达,而是处于一种无序状态,因此,接收主机便用此ID判断接收的这些分片数据报是否属于同一个数据流,然后再进行重组。
标志(Flags):第一个bit称为R位,目前保留未用。第二个bit称为DF位,Don't Fragment,"不分片"位,即
- LT3751如何使高压电容器充电变得简单(08-12)
- 三路输出LED驱动器可驱动共阳极LED串(08-17)
- 浪涌抑制器IC简化了危险环境中电子设备的本质安全势垒设计(08-19)
- 严酷的汽车环境要求高性能电源转换(08-17)
- 适用于工业能源采集的技术 (08-10)
- 单片式电池充电器简化太阳能供电设计(08-20)