《TCP/IP协议详解 卷1》--- Ping程序

Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。不用经过传输层(TCP/UDP)。
一般来说,如果不能Ping到某台主机,那么就不能Telnet或者FTP到那台主机。反过来,如果不能Telnet到某台主机,那么通常可以用Ping程序来确定问题出在哪里。Ping程序还能测出到这台主机的往返时间,以表明该主机离我们有“多远”。

Ping程序
发送回显请求的ping程序为客户,而称被ping的主机为服务器。大多数的TCP/IP实现都在内核中直接支持Ping服务器 — 这种服务器不是一个用户进程。
这里写图片描述
Unix系统在实现ping程序时是把ICMP报文中的标识符字段置成发送进程的ID号。这样即使在同一台主机上同时运行了多个ping程序实例,ping程序也可以识别出返回的信息。
序列号从0开始,每发送一次新的回显请求就加1。ping程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。

WAN输出
这里写图片描述
当返回ICMP回显应答时,要打印出序列号和TTL,并计算往返时间( TTL位于IP首部中的生存时间字段)。

tcpdump输出
这里写图片描述

IP记录路由选项
ping程序提供了查看IP记录路由(RR)选项的机会。通过-R选项设置,这样,每个处理该数据报的路由器都把它的
IP地址放入选项字段中。当数据报到达目的端时, IP地址清单应该复制到 ICMP回显应答中,这样返回途中所经过的路由器地址也被加入清单中。当ping程序收到回显应答时,它就打印出这份IP地址清单。
但IP首部中只有有限的空间来存放IP地址。IP首部中的首部长度字段只有 4 bit,因此整个IP首部最长只能包括15个32 bit长的字(即60个字节)。由于IP首部固定长度为 20字节,RR选项用去3个字节,这样只剩下37个字节( 6 0- 2 0- 3)来存放IP地址清单,也就是说只能存放 9个IP地址。
这里写图片描述
code是一个字节,指明IP选项的类型。对于RR选项来说,它的值为7。

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

ptr称作指针字段,指向存放下一个IP地址的位置。最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,ptr的值分别为8,12,16,最大到36。当记录下9个IP地址后,ptr的值为4 0,表示清单已满。

RFC 791 [Postel 1981a]指定路由器记录出口IP地址。

在终端1输入ping -R www.bupt.edu.cn
但没有看到回应,不知什么原因。

在终端2用tcpdump -v 查看分组交换,也只看到了发送端的RR。
这里写图片描述

IP时间戳选项
IP时间戳选项与记录路由选项类似。
这里写图片描述
时间戳选项的代码为0x44。
len和ptr与记录路由选项相同。
接下来的两个字段是4 bit的值:OF表示溢出字段,FL表示标志字段。时间戳选项的操作根据标志字段来进行。
这里写图片描述
如果路由器由于没有空间而不能增加时间戳选项,那么它将增加溢出字段的值。
时间戳的取值一般为自UTC午夜开始计的毫秒数,与 ICMP时间戳请求和应答相类似。
时间戳在实际使用时有所限制。

猜你喜欢

转载自blog.csdn.net/u012319493/article/details/80870039