来源:帮考网
网络工程师都会用到ping,它是检查路由问题的有效办法。但也常听工程师抱怨:不可能,怎么会不通呢?
这样的困惑一般发生在自认为路由设置正确的时候。举几个笔者遇到的问题,欢迎大家补充。
最简单的三种情况:
1.太心急。即网线刚插到交换机上就想ping通网关,忽略了生成树的收敛时间。当然,较新的交换机都支持快速生成树,或者有的管理员干脆把用户端口(access port)的生成树协议关掉,问题就解决了。
2.访问控制。不管中间跨越了多少跳,只要有节点(包括端节点)对icmp进行了过滤,ping不通是正常的。最常见的就是防火墙的行为。
3.某些路由器端口是不允许用户ping的。
还遇到过这样的情形,更为隐蔽。
1.网络因设备间的时延太大,造成icmp echo报文无法在缺省时间(2秒)内收到。时延的原因有若干,比如线路(卫星网时延上下星为540毫秒),路由器处理时延,或路由设计不合理造成迂回路径。使用扩展ping,增加timed out时间,可ping通的话就属路由时延太大问题。
2.引入nat的场合会造成单向ping通。nat可以起到隐蔽内部地址的作用,当由内ping外时,可以ping通是因为nat表的映射关系存在,当由外发起ping内网主机时,就无从查找边界路由器的nat表项了。
3.多路由负载均衡场合。比如ping远端目的主机,成功的reply和timed out交错出现,结果发现在网关路由器上存在两条到目的网段的路由,两条路由权重相等,但经查一条路由存在问题。
4.ip地址分配不连续。地址规划出现问题象是在网络中埋了地雷,地址重叠或掩码划分不连续都可能在ping时出现问题。比如一个极端情况,a、b两台主机,经过多跳相连,a能ping通b的网关,而且b的网关设置正确,但a、b就是ping不通。经查,在b的网卡上还设有第二个地址,并且这个地址与a所在的网段重叠。
5.指定源地址的扩展ping。登陆到路由器上,ping远程主机,当icmp echo request从串行广域网接口发出去的时候,路由器会指定某个ip地址作为源ip,这个ip地址可能不是此接口的ip或这个接口根本没有ip地址。而某个下游路由器可能并没有到这个ip网段的路由,导致不能ping通。可以采用扩展ping,指定好源ip地址。
当主机网关和中间路由的配置认为正确时,出现ping问题也是很普遍的现象。此时应该忘掉“不可能”几个字,把ping的扩展参数和反馈信息、traceroute、路由器debug、以及端口镜像和sniffer等工具结合起来进行分析。
比如,当a、b两台主机经过多跳路由器相连时,二者网关设置正确,在a上可以ping通b,但在b上不能ping通a。可以通过在交换机做镜像,并用sniffer抓包,来找出icmp 报文终止于何处,报文内容是什么,就可以发现icmp报文中的源ip地址并非预期的那样,此时很容易想象出可能是路由器的nat功能使然,这样就能够逐步地发现一些被忽视的问题。而ping不通时的反馈信息是“destination_net_unreachable”还是“timed out”也是有区别的 |