檢視系統TCP連線資源

2022-09-17 23:03:20 字數 2742 閱讀 4732

一、檢視系統tcp連線資源命令

netstat

netstat -n | awk '/^tcp/ end '

二、系統tcp連線的介紹

tcp狀態轉移要點

tcp協議規定,對於已經建立的連線,網路雙方要進行四次握手才能成功斷開連線,如果缺少了其中某個步驟,將會使連線處於假死狀態,連線本身占用的資源不 會被釋放。網路伺服器程式要同時管理大量連線,所以很有必要保證無用連線完全斷開,否則大量僵死的連線會浪費許多伺服器資源。在眾多tcp狀態中,最值得 注意的狀態有兩個:close_wait和time_wait。  

1、listening狀態

ftp服務啟動後首先處於偵聽(listening)狀態。

2、established狀態

established的意思是建立連線。表示兩台機器正在通訊

3、close_wait

對方主動關閉連線或者網路異常導致連線中斷,這時我方的狀態會變成close_wait 此時我方要呼叫close()來使得連線正確關閉。  

簡單來說close_wait數目過大是由於被動關閉連線處理不當導致的。

4、time_wait

我方主動呼叫close()斷開連線,收到對方確認後狀態變為time_wait。tcp協議規定time_wait狀態會一直持續2msl(即兩倍的分 段最大生存期),以此來確保舊的連線狀態不會對新連線產生影響。處於time_wait狀態的連線占用的資源不會被核心釋放,所以作為伺服器,在可能的情 況下,盡量不要主動斷開連線,以減少time_wait狀態造成的資源浪費。

目前有一種避免time_wait資源浪費的方法,就是關閉socket的linger選項。但這種做法是tcp協議不推薦使用的,在某些情況下這個操作可能會帶來錯誤。

5、syn_sent狀態

syn_sent狀態表示請求連線,當你要訪問其它的計算機的服務時首先要發個同步訊號給該埠,此時狀態為syn_sent,如果連線成功了就變為 established,此時syn_sent狀態非常短暫。但如果發現syn_sent非常多且在向不同的機器發出,那你的機器可能中了衝擊波或**波 之類的病毒了。這類病毒為了感染別的計算機,它就要掃瞄別的計算機,在掃瞄的過程中對每個要掃瞄的計算機都要發出了同步請求,這也是出現許多 syn_sent的原因。

根據tcp協議定義的3次握手斷開連線規定,發起socket主動關閉的一方 socket將進入time_wait狀態,time_wait狀態將持續2個msl(max segment lifetime),在windows下預設為4分鐘,即240秒,time_wait狀態下的socket不能被**使用. 具體現象是對於乙個處理大量短連線的伺服器,如果是由伺服器主動關閉客戶端的連線,將導致伺服器端存在大量的處於time_wait狀態的socket, 甚至比處於established狀態下的socket多的多,嚴重影響伺服器的處理能力,甚至耗盡可用的socket,停止服務. time_wait是tcp協議用以保證被重新分配的socket不會受到之前殘留的延遲重發報文影響的機制,是必要的邏輯保證.

windows 機器設定

在hkey_local_machine\system\currentcontrolset\services\tcpip\parameters,右鍵新增名為tcptimedwaitdelay的

dword鍵,設定為60,以縮短time_wait的等待時間

ubuntu機器設定

vi /etc/sysctl.conf

編輯檔案,加入以下內容:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

然後執行/sbin/sysctl -p讓引數生效。

net.ipv4.tcp_syncookies = 1表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn攻擊,預設為0,表示關閉;

net.ipv4.tcp_tw_reuse = 1表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1表示開啟tcp連線中time-wait sockets的快速**,預設為0,表示關閉。

net.ipv4.tcp_fin_timeout修改系統預設的 timeout 時間

檢視系統tcp連線資源命令

netstat

netstat -n | awk '/^tcp/ end '

一般情況下,系統的socket資源預設5000個。(非官方)

tcp協議中有time_wait這個狀態

主要有兩個原因

1。防止上一次連線中的包,迷路後重新出現,影響新連線(經過2msl,上一次連線中所有的重複包都會消失)

2。可靠的關閉tcp連線。在主動關閉方傳送的最後乙個 ack(fin) ,有可能丟失,這時被動方會重新發

fin, 如果這時主動方處於 closed 狀態 ,就會響應 rst 而不是 ack。所以主動方要處於 time_wait 狀態,而不能是 closed 。

linux檢視tcp連線情況

查詢指定埠80埠連線 netstat nat grep i 80 統計80埠連線數 netstat nat grep i 80 wc l 統計httpd協議連線數 listen 偵聽來自遠方的tcp埠的連線請求 syn sent 再傳送連線請求後等待匹配的連線請求 syn received 再收到和...

系統資源檢視

1 vmstat命令監控系統資源 root localhost vmstat 重新整理延時 重新整理次數 例如 root localhost proc vmstat 1 3 2 dmesg開機時核心檢測資訊 root localhost dmesg root localhost dmesg grep...

Linux系統資源檢視

1.vmstat命令監控系統資源 vmstat 重新整理延時 重新整理次數 root better vmstat 1 3 procs memory swap io system cpu r b swpd free buff cache si so bi bo in cs us sy id wa st...