CloudEngine 16800, 12800, 9800, 8800, 7800, 6800, 5800系列交换机 维护宝典(V100, V200版本)
故障案例:报文分片导致ping不通
现象描述
如图1所示,其中:CO_CS、OP_DS为CE12800;WN_DS为S9700,上面部署了NAT转换业务;FW为某公司防火墙。
OP服务器ping总行服务器,大包(超过1472字节)不通,小包通。
OP_DS、CO_CS设备(CE12800)ping总行服务器,大包(超过1472字节)不通,小包通。
ICMP报文分片在传送过程中乱序导致被丢弃,出现ping不通现象。
相关告警与日志
- 相关告警
无
- 相关日志
无
原因分析
大包ping(超过1472字节),ICMP报文会被分片(Fragment)处理。遇到了ping短包通,ping长包不通;或者短包流量可以转发,长包流量不能转发的情况,即可以怀疑是否是由于分片导致的乱序或者标记错误,引起转发不通。
- OP服务器大包ping总行服务器不通:
参见图11-1,对OP_DS(CE12800设备)与防火墙的下联端口(绿色圈标志,结果对应图11-2)和上联端口(蓝色圈标志,结果对应图11-3)分别获取报文头,结果如下。
可以看到OP_DS(CE12800设备)发送到防火墙的报文都是正序的,每个ICMP请求报文都是长包在前,短包在后;而防火墙回应给OP_DS(CE12800设备)的报文都是逆序的,每个ICMP请求报文都是短包在前,长包在后。可以证明分片报文发生了乱序。
当OP服务器发起大包ping,ICMP报文分片在经过OP_DS旁挂的防火墙处理后,报文分片乱序,之后ICMP报文转发经过WN_DS的S9700设备时,由于NAT转换业务无法处理乱序的分片报文,导致ICMP报文被丢弃,没有被送到总行服务器。
为了进一步证明是防火墙造成的乱序,之后测试将防火墙Eth-trunk出口的4根联线拔掉3根,变为单链路,则大包可以ping通。
综上所述,造成此问题的原因,是由于防火墙Eth-trunk口Hash处理乱序导致。
- OP_DS、CO_CS设备(CE12800)大包ping总行服务器不通:
以CO_CS(CE12800设备)为例,对其与WN_DS相连的上行口获取报文头,结果如图11-4。
可以看到,CO_CS(CE12800设备)发送的ICMP请求报文已经收到了总行服务器的ICMP应答,但应答报文的分片中,存在don't fragment(DF)和more fragments(MF)标记同时置位为1。
参见RFC791中的定义如下:- don't fragment:当此值为0的时候表示封包可以被分割,如果为1则不能被分割。
- more fragments:此值为0就示该封包是最后一个封包,如果为1则表示其后还有被分割的封包。
如果DF标志被设置但路由要求必须分片报文,此报文会被丢弃。这个标志可被用于发往没有能力组装分片的主机。这两个标记位同时置位为1时含义相互矛盾,所以CE12800收到这个ICMP应答后,认为这是一个非法报文,从而将报文丢弃,导致ping不通。
对于收到此分片标记位有误的报文,因为无法获取总行服务器及途径路由器的具体信息,分析推测原因如下:
服务器对 ICMP应答报文置DF位的目的,是希望获取回程路径上最小MTU(被称作路径MTU,也被写作PMTU)。基本思想就是服务器开始假定一条路径的PMTU值,并将在这条路径上发送的长度小于此PMTU值的报文,都置上DF位。如果有的数据报文太大,不被路径中的某些路由器分片就无法转发,那么路由器将丢弃这些数据报文,然后返回一个意思为“需要分片但DF比特已置为1”的ICMP差错报文。在服务器收到这样一条ICMP差错报文后,则减小这条路径的PMTU值。当主机对PMTU的估计值小到它的数据报不需要分片也能转发的时候,即不再收到ICMP差错报文,PMTU发现过程结束。以上是标准实现,是假定途径的路由器收到“需要分片但DF置位为1的报文”可以回应ICMP差错报文。但实际有的路由器上,收到这种报文的处理有误,将报文强行分片了,DF却仍然置位1。导致CE12800收到了分片标记位错误的报文。
综上所述,造成此问题的原因,是由于总行服务器或者到总行服务器途径的网络设备,对于报文的分片标记位处理不正确导致。
操作步骤
- OP_AS区服务器大包ping总行服务器不通解决方案:定位并解决某厂商防火墙TRUNK HASH问题;当前可以通过将防火墙Eth-trunk出口变为单链路进行规避(会影响链路带宽)。
- OP_DS、CO_CS设备(CE12800)大包ping总行服务器不通解决方案:华为无法独立解决,需要客户排查到总行服务器途径的所有网络设备,确保途径设备能支持检查并回应ICMP差错报文,使CE12800收到分片标志位合法的ICMP应答报文。从测试结果可知,OP_AS区服务器可以识别DF和MF同时置位的ICMP应答报文,因此该问题可能不会影响客户实际业务的使用,建议客户验证并评估。