1. 程式人生 > >Tcp長連線與短連線對高併發的影響

Tcp長連線與短連線對高併發的影響

1、Tcp建立連線需要三次握手,斷開連線需要四次握手。

2、tcp建立連線後將會在作業系統核心記憶體中維護四元組物件(源ip,源port,目標ip,目標port)。

3、tcp在斷開連結時,主動斷開方四元組將會處於time_wait狀態,同時源port不可用,此由作業系統限制。因此本地頻繁的主動斷開tcp連線將很快耗盡埠號。

http協議:

http協議是應用層協議,建立在tcp之上,因此所有tcp上的資料包傳送都有http協議框架觸發。

1、http1.0協議預設為短連結,而且是由伺服器主動斷開連線,當伺服器傳送完資料之後會發送FIN資料包,此時客戶端傳送ACK對FIN進行迴應,等客戶端傳送FIN給服務端,服務端傳送ACK給客戶端,到此TCP才斷開,客戶端TCP連結釋放,但是伺服器端TCP四元組將會進入到Time_Wait狀態,Time_Wait由系統決定,可配置,最低30s,進入Time_Wait的原因是不能保證對方收到最後的ACK。按個人理解,如果服務端傳送主動關閉FIN,客戶端已回覆ACK,此時客戶端良久不回覆Fin,客戶端http框架會強制不活動TCP四元組傳送Fin,結束TCP連線。

2、http1.1協議預設為keep-alive,含義是告訴服務端不要關閉tcp,延遲一段時間再關閉。如果此時客戶端往伺服器傳送tcp包將會更新服務端tcp定時器,保證tcp連線再活一段時間。http協議基於tcp協議,同時基於tcp連線池,如果http發現當前請求有符合的tcp連線將會複用。符合條件:埠號屬於當前客戶端程式,目標地址及埠號符合,同時tcp四元組處於活動狀態即可複用。

總結:高併發用短連結會很快耗盡客戶端埠號,效率甚至不如http請求。解決方案是利用socket連線池長連結。