tcp 短連線 優化

2021-07-11 17:23:44 字數 1185 閱讀 8304

背景

在做dispatchsvr傳送http請求到業務server的時候,client端設定了1s的timeout,結果當網路出現問題的時候,client出現了大量timeout,並且關閉連線,這時候發現client的cpu和記憶體有大量增長。

原理tcp

結束的過程如下

:server                             client

-------------- fin -------------->  server: fin_wait_1

<------------- ack --------------- client: close_wait  server:fin_wait_2

<------------- fin  --------------- client

發出fin

之後就關閉

-------------- ack ------------->  server

發出ack

後進入time_wait

狀態time_wait

的預設時間是2倍的

mls,就是

240秒鐘。

mls是

tcp片在網上的最長存活時間。

time_wait

的主要作用是保證關閉的

tcp埠不立即被使用。因為當網路存在延遲時,可能當某個埠被關閉後,網路中還有一些重傳的

tcp片在發向這個埠,如果這個埠立即建立新的

tcp連線,則可能會有影響。所以使用2倍的

msl時間來限制這個埠立即被使用。

解決方法

修改7層負載所在機器,/etc/sysctl.conf

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_fin_timeout = 30

儲存後sysctl -p生效

TCP 長連線 短連線

當網路通訊時採用tcp協議時,在真正的讀寫操作之前,server與client之間必須建立乙個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立是需要三次握手的,而釋放則需要4次揮手,所以說每個連線的建立都是需要資源消耗和時間消耗的 示意圖 長連線 連線 資料傳輸 保持連...

tcp長連線與短連線

長連線就是在tcp建立連線後,讀寫一次資料完成之後並不立即釋放連線,而短連線是在一次tcp連線之後只進行一次資料的讀寫就釋放連線。程式設計中要使乙個套接字所建立的連線成為長連線,可以使用setsockopt 函式。它使用的是tcp的keepalive定時功能,利用sysctl a grep tcp ...

TCP 長連線和短連線

一 長連線與短連線 長連線 client方與server方先建立連線,連線建立後不斷開,然後再進行報文傳送和接收。這種方式下由於通訊連線一直存在。此種方式常用於p2p通訊。短連線 client方與server每進行一次報文收發交易時才進行通訊連線,交易完畢後立即斷開連線。此方式常用於一點對多點通訊。...