日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于心跳包

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于心跳包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

心跳包的作用

TCP連接在默認的情況下就是所謂的長連接, 也就是說連接雙方都不主動關閉連接, 這個連接就應該一直存在.

明確一點, TCP長連接本質上不需要心跳包來維持, 大家可以試一試, 讓兩臺電腦連上同一個wifi, 然后讓其中一臺做服務器, 另一臺用一個普通的沒有設置KeepAliveSocket連上服務器, 只要兩臺電腦別斷網, 路由器也別斷電, DHCP正常續租, 就這么放著, 過幾個小時再用其中一臺電腦通過之前建立的TCP連接給另一臺發消息, 另一臺肯定能收到.

那為什么要有心跳包呢? 其實主要是為了防止上面提到的NAT超時, 既然一些NAT設備判斷是否淘汰NAT映射的依據是一定時間沒有數據, 那么客戶端就主動發一個數據.

當然, 如果僅僅是為了防止NAT超時, 可以讓服務器來發送心跳包給客戶端, 不過這樣做有個弊病就是, 萬一連接斷了, 服務器就再也聯系不上客戶端了. 所以心跳包必須由客戶端發送, 客戶端發現連接斷了, 還可以嘗試重連服務器.

所以心跳包的主要作用是防止NAT超時, 其次是探測連接是否斷開.

鏈路斷開, 沒有寫操作的TCP連接是感知不到的, 除非這個時候發送數據給服務器, 造成寫超時, 否則TCP連接不會知道斷開了. 主動kill掉一方的進程, 另一方會關閉TCP連接, 是系統代進程給服務器發的FIN. TCP連接就是這樣, 只有明確的收到對方發來的關閉連接的消息(收到RST也會關閉, 大家都懂), 或者自己意識到發生了寫超時, 否則它認為連接還存在.

?

心跳包和輪詢的區別

心跳包和輪詢看起來類似, 都是客戶端主動聯系服務器, 但是區別很大.

  • 輪詢是為了獲取數據, 而心跳是為了?;頣CP連接.
  • 輪詢得越頻繁, 獲取數據就越及時, 心跳的頻繁與否和數據是否及時沒有直接關系
  • 輪詢比心跳能耗更高, 因為一次輪詢需要經過TCP三次握手, 四次揮手, 單次心跳不需要建立和拆除TCP連接.

轉載于:https://www.cnblogs.com/mjblogs/p/5253266.html

總結

以上是生活随笔為你收集整理的关于心跳包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。