路由与交换 入门3 ICMP与TraceRoute_职场

1. Traceroute是什么?

答: Traceroute是个网络诊断工具,用来发现到达目的节点所经路径,把中间所经过的每一个路由器的地址都列出来。

2. Traceroute工作原理是什么?

答:Traceroute发送小UDP数据包到目的地,并逐渐增加存活时间(TTL),首3个UDP包TTL值是1,之后3个是2,如此类推。每当UDP包经过一个路由器,其TTL就会减1。当TTL等于1时,路由器便丢弃该包,并返回一ICMP Time Exceeded报文给源端。当目的地收到UDP报文,由于该端口上没有运行应用程序,返回ICMP Port Unreachable报文。源端收到此报文,判断UDP已到达目的地,结束Traceroute。这样便得到一连串路径和每次测试的时间(ms)。

3. 为什么有Traceorute?

答: Traceorute可以用来跟踪路由,诊断并排除网络故障。Tracerout没有特别要求,可以在绝大多数的路由器、主机上运行。它只需要中间路由器和目的端支持ICMP响应,.也不需要目的端运行任何特殊的服务器应用程序。

4. 什么是 ICMP Time Exceeded 错误报文,当主机收到此报文后有什么意义?

答: ICMP协议定义了多个错误报告控制报文,其中:Time Exceeded: Type=11,Code=0 意义为

"If the gateway processing a datagram finds the time to live field is zero it must discard the datagram. The gateway may also notify the source host via the time exceeded message."

即意思是当主机收到 ICMP Time Exceeded,知道发送数据包的TTL值设置太小,在下次发送数据时增大TTL值。

5. 什么是 ICMP Port Unreachable错误报文,当主机收到此报文后有什么意义?

答: ICMP协议定义了多个错误报告控制报文,其中:Port Unreachable: Type=03,Code=03, 意义为

"If, in the destination host, the IP module cannot deliver the datagram because the indicated protocol module or process port is not active, the destination host may send a port unreachable message to the source host."

即意思是当主机收到ICMP Port Unreachable,知道目的端没有打开此端口,应停止发送或者改变发送数据的目的端口。

6. 怎么判定Traceorute 的成功、失败?

答: 源端发送的UDP探测包被路由器和目的服务器丢弃并返回ICMP消息是Traceroute成功操作的关键,只有源端接收到此消息才能得知此UDP探测包所到达的路由器地址和RTT值,并判断是否到达目的端。如果路由器或者目的主机因为安全等原因关闭了ICMP报文回应功能,traceroute将超时失败,源端将显示"*",并继续发生新的TTL增加的UDP探测包直至最大跳数。

7. TTL是什么? 在Traceroute中起什么作用?

答: TTL是Time to Live的缩写,是IP协议包中的一个域,表示分组在网络中的生存时间。在互联网中,由于路由表的错误,可能使分组无法交付给目的地而在网络中无限地环回(loop)传送,永不终止。使用TTL可以防止环回,源端设置TTL值,网络中路由器收到数据包后将TTL域减1。当路由器收到TTL=0或1时的数据包时,就丢弃该包,并发送一个ICMP Time Exceeded报文给最初的发送者。最大TTL值为255,也即分组在网络中最多可经过255个路由器,之后将被丢弃。

在Traceorute中利用不同的TTL值,可以让数据包在每个路由器上丢弃并产生ICMP Time Exceeded报文。

8. RTT是什么?

答: RTT是Round-Trip Time 的缩写,即往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认总共经历的时延。

9. RTT在Traceorute中起什么作用? 如何通过RTT来了解Traceroute的行为?

答: RTT在Traceorute中表示源端与路径上每个节点之间的往返时间,用来判断网络是否正常。通过观察计算得到的RTT值可以了解Traceroute的行为和网络信息,例如获取路径上路由器距离源端的时间延时,判断网络是否正常。另外这些数据也反映了网络信息。

10. 为什么有时候第二个路由器返回的RTT值会比第一个路由器的RTT值小?

答:可能是由于发送第一个数据时,发生了一次ARP交换。RTT提供观察点,要了解现象,得进一步分析,RTT值并不一定是实际数据包发送和返回的时间差。

11. 如果路由器接收到分组时先将TTL值减1,然后再判断是否为0,将会发生什么现象?

答: 收到包时,若先把TTL减1,会有个副作用: 当所收到包的TTL为0时,减1导致TTL将变为255,路由器将不丢弃该分组,让该分组继续在网络中传输。

12. 假设源主机和目的主机之间有三个路由器(R1、R2和R3), 而中间的路由器( R2)收到TTL

字段为1的分组时,将TTL字段减1,但却错误地将该分组发往下一个路由器R3。请描述会发生什么结果。在运行Traceorute程序时会看到什么样的现象?

答: 运行Traceorute程序时, 第1行输出是正确的,并且标识了R1。下一个探测分组启动时将TTL置为2,并且这个值被R1减1。当R2收到这个分组时,把TTL从1减为0,但是错误地将它传递给了R3。R3看见进入的TTL是0就将超时的分组发送回来。这就意味着第2行输出(TTL为2)标识了R3,而不是R2。

第3行输出正确地标识了R3。这个错误所表现出来的线索就是两个连续的输出行标识了同一个路由器。

13. 假设源主机和目的主机之间有三个路由器。由于目的主机上存在错误,它总是将进入TTL

值作为外出ICMP报文的TTL值。请描述这将发生什么结果,你会看到什么现象?

答: 在这种情况下,TTL为1标识了R1,TTL为2标识了R2,TTL为3标识了R3。但是当TTL为4时,UDP数据报到达了目的地,其输入的TTL为1。ICMP端口不可达报文生成了,但它的TTL是1(错误地从进入的TTL复制而来)。这个ICMP报文到了R3,在那儿TTL被减1,报文被丢弃。没有生成一个ICMP超时报文,因为被丢弃的数据报是一个ICMP的差错报文(端口不可达)。类似的现象也出现在TTL为5的探测分组,但这次输出的端口不可达报文以TTL为2开始(进入的TTL),这个报文被传给R2,在那儿被丢弃。对应于TTL为6探测分组的端口不可达报文被传递给R1,在那儿被丢弃。最后,对应于TTL为7探测分组的端口不可达报文被送回了原地,到达时它的TTL为1。总之,TTL为1、2和3的行正确地标识了R1、R2和R3,接下来的三行每个都包含三个超时,再接下来的TTL为7的行标识了目的地。