網路故障排查方法論#

網路「不通」是最模糊的故障描述,但底層協定是層層堆疊的,故障也一定發生在某一層。與其憑直覺亂試,不如沿著協定堆疊由下而上逐層驗證:下層不通,上層必然不通;下層確認沒問題,才有意義往上排查。本節整理一套系統化的分層診斷流程、常見根因,以及對應的工具用法。

為什麼要分層診斷#

網路通訊牽涉物理層、資料鏈結層網路層傳輸層應用層。任何一層失效,使用者看到的都只是「打不開網頁」這個籠統現象。分層診斷的核心思想是先確認下層,再往上推進

  • 下層是上層的基礎,跳過下層直接懷疑應用,往往白費力氣
  • 每一層都有對應的觀測工具,定位到層,就等於縮小了一個數量級的可能性
  • 排查時優先用「成本最低、覆蓋最廣」的工具(如 ping),逐步換成更精細的工具(如 tcpdump
flowchart TD
    A["應用層<br/>瀏覽器打不開、API 逾時"] --> B["傳輸層<br/>埠不通、連線被拒"]
    B --> C["網路層<br/>路由不可達、IP 設定錯誤"]
    C --> D["資料鏈結層<br/>ARP 解析失敗、VLAN 隔離"]
    D --> E["物理層<br/>網線鬆脫、網卡 Down"]

    E -. "由下而上逐層確認" .-> A

排查順序的鐵律是「先硬體後軟體、先本機後遠端、先簡單後複雜」。多數疑難雜症最後查出來是網線沒插緊或網卡被禁用,而工程師卻先花了一小時懷疑防火牆規則。

系統化八步驟檢測流程#

把「網路不通」拆成可機械執行的八個步驟,每一步都對應一個明確的「通/不通」結論,避免來回跳躍:

flowchart TD
    S1["1. 確認物理連線<br/>網線、燈號、網卡狀態"] --> S2["2. 檢查本機 IP 設定<br/>IP / 遮罩 / 網關"]
    S2 --> S3["3. ping 本機回環 127.0.0.1<br/>驗證協定堆疊"]
    S3 --> S4["4. ping 自身 IP / 同網段主機<br/>驗證二層與本機網卡"]
    S4 --> S5["5. ping 預設網關<br/>驗證本網段出口"]
    S5 --> S6["6. ping 外部 IP(如 8.8.8.8)<br/>驗證路由與 NAT"]
    S6 --> S7["7. dig 解析域名<br/>驗證 DNS"]
    S7 --> S8["8. ping / curl 域名<br/>驗證端到端應用"]

每一步「不通」時,故障層級就基本鎖定:

步驟若失敗,問題大概率在典型原因
1 物理連線物理層網線鬆脫、網卡禁用、交換機埠故障
2 IP 設定網路層(設定)沒拿到 DHCP、IP 衝突、遮罩錯誤
3 回環本機協定堆疊TCP/IP 驅動或系統異常
4 同網段資料鏈結層ARP 失敗、VLAN 隔離、交換機問題
5 網關本網段出口網關位址錯、網關故障
6 外部 IP網路層(路由/NAT)路由缺失、NAT 失效、上游斷線
7 DNS應用層(DNS)DNS 伺服器掛了、解析記錄錯誤
8 域名訪問應用層服務未啟動、防火牆擋埠、憑證問題

第 6、7 步要分開判斷:若「ping 8.8.8.8 通、但 ping 域名不通」,幾乎可以斷定是 DNS 問題,而不是網路斷線。能 ping 通 IP 卻打不開網頁,十有八九是 DNS。

常見根因速覽#

實務上反覆出現、卻容易被忽略的幾類根因:

  • IP 衝突:兩台主機設定相同 IP,表現為「時通時不通」、ARP 表中同一 IP 對應的 MAC 不斷跳動。
  • 子網遮罩錯誤:遮罩設錯會讓主機誤判目標是否在同網段,導致「能 ping 通網關、卻 ping 不通其他網段」,或反之。
  • 單向防火牆:防火牆只放行了單方向流量,表現為「我能連到你、你連不回我」,TCP 握手卡在 SYN_SENT
  • 硬體接觸不良:網線水晶頭氧化、網卡半雙工協商錯誤,表現為「能通但大量丟包、速度極慢」。
如何快速分辨「遮罩錯」與「網關錯」
  • 遮罩錯:同網段內部分主機能通、部分不能;跨網段行為異常。
  • 網關錯:同網段全部正常,但完全無法存取任何外部網段。

驗證方式:先 ping 同網段另一台主機,再 ping 網關,再 ping 外網 IP,三者通斷的組合即可定位。

症狀 ➡️ 層級 ➡️ 工具 ➡️ 修復 對照表#

症狀可能層級診斷工具常見修復
網卡無燈號、state DOWN物理層ip linkethtool換線、啟用網卡、檢查交換機埠
同網段 ping 不通資料鏈結層ip neigharping清 ARP 快取、檢查 VLAN 與遮罩
拿不到 IP 或 IP 為 169.254.x網路層(設定)ip addrdhclient檢查 DHCP、手動設定 IP
ping 網關通、外網不通網路層(路由)ip routetraceroute補上預設路由、檢查 NAT
ping IP 通、ping 域名不通應用層(DNS)dignslookup換 DNS 伺服器、修正解析記錄
連線被拒(Connection refused)傳輸層ss -ltntelnet啟動服務、確認監聽埠
連線逾時(卡住不回)傳輸層/防火牆sstcpdumpiptables -L放行防火牆規則、檢查單向阻擋
通但速度慢、大量重傳傳輸層/物理層tcpdumpethtoolmtr修正雙工協商、排查丟包鏈路

關鍵工具用法#

ping:最快的連通性與丟包探針#

# 連續 ping 並統計丟包率(觀察是否「時通時斷」)
ping -c 10 192.168.1.1

# 指定來源介面,排查多網卡走錯出口的問題
ping -I eth0 8.8.8.8

# 大封包測試,揪出 MTU / 分片問題(DF 位元 + 指定大小)
ping -M do -s 1472 8.8.8.8

traceroute / mtr:定位斷在哪一跳#

# 逐跳顯示路徑與延遲,看封包停在哪個路由器
traceroute www.example.com

# mtr 結合 ping 與 traceroute,持續統計每一跳丟包率(排查間歇性丟包神器)
mtr www.example.com

ss:取代 netstat 的連線與監聽檢視#

# 列出所有 TCP 監聽埠與對應行程(確認服務有沒有起來)
ss -ltnp

# 查看某埠的連線狀態(大量 SYN_SENT 通常是被防火牆單向阻擋)
ss -tan state syn-sent

# 統計各狀態連線數,判斷是否有大量 TIME_WAIT 或半開連線
ss -s

tcpdump:抓包看真相#

# 抓特定主機與埠的封包,確認封包到底有沒有發出去 / 收到回應
tcpdump -i eth0 host 192.168.1.100 and port 80 -nn

# 只看 TCP 握手(SYN/SYN-ACK),判斷握手卡在哪一步
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' -nn

# 存成檔案供 Wireshark 離線分析
tcpdump -i eth0 -w capture.pcap

dig:DNS 解析驗證#

# 查詢域名 A 記錄,確認解析結果是否符合預期
dig www.example.com

# 指定 DNS 伺服器查詢,排除本機 DNS 設定干擾
dig @8.8.8.8 www.example.com

# 只看最終答案,並追蹤完整解析鏈
dig +short www.example.com
dig +trace www.example.com

tcpdump 在高流量介面上不加過濾條件會瞬間刷屏並佔用資源,務必用 hostport 等表達式縮小範圍,並在生產環境留意抓包對效能與隱私的影響。

本節小結#

概念關鍵點
分層診斷由下而上逐層確認,下層不通則上層免談
八步流程從物理連線到域名訪問,每步對應明確通斷結論
常見根因IP 衝突、遮罩錯、單向防火牆、硬體接觸不良
工具選擇pingtcpdump,先廣覆蓋後細定位
排查鐵律先硬體後軟體、先本機後遠端、先簡單後複雜