Linux 命令 - traceroute: 數據報傳輸路徑追蹤


traceroute 工具用於跟蹤數據報的傳輸路徑:當數據報從一台計算機傳向另一台計算機時,會經過多重的網關,traceroute 命令能夠找到數據報傳輸路徑上的所有路由器。通過 traceroute 工具跟蹤到的傳輸路徑只是這兩台計算機之間眾多通路中的一條,所以不能肯定火假設數據報會永遠只走這一條通路。

 

traceroute 過程

1. 將傳遞到目的 IP 地址的 ICMP Echo Request 消息的 TTL 值設置為 1,該數據報經過第一個路由器時,其 TTL 值減去 1,此時新產生的 TTL 值為 0。

2. 由於 TTL 值被置為 0,路由器判斷此時不應該嘗試繼續轉發數據報,而是直接拋棄該數據報。由於數據報的生存周期(TTL 值)已經到期,這個路由器會發送一個 ICMP 時間超時,即 TTL 值過期信息返回到客戶端計算機。

3. 此時,發出 traceroute 命令的客戶端計算機將顯示該路由器的名稱,之后可以再發送一個 ICMP Echo 消息並把 TTL 值設置為 2。

4. 第一個路由器仍然對這個 TTL 值減 1,然后,如果可能的話,將這個數據報轉發到傳輸路徑上的下一跳。當數據報抵達第二個路由器,TTL 值會再被減去 1,變成 0。

5. 第二個路由器會像第一個路由一樣,拋棄掉這個數據報,並像第一個路由器那樣返回一個 ICMP 超時消息。

6. 該過程會一直持續,traceroute 命令不停遞增 TTL 值,而傳輸路徑上的路由器不斷遞減該值,直到數據報最終抵達預期的目的地。

7. 當目的計算機接收到 ICMP Echo Request 消息時,會回傳一個 ICMP Echo Reply 消息。

 

命令格式

traceroute [options] [host]

 

命令參數

-4
  使用 IPv4。

-6
  使用 IPv6。

-I
  使用 ICMP ECHO 探測。

-T
  使用 TCP SYN 探測。

-U
  使用 UDP 數據報探測,這是默認的探測方式。

-d
  啟用 Socket 級的調試功能(如果 Linux 內核支持的話)。

-F
  設置 Don’t Fragment 位,不允許 IP 封包分段。

-f first_ttl
  設置第一個檢測數據包的存活數值 TTL 的大小,默認值為 1。

--help
  打印幫助信息

-m max_ttl
  指定探測時的最大跳數,即 TTL 的最大值,默認值為 30。

-n
  顯示信息時不會嘗試將 IP 地址映射成主機名稱。

-p port
  設置目的端口號。對於 ICMP 追蹤,則是指定 ICMP 的序列值。

-q nqueries
  設置每一跳的探測包數量,默認值為 3 。

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

-t tos
  當使用 IPv4 時,設置 Type of Service 值;使用 IPv6 時,則設置 Traffic Control 值。

-V
  打印版本信息

-w waittime
  設置等待測試響應的秒數,默認值為 5.0。

 

實例

a) 顯示本機至 example.com 數據包的傳輸路徑。

[huey@huey-K42JE ~]$ traceroute example.com
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  10.1.228.254 (10.1.228.254)  1.545 ms  1.470 ms  1.381 ms
 2  192.168.100.2 (192.168.100.2)  0.818 ms  0.691 ms  0.601 ms
 3  * * *
 4  * * *
 5  * * *
...
28  * * *
29  * * *
30  * * *

記錄序號從 1 開始,每行記錄表示一跳,每一跳表示一個網關。除了主機名稱與其 IP 地址外,每行記錄還有 3 個時間,即默認的 -q 值。這些時間值表示數據報抵達路由器的往返時間。以 * * * 表示的記錄,是因為在默認的等待時間 5.0 秒內沒有接收到 ICMP 響應。這可能是因為防火牆把 ICMP 返回信息過濾掉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM