精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TCP通信過程中的長連接與短連接是什么?

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-08-08 11:30 ? 次閱讀

當面試官問你:TCP 通信過程中的長連接與短連接是什么?

你應該如何回答?你會嗎?

網絡通信采用tcp協議時,在真正的讀寫操作之前,sever與client之間必須建立一個連接,當讀寫操作完成之后,對方不再需要這個連接時他們可以釋放這個鏈接,連接的連接需要三次握手:

c78cbb2a-3528-11ee-9e74-dac502259ad0.png

釋放需要四次握手:

c7e3ceba-3528-11ee-9e74-dac502259ad0.png

也就是說每個連接的建立都是需要消耗資源和時間的。

tcp 連接

短連接

模擬一種TCP短連接的情況:

client 向 server 發起連接請求

server 接到請求,雙方建立連接

client 向 server 發送消息

server 回應 client

一次讀寫完成,此時雙方任何一個都可以發起 close 操作

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

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

短連接的操作步驟是:

建立連接——數據傳輸——關閉連接…建立連接——數據傳輸——關閉連接

優缺點

短連接對于服務器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段。但如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和帶寬。

應用場景

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

TCP長連接

c800ace2-3528-11ee-9e74-dac502259ad0.png

模擬一種長連接的情況:

client 向 server 發起連接

server 接到請求,雙方建立連接

client 向 server 發送消息

server 回應 client

一次讀寫完成,連接不關閉

后續讀寫操作…

長時間操作之后client發起關閉請求

長連接的操作步驟是:

建立連接——數據傳輸…(保持連接)…數據傳輸——關閉連接

保持連接用到了TCP保活功能

優缺點:

長連接可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間。對于頻繁請求資源的客戶來說,適合長連接

client與server之間的連接如果一直不關閉的話,會存在一個問題,隨著客戶端連接越來越多,server早晚有扛不住的時候,這時候server端需要采取一些策略,如關閉一些長時間沒有讀寫事件發生的連接,這樣可以避免一些惡意連接導致server端服務受損;如果條件再允許就可以以客戶端機器為顆粒度,限制每個客戶端的最大長連接數,這樣可以完全避免某個蛋疼的客戶端連累后端服務。

應用場景:

長連接多用于操作頻繁,點對點的通訊,而且連接數不能太多情況。每個TCP連接都需要三次握手,這需要時間,如果每個操作都是先連接,再操作的話那么處理速度會降低很多,所以每個操作完后都不斷開,再次處理時直接發送數據包就OK了,不用建立TCP連接。

例如:數據庫的連接用長連接,如果用短連接頻繁的通信會造成socket錯誤,而且頻繁的socket 創建也是對資源的浪費。

對比

c80e9e56-3528-11ee-9e74-dac502259ad0.png

短連接環境下,數據交互完畢后,會主動釋放連接;如果使用的是長連接的情況下,如果雙方已經建立起了連接,但是很長一段時間內沒有數據交換,而客戶端可能意外斷電、死機、崩潰、重啟,還是中間路由網絡無故斷開,這些TCP連接沒來得及正常釋放,那么,因為服務端不知道客戶端的情況,他就會一直維護這個連接,長時間的積累會導致非常多的半打開連接,造成服務端系統資源的消耗和浪費。

所以服務端要做到快速感知失敗,減少無效連接操作,這就有了TCP的Keepalive(保活探測)機制。

長連接斷開的原因

在長連接的情況下,雙方的所有通信 都建立在1條長連接上(1次TCP連接);所以,長連接 需要 持續保持雙方連接 才可使得雙方持續通信。

可是,長連接會存在斷開的情況,而斷開原因主要是:

長連接所在進程被殺死

NAT超時

網絡狀態發生變化

其他不可抗因素(網絡狀態差、DHCP的租期等等 )

原因1:進程被殺死

當進程被殺死后,長連接也會隨之斷開。

原因2:NAT 超時(重點關注)

NAT超時現象如下

c822ff72-3528-11ee-9e74-dac502259ad0.png

各運營商 & 地區的 NAT超時時間如下

c854d790-3528-11ee-9e74-dac502259ad0.png

特別注意:排除其他外因(網絡切換、NAT超時、人為原因),TCP長連接在雙方都不斷開連接的情況上,本質上是不會自動中斷的

即,不需要心跳包來維持。

驗證:讓2臺電腦連上同1個Wifi(其中1臺做服務器, 另1臺做客戶端連接服務器(無設置KeepAlive);只要電腦、路由器不斷網斷電,那么,2臺電腦的長連接是不會自動中斷的。

原因3:網絡狀態發生變化

當移動客戶端網絡狀態發生變化時(如移動網絡 & Wifi切換、斷開、重連),也會使長連接斷開。

原因4:其他不可抗因素

如網絡狀態差、DHCP的租期到期等等,都會使得長連接發生偶然的斷開。

DHCP的租期到期:對于Android系統,DHCP到了租期后不會主動續約 & 繼續使用過期IP,,從而導致長連接斷開。

高效維持長連接的解決方案

在了解長連接斷開原因后,針對對應原因,此處給出 高效維持長連接的解決方案。

c861a8ee-3528-11ee-9e74-dac502259ad0.png

為此,若需有效維持長連接,則需要做到。

c86ac1ae-3528-11ee-9e74-dac502259ad0.png

其實,說得簡單點:高效維持長連接的關鍵在于。

保活:處于連接狀態時盡量不要斷

斷線重連:斷了之后繼續重連回來

解決方案1:進程?;?/p>

c8760a6e-3528-11ee-9e74-dac502259ad0.png

解決方案2:心跳?;顧C制

解決方案3:斷線重連機制

心跳?;顧C制簡介

心跳?;顧C制的整體介紹如下

c8efe2bc-3528-11ee-9e74-dac502259ad0.png

注:很多人容易混淆心跳機制 & 輪詢機制,此處給出二者區別。

c91ba32a-3528-11ee-9e74-dac502259ad0.png

主流心跳機制分析 & 對比

對國、內外主流的移動IM產品(WhatsApp、Line、微信)進行了心跳機制的簡單分析 & 對比,具體請看下圖 。

c926dfb0-3528-11ee-9e74-dac502259ad0.png

心跳機制方案 總體設計

下面,將根據市面上主流的心跳機制,設計一套心跳機制方案。

基本流程

c93ed7fa-3528-11ee-9e74-dac502259ad0.png

設計要點

對于心跳機制方案設計的主要考慮因素 = 保證消息的實時性 & 耗費設備的資源(網絡流量、電量、CPU等等)

從上圖可以看出,對于心跳機制方案設計的要點在于

心跳包的規格(內容 & 大小)

心跳發送的間隔時間

斷線重連機制 (核心 = 如何 判斷長連接的有效性)

在下面的方案設計中,將針對這3個問題給出詳細的解決方案。

心跳機制方案詳細設計

心跳包的規格

為了減少流量 & 提高發送效率,需要精簡心跳包的設計。

設計原則

主要從心跳包的內容 & 大小入手,設計原則具體如下:

c960dfd0-3528-11ee-9e74-dac502259ad0.png

設計方案

心跳包 = 1個攜帶少量信息 & 大小在10字節內的信息包。

心跳發送的間隔時間

為了防止NAT超時 & 減少設備資源的消耗(網絡流量、電量、CPU等等),心跳發送的間隔時間是整個心跳機制方案設計的重點。

設計原則

c96f70c2-3528-11ee-9e74-dac502259ad0.png

設計方案

最直接 & 常用方案

一般,最直接 & 常用的心跳發送間隔時間設置方案 :每隔估計 x 分鐘發送心跳包1次。

其中,x <5分鐘即可。(綜合主流移動IM產品,此處建議 x= 4分鐘)。

但是,這種方案存在一些問題:

c985becc-3528-11ee-9e74-dac502259ad0.png

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1351

    瀏覽量

    78999
  • 網絡通信
    +關注

    關注

    4

    文章

    793

    瀏覽量

    29761
  • TCP協議
    +關注

    關注

    1

    文章

    91

    瀏覽量

    12063
  • TCP通信
    +關注

    關注

    0

    文章

    146

    瀏覽量

    4217

原文標題:面試官:什么是 TCP 長連接、短連接?問倒一大片。。。

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何標識一個TCP連接

    tcp應用,server事先在某個固定端口監聽,client主動發起連接,經過三路握手后建立tcp連接。那么對單機,其最大并發
    的頭像 發表于 10-10 10:33 ?2897次閱讀

    LabVIEWTCP通信

    LabVIEWTCP通信CP(transmission contro1 protoco1)是一種面向連接的傳輸層協議,面向
    發表于 09-26 09:59

    CC2541如何連接過程中修改連接間隔?

    CC2541如何連接過程中修改連接間隔?CC2541 連接 APK 傳輸數據,數據傳輸完之后,這時修改連接間隔,但是連接間隔不變;必須斷開重
    發表于 03-31 16:45

    簡單了解TCP設計的連接連接

    TCP 本身并沒有長短連接的區別,長短與否,完全取決于我們怎么用它。 連接:每次通信時,創建 Socket;一次
    的頭像 發表于 02-01 10:46 ?5038次閱讀
    簡單了解<b class='flag-5'>TCP</b><b class='flag-5'>中</b>設計的<b class='flag-5'>短</b><b class='flag-5'>連接</b>和<b class='flag-5'>長</b><b class='flag-5'>連接</b>

    一文詳談HTTP協議的連接連接

    HTTP的連接連接本質上是TCP連接
    的頭像 發表于 09-07 10:52 ?2740次閱讀
    一文詳談HTTP協議的<b class='flag-5'>長</b><b class='flag-5'>連接</b>和<b class='flag-5'>短</b><b class='flag-5'>連接</b>

    TCP通信通過網絡調試助手與S7-1200建立TCP連接

    S7-1200 V4.5 版本開始支持網絡視圖組態開放式用戶通信連接,不需要在程序調用 TCON 等建立連接指令,只需要調用發送接收指令即可實現數據的收發。下面以 TCP
    的頭像 發表于 07-06 15:39 ?1.1w次閱讀

    ISO on TCP協議通信連接配置

    使用ISO on TCP 協議通信,除了連接參數的定義不同,其它組態編程與 TCP 協議通信完全相同,見S7-1200 和 S7-1200
    的頭像 發表于 07-21 10:41 ?2489次閱讀

    要是沒有一端進行監聽是否可以建立起TCP連接呢?

    TCP 網絡通信過程中,我們都是先有 server 端調用 listen 監聽某個端口號,然后 client 向 server 發起連接請求,最終建立起
    的頭像 發表于 11-16 17:42 ?2136次閱讀
    要是沒有一端進行監聽是否可以建立起<b class='flag-5'>TCP</b><b class='flag-5'>連接</b>呢?

    字節一面:HTTP連接TCP連接有區別?

    由于 HTTP 是基于 TCP 傳輸協議實現的,客戶端與服務端要進行 HTTP 通信前,需要先建立 TCP 連接,然后客戶端發送 HTTP 請求,服務端收到后就返回響應,至此「請求-
    的頭像 發表于 12-02 14:00 ?998次閱讀

    什么是Socket連接?Socket與TCP連接的關系

    主機 A 的應用程序必須通過 Socket 建立連接才能與主機B的應用程序通信,而建立 Socket 連接需要底層 TCP/IP 協議來建立 TCP
    發表于 03-31 15:10 ?1024次閱讀

    什么是Socket連接?與TCP連接有什么關系?

    什么是Socket連接?它與TCP連接有什么關系? 計算機網絡是我們日常生活不可或缺的一部分,而Socket連接則是網絡
    的頭像 發表于 05-23 11:43 ?724次閱讀

    儲能連接器廠家告訴您生產過程中容易出現的問題

    您對于“儲能連接器生產過程中最容易出現的問題”了解多少,下面我們一同來認識一下儲能連接器生產過程中最容易出現的問題。“儲能連接器廠家告訴您生
    的頭像 發表于 01-12 18:06 ?989次閱讀
    儲能<b class='flag-5'>連接</b>器廠家告訴您生產<b class='flag-5'>過程中</b>容易出現的問題

    TCP連接的建立與中止

    TCP三次握手其實,網絡上的傳輸是沒有連接的, TCP 是一樣的 TCP 所謂的 “連接”,其實只不過是在
    的頭像 發表于 10-08 16:52 ?707次閱讀

    TCP連接連接

    是通過四次揮手。所以說,每個TCP連接的建立和釋放都是需要消耗資源和時間成本的。 二 TCP連接 模擬一種
    的頭像 發表于 11-13 10:46 ?985次閱讀

    使用過程中如何降低連接器摩擦損耗

    連接器的插孔和插針在長期使用過程中,端子會產生難以避免的摩擦損耗,我們常說的插拔壽命在一定程度上指的就是耐磨損性能。用戶在使用過程中應該如何去降低連接器的磨損,延長
    的頭像 發表于 12-13 16:46 ?508次閱讀