天天看點

netstat指令使用方法以及詳解

首先,使用netstat指令需要安裝net-tools工具包

yum -y install net-tools

這樣你就有了兩個linux的常用指令,netstat以及ifconfig

第一部分:用法

1、如果檢視所有的linux的socket(套接字)

顯示如下(我粘出了一部分),會列印出Active Internet connections (servers and established和Active UNIX domain sockets (servers and established)兩段;分别是活躍的網絡連接配接和活躍的unix套接字連接配接

2、查詢所有的TCP或者UDP連接配接

TCP連接配接是-t,UDP連接配接是-u

以下可以看到Local Address段顯示了主機的域名,這種情況會拖慢netstat指令的執行速度

3、拒絕名稱解析

4、顯示伺服器監聽的連接配接(LISTEN狀态的連接配接,可用于查詢服務狀态)

可以看出我的伺服器跑了php、web、資料庫之類的服務

5、顯示socket對應的程序、使用者等,這也是我們最常用的兩種方法

如下查詢server的LISTEN狀态的TCP socket

如下查詢server的所有存在的TCP socket

6、列印統計資料

第二部分:選項解釋(詳情可參閱netstat --help,拿過來翻譯工具走一波)

第三部分:連接配接狀态解析

通常情況下:一個正常的TCP連接配接,都會有三個階段(1、TCP三向交握 2、資料傳送 3、TCP四次揮手)

SYN: (同步序列編号,Synchronize Sequence Numbers)該标志僅在三次握手建立TCP連接配接時有效。表示一個新的TCP連接配接請求。

ACK: (确認編号,Acknowledgement Number)是對TCP請求的确認标志,同時提示對端系統已經成功接收所有資料。

FIN:(結束标志,finish)用來結束一個TCP回話.但對應端口仍處于開放狀态,準備接收後續資料。

1)、LISTEN:首先服務端需要打開一個socket進行監聽,狀态為LISTEN. /* The socket is listening for incoming connections. 偵聽來自遠方TCP端口的連接配接請求 */

2)、SYN_SENT:用戶端通過應用程式調用connect進行active open.于是用戶端tcp發送一個SYN以請求建立一個連接配接.之後狀态置為SYN_SENT. /*The socket is actively attempting to establish a connection. 在發送連接配接請求後等待比對的連接配接請求 */

3)、SYN_RECV:服務端應發出ACK确認用戶端的SYN,同時自己向用戶端發送一個SYN. 之後狀态置為SYN_RECV /* A connection request has been received from the network. 在收到和發送一個連接配接請求後等待對連接配接請求的确認 */

4)、ESTABLISHED: 代表一個打開的連接配接,雙方可以進行或已經在資料互動了。/* The socket has an established connection. 代表一個打開的連接配接,資料可以傳送給使用者 */

5)、FIN_WAIT1:主動關閉(active close)端應用程式調用close,于是其TCP發出FIN請求主動關閉連接配接,之後進入FIN_WAIT1狀态./* The socket is closed, and the connection is shutting down. 等待遠端TCP的連接配接中斷請求,或先前的連接配接中斷請求的确認 */

6)、CLOSE_WAIT:被動關閉(passive close)端TCP接到FIN後,就發出ACK以回應FIN請求(它的接收也作為檔案結束符傳遞給上層應用程式),并進入CLOSE_WAIT. /* The remote end has shut down, waiting for the socket to close. 等待從本地使用者發來的連接配接中斷請求 */

7)、FIN_WAIT2:主動關閉端接到ACK後,就進入了FIN-WAIT-2 ./* Connection is closed, and the socket is waiting for a shutdown from the remote end. 從遠端TCP等待連接配接中斷請求 */

8)、LAST_ACK:被動關閉端一段時間後,接收到檔案結束符的應用程式将調用CLOSE關閉連接配接。這導緻它的TCP也發送一個 FIN,等待對方的ACK.就進入了LAST-ACK . /* The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原來發向遠端TCP的連接配接中斷請求的确認 */

9)、TIME_WAIT:在主動關閉端接收到FIN後,TCP就發送ACK包,并進入TIME-WAIT狀态。/* The socket is waiting after close to handle packets still in the network.等待足夠的時間以確定遠端TCP接收到連接配接中斷請求的确認 */

10)、CLOSING:比較少見./* Both sockets are shut down but we still don’t have all our data sent. 等待遠端TCP對連接配接中斷的确認 */

11)、CLOSED:被動關閉端在接受到ACK包後,就進入了closed的狀态。連接配接結束./* The socket is not being used. 沒有任何連接配接狀态 */

TIME_WAIT狀态的形成隻發生在主動關閉連接配接的一方。

主動關閉方在接收到被動關閉方的FIN請求後,發送成功給對方一個ACK後,将自己的狀态由FIN_WAIT2修改為TIME_WAIT,而必須再等2倍 的MSL(Maximum Segment Lifetime,MSL是一個資料報在internetwork中能存在的時間)時間之後雙方才能把狀态 都改為CLOSED以關閉連接配接。目前RHEL裡保持TIME_WAIT狀态的時間為60秒。

注:第三部分轉自​​https://www.cnblogs.com/jackhub/p/3782598.html​​

繼續閱讀