網路連接中的長連接和短鏈接是什麼意思?


首先介紹下短鏈接和長連接的區別:
短連接
連接-&>傳輸數據-&>關閉連接
比如HTTP是無狀態的的短鏈接,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
具體就是 瀏覽器client發起並建立TCP連接 -&> client發送HttpRequest報文 -&> server接收到報文-&>server handle並發送HttpResponse報文給前端,發送完畢之後立即調用socket.close方法
-&>client接收response報文-&>client最終會收到server端斷開TCP連接的信號-&>client 端斷開TCP連接,具體就是調用close方法。

也可以這樣說:短連接是指SOCKET連接後,發送接收完數據後馬上斷開連接。
因為連接後接收了數據就斷開了,所以每次數據接受處理不會有聯繫。 這也是HTTP協議無狀態的原因之一。

長連接
連接-&>傳輸數據-&>保持連接 -&> 傳輸數據-&> ...........-&>直到一方關閉連接,多是客戶端關閉連接。
長連接指建立SOCKET連接後不管是否使用都保持連接,但安全性較差。

HTTP在短鏈接和長連接上的選擇:

HTTP是無狀態的 ,也就是說,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話

HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連接支持(貌似最新的HTTP1.1 可以顯示的指定 keep-alive),但還是無狀態的,或者說是不可以信任的。
如果瀏覽器或者伺服器在其頭信息加入了這行代碼 Connection:keep-alive
TCP連接在發送後將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了帶寬。
實現長連接要客戶端和服務端都支持長連接。

什麼時候用長連接,短連接?
長連接多用於操作頻繁,點對點的通訊,而且連接數不能太多情況,。每個TCP連接都需要三步握手,這需要時間,如果每個操作都是先連接,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接發送數據包就OK了,不用建立TCP連接。例如:資料庫的連接用長連接, 如果用短連接頻繁的通信會造成socket錯誤,而且頻繁的socket 創建也是對資源的浪費。

而像WEB網站的http服務一般都用短鏈接,因為長連接對於服務端來說會耗費一定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連接用短連接會更省一些資源,如果用長連接,而且同時有成千上萬的用戶,如果每個用戶都佔用一個連接的話,那可想而知吧。所以並發量大,但每個用戶無需頻繁操作情況下需用短連好。

總之,長連接和短連接的選擇要視情況而定。

具體網路中的應用的話:

http 1.0一般就指短連接,smtp,pop3,telnet這種就可以認為是長連接。一般的網路遊戲應用都是長連接


沒有數據傳也要保持tcp連接就是長連接。反之就是短連接。

打個比方。幼兒園老師和小朋友是長連接,老師時不時要關注有沒有小朋友丟了跑了出意外了,有意無意周期性地看一下每個小朋友。大學老師和學生就是短連接。


你說的是網路上的長連接嗎?
在內網中,數據流經過防火牆時,防火牆會有一個默認的超時時間,比如TCP連接最多1小時無數據傳輸就斷開了(視防火牆型號),超過這個時間會自動斷開。
普通應用一般不需要長連接,但是一些特殊應用如SQL連接等往往需要一直連著,這時候穿越防火牆往往會碰到長連接問題,可能一夜沒數據,第二天早上發現斷開了


推薦閱讀:

選擇重傳協議的滑動窗口大小為什麼必須小於或等於序號空間大小的一半?
TCP中使用PPP在數據鏈路層建立連接的意義是什麼?
我是個layman,對網路技術當中的IP理解不好,麻煩大家科普一下,謝謝?
如何在一條丟包率 30% 的鏈路上建立低延遲連接?
何時IPV6 才能普及?

TAG:長連接 | 計算機網路 | TCPIP | TCP |