chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TCP通信過(guò)程中的長(zhǎng)連接與短連接是什么?

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2023-08-08 11:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

當(dāng)面試官問(wèn)你:TCP 通信過(guò)程中的長(zhǎng)連接與短連接是什么?

你應(yīng)該如何回答?你會(huì)嗎?

當(dāng)網(wǎng)絡(luò)通信采用tcp協(xié)議時(shí),在真正的讀寫(xiě)操作之前,sever與client之間必須建立一個(gè)連接,當(dāng)讀寫(xiě)操作完成之后,對(duì)方不再需要這個(gè)連接時(shí)他們可以釋放這個(gè)鏈接,連接的連接需要三次握手:

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

釋放需要四次握手:

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

也就是說(shuō)每個(gè)連接的建立都是需要消耗資源和時(shí)間的。

tcp 連接

短連接

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

client 向 server 發(fā)起連接請(qǐng)求

server 接到請(qǐng)求,雙方建立連接

client 向 server 發(fā)送消息

server 回應(yīng) client

一次讀寫(xiě)完成,此時(shí)雙方任何一個(gè)都可以發(fā)起 close 操作

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

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

短連接的操作步驟是:

建立連接——數(shù)據(jù)傳輸——關(guān)閉連接…建立連接——數(shù)據(jù)傳輸——關(guān)閉連接

優(yōu)缺點(diǎn)

短連接對(duì)于服務(wù)器來(lái)說(shuō)管理較為簡(jiǎn)單,存在的連接都是有用的連接,不需要額外的控制手段。但如果客戶(hù)請(qǐng)求頻繁,將在TCP的建立和關(guān)閉操作上浪費(fèi)時(shí)間和帶寬。

應(yīng)用場(chǎng)景

而像WEB網(wǎng)站的http服務(wù)一般都用短鏈接,因?yàn)殚L(zhǎng)連接對(duì)于服務(wù)端來(lái)說(shuō)會(huì)耗費(fèi)一定的資源,而像WEB網(wǎng)站這么頻繁的成千上萬(wàn)甚至上億客戶(hù)端的連接用短連接會(huì)更省一些資源,如果用長(zhǎng)連接,而且同時(shí)有成千上萬(wàn)的用戶(hù),如果每個(gè)用戶(hù)都占用一個(gè)連接的話(huà),那可想而知吧。所以并發(fā)量大,但每個(gè)用戶(hù)無(wú)需頻繁操作情況下需用短連好。

TCP長(zhǎng)連接

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

模擬一種長(zhǎng)連接的情況:

client 向 server 發(fā)起連接

server 接到請(qǐng)求,雙方建立連接

client 向 server 發(fā)送消息

server 回應(yīng) client

一次讀寫(xiě)完成,連接不關(guān)閉

后續(xù)讀寫(xiě)操作…

長(zhǎng)時(shí)間操作之后client發(fā)起關(guān)閉請(qǐng)求

長(zhǎng)連接的操作步驟是:

建立連接——數(shù)據(jù)傳輸…(保持連接)…數(shù)據(jù)傳輸——關(guān)閉連接

保持連接用到了TCP?;罟δ?/p>

優(yōu)缺點(diǎn):

長(zhǎng)連接可以省去較多的TCP建立和關(guān)閉的操作,減少浪費(fèi),節(jié)約時(shí)間。對(duì)于頻繁請(qǐng)求資源的客戶(hù)來(lái)說(shuō),適合長(zhǎng)連接

client與server之間的連接如果一直不關(guān)閉的話(huà),會(huì)存在一個(gè)問(wèn)題,隨著客戶(hù)端連接越來(lái)越多,server早晚有扛不住的時(shí)候,這時(shí)候server端需要采取一些策略,如關(guān)閉一些長(zhǎng)時(shí)間沒(méi)有讀寫(xiě)事件發(fā)生的連接,這樣可以避免一些惡意連接導(dǎo)致server端服務(wù)受損;如果條件再允許就可以以客戶(hù)端機(jī)器為顆粒度,限制每個(gè)客戶(hù)端的最大長(zhǎng)連接數(shù),這樣可以完全避免某個(gè)蛋疼的客戶(hù)端連累后端服務(wù)。

應(yīng)用場(chǎng)景:

長(zhǎng)連接多用于操作頻繁,點(diǎn)對(duì)點(diǎn)的通訊,而且連接數(shù)不能太多情況。每個(gè)TCP連接都需要三次握手,這需要時(shí)間,如果每個(gè)操作都是先連接,再操作的話(huà)那么處理速度會(huì)降低很多,所以每個(gè)操作完后都不斷開(kāi),再次處理時(shí)直接發(fā)送數(shù)據(jù)包就OK了,不用建立TCP連接。

例如:數(shù)據(jù)庫(kù)的連接用長(zhǎng)連接,如果用短連接頻繁的通信會(huì)造成socket錯(cuò)誤,而且頻繁的socket 創(chuàng)建也是對(duì)資源的浪費(fèi)。

對(duì)比

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

短連接環(huán)境下,數(shù)據(jù)交互完畢后,會(huì)主動(dòng)釋放連接;如果使用的是長(zhǎng)連接的情況下,如果雙方已經(jīng)建立起了連接,但是很長(zhǎng)一段時(shí)間內(nèi)沒(méi)有數(shù)據(jù)交換,而客戶(hù)端可能意外斷電、死機(jī)、崩潰、重啟,還是中間路由網(wǎng)絡(luò)無(wú)故斷開(kāi),這些TCP連接沒(méi)來(lái)得及正常釋放,那么,因?yàn)榉?wù)端不知道客戶(hù)端的情況,他就會(huì)一直維護(hù)這個(gè)連接,長(zhǎng)時(shí)間的積累會(huì)導(dǎo)致非常多的半打開(kāi)連接,造成服務(wù)端系統(tǒng)資源的消耗和浪費(fèi)。

所以服務(wù)端要做到快速感知失敗,減少無(wú)效連接操作,這就有了TCP的Keepalive(?;钐綔y(cè))機(jī)制。

長(zhǎng)連接斷開(kāi)的原因

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

可是,長(zhǎng)連接會(huì)存在斷開(kāi)的情況,而斷開(kāi)原因主要是:

長(zhǎng)連接所在進(jìn)程被殺死

NAT超時(shí)

網(wǎng)絡(luò)狀態(tài)發(fā)生變化

其他不可抗因素(網(wǎng)絡(luò)狀態(tài)差、DHCP的租期等等 )

原因1:進(jìn)程被殺死

當(dāng)進(jìn)程被殺死后,長(zhǎng)連接也會(huì)隨之?dāng)嚅_(kāi)。

原因2:NAT 超時(shí)(重點(diǎn)關(guān)注)

NAT超時(shí)現(xiàn)象如下

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

各運(yùn)營(yíng)商 & 地區(qū)的 NAT超時(shí)時(shí)間如下

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

特別注意:排除其他外因(網(wǎng)絡(luò)切換、NAT超時(shí)、人為原因),TCP長(zhǎng)連接在雙方都不斷開(kāi)連接的情況上,本質(zhì)上是不會(huì)自動(dòng)中斷的

即,不需要心跳包來(lái)維持。

驗(yàn)證:讓2臺(tái)電腦連上同1個(gè)Wifi(其中1臺(tái)做服務(wù)器, 另1臺(tái)做客戶(hù)端連接服務(wù)器(無(wú)設(shè)置KeepAlive);只要電腦、路由器不斷網(wǎng)斷電,那么,2臺(tái)電腦的長(zhǎng)連接是不會(huì)自動(dòng)中斷的。

原因3:網(wǎng)絡(luò)狀態(tài)發(fā)生變化

當(dāng)移動(dòng)客戶(hù)端網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí)(如移動(dòng)網(wǎng)絡(luò) & Wifi切換、斷開(kāi)、重連),也會(huì)使長(zhǎng)連接斷開(kāi)。

原因4:其他不可抗因素

如網(wǎng)絡(luò)狀態(tài)差、DHCP的租期到期等等,都會(huì)使得長(zhǎng)連接發(fā)生偶然的斷開(kāi)。

DHCP的租期到期:對(duì)于Android系統(tǒng),DHCP到了租期后不會(huì)主動(dòng)續(xù)約 & 繼續(xù)使用過(guò)期IP,,從而導(dǎo)致長(zhǎng)連接斷開(kāi)。

高效維持長(zhǎng)連接的解決方案

在了解長(zhǎng)連接斷開(kāi)原因后,針對(duì)對(duì)應(yīng)原因,此處給出 高效維持長(zhǎng)連接的解決方案。

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

為此,若需有效維持長(zhǎng)連接,則需要做到。

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

其實(shí),說(shuō)得簡(jiǎn)單點(diǎn):高效維持長(zhǎng)連接的關(guān)鍵在于。

保活:處于連接狀態(tài)時(shí)盡量不要斷

斷線(xiàn)重連:斷了之后繼續(xù)重連回來(lái)

解決方案1:進(jìn)程?;?/p>

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

解決方案2:心跳?;顧C(jī)制

解決方案3:斷線(xiàn)重連機(jī)制

心跳?;顧C(jī)制簡(jiǎn)介

心跳?;顧C(jī)制的整體介紹如下

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

注:很多人容易混淆心跳機(jī)制 & 輪詢(xún)機(jī)制,此處給出二者區(qū)別。

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

主流心跳機(jī)制分析 & 對(duì)比

對(duì)國(guó)、內(nèi)外主流的移動(dòng)IM產(chǎn)品(WhatsApp、Line、微信)進(jìn)行了心跳機(jī)制的簡(jiǎn)單分析 & 對(duì)比,具體請(qǐng)看下圖 。

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

心跳機(jī)制方案 總體設(shè)計(jì)

下面,將根據(jù)市面上主流的心跳機(jī)制,設(shè)計(jì)一套心跳機(jī)制方案。

基本流程

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

設(shè)計(jì)要點(diǎn)

對(duì)于心跳機(jī)制方案設(shè)計(jì)的主要考慮因素 = 保證消息的實(shí)時(shí)性 & 耗費(fèi)設(shè)備的資源(網(wǎng)絡(luò)流量、電量、CPU等等)

從上圖可以看出,對(duì)于心跳機(jī)制方案設(shè)計(jì)的要點(diǎn)在于

心跳包的規(guī)格(內(nèi)容 & 大?。?/p>

心跳發(fā)送的間隔時(shí)間

斷線(xiàn)重連機(jī)制 (核心 = 如何 判斷長(zhǎng)連接的有效性)

在下面的方案設(shè)計(jì)中,將針對(duì)這3個(gè)問(wèn)題給出詳細(xì)的解決方案。

心跳機(jī)制方案詳細(xì)設(shè)計(jì)

心跳包的規(guī)格

為了減少流量 & 提高發(fā)送效率,需要精簡(jiǎn)心跳包的設(shè)計(jì)。

設(shè)計(jì)原則

主要從心跳包的內(nèi)容 & 大小入手,設(shè)計(jì)原則具體如下:

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

設(shè)計(jì)方案

心跳包 = 1個(gè)攜帶少量信息 & 大小在10字節(jié)內(nèi)的信息包。

心跳發(fā)送的間隔時(shí)間

為了防止NAT超時(shí) & 減少設(shè)備資源的消耗(網(wǎng)絡(luò)流量、電量、CPU等等),心跳發(fā)送的間隔時(shí)間是整個(gè)心跳機(jī)制方案設(shè)計(jì)的重點(diǎn)。

設(shè)計(jì)原則

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

設(shè)計(jì)方案

最直接 & 常用方案

一般,最直接 & 常用的心跳發(fā)送間隔時(shí)間設(shè)置方案 :每隔估計(jì) x 分鐘發(fā)送心跳包1次。

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

但是,這種方案存在一些問(wèn)題:

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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1432

    瀏覽量

    83751
  • 網(wǎng)絡(luò)通信
    +關(guān)注

    關(guān)注

    4

    文章

    845

    瀏覽量

    32650
  • TCP協(xié)議
    +關(guān)注

    關(guān)注

    1

    文章

    101

    瀏覽量

    12819
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4882

原文標(biāo)題:面試官:什么是 TCP 長(zhǎng)連接、短連接?問(wèn)倒一大片。。。

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何標(biāo)識(shí)一個(gè)TCP連接

    tcp應(yīng)用,server事先在某個(gè)固定端口監(jiān)聽(tīng),client主動(dòng)發(fā)起連接,經(jīng)過(guò)三路握手后建立tcp連接。那么對(duì)單機(jī),其最大并發(fā)
    的頭像 發(fā)表于 10-10 10:33 ?3900次閱讀

    LabVIEWTCP通信

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

    CC2541如何連接過(guò)程中修改連接間隔?

    CC2541如何連接過(guò)程中修改連接間隔?CC2541 連接 APK 傳輸數(shù)據(jù),數(shù)據(jù)傳輸完之后,這時(shí)修改連接間隔,但是連接間隔不變;必須斷開(kāi)重
    發(fā)表于 03-31 16:45

    簡(jiǎn)單了解TCP設(shè)計(jì)的連接長(zhǎng)連接

    TCP 本身并沒(méi)有長(zhǎng)短連接的區(qū)別,長(zhǎng)短與否,完全取決于我們?cè)趺从盟? 連接:每次通信時(shí),創(chuàng)建 Socket;一次
    的頭像 發(fā)表于 02-01 10:46 ?5758次閱讀
    簡(jiǎn)單了解<b class='flag-5'>TCP</b><b class='flag-5'>中</b>設(shè)計(jì)的<b class='flag-5'>短</b><b class='flag-5'>連接</b>和<b class='flag-5'>長(zhǎng)</b><b class='flag-5'>連接</b>

    一文詳談HTTP協(xié)議的長(zhǎng)連接連接

    HTTP的長(zhǎng)連接連接本質(zhì)上是TCP長(zhǎng)連接
    的頭像 發(fā)表于 09-07 10:52 ?3536次閱讀
    一文詳談HTTP協(xié)議的<b class='flag-5'>長(zhǎng)</b><b class='flag-5'>連接</b>和<b class='flag-5'>短</b><b class='flag-5'>連接</b>

    TCP通信通過(guò)網(wǎng)絡(luò)調(diào)試助手與S7-1200建立TCP連接

    S7-1200 V4.5 版本開(kāi)始支持網(wǎng)絡(luò)視圖組態(tài)開(kāi)放式用戶(hù)通信連接,不需要在程序調(diào)用 TCON 等建立連接指令,只需要調(diào)用發(fā)送接收指令即可實(shí)現(xiàn)數(shù)據(jù)的收發(fā)。下面以 TCP
    的頭像 發(fā)表于 07-06 15:39 ?1.4w次閱讀

    ISO on TCP協(xié)議通信連接配置

    使用ISO on TCP 協(xié)議通信,除了連接參數(shù)的定義不同,其它組態(tài)編程與 TCP 協(xié)議通信完全相同,見(jiàn)S7-1200 和 S7-1200
    的頭像 發(fā)表于 07-21 10:41 ?3651次閱讀

    要是沒(méi)有一端進(jìn)行監(jiān)聽(tīng)是否可以建立起TCP連接呢?

    TCP 網(wǎng)絡(luò)通信過(guò)程中,我們都是先有 server 端調(diào)用 listen 監(jiān)聽(tīng)某個(gè)端口號(hào),然后 client 向 server 發(fā)起連接請(qǐng)求,最終建立起
    的頭像 發(fā)表于 11-16 17:42 ?2794次閱讀
    要是沒(méi)有一端進(jìn)行監(jiān)聽(tīng)是否可以建立起<b class='flag-5'>TCP</b><b class='flag-5'>連接</b>呢?

    字節(jié)一面:HTTP長(zhǎng)連接TCP長(zhǎng)連接有區(qū)別?

    由于 HTTP 是基于 TCP 傳輸協(xié)議實(shí)現(xiàn)的,客戶(hù)端與服務(wù)端要進(jìn)行 HTTP 通信前,需要先建立 TCP 連接,然后客戶(hù)端發(fā)送 HTTP 請(qǐng)求,服務(wù)端收到后就返回響應(yīng),至此「請(qǐng)求-
    的頭像 發(fā)表于 12-02 14:00 ?1688次閱讀

    什么是Socket連接?Socket與TCP連接的關(guān)系

    主機(jī) A 的應(yīng)用程序必須通過(guò) Socket 建立連接才能與主機(jī)B的應(yīng)用程序通信,而建立 Socket 連接需要底層 TCP/IP 協(xié)議來(lái)建立 TCP
    發(fā)表于 03-31 15:10 ?1732次閱讀

    什么是Socket連接?與TCP連接有什么關(guān)系?

    什么是Socket連接?它與TCP連接有什么關(guān)系? 計(jì)算機(jī)網(wǎng)絡(luò)是我們?nèi)粘I?b class='flag-5'>中不可或缺的一部分,而Socket連接則是網(wǎng)絡(luò)
    的頭像 發(fā)表于 05-23 11:43 ?1451次閱讀

    儲(chǔ)能連接器廠(chǎng)家告訴您生產(chǎn)過(guò)程中容易出現(xiàn)的問(wèn)題

    您對(duì)于“儲(chǔ)能連接器生產(chǎn)過(guò)程中最容易出現(xiàn)的問(wèn)題”了解多少,下面我們一同來(lái)認(rèn)識(shí)一下儲(chǔ)能連接器生產(chǎn)過(guò)程中最容易出現(xiàn)的問(wèn)題?!皟?chǔ)能連接器廠(chǎng)家告訴您生
    的頭像 發(fā)表于 01-12 18:06 ?1937次閱讀
    儲(chǔ)能<b class='flag-5'>連接</b>器廠(chǎng)家告訴您生產(chǎn)<b class='flag-5'>過(guò)程中</b>容易出現(xiàn)的問(wèn)題

    TCP連接的建立與中止

    TCP三次握手其實(shí),網(wǎng)絡(luò)上的傳輸是沒(méi)有連接的, TCP 是一樣的 TCP 所謂的 “連接”,其實(shí)只不過(guò)是在
    的頭像 發(fā)表于 10-08 16:52 ?1401次閱讀

    TCP長(zhǎng)連接連接

    是通過(guò)四次揮手。所以說(shuō),每個(gè)TCP連接的建立和釋放都是需要消耗資源和時(shí)間成本的。 二 TCP連接 模擬一種
    的頭像 發(fā)表于 11-13 10:46 ?2130次閱讀

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

    連接器的插孔和插針在長(zhǎng)期使用過(guò)程中,端子會(huì)產(chǎn)生難以避免的摩擦損耗,我們常說(shuō)的插拔壽命在一定程度上指的就是耐磨損性能。用戶(hù)在使用過(guò)程中應(yīng)該如何去降低連接器的磨損,延長(zhǎng)
    的頭像 發(fā)表于 12-13 16:46 ?1404次閱讀