traceroute 是用來檢測發出數據包的主機到目標主機之間所經過的網關數量的工具。traceroute 的原理是試圖以最小的TTL發出探測包來跟蹤數據包到達目標主機所經過的網關,然后監聽一個來自網關ICMP的應答。發送數據包的大小默認為 38個字節。
通過traceroute我們可以知道信息從你的計算機到互聯網另一端的主機是走的什么路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。linux系統中,我們稱之為traceroute,在Windows中為tracert。 traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其IP地址。
在大多數情況下,我們會在linux主機系統下,直接執行命令行:
traceroute hostname
而在Windows系統下是執行tracert的命令:
tracert hostname
示例:
[c:\~]$ tracert www.baidu.com 通過最多 30 個躍點跟蹤 到 www.a.shifen.com [119.75.217.109] 的路由: 1 1 ms 1 ms 3 ms 113.44.96.1 2 2 ms 2 ms 1 ms 113.44.96.1 3 3 ms 3 ms 2 ms 218.241.253.97 4 3 ms 3 ms 3 ms 14.197.178.41 5 3 ms 7 ms 3 ms 14.197.249.122 6 * * * 請求超時。 7 * * * 請求超時。 8 * * * 請求超時。 9 8 ms 5 ms 3 ms 119.75.217.109 跟蹤完成。
表示經過9個路由可訪問到www.baidu.com(119.75.217.109)。
說明:
記錄按序列號從1開始,每個紀錄就是一跳 ,每跳表示一個網關,我們看到每行有三個時間,單位是 ms,其實就是-q的默認參數。探測數據包向每個網關發送三個數據包后,網關響應后返回的時間;如果您用 traceroute -q 4 www.58.com ,表示向每個網關發送4個數據包。
有時我們traceroute 一台主機時,會看到有一些行是以星號表示的。出現這樣的情況,可能是防火牆封掉了ICMP的返回信息,所以我們得不到什么相關的數據包返回數據。(如果路由器不支持ICMP協議,對應的那條結果就會顯示星號)
有時我們在某一網關處延時比較長,有可能是某台網關比較阻塞,也可能是物理設備本身的原因。當然如果某台DNS出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您可以加-n 參數來避免DNS解析,以IP格式輸出數據。
如果在局域網中的不同網段之間,我們可以通過traceroute 來排查問題所在,是主機的問題還是網關的問題。如果我們通過遠程來訪問某台服務器遇到問題時,我們用到traceroute 追蹤數據包所經過的網關,提交IDC服務商,也有助於解決問題;但目前看來在國內解決這樣的問題是比較困難的,就是我們發現問題所在,IDC服務商也不可能幫助我們解決。
注:ubuntu下traceroute www.baidu.com全是×,但ping可通,這主要是因為ubuntu下默認的traceroute發送的是UDP包,應該加參數-I(使用ICMP包),traceroute -I www.baidu.com.