伺服器accept佇列溢位及其解決

2021-09-12 14:12:23 字數 988 閱讀 2116

之前對我的netserver伺服器進行測試,在經壓力測試一段時間之後,資料曲線降0,之後所有的連線都連不上,我認為不是伺服器掛了就是監聽埠出問題了,於是看了下伺服器還在執行,埠還在listened(通過命令檢視:netstat -ltp),非常奇怪,這說明監聽正常,能夠進行三次握手的。

後來抓包分析,發現三次握手正常建立,但是伺服器竟然重傳了第二次握手包,總共5次,根據這個現象來看,表面上是伺服器沒有收到客戶端的ack確認才會觸發第二次握手的重傳的,但是實際上抓包抓到了ack ,而且單機內部測試不太可能在傳輸過程中丟包。

猜測:收到ack包後,核心協議棧處理出問題了,並沒有把連線放到全連線佇列中,可能全連線佇列已滿並溢位。

網上看核心協議棧的tcp連線建立過程如下:

於是我執行命令netsta -s | grep -i listen,ss -lnt 發現佇列真的溢位了。

網上查詢解決辦法,調大accept佇列,listen引數和somaxconn(預設128),而且又查到了tcp_abort_on_overflow,等於0時直接丟棄,定時器繼續計時;等於1時傳送rst給客戶端,斷開連線。

1. time_wait 問題解決

cat /etc/sysctl.conf

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

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

net.ipv4.tcp_timestamps

2.常見網路核心引數優化

net.ipv4.tcp_syncookies=1

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

3.net.ipv4.tcp_max_syn_backlog = 16384

linux 伺服器端應用層accept函式使用講解

1.應用層accept函式 處於監聽狀態的伺服器在獲得客戶機的連線請求後,會將其放置在等待佇列中。當系統空閒時,將接受客戶機的連線請求。接收客戶機的連線請求使用accept函式,該函式的具體資訊如表所示。標頭檔案 函式形式 int accept int sockfd,struct sockaddr ...

雙線伺服器技術及其原理

雙線空間的伺服器雙線路接入技術 簡稱雙線路技術 就是在乙個網際網路資料中心 idc 通過特殊的技術手段。把不同的網路接入商 isp 服務接入到一台伺服器或乙個伺服器集群上面,來使其所提供的網路服務訪問使用者能盡可能以同乙個isp或互訪速度較快的isp連線來進行訪問,從而解決或者減輕跨isp使用者訪問...

nginx伺服器防sql注入與溢位

不可能是全完美的,動態網頁在實用中難免會遇到sql注入的攻擊。而通過nginx的配置過濾,可以很好的避免被攻擊的可能。sql注入攻擊一般問號後面的請求引數,在nginx裡用 query string表示 一 特殊字元過濾 例如url plus list.php?tid 19 mid 22 後面帶的單...