總結 TCP 協議的相關特性

TCP協議段格式:

?如圖,

端口號:

是其中一個重要的部分,知道端口號才能確認數據交給哪個應用程序(端口號屬于傳輸層的概念).

4位首部長度:4bit表示的范圍是0->15,在此處,單位是"4字節",因此,將這里的數值 * 4,才是真正的報頭長度,即TCP 報頭最大長度,60 字節.
TCP 報頭的前 20 個字節,是固定的.(TCP 報頭的最短長度,20 字節)選項部分,可以有,也可以沒有.可以有一個選項,也可以有多個選項.

需要用首部長度,確認報頭到哪結束,載荷數據從哪開始.

保留(6位):

現在不用,先占個位置,以防后面需要用(目前 tcp 也這么多年,大概率是不用了)

其實也就是給未來留下了可以升級擴展的空間.

TCP特點:

有連接,可靠傳輸(內核實現的 可靠傳輸,寫代碼的時候,是感知不到的),面向字節流,全雙工



可靠傳輸實現機制

確認應答(保證"可靠性"最核心的機制)

在TCP的可靠傳輸機制中,“確認應答”(Acknowledgment)是一種用于確認數據的機制。發送方發送數據段給接收方后,接收方會發送一個特殊的確認應答段(ACK)來告知發送方已經成功接收到數據.

工作原理:

  1. 發送方發送數據段:發送方將數據分成一個或多個數據段,并通過TCP協議將這些數據段發送到接收方。

  2. 接收方接收數據段:接收方收到數據段后,會對數據進行校驗,檢查數據的完整性和是否有錯誤。

  3. 發送確認應答:如果數據段沒有錯誤,接收方會發送一個確認應答段(ACK),該段中包含了接收到的數據段的序列號,通知發送方數據已成功接收。

  4. 發送方處理確認應答:發送方收到確認應答后,會更新發送窗口的狀態,并根據接收方提供的確認應答信息進行相應處理,如確認成功發送的數據段、啟動定時器等。

  5. 超時重傳:如果發送方在指定的時間內未收到確認應答,它會認為該數據段丟失或損壞,觸發超時重傳機制。發送方會重新發送未收到確認應答的數據段,以確保數據的可靠傳輸。

后發先至

當連續發多條數據的時候,可能會出現"后發先至"的情況,即一個數據報,是先發的另一個是后發的后發的反而先到了(由于網絡的延遲、擁塞或丟包等原因,可能會導致部分數據段的順序被打亂,即后收到的數據段可能先到達接收方)

如何解決呢?

對數據進行編號

?

?確認序號的數值,就是收到的最后一個字節的編號再加一.

注意:TCP是面向字節流的,不是按照“條”為單位來傳輸.

?只要知道這一串字節的開始編號,以及數據的長度每個字節的編號自然也就知道了
只需要在 tcp 報頭中,把這-串字節第一個字節的編號,表示出來再結合報文長度,此時每個字節的編號就確定了

?ACK 為 0 表示這是一個普通的報文,此時只有 32 位序號是有效的.ACK為 1,表示這是一個應答報文,這個報文的 序號 和 確認序號 都是有效的

如此就有辦法能區分出,當前這個報文是普通報文,還是一個確認應答報文

超時重傳:

確認應答,是 TCP 保證可靠性的最核心機制
超時重傳,也是 TCP 可靠性機制的有效補充

丟包,在網絡上很可能出現,發一個數據, 然后丟了.

路由器/交換機 就是交通樞紐
結構復雜,傳輸的數據量也是不確定這一會傳輸的數據比較少過一會數據就很多了
如果設備太繁忙了,后面新來的數據等太久了就可能被丟棄了網絡負載越高,越繁忙就越容易丟包

丟包有兩種情況如圖:

?發送方無法區分哪種情況,既然無法區分,那就全都重傳

丟包本質上是一個“概率性”問題
假設丟包的概率是 10%,傳輸成功的概率是 90%

連續兩次傳輸,都丟包的概率是多少?
10%*10% =>1%
隨著你重傳次數的增加,總體能夠傳輸成功的概率,是更大的
是否會存在,連續重傳多次,仍然丟包呢?當然存在!! 如果當前的丟包概率已經極高了,達到 100%(比如網線斷了),不管咋傳,都是丟的

連接管理:

1.建立連接(三次握手)

2.斷開連接(四次握手)

握手: handshake,使用打招呼來觸發“特定場景
發一個打招呼的數據(這個數據并不會攜帶業務信息)

A和 B 完成建立連接的過程,就需要
文樣的打招呼的數據交互

?

?為什么要合并呢?封裝和分用
合并之后,節省了封裝和分用的過程降低了成本,提高了效率原則,能合并就合并

?六個標志位說明總結:

?

  1. SYN(Synchronize):表示建立連接。在TCP的三次握手過程中,用于建立連接的第一個數據段會將SYN標志位設置為1。當接收方收到帶有SYN標志位的數據段時,它會發送一個帶有ACK和SYN標志位的確認應答段,用于確認連接并建立雙向通信。

  2. ACK(Acknowledgment):表示確認。在TCP的確認應答中,ACK標志位用于確認成功接收到數據。它通常與其他標志位一起使用,如SYN、FIN等。

  3. FIN(Finish):表示關閉連接。在TCP的四次握手過程中,用于關閉連接的數據段會將FIN標志位設置為1。當一方發送帶有FIN標志位的數據段時,它表示已經完成數據傳輸,請求關閉連接。另一方收到后會發送一個確認應答,并執行相應的關閉操作。

  4. RST(Reset):表示連接復位。當TCP遇到一些異常情況時,如收到無效的數據段或遇到網絡故障,會發送帶有RST標志位的數據段來中斷連接。RST標志位可以用于快速中止連接,恢復到初始狀態。

  5. PSH(Push):表示立即推送數據。當發送方設置PSH標志位時,接收方會盡快將數據交給應用程序處理,而不是等待緩存區填滿或等待延遲確認。

  6. URG(Urgent):表示緊急數據。當發送方希望發送的數據段中有緊急數據要傳輸時,可以將URG標志位設置為1。接收方在收到含有URG標志位的數據段后,會盡快處理該數據,以便應用程序能夠及時處理。

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

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

相關文章

Cenos7 搭建Minio最新版集群部署服務器(一)

------> 道 | 法 | 術 | 器 | 勢 <------ 多臺服務器間免密登錄|免密拷貝 Cenos7 搭建Minio集群部署服務器(一) Cenos7 搭建Minio集群Nginx統一訪問入口|反向動態代理(二) Spring Boot 與Minio整合實現文件上傳與下載(三) CentOS7的journalctl日志查看方法 …

已知四個坐標點,怎樣求出四邊形的四個內角

1&#xff0c;理論 最簡單的方式利用向量進行求解 如圖可得&#xff1a; cosθa*b/&#xff08;|a|*|b|&#xff09; 已知三點坐標&#xff0c;很容易可以得到兩向量之積a*b&#xff0c;以及每個的模值 2&#xff0c;四個角度求解過程 首先&#xff0c;我們定義了四個坐標點…

在數字游民天堂,Polkadot Hubs 探索建設更緊密的全球社區

分布式辦公是 Web3 行業的協作常態&#xff0c;當數字游民們享受著線上遠程工作的自由和便捷時&#xff0c;也在懷念著一種面對面與他人交流與共創的經歷。共享空間隨之興起&#xff0c;為許多初創項目公司提供開放舒適的環境&#xff0c;卻難以在不同的人群之間搭起一張巨大的…

系統架構設計師考試大綱(2017年)

1.考試目標 考試合格人員應能夠根據系統需求規格說明書,結合應用領域和技術發展的實際情況,考慮有關約束條件,設計正確、合理的軟件架構,確保系統架構具有良好的特性;能夠對項目系統架構進行描述、分析、設計與評估;能夠按照相關標準編寫相應的設計文檔;能夠與系統分析師…

完美解決Github提交PR后報錯:File is not gofumpt-ed (gofumpt)

問題闡述 最近在Github上提交PR后&#xff0c;遇到了這么一個問題&#xff1a;golangci-lint運行失敗&#xff0c;具體原因是File is not gofumpt-ed (gofumpt)。 名詞解釋 golangci-lint&#xff1a; golangci-lint 是Go語言社區中常用的代碼質量檢查工具&#xff0c;它可以…

react中使用shouldComponentUpdate生命周期函數調用setState引起的無限循環的錯誤

場景&#xff1a; 在 React 組件中&#xff0c;當在 componentWillUpdate 或 componentDidUpdate 生命周期方法中調用 setState 時&#xff0c;會觸發無限循環&#xff0c;導致超過最大更新深度。 錯誤原因 在React組件中 &#xff0c;我們使用componentWillUpdate 或 componen…

Windows 2016安裝Jenkins

Jenkins 下載&#xff0c;安裝 下載OpenJDK 11 for Wndows 兩種方式 choco install openjdk11 https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.20%2B8/OpenJDK11U-jdk_x64_windows_hotspot_11.0.20_8.msi how to enable administrator user to …

[自學記錄06|*百人計劃]Gamma矯正與線性工作流

一、前言 Gamma矯正其實也屬于我前面落下的一塊內容&#xff0c;打算把它補上&#xff0c;其它的沒補是因為我之前寫的GAMES101筆記里已經涵蓋了&#xff0c;而Gamma矯正在101里面確實沒提到&#xff0c;于是打算把它補上&#xff0c;這塊內容并不難&#xff0c;但是想通透的理…

我的創作紀念日(256天)

前言 結緣 我與csdn的結緣&#xff0c;之前在創作紀念日&#xff08;128天&#xff09;便已提到&#xff0c;今在此便不再多言 收獲 很慚愧&#xff0c;自六月底至八月中旬&#xff0c;因為忙于找工作&#xff0c;奔赴面試求職之際&#xff0c;寫博客沒有像之前那么勤&#x…

qt QPalette的原理與使用

QPalette類用于控制控件的風格&#xff0c;即任意一個地方的繪制方式。每個控件或者說qwidget對象內部都有一個QPalette對象。 在paintEvent(QPaintEvent *event)函數中&#xff0c;其實就是調用該控件的QPalette內容來進行繪制的了。 例如&#xff1a; QStyleOptionTab opt…

《論文閱讀12》RandLA-Net: Ef?cient Semantic Segmentation of Large-Scale Point Clouds

一、論文 研究領域&#xff1a;全監督3D語義分割&#xff08;室內&#xff0c;室外RGB&#xff0c;kitti&#xff09;論文&#xff1a;RandLA-Net: Ef?cient Semantic Segmentation of Large-Scale Point Clouds CVPR 2020 牛津大學、中山大學、國防科技大學 論文鏈接論文gi…

Kafka-eagle監控平臺

Kafka-Eagle簡介 在開發工作中&#xff0c;當業務不復雜時&#xff0c;可以使用Kafka命令來進行一些集群的管理工作。但如果業務變得復雜&#xff0c;例如&#xff1a;需要增加group、topic分區&#xff0c;此時&#xff0c;再使用命令行就感覺很不方便&#xff0c;此時&#x…

Vim學習(二)—— 編譯C程序

打開終端&#xff0c;這里以MobaXterm為例&#xff0c; 郵件創建新的空文件并命名&#xff0c; 然后cd到對應路徑下&#xff0c;用 vim hello.cvim打開創建的文件&#xff0c;進入編輯模式&#xff0c;編輯完程序后按Esc退出編輯模式&#xff0c;輸入 :wq保存并退出&#xf…

linux安裝wkhtmltopdf(清晰明了)

概述 在公司項目中使用到 wkhtmltopdf 轉換PDF&#xff0c;由于 wkhtmltox-0.12.5 版本 echarts 圖形虛線樣式&#xff0c;需要升級 wkhtmltox-0.12.6 版本來解決。 官網地址 wkhtmltopdf &#xff1a;https://wkhtmltopdf.org/ windows 安裝 下載流程及安裝流程 進入官…

C++ 關鍵字override,final的作用

文章目錄 一、為什么要引入這兩個關鍵字?1.虛函數復寫2. 類繼承 二、override三、final C11引入這兩個關鍵字 一、為什么要引入這兩個關鍵字? 1.虛函數復寫 不能阻止某個虛函數進一步重寫 本意寫一個新函數&#xff0c;錯誤重寫基類虛函數(子類中 virtual 關鍵字可省略) 本…

《系統架構設計師教程》重點章節思維導圖

內容來自《系統架構設計師教程》&#xff0c;篩選系統架構設計師考試中分值重點分布的章節&#xff0c;根據章節的內容整理出相關思維導圖。 重點章節 第2章&#xff1a;計算機系統知識第5章&#xff1a;軟件工程基礎知識第7章&#xff1a;系統架構設計基礎知識第8章&#xff1…

接口自動化框架httprunner 是如何生成動態類

HttpRunner 是一個用于接口自動化測試的工具&#xff0c;它使用了 Python 中的 type 函數來生成動態類。 在 HttpRunner 中&#xff0c;通過使用 type 函數和 GenericTestCaseMeta 元類&#xff0c;動態地生成測試用例類。 下面是一個示例代碼展示了如何使用 type 函數來生成…

Kotlin反射訪問androidx.collection.LruCache類私有變量

Kotlin反射訪問androidx.collection.LruCache類私有變量 androidx.collection.LruCache類中定義了一個名為map的LinkedHashMap&#xff0c;map存儲了所有LruCache的數據&#xff0c;有時候需要遍歷訪問該LinkedHashMap&#xff0c;取出里面的值&#xff0c;但是LruCache代碼實…

GPU Dissolve(GPU 消散)學習GPU Instancing

一&#xff1a;摘要 通過制作一個模型GPU消散效果來學習GPU Instancing 也就是實例化。 目標效果是楊超大佬文章《GPU shatter》里面的消散效果如圖&#xff1a; Tags&#xff1a;模型頂點分裂(Mesh Vertex Splitting)&#xff0c; 實例化繪制(GPU Instancing Drawing)&#x…

開源可商業運營的ChatGpt網頁源碼v1.2.2

&#x1f916; 主要功能 后臺管理系統,可對用戶,Token,商品,卡密等進行管理 精心設計的 UI&#xff0c;響應式設計 極快的首屏加載速度&#xff08;~100kb&#xff09; 支持Midjourney繪畫和DALLE模型繪畫,GPT4等應用 海量的內置 prompt 列表&#xff0c;來自中文和英文 一鍵導…