【網絡篇】UDP協議的封裝分用全過程

在這里插入圖片描述

大家好呀
我是浪前

今天講解的是網絡篇的第二章:UDP協議的封裝分用

我們的協議最開始是OSI七層網絡協議

這個OSI 七層網絡協議 是計算機的大佬寫的,但是這個協議一共有七層,太多了太麻煩了,于是我們就把這個七層網絡協議就簡化為五層了

UDP協議的封裝分用全過程

  • TCP/IP 五層網絡協議
    • 網絡設備所在分層
    • 封裝和分用
    • 封裝的全過程:
      • 發送方:
      • 1: 發送方A的應用層(應用程序) QQ:
      • 2: 發送方A的傳輸層:
      • 3: 發送方A的網絡層:
      • 4: 發送方A的數據鏈路層:
      • 5: 發送方A的物理層:硬件設備:
    • 分用的全過程:
      • 1: 接收方B的物理層:
      • 2: 接收方B的數據鏈路層:
      • 3: 接收方B的網絡層(IP協議)
      • 4:接收方B的 傳輸層(UDP協議)
      • 5:接收方B的 應用層 QQ應用程序:
      • 交換機A的工作:

TCP/IP 五層網絡協議

舉一個例子:

我在淘寶店鋪買了一個刷子:

商家發貨就要去關注我的收件人地址和電話,發件人地址和電話(這個就是傳輸層要去關注包裹傳輸的起點和終點)

商家要把這個包裹交給快遞公司:

這個TCP/IP協議一共有五層:

應用層傳輸的數據在應用程序中如何使用

程序在拿到數據之后,要用數據去干什么,解決什么問題(程序員最關注的一層)**
負責我買到這個刷子是用來干什么的?
刷床?刷沙發?打小孩?

傳輸層關注的是通信的起點和終點

負責關注網絡數據包的起點和終點(從哪里來到哪里去),是端到端的傳輸

負責關注通信的起點和終點,關注網路數據包的起點和終點是端到端的傳輸

網絡層關注的是通信中的路徑規劃

負責關注起點到終點之間要走哪一條路(路徑規劃)
確定傳輸的路線: 上海 - 南京 - 無錫 - 西安
規劃出哪一條路徑最好?
考慮傳輸效率?傳輸成本?傳輸時間最短?傳輸過程最方便?

網絡層關注的是通信過程中的路徑規劃,

數據鏈路層負責兩個相鄰的節點之間的傳輸和通信細節,即數據傳輸情況

上海到南京 是用飛機空運來運輸
南京到無錫市用鐵路運輸
無錫到西安使用大貨車進行運輸

物理層網絡通信過程中的硬件設備,基礎設施

通信過程中的物理運輸 公路-鐵路-航線

為什么要寫四層:
因為不算物理層就是四層,為什么?
因為物理層是純硬件的

說是五層,但是下面這四層都是在操作系統內核,硬件,驅動程序中已經實現好了(計算機內置了)
我們作為程序員在網絡編程過程中能夠影響到的也就只有應用層了

應用層對應到應用程序,也就是程序員寫的代碼軟件,需要手動實現

傳輸層和網絡層都是操作系統內核,都是在操作系統的內核中實現的,這兩層都是現成的,不需要手動實現

數據鏈路層和物理層是驅動程序+硬件來實現的
硬件廠商提供了硬件,都會配上一個驅動程序
有了這個驅動程序,系統才可以很好地操作這個硬件

網絡設備所在分層

對于一臺主機,

它的操作系統內核實現了從傳輸層到物理層的內容,也即是TCP/IP五層模型的下四 層;

對于一臺路由器,它實現了從網絡層到物理層,也即是TCP/IP五層模型的下三層;路由器工作在網絡層

對于一臺交換機,它實現了從數據鏈路層到物理層,也即是TCP/IP五層模型的下兩層;交換機工作在數據鏈路層

對于集線器,它只實現了物理層

上面是一個經典的筆試題。

上述的路由器和交換機指的是經典的路由器和交換機

封裝和分用

封裝和分用描述了網絡通信過程中基本的數據傳輸流程

封裝和分用是網絡傳輸數據過程中,最核心的流程

封裝的全過程:

例子如下所示:

A 通過QQ給B發送了一個hello:

在這里插入圖片描述

這個操作會出現什么流程?

發送方:

1: 發送方A的應用層(應用程序) QQ:

QQ從消息輸入框中獲取到用戶A輸入的hello,hello是一個字符串
QQ就要把這個字符串構成一個應用層的數據包

QQ這樣的程序內部就設置了一個應用層的協議,應用數據包就是按照這個應用層協議約定的格式來構造的

這個格式就是一個字符串的拼接
這個應用層協議往往都是實現這個程序的人自己定義的,其他人都沒有權限修改

但是我們是可以自己約定的:
比如:
我們約定的應用層協議的格式如下:

發送方QQ號;接收方QQ號;發送時間;消息正文
12344;34556;2024-1-1 12:00:00;hello

上述就構成了一個簡單的應用層數據包

應用程序就會調用系統提供的API把這個應用層數據包交給傳輸層

2: 發送方A的傳輸層:

會把上述的應用層數據包作為一個整體再構造成為一個傳輸層的數據包
這個傳輸層涉及到的協議最重要的就是這個TCP和UDP協議

此處我們假定是使用UDP協議來進行通信,此時就會構造一個UDP的數據包
這個UDP數據包一共包含兩個部分:

  1. 報頭(header)
  2. 載荷(payload)

載荷里面的東西就是應用層數據包
如下圖所示:

![[UDP結構01.png]]

形如上述,添加報頭的過程就是==封裝==
其實就是拼接字符串
只不過拼接的是報頭,具有一定的結構

例子:
商家發貨一件衣服,不能夠直接發,一般都是要先進行包裝,使用塑料袋子進行包裝

包裝的作用是什么?
給快遞套上包裝,既能夠起到保護作用,又能夠用來貼標簽
標簽上就可以寫一些用來發送快遞的關鍵信息

上述的封裝的過程就是這個衣服被包裝的過程

封裝的作用是什么?
我們這里的UDP報頭雖然不能夠起到保護的作用,但是可以起到“貼標簽”類似的效果
就能夠承載一些關鍵的用來轉發數據的信息

**對于UDP報頭來說,UDP報頭是一個二進制數據,承載的最重要的信息就是源端口和目的端口,這兩個端口就是被記載在UDP報頭中

當我們拼接好一個傳輸層的數據包之后呢,就要把這個數據包進一步交給下層,網絡層繼續進行封裝了

交給下層指的是下層協議提供一組API(函數),上層調用這個API(函數),并且把剛才構造好的數據 通過參數傳過去,下層協議就可以來處理這個數據了)

源端口和目的端口是在傳輸層
源IP和目的IP是在網絡層

傳輸層的數據打包好了之后,數據會繼續被交給網絡層:

3: 發送方A的網絡層:

網絡層涉及到的最核心的協議就是IP協議

在網絡層包含很多的屬性,最重要的屬性就是源IP和目的IP

網絡層的IP協議把剛才傳輸層的UDP數據包作為一個整體,把這個整體作為IP協議的載荷,然后拼上IP協議的報頭,構造成為一個數據包:
內容如下:

  1. IP協議的報頭
  2. IP協議的載荷
    如圖所示:

在這里插入圖片描述

在這個IP協議報頭中:
也會包含一些輔助轉發的關鍵信息,此處最關鍵的信息就是源IP和目的IP
此時構造完成一個完整的IP數據包之后,IP協議繼續調用數據鏈路層的API,把數據再交給數據鏈路層這里的協議進行處理

網絡層數據打包好了之后,會繼續把數據交給數據鏈路層來進一步打包

4: 發送方A的數據鏈路層:

數據鏈路層涉及到的核心協議叫做以太網

此處,我們使用“以太”來作為網絡傳輸的介質

以太網就是日常見到的有線網絡

我們日常使用的網線也是“以太網線”,日常使用的網口也是“以太網口”

日常使用的交換機也是“以太交換機”

**以太網數據幀:

以IP數據包作為一個整體,在這個IP數據包的前面加上一個以太網幀頭,后面加上一個幀尾
中間是載荷

如下圖所示:
在這里插入圖片描述

以太網幀頭中最重要的信息是源mac地址,目的mac地址

這樣的數據封裝好了之后還要繼續向下走,交給物理層

5: 發送方A的物理層:硬件設備:

**把上述的這樣的以太網數據幀這樣的二進制結構(一串 0 1 0 1) 這樣的數據:
將這樣的數據轉化為光信號(光纖)/電信號(網線)/電磁波(無限wifi)
然后進行發送

此時經過上面的一系列操作,從上層協議到下層協議,層層給數據包添加報頭,終于是把這個hello這個數據給發送出去了,(剛出家門)
以上就是封裝的過程

數據發送出去之后,就會經過一些列的交換機和路由器進行轉發,A和B一般來說不是直接網線連接的,中間還要經過很多的交換機/路由器設備進行轉發
這個中間過程我們先不談,接下來先說明清楚
當數據到達接收方B之后,接收方B要對數據進行一個“分用”的過程

分用的全過程:

**下面是接收方B發生的事情:
我們先來假定這個數據包已經到達B的網卡了,看這個B會如何處理這個數據包

接收方B的這個處理數據包的過程就是 "分用"的過程

1: 接收方B的物理層:

物理層收到的數據 是光信號/電信號/電磁波,物理層就會把這些物理信號轉換為數字信號(二進制的 0 1 0 1 )

在轉換之后會得到一個以太網的數據幀,進一步會把這個數據幀交給數據鏈路層處理

2: 接收方B的數據鏈路層:

通過以太網協議,針對以太網數據進行解析,會解析出以太網幀頭和以太網幀尾,以及中間的載荷

以太網:發送方和接收方得使用一樣的協議才行
我們這里進行解析: 把以太網幀頭去掉,以太網幀尾去掉

如圖所示:
在這里插入圖片描述

按照以太網數據幀的格式來解析,取出其中的載荷,之后再交給上層協議:

3: 接收方B的網絡層(IP協議)

網絡層是按照IP協議的格式來解析,取出其中的載荷,再交給上層協議
此時去掉IP報頭之后:

在這里插入圖片描述

4:接收方B的 傳輸層(UDP協議)

按照UDP協議格式來解析,取出其中的載荷,再交給上層協議:
此時就去掉UDP報頭,取出剩下的載荷,交給上層協議:
在這里插入圖片描述

5:接收方B的 應用層 QQ應用程序:

此時應用層拿到數據之后,在根據端口號來判斷把數據交給哪個應用程序

QQ這個程序就要解析這個數據,這個解析過程也是按照前面程序員自定義的應用層協議展開的

此時按照QQ應用程序內部的應用層協議格式來解析數據~
如何解析的?
在這里插入圖片描述

就是把上圖中的數據按照分號進行切割,就得到了這里的QQ號信息,發送時間,發送消息的正文

此時QQ程序拿到這些數據之后,就會彈出一些提示,并且把消息/消息的發送者/發送時間 都顯示到聊天窗口上
以上就是分用的過程

分用的過程就是封裝的逆向過程

數據報并不是發送方一發送出去就立馬到了接收方那里,而是在網絡中間還會經歷一個轉發的過程
通過路由器/交換機來進行轉發,

在真實情況下,并不是一出門就直接到了,而是兩個主機一般都不是直接通過網線直連的,而是通過一系列的交換機或者路由器來進行數據轉發的

在這里插入圖片描述

但是實際上即使是經過交換機或者路由器,上述的封裝分用過程,也還是同樣適用的
只不過,封裝分用的程度不一定是到應用層(不一定是五層都有,可能是只涉及到了幾層)

比如:
對于經典交換機來說,就只需要封裝分用到數據鏈路層即可
對于經典的路由器來說,就只是需要封裝分用到網絡層即可

如果數據報在中間的轉發過程中,轉發到了路由器上,那么也要經歷一個封裝分用的過程,只不過是封裝分用到網絡層:
當路由器拿到數據之后,路由器會將數據解析到網絡層,拿到IP地址之后,決定下一步如何傳輸,
下一步傳輸的時候,又會重新經過網絡層,數據鏈路層,和物理層的封裝才能從路由器中傳輸出去

*如果數據報被轉發到了交換機上,那么就會在交換機上進行一個封裝分用到數據鏈路層的過程,

所以封裝分用這個過程在網絡通信中是貫穿始終的,數據經歷的每一個節點都要進行封裝分用的過程


交換機A的工作:

下述是A的光電信號;

在這里插入圖片描述

交換機A的物理層就會把從A發出的光電信號轉換成以太網數據幀二進制數據交給數據鏈路層:

而在交換機上面也是實現了數據鏈路層的:

此時交換機A的數據鏈路層就會對上述的數據進行解析:
這個解析過程,一方面要去除載荷部分,另一方面要解析到幀頭的關鍵信息

  1. 去除載荷
  2. 解析幀頭

根據幀頭中的信息,決定下一步把數據往哪里進行發送,根據這個情況再進一步地構造出新的以太網數據幀~

新的數據幀如下圖所示:
在這里插入圖片描述

把這個新的數據繼續通過物理層發送出去

這里的以太網幀頭,對于交換機來說,已經夠用了,就不需要再進行解析了

剛剛是交換機,現在是路由器:路由器的情況更加復雜一些
要封裝分用到網絡層

當路由器拿到A的光電信號之后:
A的光電信號如下:
在這里插入圖片描述

先是物理層拿到光電信號,轉成二進制數據交給數據鏈路層:

數據鏈路層對上述的數據進行解析,去掉以太網幀頭,拿出載荷,交給IP協議
如下圖所示:
在這里插入圖片描述

IP協議又會進一步對這個數據進行解析,解析IP報頭,再一次取出載荷,
路由器為什么要解析IP報頭?
因為路由器需要通過IP報頭中的目的IP來知道具體接下來如何轉發

在這里插入圖片描述

取出的數據 會被IP協議重新進行封裝操作:
即剛剛取出的數據會被重新加上(封裝上)IP報頭

如下圖所示:
在這里插入圖片描述

數據被重新封裝上IP報頭之后,會被交給數據鏈路層,繼續加上幀頭和幀尾

如下圖所示:
在這里插入圖片描述

此時我們又構成了一個數據鏈路幀,此時這個數據再交給物理層,去轉成光電信號,繼續傳輸
此時我們的路由器只是封裝分用到網絡層,說明路由器并不在乎UDP數據和應用層數據

對于一臺主機,

它的操作系統內核實現了從傳輸層到物理層的內容,也即是TCP/IP五層模型的下四層;

對于一臺路由器,它實現了從網絡層到物理層,也即是TCP/IP五層模型的下三層;
路由器是工作在網絡層的

對于一臺交換機,它實現了從數據鏈路層到物理層,也即是TCP/IP五層模型的下兩層:
交換機是工作在數據鏈路層的

對于集線器,它只實現了物理層

上述的路由器和交換機指的是經典的路由器和交換機

事實上的路由器和交換機的功能更加復雜強大

很多的交換機也具有一些路由器的功能,也可以工作在網絡層

很多的路由器也具有一些交換機的功能,也可以工作在數據鏈路層

甚至有些交換機路由器還可以工作在應用層

如果交換機要截取/解析你所傳輸的數據,那么就會封裝分用到應用層,把hello拎出來看看

在這里插入圖片描述

在上述圖片中的每一個節點都會涉及到封裝分用的過程

所以網絡傳輸數據不是一個簡單的事情,背后有大量的工作 ,只不過這些工作都是硬件&驅動
&操作系統 幫我們完成了

注意:
我們在描述一個網絡上傳輸的數據“單位”可能會用到幾個術語:

包(packet): 網絡數據包
使用場景: IP數據包


段(segment):網絡數據段
使用場景: TCP數據段


報(datagram) : 網絡數據段
使用場景: UDP數據段


幀(frame) : 網絡數據幀
使用場景: 以太網數據幀


上述的幾個術語都是網絡傳輸的基本單位。
我們今天就學習到這里,下次見~
在這里插入圖片描述

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

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

相關文章

spring-ai-alibaba使用Agent實現智能機票助手

示例目標是使用 Spring AI Alibaba 框架開發一個智能機票助手,它可以幫助消費者完成機票預定、問題解答、機票改簽、取消等動作,具體要求為: 基于 AI 大模型與用戶對話,理解用戶自然語言表達的需求支持多輪連續對話,能…

嵌入式C語言高級編程:OOP封裝、TDD測試與防御性編程實踐

一、面向對象編程(OOP) 盡管 C 語言并非面向對象編程語言,但借助一些編程技巧,也能實現面向對象編程(OOP)的核心特性,如封裝、繼承和多態。 1.1 封裝 封裝是把數據和操作數據的函數捆綁在一起,對外部隱藏…

藍橋杯 web 常考到的一些知識點

filter:filter方法創建一個新數組,其包含通過所提供函數實現的測試的所有元素。這個 方法不會改變原數組,而是返回一個新的數組。 map:map方法創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后的 返回…

音視頻小白系統入門筆記-0

本系列筆記為博主學習李超老師課程的課堂筆記&#xff0c;僅供參閱 音視頻小白系統入門課 音視頻基礎ffmpeg原理 緒論 ffmpeg推流 ffplay/vlc拉流 使用rtmp協議 ffmpeg -i <source_path> -f flv rtmp://<rtmp_server_path> 為什么會推流失敗&#xff1f; 默認…

mysql按條件三表并聯查詢

下面為你呈現一個 MySQL 按條件三表并聯查詢的示例。假定有三個表&#xff1a;students、courses 和 enrollments&#xff0c;它們的結構和關聯如下&#xff1a; students 表&#xff1a;包含學生的基本信息&#xff0c;有 student_id 和 student_name 等字段。courses 表&…

UML之序列圖的消息

序列圖表現各參與者之間為完成某個行為而發生的交互及其時間順序&#xff0c;序列圖中的交互通過消息實現。消息是從一條生命線到另一條生命線的通信&#xff0c;它們通常是水平或傾斜向下的箭頭&#xff0c;從發送方生命線離開&#xff0c;到達接收方生命線。如果需要&#xf…

UniAD:自動駕駛的統一架構 - 創新與挑戰并存

引言 自動駕駛技術正經歷一場架構革命。傳統上&#xff0c;自動駕駛系統采用模塊化設計&#xff0c;將感知、預測和規劃分離為獨立組件。而上海人工智能實驗室的OpenDriveLab團隊提出的UniAD&#xff08;Unified Autonomous Driving&#xff09;則嘗試將這些任務整合到一個統一…

如何寫好合同管理系統需求分析

引言 在當今企業數字化轉型的浪潮中&#xff0c;合同管理系統作為企業法律合規和商業運營的重要支撐工具&#xff0c;其需求分析的準確性和完整性直接關系到系統建設的成敗。本文基于Volere需求過程方法論&#xff0c;結合江鈴汽車集團合同管理系統需求規格說明書實踐案例&…

libevent服務器附帶qt界面開發(附帶源碼)

本章是入門章節&#xff0c;講解如何實現一個附帶界面的服務器&#xff0c;后續會完善與優化 使用qt編譯libevent源碼演示視頻qt的一些知識 1.主要功能有登錄界面 2.基于libevent實現的服務器的業務功能 使用qt編譯libevent 下載這個&#xff0c;其他版本也可以 主要是github上…

八、自動化函數

1.元素的定位 web自動化測試的操作核心是能夠找到頁面對應的元素&#xff0c;然后才能對元素進行具體的操作。 常見的元素定位方式非常多&#xff0c;如id,classname,tagname,xpath,cssSelector 常用的主要由cssSelector和xpath 1.1 cssSelector選擇器 選擇器的功能&#x…

Web三漏洞學習(其二:sql注入)

靶場&#xff1a;NSSCTF 、云曦歷年考核題 二、sql注入 NSSCTF 【SWPUCTF 2021 新生賽】easy_sql 這題雖然之前做過&#xff0c;但為了學習sql&#xff0c;整理一下就再寫一次 打開以后是杰哥的界面 注意到html網頁標題的名稱是 “參數是wllm” 那就傳參數值試一試 首先判…

單片機非耦合業務邏輯框架

在小型單片機項目開發初期&#xff0c;由于業務邏輯相對簡單&#xff0c;我們往往較少關注程序架構層面的設計。 然而隨著項目經驗的積累&#xff0c;開發者會逐漸意識到模塊間的耦合問題&#xff1a;當功能迭代時&#xff0c;一處修改可能引發連鎖反應。 此時&#xff0c;構…

Zookeeper三臺服務器三節點集群部署(docker-compose方式)

1. 準備工作 - 服務器:3 臺服務器,IP 地址分別為 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安裝 Docker:確保每臺服務器已安裝 Docker 和 Docker Compose。 - 網絡通信:確保三臺服務器之間可以通過 IP 地址互相訪問,并開放以下端口: - `2181`:Zookeeper 客戶…

Mac關閉sip方法

Mac關閉sip方法 導航 文章目錄 Mac關閉sip方法導航完整操作流程圖詳細步驟 完整操作流程圖 這東西是我在網上搬運下來的&#xff0c;但是我在為業務實操過程中&#xff0c;根據實操情況還是有新的注意點的 詳細步驟 1.在「關于本機」-「系統報告」-「軟件」;查看SIP是否開啟…

C++| 深入剖析std::list底層實現:鏈表結構與內存管理機制

引言 std::list的底層實現基于雙向鏈表&#xff0c;其設計哲學與std::vector截然不同。本文將深入探討其節點結構、內存分配策略及迭代器實現原理&#xff0c;揭示鏈表的性能優勢和潛在代價。 1. 底層數據結構&#xff1a;雙向鏈表 每個std::list節點包含&#xff1a; 數據域…

漢諾塔問題——用貪心算法解決

目錄 一&#xff1a;起源 二&#xff1a;問題描述 三&#xff1a;規律 三&#xff1a;解決方案 遞歸算法 四&#xff1a;代碼實現 復雜度分析 一&#xff1a;起源 漢諾塔&#xff08;Tower of Hanoi&#xff09;問題起源于一個印度的古老傳說。在世界中心貝拿勒斯&#…

【Python】Python 100題 分類入門練習題 - 新手友好

Python 100題 分類入門練習題 - 新手友好篇 - 整合篇 一、數學問題題目1&#xff1a;組合數字題目2&#xff1a;利潤計算題目3&#xff1a;完全平方數題目4&#xff1a;日期天數計算題目11&#xff1a;兔子繁殖問題題目18&#xff1a;數列求和題目19&#xff1a;完數判斷題目21…

【linux】--- 進程概念

進程概念 1.認識馮諾依曼結構2. 操作系統&#xff08;Operator system)2.1 概念2.2 設計OS的目的2.3 理解操作系統2.4 如何理解管理2.5 理解系統調用和庫函數 3. 進程3.1 基本概念和基本操作3.1.1 描述進程 - PCB3.1.2 task_struct3.1.3 查看進程 3.2 進程狀態3.2.1 運行&&…

算法堆排序記錄

【算法】排序算法之堆排序 - 知乎 應用場景&#xff1a;獲取第n個大或者小的數 操作步驟&#xff1a; 1、將數組構造成堆 2、調整根節點為最大堆 ->倒序對每個根節點執行最大化 ->根節點最大化過程中如果發生交換&#xff0c;需要保證子節點也為最大堆&#xff08;執行…

STM32 模塊化開發實戰指南:系列介紹

本文是《STM32 模塊化開發實戰指南》系列的導讀篇,旨在介紹整個系列的寫作目的、適用讀者、技術路徑和每一篇的主題規劃。適合從事 STM32、裸機或 RTOS 嵌入式開發的個人開發者、初創工程師或企業項目團隊。 為什么要寫這個系列? 在嵌入式開發中,很多人剛開始都是從點亮一個…