TCP/UDP協議深度解析(四):TCP的粘包問題以及異常情況處理

?在這里插入圖片描述


🔍 開發者資源導航 🔍
🏷??博客主頁:?個人主頁
📚?專欄訂閱:?JavaEE全棧專欄

?本系列往期內容~

TCP/UDP協議深度解析(一):UDP特性與TCP確認應答以及重傳機制

TCP/UDP協議深度解析(二):TCP連接管理全解,三次握手四次揮手的完整流程

TCP/UDP協議深度解析(三):TCP流量控制的魔法—滑動窗口、擁塞控制與ACK的智慧

一、 粘包問題

因為TCP協議是面向字節流的,因此接收方收到的數據是一段連續的數據,接收方無法判斷那一段數據是一個整體,這一段連續的數據就像是“粘”在了一起,無法區分,而這就稱之為“粘包問題”。

?1.1 解決方法

該問題在傳輸層層面無解,想要解決這個問題需要站在應用層角度來解決。

1.約定包與包之間的分隔符

約定某一個字符作為該段數據的結束標志,例如使用換行符'\n'。

2.約定包的長度或格式

例如:約定包的前n個字節表示數據的長度?。

解決粘包問題是在自定義應用層格式的時候要考慮的問題,但是已經存在成熟的解決方案,例如:json、protobuf等,因此不必過多操心該問題。

?二、TCP連接時的異常情況處理

2.1 進程崩潰

四次揮手的進行并不依賴進程,因此如果某個進程崩潰,它和正常退出沒有本質區別,并不會出現異常情況。

2.2 主機關機

正常的關機都會先殺死用戶的進程,但是關機也需要一定的時間,如果這段時間內揮手結束,那么就和正常一樣,如果這段時間沒有揮完也是可以將連接釋放掉的。

2.3 接收方掉電

如果接收方掉電,發送方發送的信息將不會再收到ack,此時無論多少次的超時重傳都無法解決問題,當達到一定次數后,發送方會主動發送一個“復位報文”,重置TCP連接,如果還是收不到ack,那么發送方就會主動釋放掉連接。

?2.4 發送方掉電

如果發送方突然掉電了,接收方因為是被動的一方,無法確認對方現在是休息了還是掛掉了,因此他只能等待下去,但是并不會無限等待,超過一定的時間后會主動的發送“心跳包”,來確認對方的狀況。

心跳包并不包含載荷,他只是為了觸發對方的ack,如果沒有心跳就認為對方掛掉了,進行RST復位,再不行就會釋放掉該連接。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915174.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

R 基礎語法

R 基礎語法 R 語言是一種針對統計計算和圖形表示而設計的編程語言,廣泛應用于數據分析、統計學習、生物信息學等領域。本文將為您介紹 R 語言的基礎語法,幫助您快速入門。 1. R 語言環境搭建 在開始學習 R 語言之前,您需要安裝并配置 R 語言環…

語義熵怎么增強LLM自信心的

語義熵怎么增強LLM自信心的 一、傳統Token熵的問題(先理解“痛點”) 比如模型回答“阿司匹林是否治療頭痛?”→ 輸出“是” 傳統Token熵:只看“詞的概率”,比如“是”這個詞的概率特別高(Token熵0.2,數值低說明確定性強 )。 但實際風險:醫學場景里,“是”的字面肯定…

javaweb的幾大常見漏洞

CTF javaweb中幾大常見漏洞(基于java-security靶場) 對于CTF而言,java類型的題目基本都是白盒代碼審計,在java類型的web題目增長的今天,java代碼審計能力在ctf比賽中尤為重要。 這篇博客主要是給大家介紹一下一些常見漏洞在java代碼里面大概是…

【設計模式C#】外觀模式(用于解決客戶端對系統的許多類進行頻繁溝通)

一種結構性設計模式。特點是將復雜的子系統調用邏輯封裝到一個外觀類,從而使客戶端更容易與系統交互。優點:簡化了接口的調用;降低了客戶端與子系統的耦合度;封裝了子系統的邏輯。缺點:引入了額外的類,可能…

【PTA數據結構 | C語言版】二叉堆的快速建堆操作

本專欄持續輸出數據結構題目集,歡迎訂閱。 文章目錄題目代碼題目 請編寫程序,將 n 個順序存儲的數據用快速建堆操作調整為最小堆;最后順次輸出堆中元素以檢驗操作的正確性。 輸入格式: 輸入首先給出一個正整數 c(≤1…

【數據結構初階】--雙向鏈表(二)

🔥個人主頁:草莓熊Lotso 🎬作者簡介:C研發方向學習者 📖個人專欄: 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言:生活是默默的堅持,毅力是永久的…

vue-cli 模式下安裝 uni-ui

目錄 easycom 自定義easycom配置的示例 npm安裝 uni-ui 準備 sass 安裝 uni-ui 注意 easycom 傳統vue組件,需要安裝、引用、注冊,三個步驟后才能使用組件。easycom將其精簡為一步。 只要組件路徑符合規范(具體見下)&#…

JavaSE-接口

概念在Java中,接口可以被看成是一種公共規范,是一種引用數據類型。語法1.接口的定義格式與類的定義格式基本相同,將class關鍵字替換為interface關鍵字:public interface IShape {}2.類與接口之間使用implements關鍵字來實現接口&a…

常用類學習

文章目錄字符串相關的類String的特性String對象的創建字符串相關的類String類與其他結構之間的轉換StringBuffer,StringBuilderStringBuffer類的常用方法JDK8之前日期時間APIjava.lang.System類java.util.Date類java.text.SimpleDateFormat類java.util.Calendar類JDK8中新日期時…

【Python庫包】Gurobi-Optimize (求解 MIP) 安裝

目錄Step1:注冊賬號Step2:獲取Licence另:完整安裝 Gurobi軟件參考本博客簡介Gurobi-Optimizer的安裝(Python 環境)。 Step1:注冊賬號 官網-Gurobi-Optimizer ??注意: Gurobi 是商業軟件&…

【滲透測試】NmapScanHelper 掃描輔助工具

目錄NmapScanHelper 掃描輔助工具一、功能特性二、文件說明三、使用方法1. 安裝依賴macOSUbuntu/DebianCentOS/RHEL2. 配置網段3. 運行掃描基本用法常用端口掃描示例掃描模式特殊環境模式選擇性掃描自定義文件4. 查看結果四、掃描模式說明標準模式特殊環境模式五、支持的 Nmap …

Python爬蟲入門到實戰(1)-requests庫

一.網絡爬蟲庫網絡爬蟲通俗來講就是使用代碼將HTML網頁的內容下載到本地的過程。爬取網頁主要是為了獲取網之間需要中的關鍵信息,例如網頁中的數據、圖片、視頻等。urllib庫:是Python自帶的標準庫,無須下載、安裝即可直接使用。urllib庫中包含大量的爬蟲…

深入理解設計模式之代理模式:原理、實現與應用

在軟件開發中,我們經常需要控制對某些對象的訪問——可能是為了延遲加載、添加額外功能或保護敏感資源。這正是代理模式大顯身手的地方。作為結構型設計模式的重要成員,代理模式在眾多知名框架和系統中扮演著關鍵角色。本文將全面剖析代理模式的方方面面…

VSCode - VSCode 快速跳轉標簽頁

VSCode 快速跳轉標簽頁 1、標簽頁列表快速跳轉 通過快捷鍵 Ctrl Tab 即可快速跳轉標簽頁 # 操作方式先按住 Ctrl 鍵,再按 Tab 鍵,此時,即可打開標簽頁列表(保持 Ctrl 鍵一直按住)然后,再按 Tab 鍵&#xf…

深入理解設計模式:享元模式(Flyweight Pattern)

在軟件開發中,我們經常會遇到需要創建大量相似對象的情況。如果每個對象都獨立存儲所有數據,將會消耗大量內存資源,導致系統性能下降。享元模式(Flyweight Pattern)正是為解決這一問題而生的經典設計模式。本文將深入探…

網絡大提速,RDMA,IB,iWrap

本章第一節介紹的存儲設備方面的創新解決了CPU訪問存儲設備的性能問題。但在實際的業務當中,數據的傳輸除了在節點內部的CPU與存儲設備間外,節點之間也存在數據傳輸的需求。本節我們就介紹在網絡傳輸方面是如何提速的。 在介紹新的網絡技術之前,我們看看傳統網絡是如何傳輸…

【C++】紅黑樹,“紅“與“黑”的較量

各位大佬好,我是落羽!一個堅持不斷學習進步的大學生。 如果您覺得我的文章有所幫助,歡迎多多互三分享交流,一起學習進步! 也歡迎關注我的blog主頁: 落羽的落羽 一、紅黑樹的概念與規則 紅黑樹是一種更加特殊的平衡二…

【愚公系列】《MIoT.VC》001-認識、安裝 MIoT.VC 軟件

??【行業認證權威頭銜】 ? 華為云天團核心成員:特約編輯/云享專家/開發者專家/產品云測專家 ? 開發者社區全滿貫:CSDN博客&商業化雙料專家/阿里云簽約作者/騰訊云內容共創官/掘金&亞馬遜&51CTO頂級博主 ? 技術生態共建先鋒:橫跨鴻蒙、云計算、AI等前沿領域…

git:tag標簽遠程管理

git tag v1:在當前所在分支創建標簽v1git tag -a v2 -m release version:創建一個帶有附注的標簽git tag -d v2:刪除本地標簽git tag:查看標簽git push origin 標簽1 標簽2……:把多個標簽推送到遠程git push origin -…

力扣 hot100 Day49

105. 從前序與中序遍歷序列構造二叉樹 給定兩個整數數組 preorder 和 inorder &#xff0c;其中 preorder 是二叉樹的先序遍歷&#xff0c; inorder 是同一棵樹的中序遍歷&#xff0c;請構造二叉樹并返回其根節點。 //抄的 class Solution { private:unordered_map<int, i…