ping命令是用来完成对网络连通性的检测

ping命令
ping命令探测与新浪网的网络连通性

我们可以看到,每次显示都是按照sequence***排序显示的,一并显示的,也包括TTL(time to live),反映了两个IP地址之间传输的时间。最后还显示了ping命令的统计信息 ,如最小时间、平均时间等等。

ping命令原理

ping命令是一种基于ICMP的协议而开发的,ICMP又是一种基于IP协议的控制协议,翻译为网际控制协议。其报文格式如下图所示:

ping命令
ICMP报文格式

ICMP在IP报文后加入了新的内容,这些内容包括:

  • 类型:即ICMP的类型,其中ping的请求类型为0,应答为8。
  • 代码:进一步划分ICMP的类型,用来查找产生错误的原因。
  • 校验和:用于检查错误的数据。
  • 标识符:通过标识符来确认是谁发送的控制协议,可以是进程ID。
  • ***:唯一确定的一个报文,前面ping名字执行后显示的icmp_seq就是这个值。

总结

当我们发起ping命令时,ping程序实际上会组装成如上图所示的一个IP报文。报文的目的地址为ping的目标地址,源地址就是发送ping命令时的主机地址,同时按照ICMP报文格式填上数据,在可选数据上可以填上发送时的时间戳。

IP报文通过ARP协议,源地址和目的地址被翻译成MAC地址,经过数据链路层后,报文被传输出去。当报文到达目的地址之后,目的地址所在的主机也按照ICMP协议进行应答。之所以叫做协议,是因为双方都会遵守这个报文格式,并且也会按照格式进行发送-应答。

应答数据到达源地址之后,ping命令可以通过再次解析ICMP报文,对比***,计算时间戳等来完成每个发送-应答的显示,最终显示格式就像文章最开头的那样。

相关文章: