Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16448
  • 博文数量: 8
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-22 17:39
文章分类
文章存档

2011年(1)

2010年(1)

2009年(6)

我的朋友

分类: 系统运维

2009-12-06 16:19:29

MTU即最大传输单元,在联网时有着关键的作用,如果发现有的网站上不去了,或者传不了大的文件,有可能是MTU的值设置有问题。比如客户端PC设置的MTU1500,而网关允许的MTU1400,那对于包长在14001500之间的包,PC不会主动去分段(IP fragment),网关收到这样的包就传丢弃了。而如果把客户端PCMTU值改为1400,对于大于1400的包,PC会主动作分段处理,保证每个包长都是小于等于1400的,网关就可以正常转发了。

 

MTU的设置通常有两种方法,一是静态手工配置。比如在linux上,可以用一句简单的命令ifconfig eth0 mtu 1400 来搞定。在windows上,可以修改注册表,通常是在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{adapter}\ 下面新建一个,名为MTUDWORD值。

还一种方法就是在通过dhcp请求地址的时候,顺便请求MTU的值。下面这个实验就是针对这种情况。

Topology:


              PC1(DHCP client)----------------PC2(DHCP server)


这两台clientserver都是运行在虚拟机里的,clientCentOS 5.3, serverwindows2000 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.       serverclient都正常配置了mtu选项的情况:

Client运行dhclient后,抓包发现, dhcp discoverdhcp request中,option 55(parameter request list)中,会有一项26,表明请求interface MTU. 相应的,在server回的dhcp offerdhcp ack中,也有一项Option 26, (1a 02 04 b0)1aoption类型(26), 02是长度,04b0MTU大小。



 

linux上,用ifconfig查看,MTU果然是1200.

 

2.       如果在linux上把dhclient.conf中的request interface-mtu去掉,先释放IP,再获取IP, 发现clientserver发的包中都不会含与MTU相关的option. 表明在dhcp server上配置的MTU是不会强推给client的,只有当你去请求时,才会下发MTU值。

3.       如果linux客户端包含了request interface-mtu,而server端并未配置option 26, 则在客户端发出的discoverrequestoption55中会包含 request mtu,但在server回的包中不会包含mtu。在这种情况下,linux端口会保留上次得到的MTU值,除非手工去更改。

 

上述实验表明,要想通过DHCP配置MTU,必须要在clientserver上都有option26的相关配置才行。

 

另外1Linux上的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

阅读(3933) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

networknowledge2009-12-06 16:34:58

不知道为什么,上传的图片显示不了