您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页PMTU发现的探讨

PMTU发现的探讨

来源:五一七教育网
龙源期刊网 http://www.qikan.com.cn

PMTU发现的探讨

作者:姚利增

来源:《沿海企业与科技》2008年第07期

[摘要]文章介绍PMTU以及在复杂网络环境面临的问题,并且探讨PMTU 自动探测和隧道MTU发现机制。

[关键词]MTU;隧道MTU;PMTU

[作者简介]姚利增,唐山学院计算机科学与技术系,研究方向:计算机网络安全,河北唐山,063000

[中图分类号] TP393 [文献标识码] A [文章编号] 1007-7723(2008)07-0036-0002 一、PMTU以及复杂网络环境面临的问题

在因特网上,两个主机之间的通信要经过多个网络,而每个不同的网络在IP 层可能有不同的MTU(最大传输单元)。两台通信主机路径中的最小MTU 被称作路径MTU 即PMTU。路径MTU 发现机制通过在IP 首部中继承并设置“不要分片(DF)”比特,来发现当前路径的路由器是否需要对正在发送的IP 数据报进行分片。如果一个待转发的IP 数据报被设置DF 比特,而其长度又超过了MTU ,那么路由器就会丢弃这个报文,并返回一个ICMP 不可达的差错报文(类型为3 ,代码为4 :需要进行分片但设置了不分片比特),其中填有下一跳正确的MTU。如果发送端主机接收到这个ICMP 差错控制报文,它就可以用正确的MTU 重新传送这个报文,并在以后的传输中沿用这个MTU 大小。路径MTU 发现机制的出现大大减少了网路上IP 分片的可能性。它在简单环境下是能够正常运行的,但在复杂网络环境下会有问题。 在实际复杂的网络环境中,一些网关设备(如防火墙、路由器等)会为了避免拒绝服务攻击或者其他原因而将这个ICMP 差错报文无条件地丢弃掉。源主机会一直以原来的那个MTU 大小发送IP 数据报并设置DF 位,这些数据报就会像前面的数据报一样被路由器丢弃掉,不能到达目的地。另外,在实际的网络环境中存在诸如VPN 一类的设备,它们由于加密的需要对报文进行了封装。这样,报文的长度就增加了,报文有可能因为太大被下一站的路由器丢弃掉。但是,由于路由器返回的ICMP 差错报文中包含的原始IP 数据报信息是加密过的,VPN 并不能正确识别,只能丢弃。在这种情况下,在客户端看来就有一个异常现象:可以和服务器端交换少量数据,如能够收到服务器端的ICMP 回显请求应答,却不能从服务器下载大的数据。

二、PMTU 自动探测

PMTU 自动探测是自动探测网络中各个子网的PMTU 值。首先在内核中建立一张PMTU 表,表中的内容是防火墙知道的各个客户端子网的路径MTU ,初始值均设置为防火墙外口的

龙源期刊网 http://www.qikan.com.cn

MTU。探测模块每隔一定的时间向各个子网发送分组,并设置“不分片”标志比特。发送的第一个分组的长度正好与出口MTU 相等,每次收到ICMP“不能分片”差错时,检查其报文格式,更新PMTU 表。如果是新格式,包含下一跳出口的MTU 就用该MTU 值替换表中原来的PMTU 值;否则,就用下一个最小的MTU 值继续发送分组。据RFC 1191 中的声明,MTU 值的个数是有限的。探测模块将这些近似值构成一个数组(如int mtus[ ] ={17914,8166,44,4352,2048,2002,1536,1500,1492 ,1006 ,576 ,552 ,544 ,512 ,508 ,296 ,680}),取下一个最小的MTU 值来发送。对于网络中存在VPN 一类的设备导致不能返回ICMP差错报文的情况,可以设置一个超时阈值。如果超过了这个阈值没有收到ICMP 差错报文,同时也没有收到目的主机的回应,就向目的主机发送ICMP 回显请求,检查是否是由于网络状况太差而导致没有回应。如果收到了目的主机发回的ICMP 回显请求应答,说明网络状况良好,只是VPN 等设备丢弃了ICMP 差错报文,于是,探测模块从上述MTU 值数组中取下一个最小的MTU 值来发送。最终,各个客户端子网正确的PMTU 值对应表就建立起来了。 三、隧道MTU发现

参照RFC 2473,隧道边缘路由器TE1 和TE2 执行隧道发现协议,并保存隧道MTU。TE1 和TE2 假定最初始隧道MTU 为第一跳链路MTU,即RTE MTU1 和2 TE MTU2 ,最后得到的隧道MTU 为隧道中间所有链路的MTU 的最小值。假设H1 和H2 为两台IPv6 主机。H1 发送IPv6 报文到达隧道入口TE1,设报文长度为LEN。TE1 需要对其进行隧道封装并向R 转发,封装后的报文长度为(LEN+Ltul )。若隧道MTU 发现执行完毕,即TE1 和TE2 已知晓隧道MTU 为MTUtul 。假如LEN + Ltul >MTUtul ,则存在两种情况:(1)如果LEN + Ltul> MTUminv6 (MTUminv6为RFC 2460规定的IPv6 最小链路MTU,等于1 280B),则TE1 将报文丢弃,并生成ICMPv6 包太大报文。其中IPv6 报头的源地址为TE1 的IPv6 地址,目的地址为H1 的IPv6 地址。并将跟随的ICMPv6 报文的MTU 字段设置为Max{ MTUtul, MTUminv6}。若LEN + Ltul?荞MTUminv6,则TE1 不丢弃报文,而是以不超过隧道MTU 的大小对IPv6 报文进行分段,通过隧道封装后转发至R。(2)隧道MTU 发现协议执行过程中,在TE1 和TE2 并不知道隧道MTU 的情况下,报文太大可能由隧道中间路由器发现。只要满足MTURTE2 MTUminv6,那么需要将该出错报文通知源通信主机H1。

IPv4 主机间通信假设H1 和H2 为需要通信的IPv4 主机。此时H1 发送的IPv4 报文到达TE1 需要历经IPv6 封装和隧道封装,报文长度由LEN 增加到(LEN+Lhdr6+Ltul)。(1)若隧道MTU 发现执行完成,即TE1 和TE2 知道隧道PMTU 为MTUtul。如果

LEN+Lhdr6+Ltul>MTUtul,则TE1作如下处理:若原始IPv4 报文的DF 位(不可分片位)置位,那么TE1将报文丢弃,并返回ICMPv4 目的不可达报文(需要分片但DF 置位)。报头的源和目标地址分别为TE1 和H1 的IPv4 地址。可以使用ICMPv4 报文中的unused 字段来传达所期望的MTU 值,即tul MTU 。若原始IPv4 报文的DF 位(不可分片位)未置位,那么隧道边缘路由器TE1 不可避免地需要对源报文进行分片处理,分片大小必须不大于(MTUtul -Lhdr6)。然后TE1 对分片依次进行两次封装并向下一跳R 转发。(2)隧道MTU 发现执行过程中, 如果MTURTE2

龙源期刊网 http://www.qikan.com.cn

四、结语

在复杂网络环境中,常常由于防火墙、VPN 等网关设备丢弃ICMP 差错控制报文,导致路径MTU 发现机制不能正常运转,以致于有些应用不能正常进行。本文浅显地探讨了PMTU 自动探测机制和隧道MTU发现机制,很多地方还需要更加深入的研究。由于黑客可能冒充中间网关设备向发送端发送ICMP差错控制报文,会导致发送端很敏感地就减少了发送数据报的大小。因此,路径MTU 发现机制的安全性也有待进一步研究。 [参考文献]

[1]W Richard Stevens. TCP/ IP 详解:协议1:第1卷[M]. 北京: 机械工业出版社, 2000. [2]J Mogul . Path MTU discovery[R]. RFC 1191 , 1990.

[3]J McCann ,S Deering. RFC :1981 2Path MTU discovery for IPversion 6[EB/ OL] . www. ietf . org ,2003.

[4]K Lahey ,dotRocket . RFC :29232TCP problems with path MTUdiscovery[EB/ OL] . www. ietf . org ,2003.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务