用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
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
相关文章推荐
- DHCP部署——通过DHCP自动发现代理服务器,并自动配置 (DHCP部署WPAD)
- DHCP自动获取IP配置
- 嵌入式 ARM-Linux配置DHCP自动获取IP地址
- PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置)
- ARM-Linux配置DHCP自动获取IP地址
- 【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置
- CentOS 6.9使用Setup配置网络(解决dhcp模式插入网线不自动获取IP的问题)
- ARM-Linux配置DHCP自动获取IP地址
- 【方法】lwip-2.0.2配置DHCP自动从路由器获取IP地址和DNS服务器地址, 并设置NetBIOS计算机名
- Linux-2.6.31配置DHCP 开发板自动获取IP地址
- cisco AP1131 配置DHCP自动获取
- 在windows powershell中利用脚本自动安装和配置DHCP服务
- ARM-Linux配置DHCP自动获取IP地址
- 为 ISA 服务器的自动发现配置 DHCP
- ARM-Linux配置DHCP自动获取IP地址
- 自动装机及ks.cfg&dhcp配置
- ARM-Linux配置DHCP自动获取IP地址
- cetos配置DHCP服务器并使另一台虚拟机自动获取ip
- ISA客户端的自动发现配置(DHCP)
- ARM-Linux配置DHCP自动获取IP地址