網絡層和數據鏈路層

目錄

1.網絡層

2.數據鏈路層


1.網絡層

? ? ? ? 我們知道,我們的消息為了從A端發送到B端,達成遠距離傳輸,我們為此設計了很多協議層,分別是應用層,傳輸層,網絡層,數據鏈路層,網卡,傳輸層確保我們數據的可靠性與安全送達,而我們對網絡層的定位是:IP提供個一種把數據從A端送到B端的能力。

如果說TCP能夠保證我們數據的可靠性,那么我們的IP就能夠讓我們的數據在不同的主機間進行傳輸。

一個形象的比喻是,假如張三是一個學霸,它的數學特別好,有能力考到150分,這個有能力的意思是有很大概率考到150分,并不能確保一定能考到150分,那張三學校的教導主任為了讓張三的成績每次都是150分,它的做法是假如張三這次考試沒有考到150分,那么我就讓全校重考,知道張三數學考到150分。張三有考150分的能力,加上教導主任的助力,實現了張三每次的成績都是150分,那么我們的TCP/IP也是類似的,IP提供了一種把數據從A端傳輸到B端的能力,但是不能保證傳輸的過程不丟包,那么萬一我們的IP丟包了,我們的TCP就要保證數據的可靠性,進行重傳,具體的實現不就是沒有收到應答,就有超時重傳和快重傳的機制嗎?

? ?IP是是什么?

? ? ? ? IP=網絡地址+主機地址

我們路由的本質就是實現不同子網間的信息傳遞!

? ? ? ? 要認識IP,就得認識他的報頭,我們講解TCP的時候說過,一個協議要解決的2個問題就是,如何把報頭和有效載荷進行分離,如何向上交付的問題,也就是如何分用。

? ? ? ? 看著下面的IP報頭,我們來解讀一下,首先16位字節總長度是我們報文的總長度,由于IP的報頭長度是固定的,那么我們知道16位總長度,那么我們就可以知道了報頭和有效載荷的分界線,我們讀到一個完整的IP報頭就可以對報頭和有效載荷進行分離了。

? ? ? ? 這是沒有選項的情況,如果有選項,我們就需要看一下四位首部長度,那么減去的就是4位首部長度,因為4位首部長度里面是報頭+選項的總長度。

? ? ? ? 第二個問題,如何向上交付,8位協議里面有上層協議的類型。

? ? ? ? 那么我們IP報文在傳輸的過程中,由于網絡拓補結構的復雜,可能會出現環路問題,會出現永生報文,我們不允許這種情況的出現,所以我們報頭有一個參數是8位生存時間,每進行一次路由器傳輸,它的數字--,減到0的時候這個報文就被丟棄掉。

? ? ? ?IP是遠距離傳輸的過程還會出現信號減弱,所以我們有集線器,每經過一次集線器,它的信號就被放大了,確保了我們遠距離傳輸。

? ? ? ? 下面來說我們的32位IP地址,和我們的學號一樣,學號是經過精心設計的,拿這你的學號就可以知道你是哪個專業,哪個院,哪個班,,就可以找到你這個人,身份證不也是一樣嗎?你的身份證里有你的地區,有你的出生日期,也是被精心設計的呀,一個身份證對應的就是一個人,我們的IP也是類似的,IP=網絡號+主機號。

? ? ? ? 我們同一個子網內我們IP的網絡號是相同的,如果我想要進行查找,我本質就是進行IP的淘汰,比如我的目的IP是1.0,同時有2.0,3.0,4.0等多個子網,我們一下就會淘汰掉許多IP,提高了我們的效率,如果我們不這樣設計一個一個去找,就是線性查找,效率非常的低下,我們的紅黑樹為什么高效,不就是它查找一次淘汰一般的數據嗎?

? ? ? ? 因為線性查找低效,所以我們要提高效率,為了提高效率,我們精心設計了IP,所以同學們,我們發現不僅僅是計算機是這樣,我們的身份證等等不都是這樣嗎?

? ? ? ? 了解完了IP的報頭我們還需要進一步了解我們的IPV4,你不是說我的IPV4有32個比特位嗎?它不就是2的32次方嗎?既然IP是唯一的,那我現在的設備超過了這個2的32次方,我不就無法進行標識唯一性了嗎?你給我解釋一下。

? ? ? ? 起初,我們的IP劃分的時候沒有想到互聯網會像現在這么普及到千家萬戶,所以它開始設計的就比較少,而且劃分的時候比較糙。

? ? ? ? 你看假如我把一個網絡號劃給一個子網,它的子網內就不可能有2的24次方臺主機,這樣的劃分造成了大量的IP浪費,為了減少浪費,我們引入了子網掩碼,就是IP地址與子網掩碼按位與之后有幾個1,就有幾位是網絡號!

子網掩碼的本質就是:提高我們的IP利用效率!我們的IP設計沒有一處是多余的,都是經過精心的設計的,20個字節的報頭就能表示這么多東西,實在是厲害。

下面的IP地址與我們的子網掩碼按位與之后就是我們的網絡號。28位表示網絡號,4位表示網絡號。

其中我們的主機地址全0表示網絡地址,全F表示廣播。所以我們實際表示的主機數還要減去2!

? ? ? ? 說完了IP的這些之后,我想問你有沒有發現我們的家庭網絡的IP都是192.多少多少,而且不同的網絡之間IP是可以進行重復的,怎么回事,你不是說IP不可以重復嗎?但是我看到的明明可以重復呀!

? ? ? ? 其實我們除了我們的公網IP之后,還有我們的私網IP,它們只能用來構建子網,不能出現在公網。

? ? ? ? 那誰來幫助我們組件子網,家庭路由器幫助我們對子網進行組件,所以路由器不僅有組件網絡的功能,也有路由的功能。

? ? ? ? 我們平時接觸的IP都是子網IP,都不是公網IP。

? ? ? ? 為了解釋這種現象,我們可以這么理解,我們家庭路由器都是只有私網IP,我們的運營商的路由器有一個私有IP有一個公網IP,我們的路由器把消息轉發給運營商的路由器,由它幫助我們進行公網的轉發,所以我們發的消息都會經過運營商的檢測,你一旦訪問一些不科學的網站,就會把你的訪問請求報文直接丟棄掉,所以想要科學上網,就需要PIAN過運營商。????????

? ? ? ? 這樣的設計讓我們私網IP之間可以進行重復,大大減少了IP不足的壓力。

家用路由器的本質就是由運營商搭建的一個子網,我們國家的基礎設施就是聯通移動電信來搭建的,光纖入戶就是讓我們用戶接入網絡,這樣就有需求產生,有需求就會有市場,這樣經濟就發展起來了。

所以我們想進行短視頻的請求,就是進行轉發,從一個子網到另一個子網,但是我們的公網不存在私人IP,所以這樣的轉發是不正確的。我們需要對我們的IP進行替換。

下面的圖才是正確的轉發過程,源IP不斷被轉換,知道發到公網,然后回來的時候還發到我們的運營商路由器會進行查表,返回到我們的私人IP。具體的過程還得

總而言之,我們的個人是通過運營商來訪問公網的。

????????

? ? ? ? 要想了解IP的整個機制,就需要了解一下我們的IP子網劃分是怎么樣進行的。

? ? ? ? 首先我們國家與國家之間會有一個國際路由器,我們簡化模型,假設俄羅斯的網絡地址是1.0,美國是2.0,英國是3.0,中國是5.0,俄羅斯想發一條消息給中國,它會把目的IP與子網掩碼進行按位與,然后查表,進行跳躍,國與國之間的國際路由器就是一個子網,

然后中國有許多省份,我們會為每個省份劃分一個IP,這是第二次子網劃分,每個省內的每個市分發一個IP,這是第三次子網劃分,市的IP就相當于我們之前的出入口的路由器,市下面全部都是一個一個的私人IP,就去構建一個一個子網了。

IP能夠找到我們的主機就是因為我們的IP被統一設計過了。

我們的網絡=內網+公網,公網有限,我們大部分接觸的網絡IP都是內網IP。

我們的IP報頭里面還有一個13位偏移位,這是因為鏈路層規定,交給鏈路層的報文大小不要超過1500字節。所以如果超過我們的網絡層需要進行切分。傳過去之后再進行合并。

? ? ? ? 學習網絡的本質就是學習報文的整個生命周期,因為我們的IP報文超過規定的大小需要切分,所以我們的IP報頭里面有一個表示IP的唯一標識位,如果分片了,標識位就是一樣的,

還有一個偏移量是為了讓我們的分片之后進行檢查是否有丟包的分片。

我們IP分片的過程,和我們的傳輸層沒有關系,不需要讓傳輸層知道,分片和組裝的過程都是在你的網絡層進行的,不要讓上層知道。

分片不是簡單的對每個報文進行分片,還要為每個報文進行報頭的添加。由一個IP報文變為多個IP報文。

有一個問題是13位偏移量如何表示16位總長度,這是因為我們13位偏移量會右移3位,也就是2的3次方,這樣就是16位了,所以這就要求我們的偏移量必須是8的倍數。

報文有分片就要組裝,我們分片后就要討論如何組裝的問題。

1.有的分片,有的IP報文根本就沒有分片,如何挑出來報文的分片。

如果一個報文分片了,第一個報文,偏移量為0的報文,第三個標志位一定為1,表示還有更多標志位。

如果是最后一個,那它的偏移量一定大于0,并且第三個標志位為0,表示沒有更多分片了。

2.挑出來分片的報文了,如何確保它們的完整?

完整就是有頭有尾有中間,根據頭部和尾部的特性可以知道,那么如何知道中間的呢?

一個報文的偏移量等于它前面報文的有效載荷+前面報文的偏移量,按照升序排序,就能發現是否有缺失的,如果有,丟棄整個報文進行重傳。

? ? ? ? 我們知道了這么多分片和組裝的策略,但是并不意味著我們要多進行分片,這是迫不得已進行分片和組裝,你想我一個IP報文傳輸成功的概率大,還是一群IP報文傳輸成功的概率大,肯定是一個IP報文傳輸的概率大,所以我們分片之后一個IP報文丟失就要丟掉整個報文,不利于我們可靠的傳輸,丟包之后我們的傳輸層還要進行重傳。非常低耗時啊。

? ? ? ? 所以我們要盡量減少分片,要減少分片就要讓我們的傳輸層盡量傳輸少于我們的鏈路層最大接受報文的量,所以我們的傳輸是用滑動窗口進行分段傳輸而不是把整個滑動窗口的字節全部傳輸過去,這樣做會變相增大丟包率。

? ? ? ? 所以傳輸層需要選擇合適的數據大小進行傳輸。什么是合適的數據大小呢?

????????

子網傳輸中,為什么要把數據要給路由器F,這是因為我的IP報文的網絡地址是路由器F,目的IP決定的,目的IP決定你往哪個路由器進行傳輸。

如何把數據交給F就是局域網通信的問題,這是由數據鏈路層解決的。? ? ? ??

????????

2.數據鏈路層

? ? ? ? 數據鏈路層有:

目的地址就是目的MAC地址,源IP地址就是源MAC地址,類型就是說明該報文向上交付給誰。

CRC進行數據校驗,檢查數據是否傳輸正確,不正確丟掉進行重傳。

MAC數據幀并不是越大越好,局域網進行通信,會發送碰撞,為了保證數據的正確傳輸就有碰撞避免和碰撞檢測,發送碰撞就要進行重傳。

一個MAC數據幀太大了,在網絡間停留的時間長,容易發生碰撞。但是太小了比如1字節,它傳的數據還沒有報頭大,效率太低,所以MAC幀數據不能太高也不能太低,科學家進行大量的實驗發現46-1500字節是最為合適的,所以我們的傳輸最大值為1500字節,如果不夠46字節會補夠46字節。

? ? ? ? 一個數據幀在進行轉發的時候需要知道目的MAC地址,和源MAC地址,源MAC地址肯定知道,那么問題就是我們的目的MAC地址,所以會出現我們的ARP協議獲取局域網內特性的MAC地址。

? ? ? ? 大致的過程是我們的會把我們的MAC幀的目的地址設為全F,發給局域網內所有的主機,然后所有的主機收到,拆掉MAC幀報頭,然后里面有ARP報頭,ARP報頭里面就有

發送方會把OP設為1,表示發送,硬件類型0800代表的上層交付給IP協議,目的MAC地址設為全F,然后對應的IP主機收到報文會對我們的發送方進行應答,然后我們發送方就收到了目的MAC地址就可以進行路由傳輸了。

? ? ? ? 我們知道的IP報文會進行轉發,我的問題是,當我們到達我們的子網路由器入口的時候,我的IP報文里面有源IP和目的IP,但是我們如果要進行轉發還需要知道我們的目的MAC地址,就比如下面這個IP報文,它的目的IP是IPX,它的源IP是我們的IPE,而我們的路由器則是R,我們已經到了子網的入口,下一步我要將我的IP報文交給我們的數據鏈路層。

數據鏈路層有我們的以太網目的地址,也就是我們的目的MAC地址,還有以太網源地址,也就是源MAC地址,還有幀類型,說明報文是應該交付向上交付給誰,但是我們不知道我們IPE的MAC地址,我們只知道它的IP地址,所以我們為了知道我們的IPE的MAC地址,就有ARP協議。

ARP的報文有硬件類型,一般是1表示以太網,協議類型表示要轉化的地址,0800代表IP,OP代表是請求還是應答報文,發送端以太網地址就是本主機的MAC地址,發送端IP地址就是本主機的IP地址,目的以太網地址就是不知道的,設為全F,我們知道目的IP地址的。這樣我們的ARP報文里面就把目的以太網地址空出來了。

該通信是局域網內通信,我們的數據鏈路層會把這個報文發給該局域網內所有的主機,所有的主機都會收到該報文,該報文會進行填充。

下面就是我們數據鏈路層填充好的協議,這個報文會發給該局域網內所有的主機,然后其他主機收到這個報文,根據協議,發現我們的目的MAC地址是全F表示任意主機,幀類型是08-06,代表ARP協議,即這個報文不應該直接交付給IP,而是先交給ARP協議棧,嗯,交給ARP了然后,主機會看它的OP字段,判斷他是請求報文還是應答報文,看到該報文是請求報文,再去對比發送的目的IP地址,發現目的IP和自己不一樣,丟棄,發現目的IP和自己一樣就會對我們的目的MAC地址進行填充,然后就會進行應答。

你看,應答的時候它就成了發送報文的一方,它的以太網目的MAC自己就知道,以太網源MAC地址,就是它自己的MAC地址嗎,你說它能不知道嗎?

幀類型就是選擇0806,0806代表了ARP應答,硬件類型選擇以太網,協議類型就是0800,表示向上交付給的是IP,OP寫為2,代表該ARP報文是應答報文,發送端以太網地址改為MACE,IP為IPE,目的以太網地址改為MACR,目的IP改為IPR,這樣我們就把這個報文發給局域網內所有的主機。

與路由器R發過來的請求報文相比,這次我們的開頭的目的地址不再是全F,這樣當其他不匹配的目的地址收到該報文的時候,在數據鏈路層直接丟棄掉,不必到了ARP層再進行丟棄,發的時候全部受到了ARP,不匹配的在ARP層才丟棄,但是回復的時候不匹配的主機在數據鏈路的MAC層就會被丟掉,當我們的路由器R拆掉報頭,拿到ARP的報頭,先看OP層發現它是2,就明白了它是一個應答報文,我們要的MAC地址就是ARP中的發送端的MAC地址,至此,我們拿到了目標主機的MAC地址,源IP,目的IP,源MAC,目的MAC也有了,可以開始進行向指定的主機進行發送了。

發送的過程中,我們的ARP不過也是數據鏈路層的一個協議。

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

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

相關文章

Redis 的字典:像智能文件柜一樣高效的哈希表實現

目錄 一、從傳統查找的痛點到哈希表的優勢? 二、哈希表的核心結構:文件柜的構成? 2.1、 dictht 結構體:文件柜本體? 2.2、dictEntry 結構體:帶鏈條的文件夾? 2.2.1、 哈希沖突的解決:抽屜里的鏈條? 2.3、字典的高層封裝…

FAST API部署和使用

第一部分:FastAPI 的使用(開發環境) 1. 安裝 首先,你需要安裝 FastAPI 和一個 ASGI 服務器,最常用的是 Uvicorn。 pip install "fastapi[standard]"這個命令會安裝 FastAPI 以及所有推薦的依賴,包…

【JavaWeb】之HTML(對HTML細節的一些總結)

大家天天開心! 文章目錄 前言一、HTML的簡介二、HTML運行方式三、html 的標簽/元素-說明四、表單注意事項總結 前言 首先我們在把Java基礎學習完之后,我們就要進行網站方面的開發了,我們要了解網頁的組成,而網頁的組成有HTML,CSS,…

互聯網醫院品牌IP的用戶體驗和生態構建

一、患者體驗與信任構建互聯網醫院品牌IP的價值核心在于獲得患者的深度信任,而卓越的用戶體驗是實現這一目標的關鍵路徑。在醫療服務同質化嚴重的當下,患者體驗已成為醫療機構差異化競爭的重要維度。研究表明,良好的用戶體驗能夠提高用戶滿意…

【Node.js教程】Express框架入門:從搭建到動態渲染商品列表

前言 Visual Studio Code(簡稱VSCode)是微軟開發的一款免費開源跨平臺代碼編輯器,憑借其免費、開源、跨平臺的特性,以及豐富的插件生態和美觀的界面,成為前端開發者的首選工具。 本文將帶你從零開始學習Express框架,包括搭建項目、配置路由、使用中間件以及實現動態渲染…

眾擎機器人開源代碼解讀

一,綜述 EngineAI ROS 包: 高層開發模式:用戶可通過發布身體速度指令,直接調用 EngineAI 機器人的行走控制器。底層開發模式:用戶可通過發布關節指令,自主開發專屬的控制器。 ROS2 package:全…

Windows系統安裝Git詳細教程

文章目錄步驟 1:下載 Git 安裝包步驟 2:運行安裝程序步驟 3:選擇安裝路徑步驟 4:選擇組件步驟 5:選擇默認編輯器步驟 6:選擇路徑環境變量步驟 7:選擇 HTTPS 協議的傳輸方式步驟 8:配…

leetcode 3446. 按對角線進行矩陣排序 中等

給你一個大小為 n x n 的整數方陣 grid。返回一個經過如下調整的矩陣:左下角三角形(包括中間對角線)的對角線按 非遞增順序 排序。右上角三角形 的對角線按 非遞減順序 排序。示例 1:輸入: grid [[1,7,3],[9,8,2],[4,…

攜程旅行 web 驗證碼 分析

聲明 本文章中所有內容僅供學習交流使用,不用于其他任何目的,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 逆向分析 部分python代碼 result cp…

JavaEE 進階第一期:開啟前端入門之旅(上)

專欄:JavaEE 進階躍遷營 個人主頁:手握風云 一、HTML基礎 1.1. 什么是HTML HTML(Hyper Text Markup Language),超文本標記語言。 超文本:比文本要強大,通過鏈接和交互式方式來組織和呈現信息的文本形式。不僅僅有文本…

4.5 PBR

1.PBR簡介 2.高光工作流 3.金屬工作流1.PBR簡介 PBR(Physically Based Rendering, 基于物理的渲染)的工作流分為金屬工作流和高光工作流2.高光工作流 高光工作流是一種傳統的工作流, 現在用的相對較少, 但是在某些特定情況下能提供更精細的控制a.核心思想它不區分金屬和非金屬,…

09.《路由基礎知識解析和實踐》

09.路由基礎 文章目錄09.路由基礎核心概念路由關鍵組成部分三層轉發原理介紹(通信流程)路由類型及配置直連路由(direct)實驗示例**靜態路由(Static)****實驗示例****動態路由****RIP(routing information protocol---路…

websocket建立連接過程

1. 客戶端發送一個GET的http請求,請求頭要包含connection: upgradehost:localhost:8000。表明地址upgrade: websocket。指明升級的協議sec-websocket-key 。 安全驗證密鑰sec-websocket-version。 協議版本sec-websocket-accept 。對傳過來的key進行加密…

Simulink庫文件-一種低通濾波模塊搭建方法

在汽車電控系統應用層開發中,經常會用到低通濾波模塊,其主要作用是去除輸入信號中的高頻干擾,防止由于輸入信號的干擾引起后續執行系統的非預期頻繁波動。本文介紹簡要介紹低通濾波的定義及作用,并介紹一種低通濾波模塊simulink搭…

【C++游記】AVL樹

楓の個人主頁 你不能改變過去,但你可以改變未來 算法/C/數據結構/C Hello,這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢,我們繼續來學習C的內容呀。C是接近底層有比較經典的語言,因此學習起來注定枯燥無味&#xf…

音視頻學習(六十二):H264中的SEI

什么是SEI? 在 H.264 視頻編碼標準中,補充增強信息(Supplemental Enhancement Information,SEI) 是一種特殊的 NAL(網絡抽象層)單元。它不像序列參數集(SPS)或圖像參數集&#xff0…

docker run 后報錯/bin/bash: /bin/bash: cannot execute binary file總結

以下方法來源于AI&#xff0c;個人僅驗證了第三條便成功執行 1. 鏡像與宿主機架構不匹配 比如&#xff1a; 你是 x86_64 的機器&#xff0c;但鏡像是 ARM64 的&#xff08;或反之&#xff09;。在 PC 上拉了樹莓派用的鏡像。查看鏡像架構 docker inspect <image_name> | …

【Redisson 加鎖源碼解析】

Redisson 源碼解析 —— 分布式鎖實現過程 在分布式系統中&#xff0c;分布式鎖 是非常常見的需求&#xff0c;用來保證多個節點之間的互斥操作。Redisson 是 Redis 的一個 Java 客戶端&#xff0c;它提供了對分布式鎖的良好封裝。本文將從源碼角度剖析 Redisson 的分布式鎖實現…

uni-app支持單多選、搜索、查詢、限制能否點擊組件

<template><view class="multi-select-container" :class="{ single-select: !multiple, no-search: !searchable }"><!-- 當組件被禁用時,直接顯示選中的內容 --><view class="disabled-display" v-if="disabled &a…

TFT屏幕:STM32硬件SPI+DMA+隊列自動傳輸

看了網上的很多的SPIDMA的代碼&#xff0c;感覺都有一些缺陷&#xff0c;就是基本都是需要有手動等待DMA完成的這個操作&#xff0c;我感覺這種等待操作在很大程度上浪費了時間&#xff0c;那么我加入的“隊列”就是一種將等待時間利用起來的方法。原本的SPIDMA的操作邏輯如下圖…