Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面說到,儘管ping工具也可以進行偵測,但是,因爲ip頭的限制,ping不能完全的記錄下所經過的路由器。所以Traceroute正好就填補了這個缺憾。
Traceroute的原理是非常非常的有意思,它受到目的主機的IP後,首先給目的主機發送一個TTL=1(還記得TTL是什麼嗎?)的UDP(後面就 知道UDP是什麼了)數據包,而經過的第一個路由器收到這個數據包以後,就自動把TTL減1,而TTL變爲0以後,路由器就把這個包給拋棄了,並同時產生 一個主機不可達的ICMP數據報給主機。主機收到這個數據報以後再發一個TTL=2的UDP數據報給目的主機,然後刺激第二個路由器給主機發ICMP數據 報。如此往復直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。從而避開了ip頭只能記錄有限路由IP的問題。
有人要問,我怎麼知道UDP到沒到達目的主機呢?這就涉及一個技巧的問題,TCP和UDP協議有一個端口號定義,而普通的網絡程序只監控少數的幾個號碼較 小的端口,比如說80,比如說23,等等。而traceroute發送的是端口號>30000(真變態)的UDP報,所以到達目的主機的時候,目的 主機只能發送一個端口不可達的ICMP數據報給主機。主機接到這個報告以後就知道,主機到了,所以,說Traceroute是一個騙子一點也不爲過:)
Traceroute程序裏面提供了一些很有用的選項,甚至包含了IP選路的選項,請察看man文檔來了解這些,這裏就不贅述了。