分类: 系统运维
2009-12-06 16:19:29
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.
实验步骤:
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, (
在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通,或者提示需要分段。
/usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample