traceroute局域网输出


现在已经做好运行Traceroute程序并观察其输出的预备了 。我们将使用从svr4到slip,经路由器bsdi的简单互联网 。bsdi和slip之间是9600b/s的SLIP链路 。
输出的第1个无标号行给出了目的主机名和其I P地址,指出t r a c e r o u t e程序最大的T T L字段值为3 0 。4 0字节的数据报包含2 0字节I P首部、8字节的U D P首部和1 2字节的用户数据(1 2字节的用户数据包含每发一个数据报就加1的序列号,送出T T L的副本以及发送数据报的时间) 。
输出的后面两行以T T L开始,接下来是主机或路由器名以及其I P地址 。对于每个T T L值,发送3份数据报 。每接收到一份I C M P报文,就计算并打印出往返时间 。假如在5秒种内仍未收到3 份数据报的任意一份的响应,则打印一个星号,并发送下一份数据报 。在上述输出结果中,T T L字段为1的前3份数据报的I C M P报文分别在20 ms、10 ms和10 ms收到 。T T L字段为2的3份数据报的I C M P报文则在120 ms后收到 。由于T T L字段为2到达最终目的主机,因此程序就此停止 。
往返时间是由发送主机的t r a c e r o u t e程序计算的 。它是指从t r a c e r o u t e程序到该路由器的总往返时间 。假如我们对每段路径的时间感爱好,可以用T T L字段为N1所打印出来的时间减去T T L字段为N的时间 。
图8 - 1给出了t c p d u m p的运行输出结果 。正如我们所预想的那样,第1个发往b s d i的探测数据报的往返时间是20 ms 、而后面两个数据报往返时间是10 ms 的原因是发生了一次A R P交换 。t c p d u m p结果证实了确实是这种情况 。
图8-1 从svr4到slip的traceroute程序示例的tcpdump输出结果
目的主机U D P端口号最开始设置为3 3 4 3 5,且每发送一个数据报加1 。可以通过命令行选项来改变开始的端口号 。U D P数据报包含1 2个字节的用户数据,我们在前面t r a c e r o u t e程序输出的4 0字节数据报中已经对其进行了描述 。
后面t c p d u m p打印出了T T L字段为1的I P数据报的注释[ttl 1] 。当T T L值为0或1时,t c p d u m p打印出这条信息,以提示我们数据报中有些不太平常之处 。在这里可以预见到T T L 值为1;而在其他一些应用程序中,它可以警告我们数据报可能无法到达其最终目的主机 。我们不可能看到路由器传送一个T T L值为0的数据报,除非发出该数据报的该路由器已经崩溃 。
因为b s d i路由器将T T L值减到0,因此我们预计它将发回“传送超时”的I C M P报文 。即使这份被丢弃的I P报文发送往s l i p,路由器也会发回I C M P报文 。有两种不同的I C M P“超时”报文,它们的I C M P报文中c o d e字段不同 。图8 - 2给出了这种I C M P差错报文的格式 。
图8-2 ICMP超时报文
我们所讨论的I C M P报文是在T T L值等于0时产生的,其c o d e字段为0 。主机在组装分片时可能发生超时,这时,它将发送一份“组装报文超时”的I C M P报文 。这种差错报文将c o d e字段置1 。图8 - 1的第9 ~ 1 4行对应于T T L为2的3份数据报 。这3份报文到达最终目的主机,并产生一份I C M P端口不可达报文 。计算出S L I P链路的往返时间是很有意义的,就象我们在7 . 2节中所举的P i n g例子,将链路值设置为1 2 0 0 b / s一样 。发送出的U D P数据报共4 2个字节,包括1 2字节的数据、8字节U D P首部、2 0字节的I P首部以及(至少)2字节的S L I P帧 。但是与P i n g不一样的是,返回的数据报大小是变化的 。从图6 - 9可以看出,返回的I C M P报文包含发生差错的数据报的I P首部以及紧随该I P首部的8字节数据(在t r a c e r o u t e程序中,即U D P首部) 。这样,总共就是2 082082,即5 8字节 。在数据速率为960 b/s的情况下,预计的RT T 就是(4258/960),即104 ms 。这个值与s v r 4上所估算出来的110 ms 是吻合的 。

推荐阅读