Tcp

在 netstat 輸出中區分 TCP 伺服器和客戶端

  • August 2, 2015

我在我的機器上執行的客戶端程序和伺服器程序之間有一個套接字連接。有兩個條目顯示為連接,

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 同樣,通過在兩個程序都處於活動狀態且執行良好時執行,然後觀察它們在它們關閉時的變化,您可能會對此有更好的感覺。

引用自:https://unix.stackexchange.com/questions/219745