某海关广域网链路改造后H2000系统故障

发布时间:  2015-11-03 浏览次数:  261 下载次数:  2
问题描述

隶属关PCping通直属关服务器以及总署服务器;H2000应用系统数据库查询正常;但是无法开单

告警信息
处理过程

所有路由器与运营商MSTP互联的那个接口,如果是华为请配置mtu 1400tcp adjust-mss 1300。 如果是华三/思科请配置mtu 1400ip mtu 1382(这个是网络层MTU,包含了网络层头部的大小,你也可以配置其他的值,但是系统会限制你值不能大于mtu),tcp addjust-mss 1300

通过以上命令,解决了TCPUDP的大报文传输问题。

根因

穿透运营商MSTP链路传输设备默认不透传大报文,导致TCP报文不断重传

 

一般情况下,PC机之间相互传送TCP数据首先是 3次握手,第一个报文和第二个报文协商TCP-MSS(也就是传说中的MTU),通过抓包分析,TCP协商的MSS=1460,客户H2000系统进行数据库写操作时,应用层产生大量数据,通过TCP传送到服务器时,以1460字节为单位切割应用层数据发送,1460+TCP头的封装(传输层封装)=1480字节,1480+IP头封装(网络层封装)=1500字节,此时数据送到链路层封装,华为设备接口默认mtu=1500display interface G0/0/0命令查看,代表网络层送下来的数据最大是多少,不包含MAC头和尾),那么加上MAC14字节与4字节CRC封装,=1518字节,链路层以太II型封装1518字节刚刚好到最大值(1500+MAC头、尾=1518),由于是VRF的数据走MPLS封装出去,MPLS-VPN是双层的标签,所以最终的数据帧不是1518,而是中间插入了两层标签,变成了1518+4+4字节,所以发送到运营商MSTP设备的时候,正常来说MTU肯定是1500,所以有能力接收1518字节(加上以太II型数据帧头、尾)的数据,但是由于它收到的是带了MPLS封装的1518+4+4字节的数据帧,它认为超过了接口的最大接收能力(以及接口最大传送能力),所以传输设备被迫丢弃了该数据帧。造成了TCP协议一直重传该报文而导致H2000无法接单(就是往数据库写入不了数据了)。网络中所有设备都使用默认MTU 1500,路由器接口运行了mpls,所以肯定能接收和发送带双层标签的数据帧。如果中间MSTP看成是数通的二层网络(二层交换机互联的网络),交换机也是不会丢弃这个带双层标签的数据帧的,下图为MPLS-VPN抓包,数据携带双层MPLS标签:


 

抓包:

 

解决方案

所有路由器与运营商MSTP互联的那个接口,如果是华为请配置mtu 1400tcp adjust-mss 1300。 如果是华三/思科请配置mtu 1400ip mtu 1382(这个是网络层MTU,包含了网络层头部的大小,你也可以配置其他的值,但是系统会限制你值不能大于mtu),tcp addjust-mss 1300

通过以上命令,解决了TCPUDP的大报文传输问题。

建议与总结

由于本地搭建环境测试时,并没有涉及到运营商MSTP链路,且没有条件对应用系统进行测试导致割接遇到疑难问题而回退。

建议1:涉及到运营商对接时多和对方调测工程师沟通,让对方了解网络改造后运行的协议是否支持,是否需要细节上的参数调整。

建议2:协商客户,尽量搭建出和生产网一致的环境,测试后及时发现问题,解决问题!

END