日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

解决TIME_WAIT过多造成的问题

發布時間:2025/3/21 ChatGpt 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决TIME_WAIT过多造成的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#netstat -n | awk '/^tcp/ {++S[$NF]} END { for(a in S) print(a,S[a])}'

LAST_ACK?14
SYN_RECV?348
ESTABLISHED?70
FIN_WAIT1?229
FIN_WAIT2?30
CLOSING?33
TIME_WAIT?18122?

狀態:描述
CLOSED:無連接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉

也就是說,這條命令可以把當前系統的網絡連接狀態分類匯總。

下面解釋一下為啥要這樣寫:

一個簡單的管道符連接了netstat和awk命令。

——————————————————————

先來看看netstat:

netstat?-n

Active?Internet?connections?(w/o?servers)
Proto?Recv-Q?Send-Q?Local?Address?Foreign?Address?State
tcp?0?0?123.123.123.123:80?234.234.234.234:12345?TIME_WAIT

你實際執行這條命令的時候,可能會得到成千上萬條類似上面的記錄,不過我們就拿其中的一條就足夠了。

——————————————————————

再來看看awk:

/^tcp/
濾出tcp開頭的記錄,屏蔽udp,?socket等無關記錄。

state[]相當于定義了一個名叫state的數組

NF
表示記錄的字段數,如上所示的記錄,NF等于6

$NF
表示某個字段的值,如上所示的記錄,$NF也就是$6,表示第6個字段的值,也就是TIME_WAIT

state[$NF]表示數組元素的值,如上所示的記錄,就是state[TIME_WAIT]狀態的連接數

++state[$NF]表示把某個數加一,如上所示的記錄,就是把state[TIME_WAIT]狀態的連接數加一

END
表示在最后階段要執行的命令

for(key?in?state)
遍歷數組

print?key,”\t”,state[key]打印數組的鍵和值,中間用\t制表符分割,美化一下。

如發現系統存在大量TIME_WAIT狀態的連接,通過調整內核參數解決,
vim?/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?時間

下面附上TIME_WAIT狀態的意義:

客戶端與服務器端建立TCP/IP連接后關閉SOCKET后,服務器端連接的端口
狀態為TIME_WAIT

是不是所有執行主動關閉的socket都會進入TIME_WAIT狀態呢?
有沒有什么情況使主動關閉的socket直接進入CLOSED狀態呢?

主動關閉的一方在發送最后一個?ack?后
就會進入?TIME_WAIT?狀態?停留2MSL(max?segment?lifetime)時間
這個是TCP/IP必不可少的,也就是“解決”不了的。

也就是TCP/IP設計者本來是這么設計的
主要有兩個原因
1。防止上一次連接中的包,迷路后重新出現,影響新連接
(經過2MSL,上一次連接中所有的重復包都會消失)
2。可靠的關閉TCP連接
在主動關閉方發送的最后一個?ack(fin)?,有可能丟失,這時被動方會重新發
fin,?如果這時主動方處于?CLOSED?狀態?,就會響應?rst?而不是?ack。所以
主動方要處于?TIME_WAIT?狀態,而不能是?CLOSED?。

TIME_WAIT?并不會占用很大資源的,除非受到攻擊。

還有,如果一方?send?或?recv?超時,就會直接進入?CLOSED?狀態

總結

以上是生活随笔為你收集整理的解决TIME_WAIT过多造成的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。