網絡初識 二

一、TCP/IP五層協議

? ->? ?應用層 : 傳輸的數據在應用程序中如何使用

? ?->? ?傳輸層 : 關注的是通信的起點終點

? ?->? ?網絡層 : 關注的是通信中的路線規劃

? ?->? ?數據鏈路層 : 關注的是相鄰節點之間的通信細節

? ?->? ?物理層 : 網絡通信的基礎設施

說是五層,實際上下面這四層都是在 操作系統內核,硬件,驅動程序中已經實現好了,(計算機內置了)

我們程序員在網絡編程過程中能影響到的也就只有應用層了.

對于一臺主機,他的操作系統內核實現了從傳輸層到物理層的內容,也即是TCP/IP五層模型的下四層;

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

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

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

二、封裝和分用

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

例:

比如說,A通過QQ給B發送了一個hello? ?->? ?會經歷以下流程

2.1 分裝

2.1.1 應用層(應用程序)

QQ從消息輸入框獲取到用戶輸入的hello

就要把這個字符串構造成一個應用層的數據包

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

約定格式如下:

接下來,應用程序就會調用操作系統提供的api,把這個數據包交給傳輸層.

2.1.2?傳輸層

傳輸層就會把上述數據作為一個整體,再構造成一個傳輸層的數據包.

傳輸層涉及到的協議就是TCP和UDP

此處假定是使用UDP來進行通信.就會構造成一個UDP數據包.

這個數據包,由應用層傳輸過來的內容看作一個整體,叫做載荷,添加一個UDP報頭,叫做報頭.

這個整體就是我們的UDP數據包.

形容這樣的添加報頭的過程就叫做 " 封裝 ",其實就是,字符串拼接.

只不過拼接的報頭,具有一定的結構.

UDP報頭,雖然不能保護數據,但是可以起到 " 貼標簽 " 類似效果.

就能承載一些關鍵的用來轉發數據的信息.

對于UDP報頭來說,承載的最重要的信息就是 源端口 和 目的端口.

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

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

2.1.3 網絡層?

網絡層,這里涉及到了最核心的協議? ?->? ?IP協議

網絡層 IP協議,把剛才的傳輸層的UDP數據包作為一個整體,再拼上IP協議的報頭.

構造成一個IP數據包.

構造完成完整的IP數據包之后,IP協議繼續調用數據鏈路層的api,把數據再交給數據鏈路層這里的協議進行處理.

2.1.4 數據鏈路層

數據鏈路層這里涉及到的核心協議? ?->? ?以太網? ?->? ?此處 " 以太 " 用來表示網絡數據傳輸的介質.

以太網就是我們日常最常見到的有線網絡.

我們日常用到的網線,也叫做 " 以太網線 ",日常用到的網口也叫做 " 以太網口 ".

用到的交換機,也叫做 " 以太交換機 '.

以太數據幀.也是以IP數據包作為一個整體,在這個基礎上添加幀頭和幀尾.

接下來,再把這個數據交給物理層.

2.1.5 物理層

物理層? ?->? ?硬件設備

把上述這樣的以太網數據幀,二進制結構( 一串0 1 0 1 這樣的數據),轉換成 光信號/電信號/電磁波,然后進行發送.

經過上述一些列的操作,數據就從電腦上發送出去了.

2.2 分用

暫時不考慮中間過程,假定數據包已經到達B網卡了,B如何處理,B的處理過程就稱為 " 分用 ".

2.2.1 物理層

B的物理層收到了光信號/電磁波/電信號,就會把這些物理信號轉換成 數字信號(二進制的0 1 0 1 ),得到一個以太網數據幀,進一步的把這個數據幀交給數據鏈路層處理.

2.2.2 數據鏈路層? ?以太網

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

2.2.3 網絡層 IP協議

按照IP協議的格式進行解析,去除其中的載荷,再交給上層協議.

2.2.4 傳輸層 UDP協議

按照UDP協議格式來解析,取出其中的載荷,再交給上層協議.

2.2.5 應用層

按照應用程序的內部應用層協議來解析數據

例:

QQ在拿到信息后,就會在窗口中顯示,讓你看到信息(聊天消息).

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

真實情況下,兩個主機不太會是通過網線直連的,通過一系列的交換機和路由器來進行數據轉發的.

但是實際上,即使是經過交換機或者路由器,上述的分裝分用過程,也是同樣適用的.

只不過,封裝分用的程度不一定是到應用層.

經典交換機來說,就只需要封裝分用到數據鏈路層即可.

經典的路由器來說,就只需要封裝分用到網絡層即可.

交換機會把光電信號轉換成以太網數據幀二級制數據,交給數據鏈路.

交換機的數據鏈路層就會對上述數據進行解析.

這個解析過程,一方面要取出載荷部分,另一方面,就要解析到幀頭中的關鍵信息.

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

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

如果是路由器,情況稍微復雜一點點,就是封裝分用到網絡層.

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

IP協議對進行解析,取出載荷,再重新封裝

繼續交給數據鏈路層,繼續加上幀頭幀尾

這個數據再交給物理層,轉成光電信號,繼續傳輸.

三、幾個術語

描述一個網絡上傳輸的數據,單位"可能會用到這幾個術語:

包? ?->? ?packet

段? ?->? ?segment

報? ?->? ?datagram

幀? ?->? ?frame

如 : IP數據包 / IP數據報

網絡編程,本質上就是學習 傳輸層 給 應用層 提供的 API,就可以寫入代碼,把數據交給傳輸層,進一步通過層層封裝,就可以把數據通過網卡發送出去了.

四、網絡編程中一些重要的概念

4.1 客戶端VS服務器

? ? ? ? 再網絡中,主動發起通信的這一方,稱為 " 客戶端 ",被動接受的這一方,稱為 " 服務器 ".

同一個程序再不同的場景中,可能是客戶端,也可能是服務器.

客戶端給服務器發送的數據,稱為 " 請求 " (request)

服務器給客戶端返回的數據,稱為 " 響應 " (response)

客戶端和服務器之間的交互,也是有很多種模式的.

1? ?->? ?一問一答

一個請求對應一個響應,一對一? ? ? ? 常見于網頁開發(web開發)

2? ?->? ?一問多答

一個請求對應多個響應? ? ? ? ? ? ? ? 常見于 "下載"

3? ?->? ?多問一答

多個請求對應一個響應? ? ? ? 常見于 "上傳"

4? ?->? ?多問多答

一個請求可能對應多個響應

一個響應也可能對應多個請求? ? ? ? ? ? ? ? 常見于 "遠程控制/遠程桌面"

五、TCP和UDP特點上的差別

要想進行網絡編程,需要使用系統的API,本質上是傳輸層提供的.

傳輸層涉及到的協議主要是兩個,TCP,UDP

由于這兩個協議,之間差異很大,他們的api差距也很大.

TCP和UDP特點上的差別:

????????TCP? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UDP

? ? ?有連接? ? ? ? ? ? ? ? ? ?????????? ? ? ?無連接

? ? ?可靠傳輸? ? ? ? ? ? ? ? ? ? ? ? ????不可靠傳輸

? ? ?面向字節流? ? ? ? ? ? ? ? ? ? ? ? ?面向數據報

? ? ? 全雙工? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?全雙工

有鏈接/無連接? ?->? ?指的是抽象的,本質上就是是否有記錄對方的信息

可靠傳輸/不可靠傳輸? ?->? ?盡可能的完成數據傳輸,雖然無法確保數據到達對方,至少可以知道,當前這個數據對方是不是收到了.

ps : 網絡上存在的 "異常情況" 是很多的,無論什么手段都無法保證這個數據100%能從A到達B

此處的可靠傳輸,主要是指發的數據到沒到,發送方能知道.

面向字節流? ?->? ?此處談到的字節流與文件中的字節流完全一致.? ? ? ? TCP

網絡中傳輸數據的基本單位是字節.

面向數據包? ?->? ?每次傳輸的基本單位是一個 "數據報" 特定的結構? ?UDP

全雙工? ?->? ?一個信道,可以雙向通信

半雙工? ?->? ?一個信道,只能單向通信

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

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

相關文章

Qt案例練習(有源碼)

項目源碼和資源:Qt案例練習: qt各種小案例練習,有完整資源和完整代碼 1.案例1 項目需求:中間為文本框,當點擊上面的復選框和單選按鈕時,文本框內的文本會進行相應的變化。 代碼如下: #include "dialog.h" …

C++的數據結構(十):AVL樹

AVL樹是一種自平衡的二叉搜索樹,得名于其發明者G.M. Adelson-Velsky和E.M. Landis。在AVL樹中,任何節點的兩個子樹的高度最多相差1,這種性質確保了AVL樹的查找、插入和刪除操作的時間復雜度接近O(log n)。 AVL樹是一種二叉搜索樹,…

MongoDB基礎入門到深入(七)建模、調優

文章目錄 系列文章索引十一、MongoDB開發規范十二、MongoDB調優1、三大導致MongoDB性能不佳的原因2、影響MongoDB性能的因素3、MongoDB性能監控工具(1)mongostat(2)mongotop(3)Profiler模塊(4&a…

K8S認證|CKA題庫+答案| 16. 升級集群

16、升級集群 CKA v1.29.0模擬系統免費下載試用: 百度網盤:https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwdwbki 題目: 您必須在以下Cluster/Node上完成此考題: Cluster Ma…

CTF網絡安全大賽簡單web題目:eval

題目來源于&#xff1a;bugku 題目難度&#xff1a;簡單 一道簡單web的題目 題目源代碼&#xff1a; <?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> 這個PHP腳本有幾個關鍵部分&#xff0c;但…

太陽誘電:順應時代需求的新型電容器為何能在全球得到廣泛應用(下)

隨著汽車電動化和電子控制化的進展&#xff0c;車載計算機和電氣部件也在逐漸向大功率化的方向發展。而構成這些車載設備電源電路的電子元器件也必須隨之進行技術革新。太陽誘電集團攜手全資子公司ELNA&#xff0c;開發并供應新型電容器“導電性高分子混合鋁電解電容器”&#…

【熱門話題】一文帶你讀懂公司是如何知道張三在脈脈上發了“一句話”的

按理說呢&#xff0c;A公司和脈脈屬于不同的平臺&#xff0c;而且脈脈上大家可以匿名發言&#xff0c;所以&#xff0c;即便我坐在你邊上&#xff0c;我發了一句話上去&#xff0c;你也不知道是誰發的。但通過一些技術&#xff0c;我們卻可以分析出&#xff0c;公司是如何知道張…

IOC控制反轉

IOC IOC&#xff0c;全稱為Inversion of Control(控制反轉)&#xff0c;是一種設計原則&#xff0c;它反轉了傳統編程中的控制流程。在傳統的編程模式中&#xff0c;組件之間的依賴關系是由組件自身在內部創建和維護的。而在控制反轉模式中&#xff0c;這種依賴關系由外部容器(…

SSH 免密登錄vscode 附debug 免密登錄失敗問題排查

SSH 免密登錄vscode 附debug 關鍵詞 &#xff1a;vscode ssh ssh無法免密登錄 ssh免密登錄失敗 1 sshd 的配置文件/etc/ssh/sshd_config&#xff0c; 確保公鑰登錄開啟 PubkeyAuthentication yes2 生成公鑰并上傳 ssh-keygen找到本地 .ssh/id_rsa.pub 將其中文本內容搞到…

PS —— 制作證件照

PS —— 制作證件照 裁剪工具魔棒工具油漆桶工具擴展畫布 老是看編程&#xff0c;會有些疲勞&#xff0c;這個專欄我會放一些其他的知識&#xff0c;我們今天利用PS制作證件照&#xff08;注意&#xff0c;這里一些ps的基礎操作我不會很展開的去講&#xff09;&#xff1a; 裁…

Redisson分布式Redis鎖,tryLock方法詳解

在 Java 中&#xff0c;RLock 是 Redisson 庫中提供的一個分布式鎖接口&#xff0c;用于實現基于 Redis 的分布式鎖。RLock 的 tryLock 方法用于嘗試獲取鎖&#xff0c;并在特定的時間內等待獲取鎖。 方法簽名如下&#xff1a; boolean tryLock(long waitTime, long leaseTim…

WPF關鍵組件代碼示例

通過一個綜合示例代碼&#xff0c;展示WPF的關鍵組件&#xff0c;包括XAML、控件、數據綁定、樣式和模板以及動畫。這個示例創建一個簡單的WPF應用程序&#xff0c;包含一個文本框、按鈕和列表框&#xff0c;實現數據綁定、自定義樣式和模板&#xff0c;以及按鈕點擊后的動畫效…

深入解析R語言的貝葉斯網絡模型:構建、優化與預測;INLA下的貝葉斯回歸;現代貝葉斯統計學方法;R語言混合效應(多水平/層次/嵌套)

目錄 ①基于R語言的貝葉斯網絡模型的實踐應用 ②R語言貝葉斯方法在生態環境領域中的應用 ③基于R語言貝葉斯進階:INLA下的貝葉斯回歸、生存分析、隨機游走、廣義可加模型、極端數據的貝葉斯分析 ④基于R語言的現代貝葉斯統計學方法&#xff08;貝葉斯參數估計、貝葉斯回歸、…

react使用AntV

AntV使用&#xff08;https://antv.antgroup.com/&#xff09; import React, { useEffect } from "react"; // npm install antv/g2 import { Chart } from "antv/g2"; const Charts () > { function Ccc() { // 準備數據 const data [ { genre: …

【Linux】腳本shell script

shell是與Linux交互的基本工具 shell script是針對shell所寫的腳本&#xff0c;解釋執行&#xff0c;無需編譯 注意事項 指令的執行是從上而下、從左而右的分析與執行&#xff1b; 指令、選項與參數間的多個空白都會被忽略掉&#xff1b; 空白行也將被忽略掉&#xff0c;并且…

抽象工廠模式(AbstractFactoryPattern)

文章目錄 1.抽象工廠模式定義2.UML類圖3.抽象工廠模式具體實現工廠模式實現單一產品族抽象工廠實現多產品族產品類工廠類使用 4.抽象工廠模式優缺點 1.抽象工廠模式定義 提供一個創建一系列相關或相互依賴對象的接口&#xff0c;而無需指定它們具體的類。 工廠方法模式是單一產…

2024電工杯B題食譜評價與優化模型思路代碼論文分析

2024年電工杯數學建模競賽B題論文和代碼已完成&#xff0c;代碼為B題全部問題的代碼&#xff0c;論文包括摘要、問題重述、問題分析、模型假設、符號說明、模型的建立和求解&#xff08;問題1模型的建立和求解、問題2模型的建立和求解、問題3模型的建立和求解&#xff09;、模型…

正點原子[第二期]Linux之ARM(MX6U)裸機篇學習筆記-17講 定時器按鍵消抖

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“正點原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸機篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。…

計算機網絡安全控制技術

1.防火墻技術 防火墻技術是近年來維護網絡安全最重要的手段&#xff0c;但是防火墻不是萬能的&#xff0c;需要配合其他安全措施來協同 2.加密技術 目前加密技術主要有兩大類&#xff1a;對稱加密和非對稱加密 3.用戶識別技術 核心是識別網絡者是否是屬于系統的合法用戶 …

【設計模式深度剖析】【1】【結構型】【代理模式】| 玩游戲打怪、升級為例加深理解

&#x1f448;?上一篇:創建型設計模式對比 | 下一篇:裝飾器模式&#x1f449;? 目 錄 代理模式定義英文原話直譯如何理解&#xff1f; 3個角色UML類圖1. 抽象主題&#xff08;Subject&#xff09;角色2. 代理類&#xff1a;代理主題&#xff08;Proxy Subject&#xff0…