Linux ss 命令網絡排錯教學

# 用 Linux `ss` 命令排查網絡連線問題 今次同大家分享一個好實用嘅 Linux 網絡排錯技巧:用 `ss` 命令快速睇清楚部機嘅網絡連線狀態。好多 IT 同事仲用緊舊嘅 `netstat`,其實 `ss` 已經係現代 Linux 嘅標準工具,快好多、資訊又齊。 ## 點解要用 ss 而唔用 netstat `netstat` 係一個好老嘅工具,靠讀 `/proc/net/` 入面嘅文件...

Linux ss 命令網絡排錯教學 - 文章重點速覽 infographic

# 用 Linux `ss` 命令排查網絡連線問題

今次同大家分享一個好實用嘅 Linux 網絡排錯技巧:用 `ss` 命令快速睇清楚部機嘅網絡連線狀態。好多 IT 同事仲用緊舊嘅 `netstat`,其實 `ss` 已經係現代 Linux 嘅標準工具,快好多、資訊又齊。

## 點解要用 ss 而唔用 netstat

`netstat` 係一個好老嘅工具,靠讀 `/proc/net/` 入面嘅文件嚟攞資料,當部機有成萬個 socket 連線嘅時候,佢就會好慢,仲可能卡住。`ss` 直接由 kernel 攞 socket 資訊,速度快好多,格式又易睇。

喺大部分現代發行版(CentOS 7+、Ubuntu 16.04+、Debian 9+)入面,`ss` 已經預設裝好,直接喺 terminal 打 `ss` 就用到。

## 基本用法

最簡單嘅做法,就係乜參數都唔加,直接打:

ss

呢個會列出所有 socket,但通常太多,睇唔曬。所以我哋會加參數篩選。

### 睇所有 TCP 連線

ss -t

`-t` 代表 TCP。想連 UDP 一齊睇,就加埋 `-u`:

ss -tu

### 睇正在監聽嘅 port

呢個係最常用嘅,想知道部機開咗咩服務、聽緊咩 port:

ss -tlnp

參數逐個解:
– `-t`:TCP
– `-l`:只顯示 listening(監聽中)
– `-n`:唔好做 DNS 反查,直接顯示 IP 同 port 數字,快好多
– `-p`:顯示邊個 process 用緊呢個 socket

輸出大概係咁:

State    Recv-Q  Send-Q  Local Address:Port   Peer Address:Port  Process
LISTEN   0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
LISTEN   0       128     0.0.0.0:443          0.0.0.0:*          users:(("nginx",pid=5678,fd=6))

一眼就知部機開咗 SSH(22)同 nginx(443)。

## 排查連線狀態

想睇所有 TCP 連線嘅狀態,用:

ss -tan

輸出會有 `ESTAB`(已建立)、`TIME-WAIT`、`CLOSE-WAIT`、`SYN-SENT` 等狀態。呢啲狀態對排錯好有用:

– **TIME-WAIT 太多**:通常係部機做 client,開咗好多短連線,等 kernel 回收。正常情況,但如果去到幾萬個,可能要調整 kernel 參數。
– **CLOSE-WAIT 多**:代表對面已經閂咗連線,但你嘅 application 冇閂返,可能係程式 bug,socket 冇 close。
– **SYN-SENT 一堆**:代表部機一直發 SYN 但對方冇回應,可能係 network 不通或者對方 firewall 擋咗。

## 統計資訊

想睇整體統計,用 `-s`:

ss -s

會顯示總共幾多 socket、TCP 幾多、UDP 幾多、各狀態分佈,一眼睇曬部機嘅網絡健康情況。

## 實戰例子:揾出邊個 process 霸住 port 80

假設你想開個 web server,但 port 80 已經俾人用咗,你要揾出係邊個:

ss -tlnp | grep ':80'

輸出會直接話你知係邊個 process、PID 幾多,之後你可以決定 kill 佢定係改自己個 port。

## 小結

`ss` 係 Linux 網絡排錯嘅利器,記住幾個常用組合就得:

– `ss -tlnp` — 睇監聽中嘅 TCP port 同 process
– `ss -tan` — 睇所有 TCP 連線狀態
– `ss -s` — 睇統計
– `ss -tu` — TCP + UDP 一齊睇

🔗 參考資料:NVD NIST 漏洞資料庫

下次部機網絡有問題,唔好再慢慢等 `netstat` 喇,直接 `ss` 啦!