2023年12月6日发(作者:)

最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。

路由器MTU值对于网络通讯的影响

[复制本帖链接]

陈年老酒

发表于 2010-03-30 18:14:51

[此帖被浏览 12669 次,回复 21 次]

最后由 陈年老酒 于 2010-03-30 18:30:41 修改

本主题由 冬冬 于 2011-01-04 09:54:28 设为精华1,原因:技术分享

关于 MTU

MTU (最大传输单元)是网络设备传输的信息包最大值。对于各种路由器,最佳的MTU值通常都是默认值。有时,更改MTU值可提高设备工作性能,做起来很简单,但事实上,这样做往往会导致出现其他问题。最好保持MTU不变,除非有以下情况出现:

当连接不到ISP或者不能使用其他的因特网服务时,且他们的技术支持人员建议更改MTU值

当您使用 VPN,遇到性能问题时可以考虑更改MTU

为了提高网络的某些性能,使用了可优化MTU 值的应用程序,而这引起了连通性和其他性能方面的问题

一个信息包被发送到MTU值较小的设备时,将被分解为若干小块。理论上,在所有电脑、交换机、路由器及您能访问到的因特网的所有设备上的MTU值应该设置为同一大小。但是您不能控制因特网上的 MTU 值,而事实上在一个局域网中的最佳MTU值取决于硬件、软件、无线接口等等。

在一种情形下修改MTU的大小可使设备很好地工作, 但在其他方面却可能引起性能和连接性问题

当具有不同MTU值的设备相互通信时,信息包将会被分成多个以便能传给具有最小的MTU值的设备

Windows XP自动设置MTU ,换句话说,它使MTU对于各种应用综合性能最优化。微软的文章解释了使用Windows XP的宽带用户不能连接到ISP的原因

一旦网络设备分解了一个信息包,此信息包在到达目的地前一直保持分解的状态

各种应用下的最佳MTU值

设置MTU大小是一个反复试验的过程: 由最大值1500开始下降,直至问题解决。使用下列值之一或许能解决一些由MTU值引起的问题:

1500. 以太网信息包最大值,也是默认值。是没有PPPoE和VPN 的网络连接的典型设置。是各种路由器、网络适配器和交换机的默认设置

1492. PPPoE 的最佳值

1472. 使用 ping 的最大值 (大于此值的信息包会先被分解)

1468. DHCP的最佳值

1430. VPN和PPTP 的最佳值

576. 拨号连接到ISP的标准值

下面给出宽带网络下利用Ping命令测试本地最佳MTU值的方法。

测试思路如下:在广域网上,大小超出ISP要求的数据包将无法传输,而路由器则会根据本机MTU值自动将大小不符合要求的数据进行分包处理再进行传输,所以我们可以通过向Internet上的某台主机发送一个定长数据包,并且不允许路由器更改其大小的方式去检查该数据包能否被正常传输,如果数据包小于或等于ISP的MTU值时,传输就能正常进行,而如果发送的数据包大于ISP使用的MTU值时,传输就会失败,这样我们就能通过不断发送不同大小的数据包最终得到ISP端的MTU大小,而这个数据再加上28字节的包头信息就是我们需要的最终MTU值。

测试步骤如下:

1. 拨号上网,并打开“开始”菜单→“程序→附件→命令提示符”。

2. 输入命令“ping –l 14xx –f ”,这里我们解释一下命令参数的含义:

* –l 14xx参数:发送一个定长数据包,14xx是要测试的包大小,如前所述,ADSL的MTU一般在1450与1492之间,第3步中将每次更换一次该值。上面的式子中,-l是L的小写(不是1喔)。

* –f 参数:通知路由器不能私自更改该数据包大小。

* :任意一台Internet上的主机,也可使用其它主机名或IP地址。

3. 观察反馈结果并判断ISP的MTU值。

1) 第一次发送测试包,包长1492

如图1,提示数据包过大,需要分包,因此判断该数值(1492)大于ISP的MTU,应降低包大小。

2) 第二次发送测试包,包长1460

如图2,数据包大小降为1460,提示数据包过大,因此判断该值(1460)仍大于ISP的MTU,还应继续降低。

3) 第三次发送测试包,包长1450

如图3,数据包大小降为1450,提示该数据包可以正常传输,因此判断ISP的MTU值在1450~1460之间。 4) 第四次发送测试包,包长1455

如图4,数据包大小升为1455,提示数据包过大,因此判断MTU数值在1450~1455之间。

5) 第五次发送测试包,包长1452

如图5,数据包大小升为1452,提示可正常传输,因此判断MTU数值在1452~1455之间。

6) 第六次发送数据包,包长1453

如图6,数据包大小升为1453,提示因数据包过大无法传输,因此,判断出该ISP的MTU值为1452。 4. 修改路由器的MTU值

上面得到的MTU值不能直接用于本地设置上,还应在此基础上加上28(数据包头大小28字节),因此最终在WAN设置页面修改MTU大小为1480。

经过测试,通过修改路由器中的MTU值可以成功解决通过路由器上网后“能上QQ不能打开网页”、“部分网站或链接打不开”、“MSN登录不了”(请将MTU置为1480)、“Email无法发送附件”等问题。

以太网帧长问题

以太网的最大帧长有1518,1522,1536。那么这几个值是怎么来的呢?

下面是最初802.3定义的以太网帧结构:

Preamble (7-bytes) --前导位

Start Frame Delimiter (1-byte) --定界符

Dest. MAC Address (6-bytes) --目的地址

Source MAC Address (6-bytes) --源地址

Length / Type (2-bytes) --长度或帧类型

MAC Client Data --数据,n最大为1500,即MTU

(0-n bytes) Pad --填充字段,p最大为46

(0-p bytes) Frame Check Sequence (4-bytes) --帧校验码

其实Ethernet V2为实际的标准了。所以我们最常见到的是,源地址后是类型而非长度。

在后来提出的802.3ac里,加入了对vlan的支持。也就是在有vlan的情况下在源地址后多加入4个字节,所以就有了1522这个帧长度了。

Preamble (7-bytes) --前导位

Start Frame Delimiter (1-byte) --定界符

Dest. MAC Address (6-bytes) --目的地址

Source MAC Address (6-bytes) --源地址

Length/Type = 802.1Q Tag Type (2-byte) --表明是VLAN,这个为8100

Tag Control Information (2-bytes) --3-bits User Priority Field;1-bit

Canonical Format Indicator (CFI);12-bits VLAN Identifier (VID)

Length / Type (2-bytes) --长度或帧类型 MAC Client Data --数据,n最大为1500,即MTU

(0-n bytes) Pad --填充字段,p最大为46

(0-p bytes) Frame Check Sequence (4-bytes) --帧校验码

最后要提的就是1536这个长度了。我们知道802.3中规定,如果Length / Type的值大于0×600则表示是类型,而这个值就是1536。

1998年提出的802.3z中的应用。802.3中提出了一个Extension字段放在了最末尾。它主要作用是在短封包(如64)传输时,由于1000M速度的加快,导致传输时间的减少,破坏了原有冲突检测的机制,缩短了有效传输矩离,所以要增加一些字节,使长度达到512。当然,这个只用在半双工时了。其实在802.3中没有规定要扩展的值的大小的,所以最大可以扩展到1536。

还有一个就是802.1ad。也就是所谓的“Q-in-Q”,就是多重的vlan了,主要为网络运营商用来管理的,实现用户的vlan和运营商的vlan相隔离。这个也会加大现有封包的长度,会增加4个字节。

还有一个Jumbo frame。这东西不是802.3的标准,而一些厂商提出来的,为了提高1000M时的传输效率。由于是非标的,所以各家支持的大小也不尽相同。一般来说,现在一般可以支持到9k。

在802.3z中还提出一个Frame Bursting。这个东西可以提高短包的传输效率。在1000M以太网下,使用burst mode,一端可以连续发包,直到达到了65,536 bit

times (8192 byte times)的”burst limit”。帧和帧之间以extension bits来填充gap,以表示线路处于占用状态。burst mode唯一特殊的是,第一个帧要加一个”extension field”。

新的改变可以参见802.3as-2006

MTU是最大传输单元,它指的是某一层上面所能通过的最大数据报大小

MTU和Fragment详解

1. 基础知识

我们知道, 数据在网络上传输时, 要经过一段一段的链路。当数据从某一段链路的一端传到另一端的过程中, 需要考虑的是数据链路层协议, 在这一层, 我们观察到的数据包(PDU:

Packet Data Unit)称为MAC帧(MAC Frame), 不同的数据链路层协议, MAC Frame的格式也不同, 但大致都会有目标MAC地址、源MAC地址、长度/类型、数据(有效载荷: Payload)这几个字段。 对以太网而言, 采用的是数据链路层协议是基于IEEE 802.2/802.3, 但与IEEE

802.2/802.3略有区别.

查一下802.3协议中MAC帧格式部分, 就会发现上面提到的MAC帧中的数据(有效)字段的长度范围是46-1500个字节. 那么, 当链路层的上一层-IP层所要传输的IP数据包(包括IP

Header)大小超过这个长度范围时, IP数据包就必须分成多片传输, 这个过程就是分片(Fragmentating), 其中分割出来的每一个片断就是一个Fragment.

2. MTU与Fragment

上述链路层这种对超过其协议定义的最大数据字段长度时就进行分片的特性, 就称为MTU(Maximum Transmission Unit). 不同链路层协议, MTU值也不同, 我们已经知道, 对以太网, MTU是1500字节, 而对令牌环(Token Ring)网, MTU是4482字节.

3. IP数据包中与分片相关的字段

IP数据包在封装时, 在IP头的第8-9个字节(16bit)中, 存放关于分片的信息. 其中前3个bit表示分片的状态, 后13个bit表示当前片断在分片之前的整块待封装的数据包中的偏移量(因为IP数据包的最大可能长度为16bit, 而这13bit无法表示16bit的范围, 故实际使用时, 偏移量的计算是用这13bit的值乘8(3bit), 以实现表示16bit的范围).

3.1 不分片标记(Don't Fragment Flag)

IP头第8-9字节从左往右的第2bit表示当前IP数据包是(1)否(0)不分片, 缺省值为0, 就是不不分片, 即允许分片. 因为默认允许分片, 所以我们平常使用Ping命令时, 加参数-l 65500

Ping一台机器也不会有问题.

3.2 是否有后续分片标记(More Fragments Flag)

IP头第8-9字节从左往右的第3bit表示当前数据包里的数据是否为某块数据的最后一个分片,

若为0, 则说明当前数据包内的数据没有分片或者是最后一个分片, 若为1, 则表示后面还有属于同一块数据的分片.

4. 说了半天感觉太抽象, 我们来些看得见摸得着的东西.

4.1 用Ping测试MTU(在以太网环境中)开个命令行窗口, 输入命令:

ping 192.168.0.1 -l 2000 -f

出现提示:

Pinging 192.168.0.1 with 2000 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.

也就是在将IP头里的"Don't Fragment Flag"位设置为1, 也就是不允许分片, 但是我们又用Ping命令的-l参数指定了发送的数据包的大小为2000字节, 显然超过了以太网的MTU-1500字节. 所以数据包不能通过, 并且返回了上述错误信息: 数据包需要分片但是DF(Don't

Fragment)标记被设置了.

再输入命令:

ping 192.168.0.1 -l 1500 -f

Pinging 192.168.0.1 with 1500 bytes of data

Packet needs to be fragmented but DF set

lPacket needs to be fragmented but DF set

Packet needs to be fragmented but DF set.

Packet needs to be fragmented but DF set.

奇怪, 已经把发送数据包的大小改为MTU值1500, 怎么还不能通过?

减小参数值, 重输命令:

ping 192.168.0.1 -l 1400 -f

Pinging 192.168.0.1 with 1400 bytes of data:

Reply from 192.168.0.1: bytes=1400 time<10ms TTL=128

Reply from 192.168.0.1: bytes=1400 time<10ms TTL=128

Reply from 192.168.0.1: bytes=1400 time<10ms TTL=128

Reply from 192.168.0.1: bytes=1400 time<10ms TTL=128

好, 这次可以通过了.

反复调整参数值, 看看可以通过的最大Ping命令-l 参数值是多少. 经过反复试验, 最后发现,

最大可以通过的Ping命令的-l参数的数值是1472. 这个1472是和预期的MTU值1500差了28个字节. 这28个字节是怎么来的呢?

4.2 协议分层封装

我们知道, 在MAC帧的数据(Payload)字段, 封装(存放)的是上层(IP层)的IP数据包, 而IP数据包的格式是IP Header + IP Data(Payload). 在我们用Ping命令的这个例子中, IP数据包内的IP Data字段内封装的是ICMP协议数据.

我们来回顾一下MTU的含义: MAC帧内的数据(Payload)字段的最大长度, 也就是说它所封装的IP Header + IP Data两者长度之和最大为1500字节, 而IP Header的最小长度为20字节, 所以IP Data的最大长度就是1500-20=1480字节, 离我们试验的1472字节已经比较接近了.

再查查ICMP协议数据的具体格式, 发现在Ping命令用到的ICMP Echo Request/Replay报文中, 在ICMP Data之前, 有几个字段共占用了8个字节, 分别为: Type(1byte), Code(1byte),

Checksum(2byte), Identifier(2byte), Sequence Number(2byte), 这几个字段我们可以称之为ICMP Header. 好了, 1480-8=1472, 和我们的试验结果对上了.

可以发现, 我们使用Ping命令时, -l参数所指定的数据包大小, 是指的ICMP报文中的ICMP

Data字段的长度, 不包括ICMP Header, 更不包括IP Header.

理解Jumbo Frame巨帧

常常见到交换机和网卡说明中提到支持Jumbo Frame,但我一直对以太网的Jumbo

Frame(巨帧)如何使用不太理解,今日在网上找到2则现摘录下来,相信看了以后大家会有收获。

----

这是一种厂商标准的超长帧格式,专门为千兆以太网而设计,目前还没有获得IEEE标准委员会的认可。以太网标准的最大帧长度为1518字节,而Jumbo

Frame的长度各厂商有所不同,从9000字节~64000字节不等。采用Jumbo

Frame能够令千兆以太网性能充分发挥,使数据传输效率提高50%~100%。在网络存储的应用环境中,Jumbo Frame更具有非同寻常的意义。

----Jumbo

Frame需要在相互通讯的2个通讯端口(交换机端口或网卡端口)上同时支持,而且与以前的以太网产品不兼容,因此主要会应用于千兆主干的端口之间以及服

务器端口接入到网络主干的链路。交换机把Jumbo Frame格式的数据转发向不兼容Jumbo

Frame的端口时应进行帧格式的转换,即把Jumbo

Frame帧格式的数据转换成标准以太网的帧格式,从而保证其正常工作。相反,从不兼容Jumbo Frame的端口向支持Jumbo

Frame的端口转发数据时,交换机可以把多个标准以太网帧合并成超长Jumbo Frame帧,从而提高传输效率。 ---- 由于Jumbo

Frame没有成为国际标准,目前只有部分厂商支持这种帧格式。不过随着以太网向千兆、万兆的发展,必然要诞生1种超长帧格式,因而Jumbo

Frame从厂商标准转变为国际标准的可能性非常大。

---- 巨型帧 ( Jumbo Frame )面临的问题 (转载自安恒)

通常人们都认为Jumbo Frame(巨型帧)是一个相对简单的技术,应该被广泛的应用在局域网中,但是情况并非如此。

应该说Jumbo

帧在一些领域里是非常有用的,它是有意设计为加速大文件传输服务的。以太网标准定义的最大帧长度为1518字节,这样一个大的文件就需要被切碎成为若干

块,放到多个以太网帧中。而每个数据块传输的时候都会引入帧头和尾的开销。倘若能够用一个大的帧完成文件的传输,则会减少很多帧的开销,提高网络的利用率

和传输速率。通常人们认为,这一技术最大的应用瓶颈是在于至今没有标准化。

但是,有些人不这么看,许多人提出了超长帧的以下缺点:它们可能会成为融合网络的障碍。如果人们在网络上传送语音或其他对延迟敏感的内容,不需要有妨碍这 些对延迟敏感数据的超长帧传输。有人举例说,超长帧会造成延迟,一旦一个„大家伙‟在线路上传送,它会较长时间占用线路,阻止其他人使用线路,从而造成延

迟。

另一位读者提到超长帧可以在一条与其他网络隔离的网络中使用,因此它们不会妨碍其他传输流。存储区域网也许就是这样的一个例子。

但是首先,使用超长帧可能不再是一种优势。来自大学的两位用户说,为了了解超长帧是否能实际提高性能,他们测试了超长帧。一位用户谈道:“经过全面的测试

后,我们得到的结论是:在使用现代的PC和千兆网卡时,性能提高得很少。超长帧在过去年代里的主要优势是减小高中断率对计算机的影响。但是,3-GHz

CPU具有处理千兆流量的充足能力,网卡和驱动程序不再需要每一个数据包都中断一次。我们认为超长帧理论上看是一个不错的想法,但是在实际中它在千兆位时

用处不大。10G以太网可能是另一个问题。

另一位用户谈道:“我们发现降低性能的原因不是协议处理开销,而是CPU与网卡缓冲区之间数据移动所产生的延迟和影响。由于DMA(直接存储器存取)尺寸

越大,CPU花在设置DMA和其他东西的时间就越少,时延也减少了。随着CPU速度的增加,协议处理开销就变得越来越无足轻重。我们的结论是,如果标准的

商品化网卡允许超长DMA传输,你就可以获得更大的性能增益。同时,你不必修改MTU(最大传输单元)大小,打破标准。”

最后,一位来自厂商的人提到了使用巨型帧的几个缺点。首先,帧越长意味着如果丢失一帧数据,则是一次更为严重的网络事件,而重新传送丢失的数据包成为更为

耗费时间的工作。其次,网络中的每种东西都必须支持超长帧,超长帧才能使用。第三,Internet连接不支持超长帧:一个长度超过Internet连接

所支持长度的帧将在发送前被分段,从而大大降低了Internet连接的性能和可靠性。这导致需要每一个工作站都必须知道哪个数据包传送到本地网络,哪个

数据包传送到Internet。为了检测线路上的最大数据包长度,IP执行MTU路由发现算法,但是,这不是标准化的作法,并且,由于拒绝服务攻击,许多

防火墙不允许与这种算法有关的ICMP数据包通过。因此,超长帧不能在与Internet连接的网络中使用。

=====================================================

国内关于Jumbo帧的讨论并不多,国内一些有识之士,对其应用持肯定态度,但对使用方法提出建议。

Fluke公司蔡昌信先生的看法非常有意思。他对Jumbo帧的看法有两点。首先是,他认为帧大小的选择,实际上体现的是数据通信过程中对链路可靠性的一

种控制。如果说链路是非常干净的并且很少出现差错,那么这条链路上可以传输非常大的帧,而不必为此付出任何系统开销。但是问题是,人们是否认为他们的链路

状况足够好,信任他们的链路状况。

另一方面是,在一条链路上究竟有什么样的数据在传输。如果在一个链路上同时有实时应用的数据和对延迟并不敏感的数据在传输,那么Jumbo帧的使用,会极 大地影响到实时应用(蔡先生在此用到了“kill"这个词)。他认为Jumbo帧对于一些比较纯粹的大文件传输是非常有用的,比如说SAN这样的应用。但

是如果在一个多种应用混合传输的环境中,并且没有端到端的QoS策略、带宽分配设置,广泛的使用Jumbo帧是非常不理智的事情。

另一位来自厂商的朋友也表达了自己的意见,他认为如果想享用Jumbo帧所带来的好处,就需要一个能够端到端支持Jumbo帧的环境,否则的话在一些地方需要重新切帧,同样会引入更多的开销。

另一方面,支持Jumbo帧需要新的硬件,但是这同样是一个令人非常头痛的事情。这也导致了今天Jumbo帧现在仅仅在一些特殊环境使用,比如在服务器场用于数据的传输。

他个人认为,从长远的角度看Jumbo帧是有好处的,而且不仅IP存储,很多应用都会从中获益。而且,新设备中支持Jumbo帧的越来越多,端到端支持是有希望的。他特别强调要端到端使用才有意义。

另外,他还表示,在1000米的距离上,我们计算传输9K字节长的帧的时间,在高速网络上,并不像一些人担心的那样,会引入巨大的延迟。

最佳MTU值设多少

在一个多种厂家网络设备的网络环境中,有可能设备的MTU不相同,这时就可能导致数据包丢弃,引起网络通信故障。如何避免这种故障的发生呢?

MTU值导致的网络故障与PPPOE ADSL用户的最佳MTU值

MTU(最大传输单元)是网络设备传输信息包的最大值,单位是字节,大部分网络设备的MTU都是1500。这个最大传输单元和链路层协议有着密切的关系,EthernetII帧的结构为

DMAC+SMAC+Type+ Data+CRC,由于以太网传输电气方面的限制,每个以太网帧最小的大小为64B最大不能超过1 518B,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。 在一个多种厂家网络设备的网络环境中,我们可以用改变默认MTU值的方法来解决丢包故障的发生。

设置 MTU 大小是一个需要反复试验的过程,由最大值 1 500开始下降,直至问题解决。使用下列值之一或许能解决一些由MTU值引起的问题。

(1)1500—以太网信息包最大值,也是默认值,是没有PPPoE和VPN 的网络连接的典型设置。是大部分路由器、网络适配器和交换机的默认设置。

(2)1492—PPPoE的最佳值。

(3)1472—使用ping的最大值(大于此值的信息包会先被分解)。

(4)1468—DHCP的最佳值。

(5)1430—VPN 和 PPTP的最佳值。

(6)576—拨号连接到ISP的标准值。

检测网关的MTU

在本机打开DOS窗口,执行“ping -f -l 1472 192.168.0.1”命令,其中192.168.0.1是网关IP地址,1 472是数据包的长度,参数是“-l”(小写的L)。

如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。 如果出现“Packet needs to be fragmented but DF set.”, 表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1 400到1 472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。 如果检测到网关的MTU值是1 500,不需要修改。如果网关有防火墙ping不通,可以试试直接把MTU设为1 400。

修改网络设备MTU值

对于各种网络设备,最佳的MTU值通常都是默认值。有时,更改MTU值可提高设备工作性能,事情做起来很简单,但事实上,这样做往往会导致出现一些其他问题。

IP协议负责把包分成小分片以便信息包能顺利通过MTU较小的网络,为了处理分片,包头通知接收请求怎样去重新合并分片以及收到多少分片才能确定收到所有的分片。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。所以把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。

在一般的网络环境中最好保持各个网络设备的MTU不变,除非有以下情况出现:

(1)当连接不到ISP或者不能使用其他的因特网服务时,且他们的技术支持人员建议更改MTU值或当您使用VPN,遇到性能问题时可以考虑更改MTU。

(2)为了提高网络的某些性能,使用了可优化MTU值的应用程序,而这引起了连通性和其他性能方面的问题。一个信息包被发送到MTU值较小的设备时,将被分解为若干小块。理论上,在所有电脑、交换机、路由器及您能访问到的因特网的所有设备上的MTU值应该设置为同一大小。但是我们无法控制因特网上的MTU值,而在一个局域网中的最佳MTU值取决于硬件、软件、无线接口等等。在一种情形下修改MTU的大小可使设备很好地工作,但在其他方面却可能引起性能和连接性问题。

(3)当具有不同MTU值的设备相互通信时,信息包将会被分成多个以便能传给具有最小的MTU值的设备,这时往往引起网络故障,除非一些网络设备具有自动设置MTU的功能,这样可以使MTU对于各种应用综合性能最优化。否则一般需要我们手动设置网络设备的MTU以便使他们可以协调工作。

MTU值不规范导致问题

随着ADSL宽带费用和安装门槛的降低,越来越多的小企业选择ADSL 作为公司的网络出口方式。在使用过程中总出现一个奇怪的问题:拨号上网后,公司内部计算机经常出现打不开网页的问题,但奇怪的是,并不是所有页面都打不开,有很多站点还是可以正常访问的。经过反复调试及查找资料后,发现原来是MTU值不规范引起的。 ;本文来广西电脑技术专题站 对于PPPOE(ADSL)来说,要求用户端的MTU不能大于1492,否则用户无法浏览某些网站,因此必须对MTU的设定值进行调整。这点对于ADSL用户特别重要,很多不明不白的问题都有可能是因为MTU的设置不当造成的,遇到实际问题时应该引起足够的注意。最后通过修改工作站的注册表,降低MTU值的方法来解决这个问题。

修改本机的MTU方法如下。

(1)运行regedit。

(2)浏览到HKEY_LOCAL_MACHINE SYSTEM

CurrentControlSetServices TcpipParametersInterfaces。

(3)Interfaces下有多个子项,每个子项对应一个网卡。按如下方法选择网卡:

1)确定本机用来连接Internet的网卡或拨号连接的IP地址,如192.168.1.2。

2)用鼠标单击Interfaces上的子项,查看键值列表中的IPAddress项。

3)如果IPAddress的键值与(1)中的IP地址相同,即192.168.1.2,则该子项就是要找的网卡。

4)进入该子项,在右边的窗口里按鼠标右键,选择“新建→双字节值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口,填入MTU的值。填写前请先把基数设为十进制。设置好后,需要重启机器才能生效。

MTU值不规范导致能ping通外网但是无法打开网页。

华为交换机S8512中间通过某公司的无线室外网桥下联S3550,在S8512和S3550交换机的联接端口启用Trunk,封装IEEE802.1Q 协议,S3550只做二层设备,将用户的VLAN信息透传到S8016,在S8016上配置三层虚接口地址。

网络设备调试完毕后发现,S3550下面的用户可以分配到网络地址,也能够ping通外网的地址和域名(比如),但是无法打开相应的网页。提示:“Internet Explorer 无法连接到您请求的页,可能该页目前不可用”。后经仔细检查发现,虽然可以ping通外网的地址和域名,但是只能通过小于1 468字节的数据包,大于1 468字节的数据包都不能通过。

把交换机S8512和S3550中间的无线室外网桥去掉,在实验环境下用双绞线直接相连,没有出现问题,客户机网络浏览正常,单独测试无线室外网桥也没有上述问题出现,检查交换机和无线网桥的配置,确定也没有错误。

问题究竟是由什么引起的?考虑到只能通过最大1 468字节的数据包,最后把问题焦点聚集到无线网桥的MTU上,有可能是交换机和网桥的MTU 值不一致导致。 测试结果分析如下:

(1)华为交换机的接口的MTU值默认是1 500,这个值指的是IP层的报文长度,当这个报文承载在以太网帧上的时候,加上以太网帧的18字节,整个以太网帧的长度是1 518。当这个以太网帧被打上VLAN信息的时候,整个二层报文的长度就会变为1522个字节。

(2)在我们ping1468的时候,1468是IP层的净负荷,加上20字节的IP报文头和8字节的ICMP报文头,整个IP层的报文长度为1 496字节,再加上18字节的以太网帧封装和4字节的VLAN信息,整个以太网帧的长度刚好为1 518字节,这个时候无线网桥能够接收,所以能够ping通。

(3)在ping 1469的时候,根据上面的计算整个以太网帧的长度为1 519字节,可能是无线网桥的MTU值小于1 500,并且不具备自动调节MTU值的功能,这就决定了该设备无法接收这样的数据报,只有丢弃该数据包,所以导致无法通过长度超过1 468字节的IP报文,最终导致用户无法打开网页。

因为华为交换机的MTU值不可以改变,只好联系无线网桥厂家技术人员,把该网桥的版本升级,问题解决。