Tcp
在 netstat 輸出中區分 TCP 伺服器和客戶端
我在我的機器上執行的客戶端程序和伺服器程序之間有一個套接字連接。有兩個條目顯示為連接,
sudo netstat -ntp | grep 56442 tcp 1 0 127.0.0.1:56442 127.0.0.1:8002 CLOSE_WAIT 8276/python tcp 0 0 127.0.0.1:8002 127.0.0.1:56442 FIN_WAIT2 -
在這種情況下,我如何確定哪個是伺服器?
我知道 TCP 伺服器正在埠上執行
8002
,並且客戶端從埠連接到偵聽伺服器56442
。
netstat
我試圖通過查看輸出條目來找出區分伺服器和客戶端的方法。為什麼套接字處於
FIN_WAIT2
狀態時沒有出現程序ID/描述?
我相信
netstat -ntp
只會在本地地址列中顯示客戶端(非偵聽)套接字。該**
-l
標誌應該導致netstat
僅列出伺服器(偵聽)套接字,並且-a
**您應該同時獲得兩者,然後您可以根據STATE進行區分。
如果
netstat
不帶執行grep
,您會看到中心左側的列具有類似“本地地址”的標題,而中心右側的列具有類似“外國地址”的標題。顯示包含伺服器埠號的本地地址的行是伺服器。如果您同時啟動兩個客戶端程序然後執行,您可能會對此有更好的感覺
sudo netstat -ntp | grep -E "Address|8002"
當套接字處於狀態時,為什麼程序ID/描述不來
FIN_WAIT2
?可能是因為程序已經終止;畢竟,
FIN
代表“完成”或“最終”。FIN 數據包和FIN_
狀態與關閉(關閉)TCP 連接有關,這通常僅在程序完成時發生(並且當一個或兩個程序死亡時自動發生)。在打開它的程序消失後,套接字可以在系統中停留一段時間。netstat
同樣,通過在兩個程序都處於活動狀態且執行良好時執行,然後觀察它們在它們關閉時的變化,您可能會對此有更好的感覺。