解析為何Traceroute探測的時候中間有些節點探測不到?

(下一篇文章告訴你如何讓Traceroute可以探測到思科ASA防火牆的節點)

要清楚的瞭解這個問題,首先需要知道Traceroute的工作原理。

Traceroute作用:基於UDP探測包、ICMP TTL超時報文和ICMP端口不可達報文來檢測從源到目的地之間的IP地址,同時如果源和目的不通,也可以檢測到哪個節點出了問題。

Traceroute工作原理:探測者首先發出3個TTL=1的探測包(端口號為33434),當數據包每經過一個網段TTL值減1,當TTL值減為0的時候,就會回覆一個ICMP TTL超時報文(這個超時報文的源IP地址就是我們要探測的中間的第一個的節點)。

然後再發出3個TTL=2的探測包(端口號為33435),同樣,當TTL值減為0的時候,就會回覆一個ICMP TTL超時報文(這個超時報文的源IP地址就是我們要探測的中間的第二個的節點);

然後再發出3個TTL=3的探測包(端口號為33436),同樣,當TTL值減為0的時候,就會回覆一個ICMP TTL超時報文(這個超時報文的源IP地址就是我們要探測的中間的第三個的節點)................以此類推,直到探測到目的地。

為什麼端口號這麼大呢?因為這個高的端口號一般都是處於空閒狀態,幾乎沒有哪個應用程序使用,這樣,當探測包到達目的地的時候,目的地就可以使用端口不可達報文進行回覆,假設用一個小的常用的端口號,很可能是影響先用的應用程序的工作。

注意:

一、默認每個TTL的探測包發三個,防止中間節點沒有收到UDP探測包,誤以為中間節點目的地不可達,數值可以修改。

二、中間節點收到UDP探測包,都會以自己收包接口IP地址為源,以探測者為目的,用ICMP文格式給探測者進行回覆,當探測者收到ICMP回包的同時就探測到了中間節點。

三、TTL是IP包頭裡面的字段,用來標識這個數據包可以傳遞多少跳,如果TTL=1,那麼數據包只能在本網段傳遞,如果TTL=2,那麼就可以傳遞給鄰居路由器的直連設備.....以此類推。

下圖為Traceroute抓包截圖,UDP、ICMP TTL超時報文以及ICMP端口不可達報文:

也就是數據包每經過一臺設備,TTL值減一。但是ASA防火牆收到數據包後默認情況不會把TTL減1,因為ASA不會回覆ICMP TTL超時報文,因為默認情況下也就無法探測到ASA防火牆的節點,目的也是為了保護ASA設備吧,畢竟給屬於安全產品,怎麼可能隨意讓別人知道我的信息呢。對不嘞!!!