Ping程序 ping

发送回显请求的ping程序为客户,被ping的主机为服务器。

ICMP回显请求和回显应答报文:

对于其他类型的ICMP查询报文,服务器必须响应标识符和序列号字段。另外,客户发送的选项数据必须回显,假设客户对这些信息都会感兴趣。 序列号从0开始,每发送一次新的回显请求就加1。ping程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。


IP首部中的记录路由选项的一般格式:

 - code是一个字节,指明IP选项的类型。RR选项中,值为“7”。

 - len是RR选项总字节长度,在这种情况下为39(尽管可以为RR选项设置比最大长度小的长度,但是ping程序总是提供39字节的选项字段,最多可以记录9个IP地址。由于IP首部中留给选项的空间有限,它一般情况都设置成最大长度)。

 - ptr称作指针字段。它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单, ptr的值分别为8,1 2,1 6,最大到3 6。当记录下9个IP地址后,ptr的值为40,表示清单已满。


IP首部中时间戳选项的一般格式:

 - 时间戳选项的代码为0x44。其他两个字段len和ptr与记录路由选项相同:选项的总长度(一般为36或40)和指向下一个可用空间的指针(5,9,1 3等)。

 - OF(4 bit)表示溢出字段, FL(4 bit)表示标志字段。

时间戳选项的操作根据标志字段来进行:
  • 0 : 只记录时间戳
  • 1 : 每台路由器都记录它的IP地址和时间戳。在选项列表中只有存放4对地址和时间戳的空间
  • 3 : 发送端对选项列表进行初始化,存放了4个IP地址和4个取值为0的时间戳值。只有当列表中的下一个IP地址与当前路由器地址相匹配时,才记录它的时间戳

时间戳的取值一般为自UTC午夜开始计的毫秒数,与ICMP时间戳请求和应答相类似。如果路由器不使用这种格式,它就可以插入任何它使用的时间表示格式,但是必须打开时间戳中的高位以表明为非标准值。


ping程序是对两个TCP/IP系统连通性进行测试的基本工具。它只利用ICMP回显请求和回显应答报文,而不用经过传输层(TCP/UDP)。ping服务器一般在内核中实现ICMP的功能。