最近搞網路這塊,總結下心跳機制,一般都會在應用層做心跳,而避免適用tcp層的keepalive,主要因為存在以下缺陷:
1,keepalive的目的是探測連線是否存在,無法檢測能不能傳送資料,比如伺服器由於負載過大到處無法響應請求,應用層的的原因導致資料無法傳輸,但是連線還是正常的,試問對應用程式來說,是否該判斷該連線正常麼?
2,如果tcp連線的一端斷網或者斷電,對端的應用層並不知曉,繼續傳送資料,這個資料報的優先順序是高於keepalive的資料報,因此這個keepalive包是無法傳送出去的,只有在長時間的重傳失敗後,我們才能判斷連線斷開,這段長時間,應用及其容易產生業務邏輯bug。
3,keepalive的資料報如果碰到四層負載均衡的中繼裝置,它會被中繼裝置接收並不會傳到對端,造成無法準確判斷連線是否存活。
4,如果軟體通過網際網路而非區域網,那有些運營商會過濾掉keepalive資料報,這種問題要是出現,絕對讓你欲哭無淚。
總體還說,各位還是在應用層實現心跳機制,默借助於tcp的keepalive,除非你確定不用關心上述的四個問題。
表示層 應用層
表示層 功能 為異種機通訊提供一種公共語言,以便能進行互操作。這種型別的服務之所以需要,是因為不同的計算機體系結構使用的資料表示法不同。例如,ibm主機使用ebcdic編碼,而大部分pc機使用的是ascii碼。在這種情況下,便需要表示層來完成這種轉換。應用層 包含了通常要使用的協議 http協議 超...
應用層協議
應用層協議定義了執行在不同端系統上的應用程式程序如何相互傳遞訊息。特別是定義了 交換的訊息型別,如請求訊息和響應訊息。各種訊息型別的語法,如訊息中的各個字段及其詳細描述。欄位的語義,即包含在字段中的資訊的含義。程序何時 如何傳送訊息及對訊息進行響應的規則。有些應用層協議是由rfc文件定義的,因此它們...
應用層協議
dns 網域名稱解析協議 http 超文字傳輸協議 ftp 文字傳輸協議 tlent internet遠端登入服務的標準協議 smtp 簡單郵件傳輸協議 snmp 簡單網路管理協議 ssh 協議 加密的安全的連線 ftp 給予tcp文字傳輸的協議 tftp 基於udp,簡單檔案傳輸協議 1.網域名稱...