2006年10月5日

关于MTU

使用VPN数据会中断的问题已经查到并解决。在这里总结一下吧。
现象
在LINUX下使用PPTP Client建立VPN连接,在使用中,遭遇到当通过VPN做CVS做项目数据同步的时候遇到固定的一个项目的一个固定的文件,VPN将会中断,另外一种现象是,通过FTP传递一个100M的文件时,VPN会中断。所谓的中断指的是:客户端和服务器端的VPN仍然是通的,不过,无法通过VPN访问服务器所在的局域网内网了。
解决办法
通过检索PPTP网站,发现有相关描述http://pptpclient.sourceforge.net/howto-diagnosis.phtml#connections_freeze,按照这里的描述通过修改MTU数值可以解决这个问题。因此在PPTP Client的配置里面,选择最后一项“杂项”在PPPD的参数里面增加“mtu 1404"。(感谢补锅匠找到了解决办法)
分析
根据我的理解,在LINUX里面有一个物理设备eth0负责网络数据传输,根据乙太网的MTU要求,eth0的MTU为1500,即每个包1500Byte,超过1500就会有分片。这个1500包括了IP包头和数据段。当建立了一个VPN后,会形成一个逻辑的PPP0设备,他是一个逻辑网络设备负责网络数据传输,传输的时候是通过eth0这个实际物理设备来完成的。对于PPP0也有MTU,它包括VPN协议的包头加数据,那么PPP0的MTU是多少才比较合适呢?由于PPP0是通过eth0做传输的,为了避免对数据包的切片,就要求,PPP0上的MTU必须要比eth0上的MTU要小。这样PPP0的数据再加上IP包头就会比eth0的MTU=1500小,所以在PPP0上设置MTU =1404。甚至是个比1404更小的数字,通过ifconfig你可以看到eth0的MTU就是1500,而PPP0的MTU就是1400。据说在windows系统中,你建立一个VPN连接后windows系统自动会把这个虚拟网卡的MTU改成1400,所以在使用中你不会遇到这个问题。(感谢嘻嘻不厌其烦的解释)

0 评论: