netstat 輸出內容詳解,TCP連接握手對應state

 

1.列出全部 tcp與udp 端口

 

 

2下面分析每一項的含義

2.1 關於Proto,Recv-Q,Send-Q等列的具體含義

Proto:協議名(tcp協議仍是udp協議)mysql

recv-Q:網絡接收隊列
表示收到的數據已經在本地接收緩衝,可是還有多少沒有被進程取走,recv()
若是接收隊列Recv-Q一直處於阻塞狀態,多是遭受了拒絕服務 denial-of-service 攻擊。sql

send-Q:網路發送隊列
對方沒有收到的數據或者說沒有Ack的,仍是本地緩衝區.
若是發送隊列Send-Q不能很快的清零,多是有應用向外發送數據包過快,或者是對方接收數據包不夠快。緩存

這兩個值一般應該爲0,若是不爲0多是有問題的。packets在兩個隊列裏都不該該有堆積狀態。可接受短暫的非0狀況。服務器

從步驟一的結果中能夠看到22端口對應的鏈路的 send-Q中堆積了大量的數據包 ,能夠斷定是發送數據給目的地址的時候出現了阻塞的問題,致使了包堆積在本地緩存中,不能成功發出去。網絡

2.2 Local Address 解釋

1)Local Address 部分的0.0.0.0:22 表示監聽服務器上全部ip地址的全部(0.0.0.0表示本地全部ip),好比你的服務器是有172.172.230.210和
172.172.230.11兩個ip地址,那麼0.0.0.0:22此時表示監聽172.172.230.210,172.172.230.211,127.0.0.1三個地址的22端口socket

2):::22 這個也表示監聽本地全部ip的22端口,跟上面的區別是這裏表示的是IPv6地址,上面的0.0.0.0表示的是本地全部IPv4地址
NOTE
「:::」 這三個: 的前兩個"::",是"0:0:0:0:0:0:0:0"的縮寫,至關於IPv6的"0.0.0.0",就是本機的全部IPv6地址,第三個:是IP和端口的分隔符tcp

3)127.0.0.1:631 這個表示監聽本機的loopback地址的631端口(若是某個服務只監聽了迴環地址,那麼只能在本機進行訪問,沒法經過tcp/ip 協議進行遠程訪問)oop

4)::1:631 這個表示監聽IPv6的迴環地址的631端口,::1這個表示IPv6的loopback地址spa

5)172.172.230.211:3306 這裏咱們看到咱們的mysqld進程監聽的是172.172.230.211的3306端口,這是由於咱們在啓動的時候指定了bind_address=172.172.230.211參數,若是不指定bind_address的話,mysqld默認監聽:::3306(本機全部ip地址的3306端口 -IPv6).net

 

2.3 Foreign Address

與本機端口通訊的外部socket。顯示規則與Local Address相同

2.4 State

鏈路狀態,共有11種

state列共有12中可能的狀態,前面11種是按照TCP鏈接創建的三次握手和TCP鏈接斷開的四次揮手過程來描述的。

狀態 描述
LISTEN

首先服務端須要打開一個socket進行監聽,狀態爲LISTEN.

/* The socket is listening for incoming connections. 偵聽來自遠方TCP端口的鏈接請求 */

SYN_SENT

客戶端經過應用程序調用connect進行active open.因而客戶端tcp發送一個SYN以請求創建一個鏈接.以後狀態置爲SYN_SENT

/*The socket is actively attempting to establish a connection. 在發送鏈接請求後等待匹配的鏈接請求 */

SYN_RECV

服務端應發出ACK確認客戶端的 SYN,同時本身向客戶端發送一個SYN. 以後狀態置爲SYN_RECV

/* A connection request has been received from the network. 在收到和發送一個鏈接請求後等待對鏈接請求的確認 */

ESTABLISHED

表明一個打開的鏈接,雙方能夠進行或已經在數據交互了

/* The socket has an established connection. 表明一個打開的鏈接,數據能夠傳送給用戶 */

FIN_WAIT1

主動關閉(active close)端應用程序調用close,因而其TCP發出FIN請求主動關閉鏈接,以後進入FIN_WAIT1狀態

/* The socket is closed, and the connection is shutting down. 等待遠程TCP的鏈接中斷請求,或先前的鏈接中斷請求的確認 */

CLOSE_WAIT

被動關閉(passive close)端TCP接到FIN後,就發出ACK以迴應FIN請求(它的接收也做爲文件結束符傳遞給上層應用程序),並進入CLOSE_WAIT

/* The remote end has shut down, waiting for the socket to close. 等待從本地用戶發來的鏈接中斷請求 */

FIN_WAIT2

主動關閉端接到ACK後,就進入了 FIN-WAIT-2 .

/* Connection is closed, and the socket is waiting for a shutdown from the remote end. 從遠程TCP等待鏈接中斷請求 */

LAST_ACK

被動關閉端一段時間後,接收到文件結束符的應用程 序將調用CLOSE關閉鏈接。這致使它的TCP也發送一個 FIN,等待對方的ACK.就進入了LAST-ACK 

/* The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原來發向遠程TCP的鏈接中斷請求的確認 */

TIME_WAIT

在主動關閉端接收到FIN後,TCP 就發送ACK包,並進入TIME-WAIT狀態。

/* The socket is waiting after close to handle packets still in the network.等待足夠的時間以確保遠程TCP接收到鏈接中斷請求的確認 */

CLOSING

比較少見.

/* Both sockets are shut down but we still don’t have all our data sent. 等待遠程TCP對鏈接中斷的確認 */

CLOSED

被動關閉端在接受到ACK包後,就進入了closed的狀態。鏈接結束.

/* The socket is not being used. 沒有任何鏈接狀態 */

UNKNOWN

未知的Socket狀態。

/* The state of the socket is unknown. */

 


備註
SYN: (同步序列編號,Synchronize Sequence Numbers)該標誌僅在三次握手創建TCP鏈接時有效。表示一個新的TCP鏈接請求。
ACK: (確認編號,Acknowledgement Number)是對TCP請求的確認標誌,同時提示對端系統已經成功接收全部數據。
FIN: (結束標誌,FINish)用來結束一個TCP回話.但對應端口仍處於開放狀態,準備接收後續數據。

 

2.5  TCP連接和斷開連接過程,兩個端的狀態:

創建連接:

 

 

斷開連接:

 

2.5 PID/Program

PID即進程id,Program即便用該socket的應用程序

相關文章
相關標籤/搜索