修改IP后TCP socket连接还能继续使用么?

举报
fengfeng 发表于 2017/03/07 15:46:12 2017/03/07
【摘要】 最近处理一个CME下发MML命令修改网元IP的问题,最终表现是在网管上修改IP之后,过了大概15分钟网元才使用新IP连接正常。最诡异的问题就是网元修改IP了,还使用老IP和网管之间的TCP连接发数据。

1      背景

最近处理一个CME下发MML命令修改网元IP的问题,最终表现是在网管上修改IP之后,过了大概15分钟网元才使用新IP连接正常。最诡异的问题就是网元修改IP了,还使用老IP和网管之间的TCP连接发数据。

2      问题处理过程

2.1      整个问题处理的时间顺序如下:

这个流程最诡异的流程是第5~7步,老IP已经不不在了,那么TCP连接有没有失效,还能不能发数据?

2.2      过程分析

1.         网管上修改网元IP后,网管使用新IP连接网元,连接过程中下发设置公英制命令“NEG OPT“命令给网元,网元返回失败,导致连接终止。直到15分钟后,网元才返回RETCODE0

12-1 0:12:47 modify_ne+2823|31291|31670|OLD IP=100.92.5.25 New IP=100.92.5.26                            //修改网元的IP

12-1 0:12:47 set_ne_connect_break+2353|31291|31670|OID=3221287416,state change to break

12-1 0:12:48 set_login_err_code+5406|31291|31645|OID=3221287416 setErrCode Err=855703779

12-1 0:12:48 analyse_ret_mml+986|31291|31645|OID=3221287416 name=RETCODE value=855703779                         //网元返回的错误码855703779

12-1 0:12:48 send_ne_status_change+3357|31291|31645|STATUS change medIndex=0 CTLMEDFD=1948 OID=3221287416 linkID=0 status=2 reason=26:855703779 port=6007 want=79 send=79

2.         网元侧分析是由于网管未下发END BATCHFILEESN命令,网元一直处于批命令执行状态,所以“NEG OPT“命令执行才报错。15分钟超时后可以正常处理命令。


3.   分析Med日志,发现只收到过网元上报70%的进度,后面的进度和执行成功的命令网管均未收到。根据之前的机制,CME只会在收到进度100%的时候下发 END BATCHFILEESN命令。由于未收到网元100%进度报文,因此CME也不会下发END 命令。

I044:12-1 00:11:05.173(504|13909)Med.Cm.Bulk: NE=760 ProgressHandler::handlePdu progress: 70

I256:12-1 00:11:05.173(504|8473)timer: task runner:ne=NE=760, id=41295, name=BulkCM_ReportTaskRun_MML

I088:12-1 00:11:05.174(504|13909)MED_SWM: <<SwmCommand-NEProgressHandler>> display the report  m_strReportType===激活批命令 m_strNeFDN===NE=760 m_strResponse=== m_strMML===0 m_iProgress===70 m_iStatus===0 m_iSessionID===77613 m_strDetailRsp===

4.   这就引入了开始的问题,网元老IP从网元上删掉后,网管使用新IP连接网元这段时间内。原来网管和网元老IP已经建立的TCP连接还有效么?还能正常进行通信么?由于网管和网元两侧对这种情况的意见有较大的分歧,于是在家里进行了类似的复现。

3      实验室复现

1.   构造了一个客户端和一个服务器程序,客户端(11.1.1.1)模拟网管,服务器端(11.1.1.2)模拟网元。在第13帧和第14帧修改服务器端IP11.1.1.3。然后通过服务器端给客户端发数据。

2. 从调试信息看,这种情况下,客户端可以正常收到服务器端的报文,并且正常发出了ACK报文,但是从上面的抓包信息看,服务器端一直未收到ACK报文,一直在发重传报文。

小结:修改IP后,老的TCP连接还能正常发出数据,但是无法接受到数据,老IP删掉后, IP地址在网络已经不存在了,从客户端发出来的数据无法到达目标地址,在传输过程中丢弃。

4      结论

网元修改IP地址的流程存在缺陷,IP修改后,之前的TCP socket连接出现类似单工通信的情况,TCP无法正常工作。需要联系两边的SE从根本上修改目前的机制。

作者 |刘明涛

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200