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

    tcp心跳機(jī)制(tcp 心跳)

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

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

    ChatGPT國內(nèi)免費在線使用,能給你生成想要的原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    你只需要給出你的關(guān)鍵詞,它就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端,官網(wǎng):https://ai.de1919.com

    本文目錄:

    tcp心跳機(jī)制(tcp 心跳)

    一、tcp的幾個半狀態(tài)

    當(dāng)TCP連接中 A 向 B 發(fā)送FIN請求關(guān)閉,另一端B回應(yīng)ACK之后,B沒有立即發(fā)送FIN給A,A處于半連接狀態(tài),此時A可以接收B發(fā)送的消息,但是A已經(jīng)不能再向B發(fā)送消息。

    發(fā)送在三次握手中。

    如果A向B發(fā)起連接,B也按照正常情況響應(yīng)了,但是A不進(jìn)行三次握手,這就是半連接。

    半連接攻擊 :半連接,會造成B分配的內(nèi)存資源就這么一直耗著,直到資源耗盡(SYN攻擊)

    如果一方關(guān)閉或者異常關(guān)閉(斷電,斷網(wǎng)),而另一方并不知情,這樣的連接稱之為半打開。

    處于半打開的連接,如果雙方不進(jìn)行數(shù)據(jù)通信,是發(fā)現(xiàn)不了問題的;只有再次通信時才會知道這個連接處于半打開狀態(tài)。

    如:A和B連接,B異常關(guān)閉了,A并不知道B關(guān)閉了,直到A給B發(fā)送消息B無響應(yīng),這時A才知道B出了異常。

    解決辦法 心跳機(jī)制 ,A隔一段時間給B發(fā) 特定消息 ,B收到這個 特定消息 后,回復(fù)A 特定消息(RST包) ,A如果沒收到RST包,就說明需要重新建立連接了。

    二、socket 如果不關(guān)閉會自動關(guān)閉嗎?為什么要心跳連接?

    如果不主動關(guān)閉socket的話,系統(tǒng)不會自動關(guān)閉的,除非當(dāng)前進(jìn)程掛掉了,操作系統(tǒng)把占用的socket回收了才會關(guān)閉。

    為什么需要心跳連接主要是判斷當(dāng)前連接是否是有效的、可被使用的。在實際應(yīng)用中假設(shè)一段時間沒有數(shù)據(jù)傳輸時候理論上說應(yīng)該連接是沒有問題的,但是網(wǎng)絡(luò)復(fù)雜,中途出現(xiàn)問題也是常見的,網(wǎng)線被掐斷了、對方進(jìn)程掛掉了、頻繁丟包等,這時候TCP連接是不可使用的,但是對于應(yīng)用層并不知道,如果需知道網(wǎng)絡(luò)情況則要很復(fù)雜的超時進(jìn)行了解,TCP從底層就實現(xiàn)了這樣的功能。心跳機(jī)制是TCP在一段時間間隔后發(fā)送確定連接端是否還存在,如果存在的話就會回傳一個包確定網(wǎng)絡(luò)有效,如果心跳包有問題,則通知上層應(yīng)用當(dāng)前網(wǎng)絡(luò)有問題了。

    三、tcp建立連接后休眠

    TCP連接建立后,會進(jìn)入休眠狀態(tài),也就是等待客戶端發(fā)出請求報文,此時服務(wù)器會一直保持連接,直到客戶端發(fā)出請求報文或超時時間到達(dá),服務(wù)器才會處理該請求報文并進(jìn)行響應(yīng)。在TCP連接建立后休眠期間,可以使用狀態(tài)輪詢、心跳檢測等機(jī)制來檢測客戶端是否處于活動狀態(tài),以及避免空連接的超時斷開。

    四、paho mqtt c 源碼分析-2 (心跳機(jī)制)

    MQTT是基于TCP的,因此需要考慮連接心跳,paho mqtt c的心跳處理函數(shù)

    概括如下:

    ping_outstanding 在下述函數(shù)中處理,該函數(shù)的調(diào)用是在接收線程中,如果收到云端的 PINGRESP 數(shù)據(jù)包,會調(diào)用該接口

    lastSent 是MQTT消息包發(fā)送完成,調(diào)用的場景如下2個:

    MQTTPacket_Factory(...)

    如果收到一個MQTT packet,則設(shè)置 lastReceived

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


    推薦閱讀:

    itchat打開聊天(打開聊天的英文)

    scratch怎么復(fù)制(scratch怎么復(fù)制代碼)

    itchat無法登錄(無法用itchat登錄網(wǎng)頁微信)

    鄒平公園景觀設(shè)計施工(鄒平公園景觀設(shè)計施工招標(biāo))

    汕頭恩平別墅景觀設(shè)計(汕頭恩平別墅景觀設(shè)計圖)