在昨天的篇章中,我們掌握了主機運算資源的三大核心指標(CPU、記憶體與磁碟空間)。當硬體資源運作正常,伺服器最常面臨的另一大挑戰便是「網路連線異常」:
遇到網路問題時,盲目修改組態設定往往難以切中核心。今天我們將建立一套標準的排查順序,並透過 ping、ss、nc 與 curl 這四個核心工具,逐步釐清問題發生的環節。
1.網路問題診斷的排查順序
當網路通訊發生問題時,建議遵循由底層向應用層的排查流程:
[步驟 1: 網路連通層] 虛擬機能否連線外部網路?DNS 能否解析?
➔ ping
│
[步驟 2: 本地監聽層] 目標服務是否有在指定的 Port 監聽?
➔ ss
│
[步驟 3: 網路邊界層] 防火牆或連接埠轉發是否放行該連線?
➔ nc
│
[步驟 4: 應用通訊層] 伺服器回傳的 HTTP 狀態碼為何?
➔ curl
依照此流程逐步檢查,能在短時間內精準定位是底層網路、本機服務還是中繼防火牆發生異常。
2.步驟一:基礎網路連通與 DNS 驗證(ping)
ping 是基於 ICMP 協定運作的工具,用來檢驗本機與目標伺服器之間的雙向連通性,也能同步確認網域名稱解析是否正常。
在終端機中執行:
ping -c 4 google.com
3.步驟二:檢視本機服務監聽狀態(ss)
當確定網路連通無誤後,下一步需確認目標服務是否已經成功在通訊埠(Port)上啟動並等待連線。
在 Ubuntu 等現代 Linux 發行版中,推薦使用效能與資訊更完整的 ss(Socket Statistics):
sudo ss -tulpn
常用參數解析(tulpn):
檢視輸出中的 Local Address:Port 欄位:
Netid State Local Address:Port Peer Address:Port Process
tcp LISTEN 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812))
tcp LISTEN 127.0.0.1:5000 0.0.0.0:* users:(("python3",pid=1420))
4.步驟三:檢測通訊埠連通與防火牆狀態(nc)
若服務確實有在監聽,但外部主機依舊無法連入,通常是中間的網路防護機制(如 UFW 防火牆或虛擬機連接埠轉發)未放行。
可使用 nc(netcat) 進行快速的埠號探針測試:
nc -zv 127.0.0.1 22

5.步驟四:應用層 HTTP 與 API 通訊測試(curl)
當通訊埠已可連通,但程式抓取資料仍失敗時,應使用命令列工具 curl 直接模擬請求,檢視應用層的回應細節。
(1)僅取得回應標頭(Header)
以檢測外部 API 為例:
curl -I https://api.coingecko.com/api/v3/ping
(2)詳細交握排查(Verbose 模式)
若連線發生異常或中斷,加上 -v 檢視完整交握過程:
curl -v https://api.coingecko.com/api/v3/ping
輸出會完整呈現 DNS 解析結果、TCP 三向交握、TLS/SSL 憑證驗證歷程,以及送出的 Request 與收到的 Response,有助於找出具體卡在何處。
|明日目標:在排除網路與硬體層級的異常後,明天我們將探討如何使用 journalctl 配合時間篩選與關鍵字過濾,在系統日誌中定位程式異常終止與系統報錯的根本原因。|