ping就是发送ICMP回显请求并等待回显应答,报文如下图:

ping在LAN的输出:

当返回I C M P回显应答时,要打印出序列号和T T L,并计算往返时间,p i n g程序通过在I C M P报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在I C M P报文中的时间值,即是往返时间。上图往返时间都为0 ms,因为计数器的精度低。

ping在WAN输出与LAN不同的是会丢包,产生重复和失序的包,且往返时间起伏较大。

 


ping提供了查看IP记录路由(RR)选项.每个处理该数据报的路由器都把它的IP地址放入选项字段中。当数据报到达目的端时,I P地址清单应该复制到ICMP回显应答中,这样返回途中所经过的路由器地址也被加入清单中。当ping程序收到回显应答时,它就打印出这份I P地址清单。

但由于IP首部长度有限,因此至多只能存放9个ip地址:

R R选项的格式如下图:

注意!上图的总长度不是30字节,是39字节!即4x9+3=39。

code是指明IP选项的类型(RR为7)。

len是RR选项总字节长度(39)。

ptr是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个I P地址存入清单, ptr的值分别为8,1 2,1 6,最大到36,当记录下9个I P地址后,p t r的值为4 0,表示清单已满。

 


IP时间戳选项与RR选项类似,格式如下图:

 

时间戳选项的code为0x44,len一般为36或40,ptr为5,9,13等。

如果路由器由于没有空间而不能增加时间戳选项,那么它将增加溢出字段的值。

 

接下来的两个字段是4bit的值:OF表示溢出字段, FL表示标志字段。时间戳选项的操作根据标志字段来进行,如下图: