netstat命令
用於顯示本機網絡的連接狀態、運行端口和路由表等信息。
netstat命令的參數選項及說明
-r 顯示路由表信息,該功能類似於前面學過的route 和ip route
-g 顯示多播功能群組成員,該功能類似於前面學過的ip maddr
-i 顯示網絡接口信息,該功能類似於前面學過的ip -s link
-s 顯示各類協議的統計信息
-n 顯示數字形式的地址而不是去解析主機、端口或用戶名。默認情況下,netstat命令會嘗試解析並顯示主機的主機名,這個過程通常比較長也是非必需的
-a 顯示處於監聽狀態和非監聽狀態的socket信息
-A 顯示指定網絡類型的網絡連接狀態
-c<秒數> 后面跟的秒數表示每隔幾秒就刷新顯示一次
-l 僅顯示連接狀態為“LISTEN”的服務的網絡狀態
-t 顯示所有的TCP連接情況
-u 顯示所有的UDP連接情況
-p 顯示socket所屬進程的PID和名稱
常用選項組合1
[root@cs6 ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 64 10.0.0.100:22 10.0.0.1:2827 ESTABLISHED
tcp 0 0 10.0.0.100:22 10.0.0.1:6358 ESTABLISHED
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 12335 /dev/log
unix 2 [ ACC ] STREAM LISTENING 12689 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 12697 private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 12702 private/rewrite
unix 2 [ ACC ] STREAM LISTENING 12706 private/bounce
unix 2 [ ACC ] STREAM LISTENING 12710 private/defer
unix 2 [ ACC ] STREAM LISTENING 12714 private/trace
unix 2 [ ACC ] STREAM LISTENING 12718 private/verify
unix 2 [ ACC ] STREAM LISTENING 12722 public/flush
unix 2 [ ACC ] STREAM LISTENING 12726 private/proxymap
針對該命令的第一行內容進行了說明。
第一行活動網絡連接說明
第一列 Proto socket使用的協議(TCP、UDP、RAW)
第二列 Recv-Q 接收到但是還未處理的字節數
第三列 Send-Q 已經發送但是未被遠程主機確認收到的字節數
第四列 Local Address 本地主機地址和端口
第五列 Foreign Address 遠程主機地址和端口
第六列 State socket的狀態,通常僅僅有TCP的狀態,狀態值可有ESTABLISHED、SYN_SENT、SYN_RECV、FIN_WAIT1、FIN_WAIT2、TIME_WAIT等
第6列 State狀態信息詳解
ESTABLISHED socket已經建立連接,表示處於連接的狀態,一般認為有一個ESTABLISHED 是一個服務的並發連接。
該連接狀態在生產場景中很重要,需要重點關注
SYN_SENT socket正在積極嘗試建立一個連接,即處於發送后連接前的一個等待但未匹配進入連接的狀態
SYN_RECV 已經從網絡上收到一個連接請求
FIN_WAIT1 socket已關閉,連接正在或正要關閉
FIN_WAIT2 連接已關閉,並且socket正在等待遠端結束
TIME_WAIT socket正在等待關閉處理仍在網絡上的教據包,這個連接狀態在生產場景中很重要,需要重點關注
CLOSED socket不再被占用了
CLOSE_WAIT 遠端已經結束,等待socket關閉
LAST_ACK 遠端已經結束,並且socket也已關閉,等待acknowledgement
LISTEN socket正在監聽連接請求
CLOSING socket關閉,但是我們仍舊沒有發送數據
UNKNOWN socket狀態未知
常用選項組合2
[root@cs6 ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1358/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1437/master
tcp 0 0 :::22 :::* LISTEN 1358/sshd
tcp 0 0 ::1:25 :::* LISTEN 1437/master
以上命令語句的作用為顯示所有TCP和UDP正在監聽的連接信息。
-l:顯示所有LISTEN狀態的網絡連接。
-n:顯示IP地址,不進行DNS解析成主機名、域名。
-t:顯示所有TCP連接。
-u:顯示所有UDP連接。
-p:顯示進程號和進程名。
顯示當前系統的路由表。
[root@cs6 ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.1.0.0 10.0.0.253 255.255.255.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
選項-i顯示網絡的接口狀況。
[root@cs6 ~]# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 5405 0 0 0 3518 0 0 0 BMRU
eth1 1500 0 0 0 0 0 18 0 0 0 BMRU
lo 65536 0 0 0 0 0 0 0 0 0 LRU
以下是命令結果解釋。
lface:表示網絡設備的接口名稱。
MTU:表示最大傳輸單元,單位為字節。
RX-OK/TX-OK:表示已經准確無誤地接收/發送了多少數據包。
RX-ERR/TX-ERR:表示接收/發送數據包時產生了多少錯誤。
RX-DRP/TX-DRP:表示接收/發送數據包時丟棄了多少數據包。
RX-OVR/TX-OVR:表示由於誤差而遺失了多少數據包。
Flg:表示接口標記,其中各標記含義具體如下。
- L:表示該接口是個回環設備。
- B:表示設置了廣播地址。
- M:表示接收所有數據包。
- R:表示接口正在運行。
- U:表示接口處於活動狀態。
- o:表示在該接口上禁用arp。
- P:表示一個點到點的連接。
正常情況下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都應該為0,如果這幾個選項的值不為0,並且很大,那么網絡質量肯定有問題,網絡傳輸性能也一定會下降。
[root@bzhl ~]# netstat -n|awk '/^tcp/ {++lewen[$NF]} END {for (a in lewen) print a ,lewen[a]}'
ESTABLISHED 5
TIME_WAIT 1
