除了 Ping 以外,當 Ping 失敗時,使用 tracert (Windows) 或 traceroute (macOS/Linux) 是一個非常關鍵的工具。

功能:這個指令會顯示 ICMP 封包從起點到終點所經過的所有路由節點 (Hops)。

如何判讀:

如果在某個節點開始看到 要求等候逾時 (Request timed out),那通常表示該節點就是 ICMP 被阻擋的地方(通常是設備保護機制)。

數據機(路由器)是防火牆的「邊界」

首先需要知道 tracert 指令是如何運作的: tracert 利用 ICMP 協定中的一個機制,稱為 TTL (Time To Live)

1.發送測試包: tracert 第一次發送的封包 TTL 值設為 1。

2.第 1 跳: 封包到達第一個設備(通常是您的內部路由器或閘道)。該設備在轉發前會將 TTL 減 1,使 TTL 變為 0。

3.回覆: 根據網路規範,任何設備收到 TTL 為 0 的封包,必須將其丟棄,並回覆一個特殊的 ICMP 錯誤訊息(Time Exceeded,時間超限) 給發送者。

4.顯示結果: tracert 收到這個錯誤訊息後,就知道第 1 跳設備的 IP 位址,並將其顯示出來。

然後 tracert 會將 TTL 設為 2、 3,依序發送,重複這個過程,直到到達目標。

如果數據機是第 3 跳 (Hop 3),而從第 3 跳開始就逾時,那數據機的防火牆就很可能是問題點。

情況一:數據機的防火牆阻擋了 ICMP 錯誤訊息 (TTL = 0)這是最常見的原因。動作: 數據機(路由器)作為網路邊界設備,開啟了防火牆。

當它處理第 3 次的 tracert 封包時 (此時 TTL 在數據機上變為 0),它本應回覆一個 ICMP Time Exceeded 錯誤訊息。

阻擋: 為了隱藏自身資訊或避免 DDoS 攻擊,該數據機的防火牆設定明確阻擋了所有 ICMP 錯誤訊息的發送。

結果:您的電腦收不到任何回覆,因此 tracert 顯示 要求等候逾時 (Request timed out)。

情況二:數據機的防火牆阻擋了 所有 ICMP 流量

這表示數據機完全被設定為不處理任何 ICMP 封包。

動作: 如果數據機同時作為第 3 跳的路由設備,和最終測試目標,但它在 WAN 埠關閉了 Ping 響應(WAN Port Ping Response = 關閉)。

阻擋: 數據機收到 Ping 請求後,直接丟棄,並且不回覆任何錯誤訊息(包括 ICMP Echo Reply 或 TTL = 0 的錯誤)。

結果: tracert 無法得知數據機的 IP 或處理狀態,因此顯示逾時。

當 tracert 顯示逾時時,這不是一個「硬性」故障(例如電源線斷了),這是一種「軟性故障」,代表:

網路連線是通的:封包實際上已經到達了數據機。

設備是活著的:數據機是正常運作的。

問題點在於:數據機的軟體設定 (防火牆規則) 阻止了它回覆或響應 ICMP 封包。

因此如果從第 3 跳開始逾時,我們八成確定,第 3 跳的設備(數據機/路由器)就是問題點,需要登入管理介面去調整 ICMP 相關的防火牆規則。

文章標籤
全站熱搜
創作者介紹
創作者 chunju 的頭像
chunju

P的胡言亂語

chunju 發表在 痞客邦 留言(0) 人氣(0)