7.2、Ping程序
大多数的TCP/IP实现都在内核中直接支持Ping服务器——这种服务器不是一个用户进程。
ICMP回显请求和回显应答报文如图:
7.3、IP记录路由选项
最大的问题是IP首部中只有有限的空间来存放IP地址。IP首部中的首部长度字段只有4 bit,因此整个IP首部最长只能包括15个32 bit的字(即60个字节)。由于IP首部固定长度为20字节,RR选项用去3个字节,这样只剩下37(60-20-3)个字节来存放IP地址清单,也就是说只能存放9个IP地址。
IP数据报中的RR选项的一般格式如图:
code是一个字节,指明IP选项的类型。对于RR选项来说,它的值为7.
len是RR选项总字节长度,在这种情况下为39(尽管可以为RR选项社会比最大长度小的长度,但是ping程序总是提供39字节的选项字段,最多可以记录9个IP地址)。
ptr称作指针字段。它是一个基于1的指针,指向存放下一个IP地址的位置。
RFC指定路由器记录出口IP地址。
当原始主机(运行ping程序的主机)收到带有RR选项的ICMP回显应答时,我们也要把它的入口IP地址放入清单中。
例子:
如果在IP首部中的选项字段由多个选项,在开始下一个选项之前必须填入空白字符,另外还可以用一个值为1的特殊字符NOP。
7.4、IP时间戳选项
时间戳选项的代码为0x44.其他两个字段len和ptr与记录路由选项相同:选项的总长度(一般为36或40)和指向下一个可用空间的指针。
接下来的两个字段是4 bit的值:OF表示溢出字段,FL表示标志字段。时间戳选项的操作根据标志字段来进行。
如果路由器由于没有空间而不能增加时间戳选项,那么它讲增加溢出字段的值。
时间戳的取值一般为自UTC午夜开始计的毫秒数,与ICMP时间戳请求和应答相类似。如果路由器不使用这种格式,它就可以插入任何它使用的时间表示格式,但是必须打开时间戳中的高位以表明为非标准值。