本帖最后由 社区助手_001 于 2020-6-16 19:48 编辑
【问题现象】 PPPoE拨号场景下,用户经常会反馈不能访问网页(或部分网页)以及不能收发邮件,检查配置时也没有错误。
【问题原因】 PPPoE拨号场景,IP报文长度大于 MTU,同时设置不分片标志(DF),导致设备丢弃报文,造成业务影响。 先来了解下MTU 和 TCP MSS 的关系:MTU=IP 报文头+TCP 报文头+TCP MSS 以太网中,设备的 MTU 值默认是 1500 字节,那么 TCP MSS 最大值 1460=1500-20(IP 报文头)-20(TCP 报文头),如下图:
通信终端在TCP 三次握手时会协商 TCP MSS 值,由于网络复杂,媒介不同 MTU 值也会有所不同,最小的 MTU 决定了最终 TCP MSS 协商结果,具体协商过程如下:
而网络层 IP 协议会根据 MTU 的大小决定报文是否“分片”处理,分片最大的坏处就是降低了传输性能,所以在网络层更高一层(就是传输层)的实现中往往会对此加以注意!有些高层协议因为某些原因会要求这个报文不能分片,所以会在 IP 数据包包头里面加上一个标志:DF(Donot Fragment)。这样当这个 IP 数据包在一大段网络传输的时候,如果遇到MTU 小于 IP 数据包的情况,转发设备就会根据要求丢弃这个数据包,然后返回一个错误信息给发送者,这样往往会造成某些通讯上的问题。 回到问题的本身,相对于普通以太网报文,PPPoE 报文多了 8 字节的 PPPoE 头,这样就导致实际的 MTU 值变小(1500-8=1492),所以在 PPPoE 应用中 MSS 取值不能超过(1492-20- 20=1452)。如果 MSS 取值超过 1452 则 IP 报文长度将会大于实际的 MTU 值,同时报文设置不分片,导致报文被丢弃。 【解决办法】 将设备 TCP MSS 值修改为小于 1452 字节。
【建议总结】 实际网络中,不一定只有 PPPOE 拨号场景,VPN 链路、MPLS 链路等都会额外增加报文大小,导致传输超出 MTU 大小。
|