ping 1970-01-01 00:00

原理

ping 是用来测试数据包能否通过ip协议到达指定主机的网络工具。原理是向目的主机发出一个ICMP echo请求,并等待响应数据包。

值得注意是:发送端发送的选项数据,服务端必须回显。

ICMP echo 报文格式:

输出解读

看一个ping结果的输出截图:

报文大小

图片中的64bytes是ICMP报文的大小,不包括IP头部。可以通过-s 选项来指定选项数据大小。

icmp_seq

ICMP报文序号。序号从0开始,每发送一个请求,序号加1。

ttl

来源于ICMP应答报文的IP头部的ttl字段,可以用来计算报文经过了多少个路由器。

根据图片可以看出应答报文经过了64-56=8个路由器中继。

time

报文的往返时间。ping程序通过在ICMP报文数据中存放发送请求的时间来计算往返时间。当应答报文返回时,用当前时间减去存放在报文的时间值,就是往返时间。

如果要在ping结果中显示time统计,ICMP报文选项数据部分至少需要多大?

答案是16。因为struct timeval的长度是16,所以报文选项数据部分至少有16个bytes才能放得下timeval结构图。

可以看出15个bytes是没有时间统计输出的。