1. 程式人生 > >TCP 的 三次握手 四次揮手和 長連線 短連線

TCP 的 三次握手 四次揮手和 長連線 短連線

tcp長連線和短連線

TCP在真正的讀寫操作之前,server與

client之間必須建立一個連線,

當讀寫操作完成後,雙方不再需要這個

連線時它們可以釋放這個連線,

連線的建立通過三次握手,釋放則需要

四次握手,

所以說每個連線的建立都是需要資源消

耗和時間消耗的。

TCP通訊的整個過程,如下圖:
在這裡插入圖片描述

1. TCP短連線
模擬一種TCP短連線的情況:

  1. client 向 server 發起連線請求
  2. server 接到請求,雙方建立連線
  3. client 向 server 傳送訊息
  4. server 迴應 client
  5. 一次讀寫完成,此時雙方任何一個都可以發起 close 操作

在步驟5中,一般都是 client 先發起 close 操作。當然也不排除有特殊的情況。

從上面的描述看,短連線一般只會在 client/server 間傳遞一次讀寫操作!
2. TCP長連線

  • client 向 server 發起連線
  • server 接到請求,雙方建立連線
  • client 向 server 傳送訊息
  • server 迴應 client
  • 一次讀寫完成,連線不關閉
  • 後續讀寫操作…
  • 長時間操作之後client發起關閉請求

3. TCP長/短連線操作過程
3.1 短連線的操作步驟是:
建立連線——資料傳輸——關閉連線…建立連線——資料傳輸——關閉連線
在這裡插入圖片描述


3.2 長連線的操作步驟是:
建立連線——資料傳輸…(保持連線)…資料傳輸——關閉連線
在這裡插入圖片描述
4. TCP長/短連線的優點和缺點

  • 長連線可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間。

    對於頻繁請求資源的客戶來說,較適用長連線。

  • client與server之間的連線如果一直不關閉的話,會存在一個問題,

    隨著客戶端連線越來越多,server早晚有扛不住的時候,這時候server端需要採取一些策略,

    如關閉一些長時間沒有讀寫事件發生的連線,這樣可以避免一些惡意連線導致server端服務受損;

    如果條件再允許就可以以客戶端機器為顆粒度,限制每個客戶端的最大長連線數,

    這樣可以完全避免某個蛋疼的客戶端連累後端服務。

  • 短連線對於伺服器來說管理較為簡單,存在的連線都是有用的連線,不需要額外的控制手段。

  • 但如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和頻寬。
    5. TCP長/短連線的應用場景

  • 長連線多用於操作頻繁,點對點的通訊,而且連線數不能太多情況。

    每個TCP連線都需要三次握手,這需要時間,如果每個操作都是先連線,

    再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,

    再次處理時直接傳送資料包就OK了,不用建立TCP連線。

    例如:資料庫的連線用長連線,如果用短連線頻繁的通訊會造成socket錯誤,

    而且頻繁的socket 建立也是對資源的浪費。

  • 而像WEB網站的http服務一般都用短連結,因為長連線對於服務端來說會耗費一定的資源,

    而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源,

    如果用長連線,而且同時有成千上萬的使用者,如果每個使用者都佔用一個連線的話,

    那可想而知吧。所以併發量大,但每個使用者無需頻繁操作情況下需用短連好。