tcp/ip(八)

下载
第8章Traceroute程序
8.1 引言
由Van Jacobson编写的Tr a c e r o u t e程序是一个能更深入探索T C P / I P协议的方便可用的工具。
尽管不能保证从源端发往目的端的两份连续的I P数据报具有相同的路由,但是大多数情况下
是这样的。Tr a c e r o u t e程序可以让我们看到I P数据报从一台主机传到另一台主机所经过的路由。
Tr a c e r o u t e程序还可以让我们使用I P源路由选项。
使用手册上说:“程序由Steve Deering提议,由Van Jacobson实现,并由许多其他人
根据C. Philip Wood, Tim Seaver 及Ken Adelman等人提出的令人信服的建议或补充意见
进行调试。”
8.2 Traceroute程序的操作
在7 . 3节中,我们描述了I P记录路由选项( R R)。为什么不使用这个选项而另外开发一个
新的应用程序?有三个方面的原因。首先,原先并不是所有的路由器都支持记录路由选项,
因此该选项在某些路径上不能使用( Tr a c e r o u t e程序不需要中间路由器具备任何特殊的或可选
的功能)。
其次,记录路由一般是单向的选项。发送端设置了该选项,那么接收端不得不从收到的I P
首部中提取出所有的信息,然后全部返回给发送端。在7 . 3节中,我们看到大多数P i n g服务器的
实现(内核中的I C M P回显应答功能)把接收到的R R清单返回,但是这样使得记录下来的I P地
址翻了一番(一来一回)。这样做会受到一些限制,这一点我们在下一段讨论( Tr a c e r o u t e程序
只需要目的端运行一个U D P模块—其他不需要任何特殊的服务器应用程序)。
最后一个原因也是最主要的原因是, I P首部中留给选项的空间有限,不能存放当前大多
数的路径。在I P首部选项字段中最多只能存放9个I P地址。在原先的A R PA N E T中这是足够的,
但是对现在来说是远远不够的。
Tr a c e r o u t e程序使用I C M P报文和I P首部中的T T L字段(生存周期)。T T L字段是由发送端
初始设置一个8 bit字段。推荐的初始值由分配数字R F C指定,当前值为6 4。较老版本的系统
经常初始化为1 5或3 2。我们从第7章中的一些p i n g程序例子中可以看出,发送I C M P回显应答
时经常把T T L设为最大值2 5 5。
每个处理数据报的路由器都需要把T T L的值减1或减去数据报在路由器中停留的秒数。由
于大多数的路由器转发数据报的时延都小于1秒钟,因此T T L最终成为一个跳站的计数器,所
经过的每个路由器都将其值减1。
RFC 1009 [Braden and Postel 1987]指出,如果路由器转发数据报的时延超过1秒,那
么它将把T T L值减去所消耗的时间(秒数)。但很少有路由器这么实现。新的路由器需求
文档RFC [Almquist 1993]为此指定它为可选择功能,允许把T T L看成一个跳站计数器。
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
T T L字段的目的是防止数据报在选路时无休止地在网络中流动。例如,当路由器瘫痪或
者两个路由器之间的连接丢失时,选路协议有时会去检测丢失的路由并一直进行下去。在这
段时间内,数据报可能在循环回路被终止。T T L字段就是在这些循环传递的数据报上加上一
个生存上限。
当路由器收到一份I P数据报,如果其T T L字段是0或1,则路由器不转发该数据报(接收到
这种数据报的目的主机可以将它交给应用程序,这是因为不需要转发该数据报。但是在通常
情况下,系统不应该接收T T L字段为0的数据报)。相反,路由器将该数据报丢弃,并给信源
机发一份I C M P“超时”信息。Tr a c e r o u t e程序的关键在于包含这份I C M P信息的I P报文的信源
地址是该路由器的I P地址。
我们现在可以猜想一下Tr a c e r o u t e程序的操作过程。它发送一份T T L字段为1的I P数据报给
目的主机。处理这份数据报的第一个路由器将T T L值减1,丢弃该数据报,并发回一份超时
I C M P报文。这样就得到了该路径中的第一个路由器的地址。然后Tr a c e r o u t e程序发送一份
T T L值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报
到达目的主机。但是目的主机哪怕接收到T T L值为1的I P数据报,也不会丢弃该数据报并产生
一份超时I C M P报文,这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经
到达目的主机了呢?
Tr a c e r o u t e程序发送一份U D P数据报给目的主机,但它选择一个不可能的值作为U D P端口
号(大于30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报
到达时,将使目的主机的U D P模块产生一份“端口不可达”错误(见6 . 5节)的I C M P报文。
这样,Tr a c e r o u t e程序所要做的就是区分接收到的I C M P报文是超时还是端口不可达,以判断
什么时候结束。
Tr a c e r o u t e程序必须可以为发送的数据报设置T T L字段。并非所有与T C P / I P接口的
程序都支持这项功能,同时并非所有的实现都支持这项能力,但目前大部分系统都支
持这项功能,并可以运行Tr a c e r o u t e程序。这个程序界面通常要求用户具有超级用户权
限,这意味着它可能需要特殊的权限以在你的主机上运行该程序。
8.3 局域网输出
现在已经做好运行Tr a c e r o u t e程序并观察其输出的准备了。我们将使用从s v r 4到s l i p,
经路由器b s d i的简单互联网(见内封面)。b s d i和s l i p之间是9600 b/s的S L I P链路。
输出的第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份数
72使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
据报的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字段为N + 1所打印出来的
时间减去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“超时”报文(见6 . 2节的图6 - 3),它们的I C M P报文中c o d e字段不同。
图8 - 2给出了这种I C M P差错报文的格式。
图8-2 ICMP超时报文
第8章Traceroute程序使用73 下载
类型代码(0或1) 检验和
未用(必须为0)
IP首部(包括选项)+原始IP数据报中数据的前8字节
8字节
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
我们所讨论的I C M P报文是在T T L值等于0时产生的,其c o d e字段为0。
主机在组装分片时可能发生超时,这时,它将发送一份“组装报文超时”的I C M P报文
(我们将在11 . 5节讨论分片和组装)。这种差错报文将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帧(2 . 4节)。但是与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 0
+ 8 + 20 + 8 + 2,即5 8字节。在数据速率为960 b/s的情况下,预计的RT T就是(42 + 58/960),
即104 ms。这个值与s v r 4上所估算出来的110 ms是吻合的。
图8 - 1中的源端口号( 4 2 8 0 4)看起来有些大。t r a c e r o u t e程序将其发送的U D P数据报
的源端口号设置为U n i x进程号与3 2 7 6 8之间的逻辑或值。对于在同一台主机上多次运行
t r a c e r o u t e程序的情况,每个进程都查看I C M P返回的U D P首部的源端口号,并且只处理那
些对自己发送应答的报文。
关于t r a c e r o u t e程序,还有一些必须指出的事项。首先,并不能保证现在的路由也是
将来所要采用的路由,甚至两份连续的I P数据报都可能采用不同的路由。如果在运行程序时,
路由发生改变,就会观察到这种变化,这是因为对于一个给定的T T L,如果其路由发生变化,
t r a c e r o u t e程序将打印出新的I P地址。
第二,不能保证I C M P报文的路由与t r a c e r o u t e程序发送的U D P数据报采用同一路由。
这表明所打印出来的往返时间可能并不能真正体现数据报发出和返回的时间差(如果U D P数
据报从信源到路由器的时间是1秒,而I C M P报文用另一条路由返回信源用了3秒时间,则打印
出来的往返时间是4秒)。
第三,返回的I C M P报文中的信源I P地址是U D P数据报到达的路由器接口的I P地址。这与
I P记录路由选项( 7 . 3节)不同,记录的I P地址指的是发送接口地址。由于每个定义的路由器
都有2个或更多的接口,因此,从A主机到B主机上运行t r a c e r o u t e程序和从B主机到A主机
上运行t r a c e r o u t e程序所得到的结果可能是不同的。事实上,如果我们从s l i p主机到
s v r 4上运行t r a c e r o u t e程序,其输出结果变成了:
这次打印出来的b s d i主机的I P地址是1 4 0 . 2 5 2 . 1 3 . 6 6,对应于S L I P接口;而上次的地址是
1 4 0 . 2 5 2 . 1 3 . 3 5,是以太网接口地址。由于t r a c e r o u t e程序同时也打印出与I P地址相关的主
机名,因而主机名也可能变化(在我们的例子中, b s d i上的两个接口都采用相同的名字)。
考虑图8 - 3的情况。它给出了两个局域网通过一个路由器相连的情况。两个路由器通过一
个点对点的链路相连。如果我们在左边L A N的一个主机上运行t r a c e r o u t e程序,那么它将
发现路由器的I P地址为i f 1和i f 3。但在另一种情况下,就会发现打印出来的I P地址为i f 4和i f 2。
i f 2和i f 3有着同样的网络号,而另两个接口则有着不同的网络号。
74使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
图8-3 t r a c e r o u t e 程序打印出的接口标识
最后,在广域网情况下,如果t r a c e r o u t e程序的输出是可读的域名形式,而不是I P地
址形式,那么会更好理解一些。但是由于t r a c e r o u t e程序接收到I C M P报文时,它所获得的
唯一信息就是I P地址,因此,在给定I P地址的情况下,它做一个“反向域名查看”工作来获
得域名。这就需要路由器或主机的管理员正确配置其反向域名查看功能(并非所有的情况下
都是如此)。我们将在1 4 . 5节描述如何使用D N S将一个I P地址转换成域名。
8.4 广域网输出
前面所给出的小互联网的输出例子对于查看协议运行过程来说是足够了,但对于像全球
互联网这样的大互联网来说,应用t r a c e r o u t e程序就需要一些更为实际的东西。
图8 - 4是从s u n主机到NIC (Network Information Center)的情况。
图8-4 从s u n 主机到n i c . d d n . m i l 的t r a c e r o u t e 程序
由于运行的这个例子包含文本,非D D N站点(如,非军方站点)的N I C已经从
n i c . d d n . m i l转移到r s . i n t e r n i c . n e t,即新的“InterNIC”。
一旦数据报离开t u c . n o a o . e d u网,它们就进入了t e l c o m . a r i z o n a . e d u网络。然后这些
数据报进入NASA Science Internet,n s n . n a s a . g o v。T T L字段为6和7的路由器位于JPL (Jet
Propulsion Laboratory)上。T T L字段为11所输出的s u r a . n e t网络位于Southeastern Universities
Research Association Network上。T T L字段为1 2的域名G S I是Government Systems, Inc., NIC的运营者。
T T L字段为6的第2个RT T(5 9 0)几乎是其他两个RT T值(2 3 4和2 6 2)的两倍。它表明I P
路由的动态变化。在发送主机和这个路由器之间发生了使该数据报速度变慢的事件。同样,
我们不能区分是发出的数据报还是返回的I C M P差错报文被拦截。
T T L字段为3的第1个RT T探测值(2 0 4)比T T L字段为2的第1个探测值( 2 3 3)值还小。由
第8章Traceroute程序使用75 下载
网络1
网络2
网络3
路由器1 路由器2
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
于每个打印出来的RT T值是从发送主机到路由器的总时间,因此这种情况是可能发生的。
图8 - 5的例子是从s u n主机到作者出版商之间的运行例子。
图8-5 从s u n . t u c . n o a o . e d u 主机到a w . c o m 的t r a c e r o u t e 程序
在这个例子中,数据报离开t e l c o m . a r i z o n a . e d u网络后就进行了地区性的网络
w e s t n e t . n e t ( T T L字段值为6和7 )。然后进行了由Advanced Network & Services 运营的
N S F N E T主干网, t 3 . a n s . n e t,(T 3是对于主干网采用的45 Mb/s电话线的一般缩写。)最后的网
络是a l t e r . n e t,即a w . c o m与互联网的连接点。
8.5 IP源站选路选项
通常I P路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器。应用程
序对此不进行控制,而且通常也并不关心路由。它采用类似Tr a c e r o u t e程序的工具来发现
实际的路由。
源站选路(source routing)的思想是由发送者指定路由。它可以采用以下两种形式:
• 严格的源路由选择。发送端指明I P数据报所必须采用的确切路由。如果一个路由器发现
源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路
由失败”的I C M P差错报文。
• 宽松的源站选路。发送端指明了一个数据报经过的I P地址清单,但是数据报在清单上指
明的任意两个地址之间可以通过其他路由器。
Tr a c e r o u t e程序提供了一个查看源站选路的方法,我们可以在选项中指明源站路由,然后
检查其运行情况。
一些公开的Tr a c e r o u t e程序源代码包中包含指明宽松的源站选路的补丁。但是在标
准版中通常并不包含此项。这些补丁的解释是“ Van Jacobson的原始Tr a c e r o u t e程序
76使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
(1 9 8 8年春)支持该特性,但后来因为有人提出会使网关崩溃而将此功能去除。”对于
本章中所给出的例子,作者将这些补丁安装上去,并将它们设置成允许宽松的源站选
路和严格的源站选路。
图8 - 6给出了源站路由选项的格式。
图8-6 IP首部源站路由选项的通用格式
这个格式与我们在图7 - 3中所示的记录路由选项格式基本一致。不同之处是,对于源站选
路,我们必须在发送I P数据报前填充I P地址清单;而对于记录路由选项,我们需要为I P地址清
单分配并清空一些空间,并让路由器填充该清单中的各项。同时,对于源站选路,只要为所
需要的I P地址数分配空间并进行初始化,通常其数量小于9。而对于记录路由选项来说,必须
尽可能地分配空间,以达到9个地址。
对于宽松的源站选路来说, c o d e字段的值是0 x 8 3;而对于严格的源站选路,其值为0 x 8 9。
l e n和p t r字段与7 . 3节中所描述的一样。
源站路由选项的实际称呼为“源站及记录路由”(对于宽松的源站选路和严格的源站选路,
分别用L S R R和S S R R表示),这是因为在数据报沿路由发送过程中,对I P地址清单进行了更新。
下面是其运行过程:
• 发送主机从应用程序接收源站路由清单,将第1个表项去掉(它是数据报的最终目的地
址),将剩余的项移到1个项中(如图8 - 6所示),并将原来的目的地址作为清单的最后一
项。指针仍然指向清单的第1项(即,指针的值为4)。
• 每个处理数据报的路由器检查其是否为数据报的最终地址。如果不是,则正常转发数
据报(在这种情况下,必须指明宽松源站选路,否则就不能接收到该数据报)。
• 如果该路由器是最终目的,且指针不大于路径的长度,那么( 1)由p t r所指定的清单中的
下一个地址就是数据报的最终目的地址;( 2)由外出接口(outgoing interface)相对应的I P
地址取代刚才使用的源地址;( 3)指针加4。
可以用下面这个例子很好地解释上述过程。在图8 - 7中,我们假设主机S上的发送应用程
序发送一份数据报给D,指定源路由为R1,R2和R3。
图8-7 IP源路由示例
在上图中,#表示指针字段,其值分别是4、8、1 2和1 6。长度字段恒为1 5(三个I P地址加
上三个字节首部)。可以看出,每一跳I P数据报中的目的地址都发生改变。
当一个应用程序接收到由信源指定路由的数据时,在发送应答时,应该读出接收到的路
由值,并提供反向路由。
第8章Traceroute程序使用77 下载
39字节
4字节4字节4字节4字节
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
Host Requirements RFC指明,T C P客户必须能指明源站选路,同时, T C P服务器
必须能够接收源站选路,并且对于该T C P连接的所有报文段都能采用反向路由。如果
T C P服务器下面接收到一个不同的源站选路,那么新的源站路由将取代旧的源站路
由。
8.5.1 宽松的源站选路的t r a c e r o u t e程序示例
使用t r a c e r o u t e程序的- g选项,可以为宽松的源站选路指明一些中间路由器。采用该
选项可以最多指定8个中间路由器(其个数是8而不是9的原因是,所使用的编程接口要求最后
的表目是目的主机)。
在图8 - 4中,去往N I C,即n i c . d d n . m i l的路由经过NASA Science Internet。在图8 - 8中,
我们通过指定路由器e n s s 1 4 2 . U T . w e s t n e t . n e t (192.31.39.21) 作为中间路由器来强制数
据报通过N S F N E T:
图8-8 采用宽松源站选路通过NSFNET到达n i c . d d n . m i l 的t r a c e r o u t e 程序
在这种情况下,看起来路径中共有1 6跳,其平均RT T大约是350 ms。而图8 - 4的通常选路
则只有1 3跳,其平均RT T约为322 ms。默认路径看起来更好一些(在建立路径时,还需要考
虑其他的一些因素。其中一些必须考虑的因素是所包含网络的组织及政治因素)。
前面我们说看起来有1 6跳,这是因为将其输出结果与前面的通过N S F N E T(图8 - 5)的示
例比较,发现在本例采用宽松源路由,选择了3个路由器(这可能是因为路由器对源站选路数
据报产生I C M P 超时差错报文上存在一些差错)。在n e t b 和b u t c h 路由器之间的
g a t e w a y. t u c . n o a o . e d u路由器丢失了,同时,位于G a b b y和e n s s 1 4 2 . U T. w e s t . n e t之间的
We s t g a t e . Te l c o m . A r i z o n a . e d u和u u - u a . A Z . w e s t n e t . n e t两个路由器也丢失了。在这些丢失的路由
器上可能发生了与接收到宽松的源站选路选项数据报有关的程序问题。实际上,当采用
N S F N E T时,信源和N I C之间的路径有1 9跳。本章习题8 . 5继续对这些丢失路由器进行讨论。
同时本例也指出了另一个问题。在命令行,我们必须指定路由器e n s s 1 4 2 . U T. w e s t n e t . n e t的
点分十进制I P地址,而不能以其域名代替。这是因为,反向域名解析( 1 4 . 5节中描述的通过I P
78使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
地址返回域名)将域名与I P地址相关联,但是前向解析(即给出域名返回I P地址)则无法做
到。在D N S中,前向映射和反向映射是两个独立的文件,而并非所有的管理者都同时拥有这
两个文件。因此,在一个方向是工作正常而另一个方向却失败的情况并不少见。
还有一种以前没有碰到过的情况是在T T L字段为8的情况下,对于第一个RT T,打印一个
星号。这表明,发生超时,在5秒内未收到本次探查的应答信号。
将本图与图8 - 4相比较,还可以得出一个结论,即路由器n s n - F I X - p e . s u r a . n e t同时
与N S F N E T和NASA Science Internet相连。
8.5.2 严格的源站选路的t r a c e r o u t e程序示例
在作者的t r a c e r o u t e程序版本中,- G选项与前面所描述的- g选项是完全一样的,不
过此时是严格的源站选路而不是宽松的源站选路。我们可以采用这个选项来观察在指明无效
的严格的源站选路时其结果会是什么样的。从图8 - 5可以看出来,从作者的子网发往N S F N E T
的数据报的正常路由器顺序是n e t b,g a t e w a y,b u t c h和g a b b y(为了便于查看,后面所
有的输出结果中,均省略了域名后缀. t u c . n o a o . e d u和. t e l c o m . a r i z o n a . e d u)。我们
指定了一个严格源路由,使其试图将数据报从g a t e w a y直接发送到g a b b y,而省略了b u t c h。
我们可以猜测到其结果会是失败的,正如图8 - 9所给出的结果。
图8-9 采用严格源站路由失败的traceroute程序
这里的关键是在于T T L字段为3的输出行中,RT T后面的! S。这表明t r a c e r o u t e程序接
收到I C M P“源站路由失败”的差错报文:即图6 - 3中t y p e字段为3,而c o d e字段为5。T T L字段
为3的第二个RT T位置的星号表示未收到这次探查的应答信号。这与我们所猜想的一样,
g a t e w a y不可能直接发送数据报给g a b b y,这是因为它们之间没有直接的连接。
T T L字段为2和3的结果都来自于g a t e w a y,对于T T L字段为2的应答来自g a t e w a y,是因
为g a t e w a y接收到T T L字段为1的数据报。在它查看到(无效的)严格的源站选路之前,就发
现T T L已过期,因此发送回I C M P超时报文。T T L字段等于3的行,在进入g a t e w a y时其T T L
字段为2,因此,它查看严格的源站选路,发现它是无效的,因此发送回I C M P源站选路失败
的差错报文。
图8 - 1 0给出了与本例相对应的t c p d u m p输出结果。该输出结果是在s u n和n e t b之间的
S L I P链路上遇到的。我们必须在t c p d u m p中指定- v选项以显示出源站路由信息。这样,会
输出一些像数据报I D这样我们并不需要的结果,我们在给出结果中将这些不需要的结果删除
掉。同样,用S S R R表示“严格的源站及记录路由”。
首先注意到, s u n所发送的每个U D P数据报的目的地址都是n e t b,而不是目的主机
(w e s t g a t e)。这一点可以用图8 - 7的例子来解释。类似地,- G选项所指定的另外两个路由器
(g a t e w a y和g a b b y)以及最终目(w e s t g a t e)成为第一跳的S S R R选项。
从这个输出结果中,还可以看出, t r a c e r o u t e程序所采用的定时时间(第1 5行和1 6行
第8章Traceroute程序使用79 下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
之间的时间差)是5秒。
图8-10 失败的严格源站选路t r a c e r o u t e 程序的t c p d u m p 输出结果
8.5.3 宽松的源站选路t r a c e r o u t e程序的往返路由
我们在前面已经说过,从A到B的路径并不一定与从B到A的路径完全一样。除非同时在两
个系统中登录并在每个终端上运行t r a c e r o u t e程序,否则很难发现两条路径是否不同。但
是,采用宽松的源站选路,就可以决定两个方向上的路径。
这里的窍门就在于指定一个宽松的源站路由,该路由的目的端和宽松路径一样,但发送端为
目的主机。例如,在s u n主机上,我们可以查看到发往以及来自b r u n o . c s . c o l o r a d o . e d u的
结果如图8 - 11所示。
发出路径(T T L字段为1 ~ 11)的结果与返回路径( T T L字段为11 ~ 2 1)不同,这很好地说
明了在Internet 上,选路可能是不对称的。
该输出同时还说明了我们在图8 - 3中所讨论的问题。比较T T L字段为2和1 9的输出结果:它
们都是路由器g a t e w a y . t u c . n o a o . e d u,但两个I P地址却是不同的。由于t r a c e r o u t e程
序以进入接口作为其标识,而我们从两条不同的方向经过该路由器,一条是发出路径( T T L
字段为2),另一条是返回路径( T T L字段为1 9),因此可以猜想到这个结果。通过比较T T L字
段为3和1 8、4和1 7的结果,可以看到同样的结果。
80使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
图8-11 显示非对称路径的t r a c e r o u t e 程序
8.6 小结
在一个T C P / I P网络中, t r a c e r o u t e程序是不可缺少的工具。其操作很简单:开始时发
送一个T T L字段为1的U D P数据报,然后将T T L字段每次加1,以确定路径中的每个路由器。
每个路由器在丢弃U D P数据报时都返回一个I C M P超时报文2,而最终目的主机则产生一个
I C M P端口不可达的报文。
我们给出了在L A N和WA N上运行t r a c e r o u t e程序的例子,并用它来考察I P源站选路。
我们用宽松的源站选路来检测发往目的主机的路由是否与从目的主机返回的路由一样。
习题
8.1 当I P将接收到的T T L字段减1,发现它为0时,将会发生什么结果?
8.2 t r a c e r o u t e程序是如何计算RT T的?将这种计算RT T的方法与p i n g相比较。
8.3 (本习题与下一道习题是基于开发t r a c e r o u t e程序过程中遇到的实际问题,它们来自
于t r a c e r o u t e程序源代码注释)。假设源主机和目的主机之间有三个路由器( R 1、R 2
和R 3),而中间的路由器( R 2)在进入T T L字段为1时,将T T L字段减1,但却错误地将该
I P数据报发往下一个路由器。请描述会发生什么结果。在运行t r a c e r o u t e程序时会看
到什么样的现象?
8.4 同样,假设源主机和目的主机之间有三个路由器。由于目的主机上存在错误,因此,它
总是将进入T T L值作为外出I C M P报文的T T L值。请描述这将发生什么结果,你会看到什
么现象。
第8章Traceroute程序使用81 下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
8.5 在图8 - 8运行例子中,我们可以在s u n和n e t b之间的S L I P链路上运行t c p d u m p程序。如
果指定- v选项,就可以看到返回I C M P报文的T T L值。这样,我们可以看到进入n e t b、
b u t c h、G a b b y和e n s s 1 4 2 . U T . w e s t n e t . n e t的T T L值分别为2 5 5、2 5 3、2 5 2和2 4 9。
这是否为我们判断是否存在丢失路由器提供了额外的信息?
8.6 S u n O S和S V R 4都提供了带- l选项的p i n g版本,以提供松源选路。手册上说明,该选项
可以与- R选项(指定记录路由选项)一起使用。如果已经进入到这些系统中,请尝试同
时用这两个选项。其结果是什么?如果采用t c p d u m p来观测数据报,请描述其过程。
8.7 比较p i n g和t r a c e r o u t e程序在处理同一台主机上客户的多个实例的不同点。
8.8 比较p i n g和t r a c e r o u t e程序在计算往返时间上的不同点。
8.9 我们已经说过, t r a c e r o u t e程序选取开始U D P目的主机端口号为3 3 4 5 3,每发送一个
数据报将此数加1。在1 . 9节中,我们说过暂时端口号通常是1 0 2 4 ~ 5 0 0 0之间的值,因此
t r a c e r o u t e程序的目的主机端口号不可能是目的主机上所使用的端口号。在S o l a r i s 2 . 2
系统中的情况也是如此吗?(提示:查看E . 4节)
8.10 RFC 1393 [Malkin 1993b]提出了另一种判断到目的主机路径的方法。请问其优缺点是什
么?
82使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值