回icmp目标不可达(协议不可达)问题解决过程

30 篇文章 2 订阅
14 篇文章 1 订阅

      几年前处理过的一个问题,有客户反馈3g煤炭专网系统,一个新加基站,无法连接核心网,核心网网管上看基站是断开状态。要求给定位解决。

       已知新加基站的ip是18.250.0.199,核心网ip是18.250.0.9,核心网和基站用sctp协议的5050端口进行偶联,应用层协议在sctp层上封装。

       远程抓包过滤基站的ip,有如下显示:

发现基站一直在尝试建立偶联,反复进行。找个正常的偶联过程对比一下:

      发现正常的进入cookie验证阶段,通过后,互发心跳。而这个199基站在核心网init_ack发出后,没有进入cookie验证过程,而是发出icmp的协议不可达消息。抓一下基站日志看看有如下:

对比正常基站如下:

为啥199基站没有进入cookie验证态?发现该基站没有收到到核心网的init_ack消息的打印,而没有后面的进展。而且这个18.250.0.199回的消息是协议不可达,而基站明显是打开5050的sctp协议的端口的,怎么会回协议不可达呢?难道这个ip回的消息不是发出sctp的init的设备?环境里存在ip冲突?

怀疑要么是基站没有收到sctp的init_ack消息,要么是init_ack回复的不正确?

检查抓包里init_ack消息发向,核心网的init_ack发向了错误的mac地址,过程如下:

调整wireshark里的显示项,让显示源和目的mac地址:

 

发现基站发出init的源mac是00:0e:5e:18:9a:84 ,而核心网回的init_ack的地址却是Destination: 40:f2:e9:68:8c:70 。我司基站都是以00:0e:5e打头的,这个40:f2:e9打头的是什么设备?

改wireshark里的name revolution后,发向init_ack发给了一个ibm设备,而不是我们基站的raisecom设备

发现init消息和init_ack消息里的源和mac地址只有服务器发生调换,直连网络中,收发应该源和目的调换,但这个服务器里init_ack却发给了另一个ibm的设备。

这个ibm设备发出协议不可达的icmp消息,表示它没有开sctp协议。

 

 确定环境中有两个18.250.0.199,ip冲突了,过滤arp验证一下:arp  contains  12fa-00c7  || arp contains  12fa-0009。

发现环境中有两个设备回答了核心网发出arp广播消息,而错误ibm设备消息后到,覆盖了正确的arp缓存表,导致核心网应答init的init_ack发给了错误ibm设备。

这台核心网服务器处理arp缓存更新的机制是只处理自己arp请求发出后的应答,对下联设备发出的arp请求,无论单播还得多播都不处理。

  让现场修改ip地址,反馈 ibm设备不知道在哪里,就修改了基站的ip为其他ip后,问题解决。

总结:

     ip冲突导致故障,冲突后,错误的设备后发arp应答reply消息,导致arp缓存被更新,而sctp的偶联init_ack发给了错误的设备,错误设备没开sctp协议,发出icmp错误,目的不可达的协议不可达。导致基站一直在重发发出建链请求。

      当时不懂icmp错误消息的含义和产生条件,应该看到这个icmp的协议不可达就能判断出问题,ip冲突了,而花大量时间去查看基站的日志打印。

    

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值