7.2.1 LAN输出

最后更新于:2022-04-02 05:23:01

在局域网上运行ping程序的结果输出一般有如下格式: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-13_570de1eab9949.png) 当返回ICMP回显应答时,要打印出序列号和TTL,并计算往返时间(TTL位于IP首部中的生存时间字段。当前的BSD系统中的ping程序每次收到回显应答时都打印出收到的TTL—有些系统并不这样做。我们将在第8章中通过traceroute程序来介绍TTL的用法)。 从上面的输出中可以看出,回显应答是以发送的次序返回的(0,1,2等)。 ping程序通过在ICMP报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在ICMP报文中的时间值,即是往返时间。注意,在发送端bsdi上,往返时间的计算结果都为0 ms。这是因为程序使用的计时器分辨率低的原因。BSD/386版本0.9.4系统只能提供10 ms级的计时器(在附录B中有更详细的介绍)。在后面的章节中,当我们在具有较高分辨率计时器的系统上(Sun)查看tcpdump输出时会发现, ICMP回显请求和回显应答的时间差在4 ms以下。 输出的第一行包括目的主机的IP地址,尽管指定的是它的名字(svr4)。这说明名字已经经过解析器被转换成IP地址了。我们将在第14章介绍解析器和DNS。现在,我们发现,如果敲入ping命令,几秒钟过后会在第1行打印出IP地址,DNS就是利用这段时间来确定主机名所对应的IP地址。 本例中的tcpdump输出如图7-2所示。 从发送回显请求到收到回显应答,时间间隔始终为3.7 ms。还可以看到,回显请求大约每隔1秒钟发送一次。 通常,第1个往返时间值要比其他的大。这是由于目的端的硬件地址不在ARP高速缓存中 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-13_570de1ead5996.png) 的缘故。正如我们在第4章中看到的那样,在发送第一个回显请求之前要发送一个ARP请求并接收ARP应答,这需要花费几毫秒的时间。下面的例子说明了这一点: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-13_570de1eaeff81.png) 第1个RTT中多出的3 ms很可能就是因为发送ARP请求和接收ARP应答所花费的时间。 这个例子运行在sun主机上,它提供的是具有微秒级分辨率的计时器,但是ping程序只能打印出毫秒级的往返时间。在前面运行于BSD/386 0.9.4版上的例子中,打印出来的往返时间值为0 ms,这是因为计时器只能提供10 ms的误差。下面的例子是BSD/386 1.0版的输出,它提供的计时器也具有微秒级的分辨率,因此, ping程序的输出结果也具有较高的分辨率。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-13_570de1eb0fd5c.png)
';