traceroute/tracert原理

traceroute原理

traceroute通过ICMP“超时”和“端口不可达”两种消息记录所经过路径的路由。

 

使用“超时”消息记录经过的路由:

traceroute程序发送的数据报首部TTL字段由发送端设置成一个8bit字段。每个处理数据报的路由器都需要把TTL的值减1或减去数据报在路由器中停留的秒数。由于大多数的路由器转发数据报的时延都小于1秒,因此TTL最终成为一个跳数计数器,每经过一台路由器就将其值减1。

当路由器收到一份IP数据报,如果其TTL字段是0或1,则路由器不转发该数据报。通常情况下,系统不会接收TTL值为0的数据报。

1 接收到这种数据报的主机是目的主机,直接将其交给应用程序。

2 接收主机不是目的主机,直接将其丢弃,并给发送端发一份ICMP超时消息。

traceroute程序记录所经过路由的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的入站接口IP地址。

 

使用“端口不可达”消息判断是否到达目的主机:

traceroute程序发送一份UDP数据报给目的主机。但它选择一个不可能的值作为UDP端口号(大于30000),目的主机的任何一个应用程序都不可能使用该端口。因此,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。traceroute程序要做的就是区分接收到的ICMP错误报文是“超时”还是“端口不可达”来判断什么时间结束。

 

tracert工作过程分析

 Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 首先,tracert送出一个TTL是1的IP 数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),tracert 收到这个消息后,便知道这个路由器存在于这个路径上,接着tracert 再送出另一个TTL是2 的数据包,发现第2 个路由器...... tracert 每次将送出的数据包的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个数据包 抵达目的地。当数据包到达目的地后,该主机则不会送回ICMP time exceeded消息,一旦到达目的地,由于tracert通过UDP数据包向不常见端口(30000以上)发送数据包,因此会收到「ICMP port unreachable」消息,故可判断到达目的地。

 

tracert 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,Tracert给TTL记数器加1,继续进行。 --

 

猜你喜欢

转载自blog.csdn.net/Pespi_Co1a/article/details/85684230
今日推荐