CloudEngine 16800, 12800, 9800, 8800, 7800, 6800, 5800系列交换机 维护宝典(V100, V200版本)

故障案例:报文分片导致ping不通

故障案例:报文分片导致ping不通

现象描述

图1所示,其中:CO_CS、OP_DS为CE12800;WN_DS为S9700,上面部署了NAT转换业务;FW为某公司防火墙。

  • OP服务器ping总行服务器,大包(超过1472字节)不通,小包通。

  • OP_DS、CO_CS设备(CE12800)ping总行服务器,大包(超过1472字节)不通,小包通。

图11-1 网络拓扑

ICMP报文分片在传送过程中乱序导致被丢弃,出现ping不通现象。

相关告警与日志

  • 相关告警

  • 相关日志

原因分析

大包ping(超过1472字节),ICMP报文会被分片(Fragment)处理。遇到了ping短包通,ping长包不通;或者短包流量可以转发,长包流量不能转发的情况,即可以怀疑是否是由于分片导致的乱序或者标记错误,引起转发不通。

根据发起ping的设备的位置不同,分析现网存在的触发原因:
  • OP服务器大包ping总行服务器不通:

    参见图11-1,对OP_DS(CE12800设备)与防火墙的下联端口(绿色圈标志,结果对应图11-2)和上联端口(蓝色圈标志,结果对应图11-3)分别获取报文头,结果如下。

    图11-2 OP_DS与防火墙的下联端口获取报文头结果
    图11-3 OP_DS与防火墙的上联联端口获取报文头结果

    可以看到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

    图11-4 CO_CS与WN_DS相连的上行口获取报文头结果

    可以看到,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应答报文,因此该问题可能不会影响客户实际业务的使用,建议客户验证并评估。