HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務(wù)案例
NEWS 熱點資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    tcp長連接(tcp長連接保持多久)

    發(fā)布時間:2023-03-19 11:20:22     稿源: 創(chuàng)意嶺    閱讀: 59        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于tcp長連接的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    tcp長連接(tcp長連接保持多久)

    一、tcp長連接如何實現(xiàn)

    關(guān)于面向 tcp/ip 協(xié)議的可靠連接的網(wǎng)絡(luò) socket 編程,必須要按照 tcp/ip協(xié)議的 server/client 模型進行編程和調(diào)試。

    二、TCP keepalive 和 http keep-alive 以及心跳?;?/strong>

    HTTP的長連接和短連接本質(zhì)上是TCP長連接和短連接。

    短連接

    短連接,顧名思義,與長連接的區(qū)別就是,客戶端收到服務(wù)端的響應(yīng)后,立刻發(fā)送FIN消息,主動釋放連接。也有服務(wù)端主動斷連的情況,凡是在一次消息交互(發(fā)請求-收響應(yīng))之后立刻斷開連接的情況都稱為短連接。

    長連接/http keep-alive

    也叫持久連接,即一個TCP連接服務(wù)多次請求,在TCP層握手成功后,不立即斷開連接,并在此連接的基礎(chǔ)上進行多次消息(包括心跳)交互,直至連接的任意一方(客戶端OR服務(wù)端)主動斷開連接,此過程稱為一次完整的長連接。

    在HTTP/1.0中得到了初步的支持,客戶端在請求header中攜帶Connection:Keep-Alive,即是在向服務(wù)端請求持久連接。如果服務(wù)端接受持久連接,則會在響應(yīng)header中同樣攜帶Connection: Keep-Alive,這樣客戶端便會繼續(xù)使用同一個TCP連接發(fā)送接下來的若干請求。(Keep-Alive的默認參數(shù)是[timout=5, max=100],即一個TCP連接可以服務(wù)至多5秒內(nèi)的100次請求)

    HTTP/1.1開始,即使請求header中沒有攜帶Connection: Keep-Alive,傳輸也會默認以持久連接的方式進行,只有加入"Connection: close "后,才關(guān)閉。

    http keepalive是客戶端瀏覽器與服務(wù)端httpd守護進程協(xié)作的結(jié)果。

    TCP中的KeepAlive

      TCP協(xié)議的實現(xiàn)中,提供了KeepAlive報文,用來探測連接的對端是否存活。在應(yīng)用交互的過程中,可能存在以下幾種情況:

    客戶端或服務(wù)器意外斷電,死機,崩潰,重啟;

    中間網(wǎng)絡(luò)已經(jīng)中斷,而客戶端與服務(wù)器并不知道;

    利用?;钐綔y功能,可以探知這種對端的意外情況,從而保證在意外發(fā)生時,可以釋放半打開的TCP連接。TCP?;顖笪慕换ミ^程如下:

    因此,KeepAlive并不適用于檢測雙方存活的場景,這種場景還得依賴于應(yīng)用層的心跳。 應(yīng)用層心跳也具備著更大的靈活性,可以控制檢測時機,間隔和處理流程,甚至可以在心跳包上附帶額外信息。

    應(yīng)用層心跳是檢測連接有效性以及判斷雙方是否存活的有效方式 。但是心跳過于頻繁會帶來 耗電和耗流量 的弊病,心跳頻率過低則會影響連接檢測的實時性。業(yè)內(nèi)關(guān)于心跳時間的設(shè)置和優(yōu)化,主要基于如下幾個因素:

    理想的情況下,客戶端應(yīng)當(dāng)以略小于NAT超時時間的間隔來發(fā)送心跳包。 根據(jù)微信團隊測試的一些數(shù)據(jù),一些常用網(wǎng)絡(luò)的NAT超時時間如下表所示:

    TCP的KeepAlive機制意圖在于?;?、心跳,檢測連接錯誤

    如何快速區(qū)分當(dāng)前連接使用的是長連接還是短連接

    1、凡是在一次完整的消息交互(發(fā)請求-收響應(yīng))之后,立刻斷開連接(有一方發(fā)送FIN消息)的情況都稱為短連接;

    2、長連接的一個明顯特征是會有心跳消息(也有沒有心跳的情況),且一般心跳間隔都在30S或者1MIN左右,用wireshark抓包可以看到有規(guī)律的心跳消息交互(可能會存在毫秒級別的誤差)。

    什么時候用長連接,短連接?

    1、需要頻繁交互的場景使用長連接,如即時通信工具(微信/QQ,QQ也有UDP),相反則使用短連接,比如普通的web網(wǎng)站,只有當(dāng)瀏覽器發(fā)起請求時才會建立連接,服務(wù)器返回相應(yīng)后,連接立即斷開。

    2、維持長連接會有一定的系統(tǒng)開銷,用戶量少不容易看出系統(tǒng)瓶頸,一旦用戶量上去了,就很有可能把服務(wù)器資源(內(nèi)存/CPU/網(wǎng)卡)耗盡,所以使用需謹慎。

    keep-alive與TIME_WAIT

    使用http keep-alvie,可以減少服務(wù)端TIME_WAIT數(shù)量(因為由服務(wù)端httpd守護進程主動關(guān)閉連接)。道理很簡單,相較而言,啟用keep-alive,建立的tcp連接更少了,自然要被關(guān)閉的tcp連接也相應(yīng)更少了。

    短連接和長鏈接 圖:

    參考: https://caofengbin.github.io/2018/03/16/dhcp-and-nat/#4-%E5%BD%B1%E5%93%8D%E5%BF%83%E8%B7%B3%E9%A2%91%E7%8E%87%E7%9A%84%E5%85%B3%E9%94%AE%E5%9B%A0%E7%B4%A0

    https://blog.csdn.net/hengyunabc/article/details/44310193

    http://wingjay.com/2018/12/05/android-arch-long-link/

    https://www.levicc.com/2018/06/30/yi-dong-duan-wang-luo-you-hua/

    能被我參考的都很優(yōu)秀,哈哈

    三、TCP/IP, UDP, HTTP, WebSocket, RPC及協(xié)議包結(jié)構(gòu)

    WebSocket對客戶端和服務(wù)端的要求

    參考資料

    http://www.websocket.org/index.html

    https://segmentfault.com/a/1190000012709475

    https://www.liaoxuefeng.com/wiki/1022910821149312/1103303693824096

    https://www.cnblogs.com/nnngu/p/9347635.html

    https://www.cnblogs.com/bianzy/p/5822426.html

    https://www.cnblogs.com/jingmoxukong/p/7755643.html (nginx代理WebSocket)

    https://segmentfault.com/a/1190000012948613

    https://www.jianshu.com/p/42260a2575f8

    https://www.jianshu.com/p/45cbc2252c11 (參考資源)

    https://www.jianshu.com/p/9e63767c04e1

    https://www.jianshu.com/p/e41a329ef353 (握手等過程參考這里)

    TCP 標(biāo)志位

    TCP狀態(tài)

    建立連接協(xié)議(三次握手)

    連接終止協(xié)議(四次握手)

    https://blog.csdn.net/yangyangye/article/details/38851271 (詳解)

    https://blog.csdn.net/zzhongcy/article/details/21992471

    1.為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢?

    2. 為什么不能用兩次握手進行連接?

    3.為什么TIME_WAIT狀態(tài)還需要等2MSL后才能返回到CLOSED狀態(tài)?

    TCP短連接

    TCP長連接

    TCP長/短連接的優(yōu)點和缺點

    TCP長/短連接的應(yīng)用場景

    wireshark

    https://www.jianshu.com/p/e41a329ef353 (參考這里)

    https://www.jianshu.com/p/7c01759c28dd (https加密傳輸參考這里)

    使用集線器組成一個網(wǎng)絡(luò)

    使用交換機組成一個網(wǎng)絡(luò)

    使用路由器連接多個網(wǎng)絡(luò)(組包, 拆包過程)

    通信過程

    https://www.jianshu.com/p/209576915459

    參考資源

    https://www.jianshu.com/p/9e63767c04e1 (各種協(xié)議包結(jié)構(gòu))

    https://www.jianshu.com/p/29868fb82890 (TCP三次握手四次揮手)

    四、TCP長連接出現(xiàn)Too many open files,該怎么處理

    這是因為網(wǎng)絡(luò)請求過多,也就導(dǎo)致了系統(tǒng)打開的文件過多。每一個連接都會當(dāng)成“文件”看待的。

    于是用命令

    ulimit -a

    (效果:查看每個用戶允許打開的最大文件數(shù))

    看到最大文件數(shù)是1024,將其更改大點,如

    ulimit -n 4096

    然后必須重啟下網(wǎng)絡(luò)服務(wù),我用的是WebLogic,重啟之后便沒有出現(xiàn)異常。

    導(dǎo)致 Too many open files ,網(wǎng)絡(luò)請求過多是一種可能,但也有可能是程序上的缺陷,如沒有釋放一些文件句柄,程序open了文件卻忘記了在最后close。但我確信工程中沒有用到打開文件這一環(huán)節(jié),因此這個可能是排除掉了。

    用lsof -p [進程ID] 可以看到某ID的打開文件狀況。進程ID可能用 ps -ef|grep java列出weblogic的進程ID,然后用此ID套入lsof -p ID號,咳,一大堆的請求喲,這顯然是網(wǎng)絡(luò)請求過多造成了 Too many open files。適當(dāng)調(diào)整后便已消除這種現(xiàn)象。

    以上就是關(guān)于tcp長連接相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    cat讀卡特嗎(catcard)

    tcp抓包命令(tcp 抓包)

    gptchat怎么讀(gp英語怎么讀)

    gpt指標(biāo)多少正常(gpt多少算偏高)

    深夜的快手直播間(深夜的快手直播間怎么進)

      提交需求1對1免費咨詢

      填寫需求或發(fā)送郵件至:ving7@vip.qq.com
      也可以直接撥打總監(jiān)電話:400 6363 321

      *

      *

      品牌設(shè)計
      卡通形象設(shè)計
      商標(biāo)注冊
      包裝設(shè)計
      物料設(shè)計
      電商設(shè)計
      品牌策劃
      空間設(shè)計
      SEO優(yōu)化
      直播帶貨
      代運營服務(wù)