您的位置:首页 > 其它

用DHCP来自动配置MTU

2010-09-08 10:12 288 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: