tracepath 指令:取代 traceroute 查看躍點與路徑 MTU
在 Linux 伺服器上,用 tracepath 指令不需 root 權限就能查看封包到達目的地所經過的路徑(躍點)和路徑 MTU。我們在沒有安裝 traceroute 的 AlmaLinux 9 伺服器上把躍點數限制為 10,查看到 example.com 的路徑,結果到第四個躍點都能讀到回應時間和路徑 MTU 1500,之後六個躍點沒有回應。
下方輸出是在 AlmaLinux 9.8 伺服器(root 帳號)上執行的結果,traceroute 版本和套件狀態則是在 Debian 12 伺服器(一般帳號)上確認。第一個躍點和中間路由器的 IPv6 位址已換成文件用的範例位址,回應時間和 pmtu 值保持原樣。
1️⃣ tracepath 指令用法
tracepath 接收一個目的地名稱或 IP 位址,送出 UDP 封包,並依 TTL 順序每行輸出一個有回應的躍點。預設最大躍點數為 30,可用 -m 修改。
對 example.com 我們加上 -m 10,只查到第十個躍點。
tracepath -n -m 10 example.com 1?: [LOCALHOST] 0.006ms pmtu 9001
1: fe80::1%eth0 0.077ms pmtu 1500
1: 2001:db8:a::5b 2.627ms asymm 8
2: 2001:db8:a::52 1.473ms asymm 12
3: 2001:db8:b::1e 19.653ms asymm 9
4: 2001:db8:c:: 3.642ms asymm 11
5: no reply
6: no reply
7: no reply
8: no reply
9: no reply
10: no reply
Too many hops: pmtu 1500
Resume: pmtu 1500 這台伺服器把封包送到 example.com 的 IPv6 位址,到第四個躍點都有回應時間。從第五個躍點起一直是 no reply,因此沒有出現表示在十個躍點內到達目的地的 reached 行,執行約 18 秒才結束。
對同一目的地不加 -m 執行時,30 秒內沒有結束。無回應躍點多的路徑,用 -m 減少要查的躍點數再執行。
已安裝的 tracepath 版本用 -V 查看,這台伺服器的 tracepath 是 iputils 20210202。
tracepath -Vtracepath from iputils 202102022️⃣ 解讀 tracepath 輸出
每行輸出依序是躍點編號、回應的位址、往返時間。路徑 MTU 改變的地方會加上 pmtu,去程和回程的躍點數不同時會加上 asymm。每行要看的內容如下。
| 輸出 | 說明 |
|---|---|
| 1?: | 躍點編號欄 — 無法從回應取得 TTL 而推測的編號會加上 ? |
| [LOCALHOST] | 封包尚未送出到網路前,伺服器本身的那一行 |
| 0.077ms | 到該躍點的往返時間 |
| pmtu 1500 | 在該處改變的路徑 MTU(位元組)— 只有改變時才會出現 |
| asymm 8 | 去程與回程的躍點數差異 — 官方手冊說明這不是可靠的值 |
| no reply | 對該 TTL 送出的封包沒有回應的躍點 |
| reached | 到達目的地的那一行 |
| Too many hops | 查到 -m 設定的躍點數就停止 |
| Resume: pmtu … hops … back … | 整條路徑的 MTU、到目的地的躍點數、回程躍點數的推測值 |
在 example.com 的輸出中,第一行 [LOCALHOST] 的 pmtu 是 9001,在第一個躍點變成 1500。TTL 1 那行只換了位址出現兩次,也是官方手冊範例中的樣子。手冊說明,第一個封包若因路徑 MTU 在第一個躍點被拒,同一 TTL 的那行會再出現一次。
到達目的地時,行尾會加上 reached,最後的 Resume 行會顯示到目的地的躍點數。送往 127.0.0.1 時一個躍點就出現 reached,Resume 行為 [pmtu 65535 hops 1 back 1]。
tracepath -n 127.0.0.1 1: 127.0.0.1 0.047ms reached
Resume: pmtu 65535 hops 1 back 1 沒有 reached 而以 Too many hops 結束的路徑,表示在 -m 設定的躍點內沒有收到目的地的回應。example.com 的路徑到十個躍點也沒有 reached,所以 Resume 行只剩 pmtu,沒有躍點數。
3️⃣ tracepath 選項
tracepath 的選項只有 -4、-6、-n、-b、-l、-m、-p、-V 八個,不帶目的地執行時,這份清單會作為用法顯示。不加選項執行時會把回應的位址解析成名稱,送往 localhost 時躍點欄顯示 localhost。
tracepath localhost 1?: [LOCALHOST] 0.003ms pmtu 65536
1: localhost 0.048ms reached
1: localhost 0.030ms reached
Resume: pmtu 65536 hops 1 back 1 [tracepath -n] 不解析名稱,只輸出 IP 位址。對同一個 localhost 加上 -n 後,躍點欄變成 IPv6 位址 ::1,example.com 的路徑用 -n 執行時,躍點欄也只顯示位址。
tracepath -n localhost 1?: [LOCALHOST] 0.005ms pmtu 65536
1: ::1 0.039ms reached
1: ::1 0.010ms reached
Resume: pmtu 65536 hops 1 back 1 -b 同時輸出名稱和位址。對 127.0.0.1 加上 -b 後,名稱後面的括號裡附上位址,顯示為 [localhost (127.0.0.1)]。
tracepath -b 127.0.0.1 1: localhost (127.0.0.1) 0.050ms reached
Resume: pmtu 65535 hops 1 back 1 -m 是設定最大查詢躍點數的選項,可指定 0 到 255。加上 -m 0 時沒有躍點行,直接只出現 Too many hops 和 Resume 行;輸入 256 則以 [out of range] 被拒。
tracepath -m 0 127.0.0.1 Too many hops: pmtu 65535
Resume: pmtu 65535 -l 是第一個送出的封包長度,預設值 IPv4 為 65535 位元組、IPv6 為 128000 位元組。對 127.0.0.1 加上 -l 1500 後,Resume 行的 pmtu 從 65535 變成 1500。
tracepath -l 1500 -n 127.0.0.1 1: 127.0.0.1 0.028ms reached
Resume: pmtu 1500 hops 1 back 1 -p 是設定第一個目的 UDP 連接埠的選項。對 127.0.0.1 加上 -p 33434 的結果和不加時相同。
| 選項 | 複製 | 說明 |
|---|---|---|
| -n | 不解析名稱,只輸出 IP 位址 | |
| -b | 同時輸出名稱和位址 | |
| -m躍點數 | 指定最大查詢躍點數,預設 30 | |
| -l長度 | 指定第一個封包長度,預設 IPv4 65535、IPv6 128000 | |
| -V | 輸出版本後結束 |
| 選項 | 複製 | 說明 |
|---|---|---|
| -4 | 只傳送到 IPv4 位址 | |
| -6 | 只傳送到 IPv6 位址 | |
| -p連接埠 | 指定第一個目的 UDP 連接埠 |
4️⃣ tracepath 與 traceroute 的差異
在無法安裝 traceroute 的伺服器上,改用 tracepath 取代 traceroute 查看路徑。我們確認的 AlmaLinux 9.8 伺服器沒有 traceroute 套件,而 tracepath 包含在 iputils 套件中,不必另外安裝就能執行。
rpm -q traceroutepackage traceroute is not installedDebian 12 伺服器正好相反:已安裝 traceroute 2.1.2,包含 tracepath 的 iputils-tracepath 套件則沒有安裝。
traceroute --versionModern traceroute for Linux, version 2.1.2
Copyright (c) 2016 Dmitry Butskoy, License: GPL v2 or any laterapt-cache policy iputils-tracepathiputils-tracepath:
Installed: (none)
Candidate: 3:20221126-1+deb12u1就像這兩台伺服器,不同發行版內建的指令不同,因此先確認連線的伺服器上有哪一個。tracepath 不需要 root 權限,只要能送出 UDP 封包的帳號都能執行。AlmaLinux 9.8 伺服器上的 tracepath 執行檔權限也是 rwxr-xr-x,沒有另外附加的權限(capability)。
| 項目 | tracepath | traceroute |
|---|---|---|
| AlmaLinux 9.8 伺服器 | 包含在 iputils 套件中,可直接執行 | 未安裝 |
| Debian 12 伺服器 | 未安裝 iputils-tracepath 套件 | 已安裝 traceroute 2.1.2 |
| 送出的封包 | UDP | 預設 UDP,-I 為 ICMP,-T 為 TCP |
| 每個躍點的輸出 | 一行 | 預設送三次,三個時間(用 -q 修改) |
| 選項數 | 八個:-4 -6 -n -b -l -m -p -V | 光是 --help 第一頁就超過 20 個 |
若需要用 ICMP 或 TCP 查看路徑,或每個躍點送多次來比較時間,就要安裝並使用 traceroute 指令。在不易安裝或也想一併查看路徑 MTU 的伺服器上,tracepath 比較合適。
🔲 tracepath 指令模擬器
在下方模擬器中,可以只改躍點數重新查看 example.com 的路徑,或對 localhost 和 127.0.0.1 直接輸入 -n、-b、-m、-l 比較差異。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。