分享
 
 
 

使用IP选项实现Traceroute程序

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

1.现今的Traceroute

现在的traceroute的实现是这样的:主机先发出一个TTL(TimeToLive,生存时间)为1的数据包。接着数据包经过第一跳之后到达一个路由器,此时路由器将发回一个ICMP错误消息[1],以说明这个数据包不能继续向前传送,因为其TTL已经过期了。然后traceroute程序又发出一个TTL为2的数据包,这个数据包经过两次跳跃后其TTL过期。这个过程不断重复,直到数据包到达目的主机。此过程的目的就是要记录下所有发出ICMP超时消息的消息源,据此就可以确定出数据包到达目的主机的路径了。

这个算法的优点是所有的路由器都能够发出TTL超时消息,因而不需要非凡的代码以支持此算法。而其缺点在于:发出的数据包的数目(2n个,其中n是数据包跳跃次数)(译注:可能包含了路由器发送的超时消息),花费在用连续的数据包记录较近路由的时间,以及路径在这个检测过程中可能会发生改变这个事实。同时,这个算法并不能跟踪检测数据包返回时的路径,而这个路径很可能与外出路径不同。

2.将来的Traceroute

这个被提议的traceroute实现将使用一种不同的算法来达到相同的目的,即得到到达目的主机的路径。由于新的traceroute实现采用了一种专用的ICMP消息,所以用户还可以得到一些以前(使用老的traceroute)得不到的额外信息。

2.1基本算法

这里,我们将定义一种新的IP选项——Traceroute选项。若此选项存在在一个ICMP应答(或任何其他)数据包中,在下文中称之为“外出数据包”(OutboundPacket),则会使路由器给这个外出数据包的源端发出一个新定义的ICMPTraceroute消息。这样,通过n+1个数据包(而不是2n个),这个外出数据包所经过的路径就可以被其发送端记录下来。路径的改变并不影响这个算法的有效性,同时,该算法还答应对外出数据的应答,下文称之为“返回数据包”(ReturnPacket),进行跟踪,只要外出数据包的目的主机在发送应答数据时保留原来的IPTraceroute选项就可以了。

这个方法的不足之处在于必须把traceroute功能加到路由器中去。而好处是这种机制能够很轻易的加入到新版本的IP协议中去。

2.2IPTraceroute选项格式

(译注:为方便对比,我将英文和中文的格式都列了出来,下同)

F(复制到分片标志,copytofragments):

0(不复制到分片)

C(类别,class):

2(调试&测量)

数字(Number):

18(F+C+Number=82)

ID标识号(IDNumber):

这是由外出数据包发送者指定的任意一个数值,其目的在于可以让程序识别与自身发出数据包对应的ICMPTraceroute消息。这个数值与IP头部的标识号没有关系。

源IP地址(OriginatorIPAddress):

发送外出数据包的主机地址。这是必须的,因为路由器要根据这个地址发送返回数据包。含有源站选路(SourceRoute)选项的外出数据包同样需要这个字段。

外出跳跃计数(OutboundHopCount,简称OHC):

外出数据包已经通过的路由器数目。外出数据包的目的主机不增加这个字段的值。

返回跳跃计数(ReturnHopCount,简称RHC):

返回数据包已经通过的路由器数目。返回数据包的目的主机不增加这个字段的值。

2.3ICMPTraceroute消息格式

类型(Type):

30

代码(Code):

0-外出数据包转发成功

1-前面已没有路由器,数据包被抛弃

校验和(Checksum):

对首部中每个16位字进行二进制反码求和的结果。在计算校验和之前,应当先把此字段填零,然后填入计算结果。

ID标识号(IDNumber):

与引起此消息的数据包中的IPTraceroute选项部分的相应字段相同。这同样不与IP首部的ID标识号有任何关系。

外出跳跃计数(OutboundHopCount):

与引起此消息的数据包中的IPTraceroute选项部分的相应字段相同。

返回跳跃计数(ReturnHopCount):

与引起此消息的数据包中的IPTraceroute选项部分的相应字段相同。

输出连接速度(OutputLinkSpeed):

发送“外出/返回数据包”所在连接的速度,以“字节(8位)/秒”计。选择“字节/秒”而不是“位/秒”是考虑到如下事实:网络速度不久即将突破4.3GB/s,同时有些机器处理大于32位字段的效率很低。假如这个值不能确定,那么该字段应该置为零。

输出连接MTU(OutputLinkMTU):

发送“外出/返回数据包”所在连接的MTU,以“字节”计。MTU所针对的只是数据包中的数据部分,包括IP首部,但不包括链路层所加的首部及尾部封装。假如这个值不能确定,那么该字段应该置为零。

3.协议

带有IPTraceroute选项的外出数据包通常不应该使用非凡的服务类型(TypeOfService,简称TOS)或优先级(Precedence),除非想要跟踪具有非凡服务类型或优先级的数据包路径。

外出数据包的TTL值应该设置成“数字分配”[2]一文中所指定的默认值。

3.1跳跃(Hop)计数

跳跃计数提供了有关外出/返回数据包到目的主机所经路径长度的信息。这些计数也提供了判定ICMPTraceroute消息丢失与否的一种方法。举个例子来说,假如一个OHC为6的消息紧跟在一个OHC为4的消息后面,那么我们可以得出结论,那个OHC为5的消息丢失了。这也说明了仅计算Traceroute消息的数目不能有效判定路径长度的原因。

外出数据包的源端应当把数据包中的OHC设成0,而把RHC设成0xFFFF。0xFFFF这个非凡数值用来表示这是一个外出数据包而不是返回数据包,返回数据包的RHC为0。

另外要注重的很重要的一点是,这个跳跃计数与与IP的TTL没有任何关联。跳跃计数的步增应该仅在一个ICMPTraceroute消息发出时进行。

3.2目的主机操作

若一主机接收到一个带有IPTraceroute选项的外出数据包,那么在被要求应答的时候(如ICMPEcho服务的请求/应答),返回数据包也应当带有此选项。在返回数据包中必须填入如下内容:ID标识号、OHC和源IP地址。而RHC字段应当被设为0。

外出数据包的目的主机不应该再增加跳跃计数或者发送任何的ICMPTraceroute消息。

3.3路由器操作

当路由器转发一个含有IPTraceroute选项的数据包时,它应当给源IP地址字段所指出的主机发送一份ICMPTraceroute消息。假如接收到的数据包中的RHC字段为0xFFFF,那么这个数据包就是外出数据包,因此路由器应当将OHC字段的值加一;否则路由器应将RHC字段加一。而发回的Traceroute消息应该反映出增加后的跳跃计数。输出连接速度应当设置成发送“外出/返回数据包”所在连接的速度,以“字节(8位)/秒”计(如一个以太网速度为1,250,000),该字段也可以设成零以表示速度不能确定。输出连接MTU应当设置成发送“外出/返回数据包”所在连接的MTU,该字段同样可以为零以表示MTU不能确定。

当Traceroute选项存在时,外出/返回数据包的转发过程应该像它不存在一样。也就是说,到达目的主机的路径与是否存在Traceroute选项无关。

ICMPTraceroute消息应该与外出/返回数据包具有相同的TOS和优先级。TTL值应该设置成“数字分配”[2]一文中所指定的默认值。

ICMPTraceroute消息不应该再具有IPTraceroute选项。

假如外出数据包不能被转发,那么返回的ICMPTraceroute消息的代码字段应当设为1。但是假如返回数据包由于没有可用的路由器而不能被转发,那么就不需要发回一个Traceroute消息,因为这个消息就算发了也将不能被转发。

4.参考文献

[1]Postel,J.,"InternetControlMessageProtocol",STD5,RFC792,

USC/InformationSciencesInstitute,September1981.

[2]Reynolds,J.,andJ.Postel,"AssignedNumbers",STD2,RFC1340,

USC/InformationSciencesInstitute,July1992.

5.安全性考虑

安全性方面的相关内容不在本文中讨论。

6.作者的地址

GaryScottMalkin

Xylogics,Inc.

53ThirdAvenue

Burlington,MA01803

Phone:(617)272-8140

EMail:gmalkin@Xylogics.COM

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有