TCP全連線佔滿問題

2021-10-25 20:29:58 字數 852 閱讀 3456

在實際工作中經常碰到一種情況,流量**的時候,服務端會出現大量的超時。此時的處理辦法一般是擴容。

實際上就算沒有流量**,當某個介面速度變慢時,呼叫該介面的服務也會出現超時。

不管是流量**(qps增加)還是介面變慢,導致超時的直接原因都是系統吞吐量不足(系統吞吐量 = qps / 響應時間)。

當系統吞吐量不足時,大量請求就會在介面上堆積得不到及時的處理,表現出來就是連線超時或介面超時。

建立tcp連線時需要三次握手。

整體流程如下圖所示:

不管是半連線佇列(syn queue)還是全連線佇列(accept queue),都是有長度限制的,超過長度限制時,核心會直接丟棄或者返回rst包。

可以使用ss(比netstat更快)命令檢視tcp全連線佇列的情況。

#   -l  顯示處於listen狀態的socket

# -n 不解析服務名稱

# -t 只顯示tcp socket

ss -lnt

其中,recv-q表示全連線佇列的大小,也就是已完成三次握手並等待服務端accept()的tcp連線個數。send-q表示全連線最大佇列長度,預設是128。

注意在非listen狀態下(不使用-l引數),recv-q/send-q表示的含義是不同的。

其中recv-q表示已收到但未被應用程序讀取的位元組數。send-q表示已傳送到未收到確認的位元組數。

TCP半連線佇列和全連線佇列

半連線佇列 syn queue 全連線佇列 accept queue ss lnt recv q send q local address port peer address port 0 100 8080 當連線處於時listen狀態,send q表示accept queue的最大值,recv q...

面試經典問題 TCP連線經典問題

1.為什麼建立連線是三次握手,而關閉連線卻是四次握手呢?因為服務端的listen狀態下的socket當收到syn報文的連線請求後,它可以把ack和syn ack起應答作用,syn同步作用 放在乙個報文中傳送。但關閉連線時,當收到對方的fin報文時,僅僅表示對方想要斷開連線,但未必你想,因為不會馬上關...

TCP從連線到釋放過程全解

參考書籍 計算機網路第5版 tcp是面向連線的協議,採用c s模型建立連線,由client主動發起連線請求,server端允許請求的模式建立連線,通常稱為三次握手建立tcp連線。準備條件 b的server端先建立傳輸控制塊tcb。準備接受client程序的連線請求,此時server程序處於liste...