Linux之traceroute命令

顯示數據包到主機間的路徑,traceroute命令用於追蹤數據包在網絡上的傳輸時的所有路徑,它默認發送的數據包大小是40字節。html

經過traceroute咱們能夠知道信息從你的計算機到互聯網另外一端的主機是走的什麼路徑。固然每次數據包由某一一樣的出發點(source)到達某一一樣的目的地(destination)走的路徑可能會不同,但基本上來講大部分時候所走的路由是相同的。linux

traceroute經過發送小的數據包到目的設備直到其返回,來測量其須要多長時間。一條路徑上的每一個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(若有的話)及其ip地址。服務器

Traceroute 的實現一共有三種方法,分別是:微信

  • TCP traceroute(使用 tracetcp 程序能夠實現)
  • UDP traceroute(Cisco 和 Linux 默認狀況下使用)
  • ICMP traceroute ( MS Windows 默認狀況下使用)

命令格式

traceroute(選項)(參數)markdown

命令選項

  • -d:使用Socket層級的排錯功能;
  • -f<存活數值>:設置第一個檢測數據包的存活數值TTL的大小;
  • -F:設置勿離斷位;
  • -g<網關>:設置來源路由網關,最多可設置8個;
  • -i<網絡界面>:使用指定的網絡界面送出數據包;
  • -I:使用ICMP迴應取代UDP資料信息;
  • -m<存活數值>:設置檢測數據包的最大存活數值TTL的大小;
  • -n:直接使用IP地址而非主機名稱;
  • -p<通訊端口>:設置UDP傳輸協議的通訊端口;
  • -r:忽略普通的Routing Table,直接將數據包送到遠端主機上。
  • -s<來源地址>:設置本地主機送出數據包的IP地址;
  • -t<服務類型>:設置檢測數據包的TOS數值;
  • -v:詳細顯示指令的執行過程;
  • -w<超時秒數>:設置等待遠端主機回報的時間;
  • -x:開啓或關閉數據包的正確性檢驗。

命令參數

主機:指定目的主機IP地址或主機名。網絡

簡單用法

> traceroute rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets
 1  192.168.0.1 (192.168.0.1)  1.242 ms  0.949 ms  2.494 ms
 2  192.168.1.1 (192.168.1.1)  1.337 ms  1.101 ms  0.953 ms
 3  100.64.0.1 (100.64.0.1)  4.663 ms  28.187 ms  3.346 ms
 4  111.175.227.145 (111.175.227.145)  7.321 ms  12.203 ms  10.503 ms
 5  111.175.210.221 (111.175.210.221)  4.810 ms  7.400 ms  3.673 ms
 6  202.97.17.5 (202.97.17.5)  20.276 ms
    202.97.98.25 (202.97.98.25)  38.174 ms
    202.97.17.1 (202.97.17.1)  28.942 ms
 7  * 113.96.5.158 (113.96.5.158)  26.277 ms *
 8  * * *
 9  14.18.199.106 (14.18.199.106)  22.518 ms  20.543 ms  22.583 ms
10  * * 14.18.199.74 (14.18.199.74)  22.378 ms
11  * * *
12  * * *
13  * * *
14  203.195.152.245 (203.195.152.245)  25.766 ms  21.599 ms *
複製代碼

記錄按序列號從1開始,每一個記錄就是一跳 ,每跳錶示一個網關,咱們看到每行有三個時間,單位是ms,其實就是-q的默認參數。探測數據包向每一個網關發送三個數據包後,網關響應後返回的時間;若是用traceroute -q 4 rumenz.com,表示向每一個網關發送4個數據包。tcp

有時咱們traceroute一臺主機時,會看到有一些行是以星號表示的。出現這樣的狀況,多是防火牆封掉了ICMP的返回信息,因此咱們得不到什麼相關的數據包返回數據。oop

有時咱們在某一網關處延時比較長,有多是某臺網關比較阻塞,也多是物理設備自己的緣由。固然若是某臺DNS出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您能夠加-n參數來避免DNS解析,以IP格式輸出數據。測試

若是在局域網中的不一樣網段之間,咱們能夠經過traceroute 來排查問題所在,是主機的問題仍是網關的問題。若是咱們經過遠程來訪問某臺服務器遇到問題時,咱們用到traceroute 追蹤數據包所通過的網關,提交IDC服務商,也有助於解決問題;但目前看來在國內解決這樣的問題是比較困難的,就是咱們發現問題所在,IDC服務商也不可能幫助咱們解決。spa

設置跳數

> traceroute -m 10 rumenz.com
traceroute to rumenz.com (203.195.152.245), 10 hops max, 52 byte packets
 1  192.168.0.1 (192.168.0.1)  1.829 ms  0.746 ms  1.684 ms
 2  192.168.1.1 (192.168.1.1)  2.326 ms  3.365 ms  1.203 ms
 3  100.64.0.1 (100.64.0.1)  4.659 ms  5.613 ms  4.055 ms
 4  111.175.227.145 (111.175.227.145)  12.399 ms  7.991 ms  8.013 ms
 5  111.175.210.221 (111.175.210.221)  6.997 ms  10.958 ms  4.180 ms
 6  202.97.98.29 (202.97.98.29)  21.216 ms
    202.97.98.25 (202.97.98.25)  21.428 ms *
 7  * * *
 8  * * *
 9  * 14.18.199.106 (14.18.199.106)  22.443 ms  20.399 ms
10  * * *

複製代碼

顯示IP地址,不查主機名

> traceroute -n rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets
 1  192.168.0.1  2.484 ms  1.271 ms  0.813 ms
 2  192.168.1.1  1.320 ms  1.103 ms  1.075 ms
 3  100.64.0.1  2.914 ms  4.107 ms  4.372 ms
 4  111.175.227.145  7.279 ms  7.915 ms  9.007 ms
 5  111.175.210.221  3.729 ms  4.100 ms  4.160 ms
 6  202.97.29.49  25.172 ms
    202.97.34.66  23.798 ms
    202.97.29.53  18.034 ms
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * 203.195.152.245  21.635 ms  22.201 ms
複製代碼

把探測包的個數設置爲值4

> traceroute -q 4 rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets
 1  192.168.0.1 (192.168.0.1)  2.265 ms  2.010 ms  0.669 ms  1.103 ms
 2  192.168.1.1 (192.168.1.1)  1.159 ms  1.207 ms  1.082 ms  1.181 ms
 3  100.64.0.1 (100.64.0.1)  6.105 ms  4.068 ms  2.737 ms  3.858 ms
 4  111.175.227.145 (111.175.227.145)  12.785 ms  11.772 ms  11.710 ms  7.463 ms
 5  111.175.210.221 (111.175.210.221)  11.646 ms  5.033 ms  4.373 ms  5.631 ms
 6  * 202.97.29.57 (202.97.29.57)  21.332 ms *
    202.97.17.5 (202.97.17.5)  26.080 ms
 7  * * * *
 8  * * * *
 9  14.18.199.106 (14.18.199.106)  26.460 ms  20.790 ms  25.815 ms *
10  * * 14.18.199.74 (14.18.199.74)  22.642 ms *
11  * * * *
12  * * * *
13  * * * *
14  203.195.152.245 (203.195.152.245)  22.046 ms  22.201 ms  20.328 ms  24.846 ms
複製代碼

繞過正常的路由表,直接發送到網絡相連的主機

> traceroute -r rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets
traceroute: sendto: Network is unreachable
 1 traceroute: wrote rumenz.com 52 chars, ret=-1
 *traceroute: sendto: Network is unreachable
traceroute: wrote rumenz.com 52 chars, ret=-1
 *traceroute: sendto: Network is unreachable
traceroute: wrote rumenz.com 52 chars, ret=-1
複製代碼

探測包的等待響應時間設置爲3秒

> traceroute -w 3 rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets
 1  192.168.0.1 (192.168.0.1)  2.835 ms  0.894 ms  0.967 ms
 2  192.168.1.1 (192.168.1.1)  1.289 ms  1.174 ms  1.091 ms
 3  100.64.0.1 (100.64.0.1)  3.327 ms  2.985 ms  4.280 ms
 4  111.175.227.145 (111.175.227.145)  13.337 ms  12.301 ms  9.081 ms
 5  111.175.210.221 (111.175.210.221)  3.484 ms  5.052 ms  4.033 ms
 6  202.97.98.25 (202.97.98.25)  19.580 ms
    202.97.17.1 (202.97.17.1)  21.139 ms
    202.97.34.66 (202.97.34.66)  21.232 ms
 7  * * 113.96.5.82 (113.96.5.82)  26.111 ms
 8  * * *
 9  * 14.18.199.106 (14.18.199.106)  22.279 ms *
10  * * *
11  * * *
12  * * *
13  * * *
14  * 203.195.152.245 (203.195.152.245)  22.335 ms  21.387 ms
複製代碼

Traceroute的工做原理

UDP 和 ICMP Traceroute

Traceroute 的基本原理是向外發送帶有逐次遞增 TTL 的數據包從而獲取的路徑中每一跳的信息。

img

Host A 向 Host B 作 traceroute,Host A 第一次會發出一個 TTL=1 的數據包,當該數據包到達 R1 時,TTL 會變爲 0 (網絡上每通過一跳 TTL 會減去 1),R1 會將 TTL=0 的數據包丟棄並返回一個 ICMP Time Exceeded 給 Host A。Host A 發出第二個數據包並將 TTL 增長1 (TTL=2),該數據包到達 R2 後 TTL=0,R2 向 Host A 返回 ICMP Time Exceeded。依此類推,直到 TTL 增長到一個合適的值讓數據包順利到達 Host B,Host B 會返回一個 Final Replay 給 Host A。

UDP 和 ICMP traceroute 的區別就在於向外發送的數據包(上圖中紅色標明的 packet)和最後的 final reply。

  • UDP 向外發送的是一個 UDP 數據包,final reply 是 ICMP Destination Unreachable
  • ICMP 向外發送的是一個 ICMP Echo Request,final reply 是 ICMP Echo Reply

TCP Traceroute

TCP traceroute 一樣利用了 TTL 來探測網絡路徑可是它向外發送的是 TCP SYN 數據包,這樣作最大的好處就是穿透防火牆的概率更大由於 TCP SYN 看起來是試圖創建一個正常的 TCP 鏈接。

關於 Cisco 的 traceroute 更詳細的資料能夠參考 Cisco Using the traceroute Command on Operating Systems (Document ID:22826).

原文連接:rumenz.com/rumenbiji/l… 微信公衆號:入門小站

相關文章
相關標籤/搜索