- 论坛徽章:
- 0
|
MTU即最大传输单元,在联网时有着关键的作用,如果发现有的网站上不去了,或者传不了大的文件,有可能是MTU的值设置有问题。比如客户端PC设置的MTU是1500,而网关允许的MTU是1400,那对于包长在1400到1500之间的包,PC不会主动去分段(IP fragment),网关收到这样的包就传丢弃了。而如果把客户端PC的MTU值改为1400,对于大于1400的包,PC会主动作分段处理,保证每个包长都是小于等于1400的,网关就可以正常转发了。
MTU的设置通常有两种方法,一是静态手工配置。比如在linux上,可以用一句简单的命令ifconfig
eth0 mtu 1400 来搞定。在windows上,可以修改注册表,通常是在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{adapter}\
下面新建一个,名为MTU的DWORD值。
还一种方法就是在通过dhcp请求地址的时候,顺便请求MTU的值。下面这个实验就是针对这种情况。
Topology:
PC1(DHCP
client)----------------PC2(DHCP server)
这两台client和server都是运行在虚拟机里的,client是CentOS 5.3, server是windows2000 server。
PC1(CentOS)默认会安装dhclient,这是一个dhcp客户端程序。常见命令:
dhclient –r #释放IP地址
dhclient 获得IP地址。
配置文件:/etc/dhclient.conf
(默认可能没有,可以新建这个文件)
interface "eth0" {
send dhcp-lease-time 86400;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
interface-mtu;
}
PC2(win2k server)就使用自带的DHCP服务器。在服务器选项里,可以找到很多的dhcp option,其中option 26是给MTU用的,勾上这一项,并把值配为0x4B0,即1200.
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
实验步骤:
1.
server和client都正常配置了mtu选项的情况:
Client运行dhclient后,抓包发现, 在dhcp discover和dhcp request中,option 55(parameter request list)中,会有一项26,表明请求interface MTU. 相应的,在server回的dhcp offer和dhcp ack中,也有一项Option 26, (1a 02 04 b0),1a是option类型(即26), 02是长度,04b0是MTU大小。
在linux上,用ifconfig查看,MTU果然是1200.
2.
如果在linux上把dhclient.conf中的request interface-mtu去掉,先释放IP,再获取IP, 发现client和server发的包中都不会含与MTU相关的option. 表明在dhcp server上配置的MTU是不会强推给client的,只有当你去请求时,才会下发MTU值。
3.
如果linux客户端包含了request
interface-mtu,而server端并未配置option 26, 则在客户端发出的discover和request的option55中会包含 request mtu,但在server回的包中不会包含mtu。在这种情况下,linux端口会保留上次得到的MTU值,除非手工去更改。
上述实验表明,要想通过DHCP配置MTU,必须要在client和server上都有option26的相关配置才行。
另外1,Linux上的dhcp服务器也可以配置MTU选项。如在CentOS中,编辑/etc/dhcpd.conf, 加入一行:
option interface-mtu 1200;
然后重启dhcpd服务,service dhcpd restart。
另外2, 配置了MTU后如何验证是否生效呢,可以用ping IP –l 1300 –f来验证,要么ping通,或者提示需要分段。
另外3, dhcp client和dhcp server的配置文件例子:
/usr/share/doc/dhclient-3.0.5/dhclient.conf.sample
/usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/106587/showart_2112287.html |
|