免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2434 | 回复: 0
打印 上一主题 下一主题

用DHCP来自动配置MTU [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-06 16:19 |只看该作者 |倒序浏览

                                                                                                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.
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

  Normal
  0
  
  7.8 磅
  0
  2
  
  false
  false
  false
  
   
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4



/* Style Definitions */
table.MsoNormalTable
        {mso-style-name:普通表格;
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-parent:"";
        mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
        mso-para-margin:0cm;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman";
        mso-ansi-language:#0400;
        mso-fareast-language:#0400;
        mso-bidi-language:#0400;}


  
  
  
  
  
  
  
  
  
  
  
  





实验步骤:
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
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/106587/showart_2112287.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP