UDP/TCP協議全解

目錄

一. UDP協議

1.UDP協議概念

2.UDP數據報格式

3.UDP協議差錯控制

二. TCP協議

1.TCP協議概念

2.三次握手與四次揮手

3.TCP報文段格式(重點)

4.流量控制

5.擁塞控制


一. UDP協議

1.UDP協議概念

當應用層的進程1要向進程2傳輸報文,會將報文轉給傳輸層處理;UDP會在報文前加上一個UDP首部(只占8字節),組成一個UDP數據包;最后再發到網絡層,網絡層再加上一個IPV4首部,根據這個首部信息找到目的地址;然后主機B收到這個IP數據包以后,進行逆操作


  • UDP首部很小,只占8B
  • UDP會拒絕過大的報文,因為它每次只能傳輸一個完整報文,不支持拆分、重裝
  • UDP無連接、不可靠的(無報錯確認機制,由應用層完成),不支持擁塞控制(路由器過載運作,傳輸數據報的速度不會慢下來)
  • UDP支持一對一+一對多(一對一封裝成單播IP數據報,一對多封裝成廣播、多播IP數據報)

UDP一對一的方法與TCP相同

一對多是通過目的IP為 255.255.255.255 (廣播IP,往目的網絡所有的主機進行數據發送),然后后面加上一整個UDP協議下的數據報。UDP能支持廣播很重要的一個原因在于:不需要進行拆分、重裝,可以一次性全部傳輸完;同時,UDP是通過UDP首部中設置目的端口號來尋找目標主機,然后對目的端口的所有主機進行數據傳輸(TCP也是通過目的端口尋找目標主機,但找到一眾目標主機后只能與其中之一進行連接),所以可以通過端口號一次性找到多臺目標主機(如下圖,主機A要向目的網絡的所有端口為711的主機發送消息)

2.UDP數據報格式

UDP長度:聲明數據報大小,固定只有16比特(即65535字節,2^15+2^14+……+2^0 = 65535);由于一個IP數據報可以運輸的最大數據量是65515字節,因此UDP協議下的數據報最大只能是65535字節;UDP長度應該是UDP首部+報文的大小,不是單指報文大小

UDP校驗和:由發送方計算并輸入,接收方檢驗是否錯誤,全0代表無需校驗

3.UDP協議差錯控制

檢驗信息的生成與使用:若有32bit數據信息,相加以后逐位取反;此時數據相加的結果,與取反以后的檢驗和相加,應該正好為全1(數據為0的地方,檢驗和肯定為1;數據為1的地方,檢驗和肯定為0);接收方只要看檢驗和與數據相加以后是否為全1,如果為全1就代表沒出差錯;如果最高位產生進位,就需要“回卷”加到最低位

UPD檢驗的過程:生成檢驗和前,先在UDP首部前生成一個偽首部;把偽首部、UDP首部與數據部分分以16bit為一組,進行檢驗和生成;生成了以后去除掉偽首部,通過網絡層傳輸以后,接收方接受了以后也需要生成偽首部,然后判斷相加是否為1(具體流程如下圖)

IP協議的首部檢驗和方法與UDP大致相同,只是IP檢驗和數據部分不參與,UDP檢驗和要將數據部分也算上;同時,IP進行校驗和時不需要添加偽首部

二. TCP協議

1.TCP協議概念

UDP與TCP之別

TCP首部很大且大小可變,要有20字節~60字節;TCP可以對報文進行分組、重裝傳輸,因此可以傳輸大的報文(類比成分組交換);TCP需要連接(類似于電路交換),且會發送接受成功、接受錯誤信息 -> 可靠,并且能夠進行流量控制,并且只能一對一;TCP傳輸內容叫做報文段(面向字節流),UDP傳輸內容叫做數據報(面向整體報文)


TCP特點

n個TCP報文段可能亂序到達接收方,但TCP協議會按序向應用層遞交;每次建立TCP連接以后,可以雙向傳輸多個報文;MSS是由通信雙方決定的報文段最大段長,TCP不要求報文段滿載,只要別超過MSS即可

2.三次握手與四次揮手

注:揮手操作A、B兩端誰先結束,誰先釋放連接


三次握手

握手1、握手2不能攜帶數據,但是仍要消耗一個序號;握手3可以攜帶數據,不攜帶數據就不消耗序號,此處的序號指的是ack、seq后面的數字;接收端的序號與發送端的區號是可以不一樣的,可以理解成兩端發送的數據不一樣

客戶端、服務器進程TCP狀態變化如下圖所示


四次揮手

揮手1、揮手3即使不攜帶數據,也要消耗1個序號;揮手2可以攜帶數據,揮手4不可以攜帶數據

客戶端、服務器進程TCP狀態變化如下圖所示。MSL指的是最長報文段壽命,1MSL指800ms,2MSL代表1600ms過后客戶端才會真正關閉連接

3.TCP報文段格式(重點)

序號(seq):用于標記數據部分第一個字節在原始字節流的位置,起始序號由發送方自己設置(不一定從0開始)

確認號(ack或者ack_seq):用于反饋,表示序號在該確認號之前的所有字節都已正確收到;ACK = 0 時,ack 無效,ACK = 1 時,ack 有效;只有第一次揮手時,ack會是無效的,其他情況下ack都應該有效(若無效則說明出現了差錯,例如報文段丟失)

數據偏移(data offset):表示TCP首部長度,以4字節為單位(比如現在的tcp首部只有3字節,那么此時就需要通過后面的填充部分加上1字節),表示形式是字節實際存儲用的是比特位

保留:暫時沒用,通常全設置為0

填充:被用來解決數據偏移問題,湊足4字節的整數倍

URG(緊急位):只占1bit,為1時表示是緊急數據要盡快插隊發送;當該位為1時,會讓緊急指針有效,緊急指針存放了緊急數據專用序號

PSH(推送位):為1時希望接收方盡快回復

RST(復位位):為1時表示出現嚴重差錯(例如主機崩潰),必須釋放連接;或者需要拒絕一個非法報文段(例如惡意的黑客攻擊)

SYN(同步位):為1時表示這是一個連接請求或連接接受報文;只在握手1、握手2中,SYN = 1

FIN(終止位):為1時表示請求釋放連接報文;只在揮手1、揮手3中,FIN = 1

窗口(rwnd或者rcvwnd):用作流量控制,假設現在的接受緩沖區還剩下500B空間,那么此時的rwnd = 500(即接收方還能接受多少數據)

檢驗和:和UDP原理一樣

選項(長度可變):協商決定了在握手1、握手2當中,MSS字段大小多少

4.流量控制

窗口大小與MSS大小不一的原因:接受發送的端口,主機的處理能力不一樣

如果緩沖區域大小為3000字節,那么滑動窗口大小為3000字節,當被占滿以后處理了2000字節,此時的滑動窗口大小為2000字節。不同的滑動窗口大小,在回復信息時的rwnd大小都不一樣,同時為0時的ACK主要是告訴發送方接受成功。

5.擁塞控制

cwnd是針對發送方而言的,一個限制性的滑動窗口

超時:如果發送了當前窗口大小的數據量,在規定的時間內沒有接收到接收方發來的確認好,那么就會超時重傳;發送超時重傳以后,慢開始的下限值會變成當前滑動窗口的一半大小,然后又開始進入到慢開始階段

3-ACK:收到了一條數據的三次確認信息,說明有該數據發送失敗了;此時停止發送,然后將傳輸失敗的數據快重傳;因為并非由于數據過多而導致的傳輸失敗,因此不用進行慢開始;變一半同超時

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

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

相關文章

AWS之數據分析

目錄 數據分析產品對比 1. Amazon Athena 3. AWS Lake Formation 4. AWS Glue 5. Amazon OpenSearch Service 6. Amazon Kinesis Data Analytics 7. Amazon Redshift 8.Amazon Redshift Spectrum 搜索服務對比 核心功能與定位對比 適用場景 關鍵差異總結 注意事項 …

第13講、Odoo 18 配置文件(odoo.conf)詳細解讀

1. 概述 Odoo 配置文件(odoo.conf)是管理 Odoo 服務器行為的核心工具,涵蓋了網絡、安全、數據庫、性能等多方面的關鍵參數。本文檔系統梳理 Odoo 18 配置文件的主要參數,結合實際應用場景,提供權威的配置建議與最佳實…

Python詳細實現Dash儀表盤:從零構建數據可視化界面

目錄 Python詳細實現Dash儀表盤:從零構建數據可視化界面一、引言:為什么選擇 Dash?二、Dash 的核心組成與工作流程三、項目目標使用數據: 四、數學模型與聚合公式五、儀表盤結構設計頁面設計結構如下: 六、完整代碼實現…

ubuntu磁盤掛載

在 Ubuntu 系統中,掛載額外的磁盤或分區是一項常見操作,無論是為了擴展存儲空間還是組織數據。本文將詳細介紹如何使用mount命令掛載文件系統,并處理可能遇到的問題。 1、掛載文件系統的基本步驟 1.1、 查找磁盤設備名稱 首先需要確定要掛載…

[9-2] USART串口外設 江協科技學習筆記(9個知識點)

1 2 3 智能卡、IrDA和LIN是三種不同的通信技術,它們在電子和汽車領域中有著廣泛的應用: ? 智能卡(Smart Card): ? 是什么:智能卡是一種帶有嵌入式微處理器和存儲器的塑料卡片,可以存儲和處理數…

【js逆向_AES】全國二手房指數數據爬取

目標:請求參數signcode,請求結果data。 網址:aHR0cDovL3d3dy5jY2hpbmRleC5jb20vSG9tZS9pbmRleA 查看載荷 查看響應數據 點擊xhr,發現所有請求參數都是一個signCode,還是加密后的結果,對應結果中數據data也…

模塊化設計,static和extern(面試題常見)

文章目錄 一、函數的聲明和定義1.1 單個文件1.2 多個文件1.3 static和extern1.3.1 static修飾局部變量1.3.2 static修飾全局變量1.3.3 static修飾函數 總結 一、函數的聲明和定義 1.1 單個文件 一般我們在使用函數的時候,直接將函數寫出來就使用了 題目:寫一個函數…

PySide6 GUI 學習筆記——常用類及控件使用方法(地址類QUrl)

文章目錄 地址類QUrl主要功能URL 格式介紹常見 scheme(協議)類型QUrl 類常用方法常用方法示例典型應用場景 地址類QUrl QUrl 是 PySide6.QtCore 模塊中的一個類,用于處理和操作 URL(統一資源定位符)。它可以解析、構建…

GEE:獲取研究區的DEM數據

最近有粉絲追更 GEE 系列,說上次看完 DEM 代碼解析后,自己試著改了一版。今天咱們就來拆解他的優化版代碼 ——基于 SRTM 數據獲取研究區 DEM 并導出,順便聊聊怎么把 GEE 代碼寫得更專業! 先下結論:代碼邏輯完整,3 處細節值得新手抄作業! 這版代碼在數據加載→裁剪→可…

汽車安全 2030 預測 (功能安全FuSa、預期功能安全SOTIF、網絡安全CyberSecurity):成本、效益與行業影響

汽車安全 2030 預測 (功能安全FuSa、預期功能安全SOTIF、網絡安全CyberSecurity):成本、效益與行業影響 到 2030 年,汽車行業將迎來一場安全技術的深度變革,其中 “三重安全防護”(功能安全 FuSa、預期功能安全 SOTIF、網絡安全&…

深入理解設計模式之狀態模式

深入理解設計模式之:狀態模式(State Pattern) 一、什么是狀態模式? 狀態模式(State Pattern)是一種行為型設計模式。它允許一個對象在其內部狀態發生改變時,改變其行為(即表現出不…

Redis的大Key問題如何解決?

大家好,我是鋒哥。今天分享關于【Redis的大Key問題如何解決?】面試題。希望對大家有幫助; Redis的大Key問題如何解決? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 Redis中的“大Key”問題是指某個鍵的值占用了過多…

【STM32開發板】接口部分

一、USB接口 可以看到USBP和USBN與PA12,PA11引腳相接,根據協議,需要添加上拉電阻 二、ADC和DAC 根據原理圖找到可以作為ADC和DAC的引腳 ADC和DAC屬于模擬部分的,所以要接模擬地 三、指示燈電路 找幾個通用的引腳,因為單片機的灌電流比拉電流…

[Hackers and Painters] 讀書筆記 | 設計模式思想 | LISP

目錄 黑客與藝術的關系 “如果你有兩個選擇,就選擇較難的那個“ 金錢不等于財富。創造有價值的東西就是創造財富 項目公式 探討關于優秀程序員的話題 摘抄 保羅格雷厄姆其人其事 人物經歷 圖書介紹 個人作品編輯 譯者序 為什么書呆子不受歡迎 黑客與畫…

Linux基本指令/下

目錄 1.echo、cat與printf 2. > 操作符 與 >> 操作符 3. < 操作符 4.消息傳送 linux文件深入 5.文件類型 6.mv命令 7.時間相關指令 8.查找命令 9.grep命令 10.zip/unzip/tar命令 11.scp命令 12.bc命令 13.uname 指令 14.快捷鍵大全 15.關機/重啟/睡…

Apptrace:APP安全加速解決方案

2021 年&#xff0c;某知名電商平臺在 “618” 大促期間遭遇 DDoS 攻擊&#xff0c;支付系統癱瘓近 2 小時&#xff1b;2022 年&#xff0c;一款熱門手游在新版本上線時因 CC 攻擊導致服務器崩潰。觀察發現&#xff0c;電商大促、暑期流量高峰和年末結算期等關鍵商業周期&#…

NodeJS全棧開發面試題講解——P1Node.js 基礎與核心機制

? 1.1 Node.js 的事件循環原理&#xff1f;如何處理異步操作&#xff1f; 面試官您好&#xff0c;我理解事件循環是 Node.js 的異步非阻塞編程核心。 Node.js 構建在 V8 引擎與 libuv 庫之上。雖然 Node.js 是單線程模型&#xff0c;但它通過事件循環&#xff08;event loop&a…

【深度學習】sglang 的部署參數詳解

SGLang 的部署參數詳解 SGLang(Structured Generation Language)是一個高性能的大語言模型推理框架,專為結構化生成和多模態應用設計。本文將全面介紹SGLang的部署參數,幫助你充分發揮其性能潛力。 ?? SGLang 項目概覽 SGLang是由UC Berkeley開發的新一代LLM推理引擎,…

MATLAB實戰:機器學習分類回歸示例

以下是一個使用MATLAB的Statistics and Machine Learning Toolbox實現分類和回歸任務的完整示例代碼。代碼包含鳶尾花分類、手寫數字分類和汽車數據回歸任務&#xff0c;并評估模型性能。 %% 加載內置數據集 % 鳶尾花數據集&#xff08;分類&#xff09; load fisheriris; X_i…

數組。。。。。

//創建Book 對象&#xff0c;放入相關的屬性private String name;//書名private String[] writer;//作者private List<String> reader;//讀者private Map<String, Object> topics;//評講Book book new Book();book.setName("昆蟲總動員");book.setWrite…