我们知道两台设备要进行通信,必须的组网结构是源设备,源目的接入通信链路,节点交换设备(二层,三层),和相应的中继通信链路,目的设备接入链路,目的设备这些基本的网络要素。ping的过程,这些要素都可能影响ping的结果。
ping的过程和自身路由表,源和目的设备的接入通信链路二层广播通道是否通畅?访问目的ip的途径路径的节点交换设备路由设置,中继链路的状态,目的点的路由设置,对方设备的状态,目的设备防火墙是否阻止ping的请求消息通过相关等等因素相关。所以我们排查问题从这些因素去考虑排查。
为什么要用ping命令?是为了在局域网内验证两个节点间路由,数据的导通性,能相互ping通就代表前后向路由均可达,但这是充分条件,有的特殊情况下,ping不通,但业务的tcp或者udp消息依然是可达的。当网络出现故障的时候,可以用这个命令来预测故障和确定故障地点。
主要是icmp的错误和time out两种问题,icmp错误,我们可以根据打印消息的发出消息的ip是本机ip还是经过节点ip来确定是本机本机问题还是节点问题?
ping命令使用的是检测源和目的ip间导通性测试的icmp协议,属于三层网络ip层协议。源主机ping发出含一串数据的包(如123456789abcde之类)request消息,封装在二层上,对方收到后,把这串包原路反射送回来,源pc收到后,认为是对方可达。所以它涉及二层的mac地址和ip层的交互。当对方存在问题时(ip地址不存在,没有路由等),对方的ip或者经过的网络节点会返回icmp的差错消息给终端源ip。使用的端口和ip要根据节点的路由表进行确定,发起方根据返回结果来产生回显,若在ping的request消息发出,等待一段时间,win默认是5s,没有收到回复,发起方显示超时time out(linux环境默认定时器是1秒,这种情况没有任何显示)。