TCP/IP系列——長鏈接與短鏈接的區別

1 什麼是長鏈接和短鏈接

 
 

 

三次握手和四次揮手

 
TCP區別於UDP最重要的特色是TCP必須創建在可靠的鏈接之上,鏈接的創建和釋放就是握手和揮手的過程。
三次握手爲鏈接的創建過程,握手失敗則鏈接創建失敗。
四次揮手爲鏈接的 完整釋放過程,也會發生某個消息丟失或者超時的狀況,有一方主動發送 FIN消息即表示鏈接即將釋放。
注: SYN、ACK、FIN消息具備哪些含義,以及鏈接的狀態,請參考《TCP/IP詳解 卷1》第18章。
 

長鏈接

 
長鏈接,也叫持久鏈接,在TCP層握手成功後, 不當即斷開鏈接,並在此鏈接的基礎上進行屢次消息(包括心跳)交互,直至鏈接的任意一方(客戶端OR服務端)主動斷開鏈接,此過程稱爲一次完整的長鏈接。HTTP 1.1相對於1.0最重要的新特性就是引入了長鏈接。
 

短鏈接

 
短鏈接,顧名思義,與長鏈接的區別就是,客戶端收到服務端的響應後, 馬上發送FIN消息,主動釋放鏈接。也有服務端主動斷連的狀況,凡是在一次消息交互(發請求-收響應)以後馬上斷開鏈接的狀況都稱爲短鏈接。
注:短鏈接是創建在TCP協議上的,有完整的握手揮手流程,區別於UDP協議。
 

2 如何快速區分當前鏈接使用的是長鏈接仍是短鏈接

 
一、 凡是在一次完整的消息交互(發請求-收響應)以後,馬上斷開鏈接(有一方發送FIN消息)的狀況都稱爲短鏈接
二、長鏈接的一個明顯特徵是會有心跳消息(也有沒有心跳的狀況),且通常心跳間隔都在30S或者1MIN左右,用wireshark抓包能夠看到有規律的心跳消息交互(可能會存在毫秒級別的偏差)。
 

3 何時用長鏈接,短鏈接?

 
一、須要 頻繁交互的場景使用長鏈接,如即時通訊工具(微信/QQ,QQ也有UDP),相反則使用短鏈接,好比普通的web網站,只有當瀏覽器發起請求時纔會創建鏈接,服務器返回相應後,鏈接當即斷開。
二、 維持長鏈接會有必定的系統開銷,用戶量少不容易看出系統瓶頸,一旦用戶量上去了,就頗有可能把服務器資源(內存/CPU/網卡)耗盡,因此使用需謹慎。
 
 
轉載:
http://jgsj.iteye.com/blog/2050436
相關文章
相關標籤/搜索