Member-only story
網路掉包就看 mtr
Apr 5, 2023
小工具 mtr (my traceroute)可以看網路掉包掉在哪。通常用於診斷故障的網路節點。需要注意的是,只有中間節點 Loss% 升高不算出事,可能是中間節點刻意丟棄某些封包減少負載。只要後面 Loss% 有回到 0% 都不算網路故障。
mtr -rwzn -c 10 --max-ttl 50 1.1.1.1Press enter or click to view image in full size![]()
以下我在愛爾蘭的 Amazon EC2 往台灣的 hinet.net 發送請求。我想測個長距離的,看看有沒有機會掉包。
用 TCP 來測試,最後的端點有 16% 的掉包率。但這代表什麼嗎? 真的掉包了嗎? 掉包又怎樣,網路本來就是不可靠的不是嗎? 而且我注意到,如果用 icmp 的 mtr 探測,掉包率會是 0。目前推測這個掉包率也不能代表端點沒有收到,有可能只是觸發了端點的安全機制而丟棄了部分封包。
如何探測中間節點的耗時
在網路中,每個封包紀錄了目的端的 ip ,接著中間的網路節點就會根據他的所知,幫你轉送到下個節點,一路到達目的地。這時問題就來了,客戶端是如何知道中間節點所花費的時間?
其實 mtr 並沒有指定要訪問某個中間節點,並返回他的 round trip time (RTT) 。在 internet protocol 裡,有個欄位叫做 TTL ,每經過一個中間節點就會被扣一。當中間節點發現他是 0 的時候就直接發送訊號告訴來源端,而不會繼續傳下去。mtr 所做的事情就是一次發數個封包,每發一批,在封包裡面設定的 TTL 加一,多傳幾批之後就可以大致探測中間的節點是哪些了。
