用DHCP来自动配置MTU

From: http://blog.chinaunix.net/u3/106587/showart_2112287.html

 

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.

 

实验步骤:

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

 

发表于: 2009-12-06,修改于: 2009-12-06 18:08

你可能感兴趣的:(windows,linux,server,centos,服务器,interface)