专注一件事
致力于让运维变得更简单、更高效、更快速。

H3C防火墙PPPOE拨号TCP-MSS设置

本文于 2019-09-30 22:30 更新,部分内容具有时效性,如有失效,请联系邮件admin#cnitdog.com进行更新。

故障现象:

用户使用H3C防火墙进行PPPoE拨号NAT上网,拨号成功后反映网页打开很慢,部分网站无法打开,下图为组网图:

问题分析:

在PPPoE场景出现上网慢或者是部分网页打不开DNS无误的情况时,首先检查设备当前的MTU以及TCP-MSS值。

MTU和MSS基本概念:
1、MTU(Maxitum Transmission Unit)最大传输单元:
由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。由于以太网EthernetII最大的数据帧是1518Bytes,这样除去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源 MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes(有时候也把它叫做 FCS),那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。

2、MSS(Maxitum Segment Size)最大分段大小:
MSS是TCP协议里面的一个概念,TCP协议在三次握手阶段会协商MSS值,MSS的值决定了每个TCP报文数据段的最大长度。TCP协议一般使用接口MTU来设置MSS的值,如果接口MTU为1500,减去20字节TCP头,20字节IP头,一般MSS取值为1460。

网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。分片最大的坏处就是降低了传输性能,所以在网络层更高一层(传输层)的实现中往往会因为某些原因就会要求报文不能分片,所以会在IP数据包包头里面加上一个标签:DF(Donot Fragment)。这样当这个IP数据包在一大段网络传输的时候,如果遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包。然后返回一个错误信息给发送者。这样往往会造成某些通讯上的问题。

对于UDP协议本身是无连接的协议,对数据包的到达顺序以及是否正确到达没有要求,所以一般UDP应用对分片没有特殊要求。

对于TCP协议是面向连接的协议,对于TCP协议而言它非常在意数据包的到达顺序以及是否传输中有错误发生。所以有些TCP应用对分片有要求—不能分片(DF)。

故障原因:
PPPoE场景,IP报文长度大于MTU,同时设置不分片标志(DF),导致设备丢弃报文,造成业务影响,通过调整防火墙mss解决问题。

解决办法:
进入拨号端口,调整TCP-MSS数值,命令如下:

[Cnitdog-H3C-Firewall]interface Dialer 0
[Cnitdog-H3C-Firewall]tcp mss 1360

设置后测试,网页打开速度正常,部分无法打开的网站也已经可以了,至此故障解决。

赞(7)
尊重劳动成果,转载请注明出处:IT运维狗 » H3C防火墙PPPOE拨号TCP-MSS设置