由Van Jacobson编写的Traceroute程序是一个能更深入探索TCP/IP协议的方便可用的工具。Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。并且还可以让我们使用IP源路由选项。
Traceroute程序原理
Traceroute程序使用ICMP报文和IP首部中的TTL(Time To Live)字段(生存周期)。TTL字段是由发送端初始设置一个8 bit字段。每个处理数据报的路由器都需要把TTL的值减1。
TTL字段的目的是防止数据报在选路时无休止地在网络中流动。例如,当路由器瘫痪或者两个路由器之间的连接丢失时,选路协议有时会去检测丢失的路由并一直进行下去。在这段时间内,数据报可能在循环回路被终止。TTL字段就是在这些循环传递的数据报上加上一个生存上限。
当路由器接收到一个TTL为0或者1的IP数据报的时候,路由器就不再转发这个数据了,而直接丢弃,并且发送一个ICMP“超时”信息给源主机。Traceroute程序的关键就是这个回显的ICMP报文的IP报头的信源地址就是这个路由器的IP地址。同时,如果到达了目的主机,我们并不能知道,于是,Traceroute还同时发送一个UDP信息给目的主机,并且选择一个很大的值作为UDP的端口(大于30000),使主机的任何一个应用程序都不使用这个端口。所以,当达到目的主机的时候,UDP模块就产生一个“端口不可到达”的错误,这样就能判断是否是到达目的地了。
IP源站选路选项
通常IP路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器。应用程
序对此不进行控制,而且通常也并不关心路由。它采用类似Traceroute程序的工具来发现实际的路由。
源站选路(source routing)的思想是由发送者指定路由。它可以采用以下两种形式:
• 严格的源路由选择。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文。
• 宽松的源站选路。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。
源站路由选项的格式:
图1:IP首部源站路由选项的通用格式
这个格式与第7章中所示的记录路由选项格式基本一致。不同之处是,对于源站选路,我们必须在发送IP数据报前填充IP地址清单;而对于记录路由选项,我们需要为IP地址清
单分配并清空一些空间,并让路由器填充该清单中的各项。同时,对于源站选路,只要为所
需要的IP地址数分配空间并进行初始化,通常其数量小于9。而对于记录路由选项来说,必须尽可能地分配空间,以达到9个地址。
对于宽松的源站选路来说, code字段的值是0x83;而对于严格的源站选路,其值为0x89。
posted on 2008-06-12 22:46
水 阅读(2458)
评论(2) 编辑 收藏 引用 所属分类:
tcp/ip