計算機網絡 4-2-1 網絡層(IPv4)

  • 2 IPv4分組

  • 各協議之間的關系

  • IP協議(Internet Protocol, 網際協議)是互聯網的核心!

    ARP協議用于查詢同一網絡中的<主機IP地址,MAC地址>之間的映射關系

    ICMP協議用于網絡層實體之間相互通知“異常事件”

    IGMP協議用于實現IP組播

    • 2.1 結構<首部+數據部分>

      • 看書的素圖回憶各字段的作用

      • 首部固定部分20B,可變部分0~40B

      • 注意3個與“長度”相關的字段:418,首總偏

    • 補充:

      ? ?版本:v4:0100,v6:0110

      ? ?首部長度:固定部分20B,則是5*4=20B,為0101;最大60B,則15*4=60B,為1111

      一般首部長度默認為固定長度

      ? ?實際傳輸過程中, “數據部分”的長度受下一段鏈路的最短/最長幀長限制

      eg: 以太網幀有最短幀長、最長幀長限制

    • 2.2 命題重點

      • 2.2.1 分片問題

        • MTU (最大傳送單元):一個鏈路層數據幀能承載的最大數據量

        • 如果一個IP數據報的總長度大于下一段鏈路的MTU,就需要將“數據部分”分片

        • 易錯:除最后一個分片外,其他每個分片的“數據部分”必須是8B的整數倍

        • 易混

          • 標識16bit,用于區分每個分片原本屬于哪個IP數據報

          • 標記3bit, 關注最低位MF、次低位DF

            • MF=1,表示后面還有分片

            • MF=0, 表示這是最后一個分片

            • DF=1,表示不允許被分片

            • DF=0,表示允許被分片

注意:

·IP數據報的“分片”可能在源主機、或任何一個路由器中發生

·只有目的主機才會對分片進行“重組”

·各分片有可能亂序到達目的主機

·由于首部的“片偏移”字段是以×8B為單位,因此,除了最后一個分片外,其他每個分片的數據部分必須是8B的整數倍(片偏移表示的是這個IP數據報它自己承載的數據在原始數據報當中的位置。)

      • 2.2.2 TTL字段

        • IP分組每經過一個路由器,TTL減1,如果已經減到0,該路由器就丟棄分組,并向源主機發送ICMP報文 (通知出現異常)

    • 不可達:

      TTL的初始值通常由源主機設置。

      每經過一個路由器,路由器就將TTL減1, 如果TTL減到0,就直接丟棄分組,并向源主機發送ICMP報文

      注:ICMP報文用于通知一個節點發生了某種“異常”

2.3 ip地址最初的分類方案?

  • 路由器和路由器連接的接口可以不分配IP地址,但路由器和其他節點連接的接口必須分配IP地址
  • 從屬于同一個網絡的所有主機、路由器接口的IP地址“網絡號”都相同
  • 當一臺新主機接入網絡時,需要給它分配一個IP地址、并配置“默認網關”

H1給H7發送IP數據報(166.1.0.0--200.1.1.2):

????????這個IP分組需要發送到另一個網絡上,先交給默認網關這臺路由器(H1的內部已配置:166.1.0.5)當H1知道了這個默認網關的IP地址之后。通過ARP協議查詢到默認網關的IP地址所對應的MAC地址。把這個IP數據包封裝成幀,把這個幀的目的MAC地址直接寫成b2接口所對應的MAC地址對;

????????接下來H1會把這個mac幀發送給交換機,交換機根據MAC地址逐層轉發到路由器的b2這個接口,路由器檢查目的網絡的IP地址網絡號,根據轉發表查看,把這個數據報從b0接口轉發出去。當轉發這個IP數據報的時候,也會修改mac幀,把mac幀的目的地址修改為接口的MAC地址。所以會把這個IP數據包重新封裝成幀,這個幀的目的MAC地址填寫為c0。

? ? ? ? 把幀從b0接口轉發出去。公司的路由器就收到了這個IP數據包。檢查IP數據包的目的地址,查看轉發表,確定這個IP數據包接下來從c2這個接口轉發出去。那同樣根據ARP協議查詢對應Mac地址重新封裝成幀。

H1給H6發送IP數據報(166.1.0.0--166.1.4.4):

? ? ? ? 先檢查源IP和目的IP是否屬于同網段,同屬同網段就不需要轉發到默認網關;h1通過ARP協議查詢到h6對應的MAC地址,直接把這個數據包封裝成mac幀,把幀發送給交換機,交換機根據mac幀,轉交給下一臺交換機,交換機再根據mac幀轉發到下一個節點,

? ? ? ? 該結點是集線器。集線器收到幀之后,會把幀無腦的轉發給與之相連的所有結點,h6收到幀查看確認是自己接收,H5查看不是自己不接收丟棄

注意:以上這些特殊地址不能指派給網路中的任何一臺主機或路由器“私用”

重要結論:前兩行說明,如果一個網絡中,主機號占Nbit,那么這個網絡中,最多支持臺主機&路由器

2.4 子網劃分 & 子網掩碼

  • 2.4.1 子網劃分技術

    • ?子網劃分
      • 原理:若某單位租用了一個IP地址段,假設原本主機號占 n bit,那么可以將前k bit摳出來作為子網號,用剩余的n-kbit作為主機號,這樣就能劃分出2^k個子網(每個子網包含的IP地址塊大小相等)

      • 子網劃分前,IP地址為兩級結構=<網絡號,主機號>

      • 子網劃分后,IP地址為三級結構=<網絡號,子網號,主機號>

      • 注意:每個子網地址中,主機號不能分配為全0/全1?

        • 全0表示子網本身,全1為子網廣播地址

    • ?

    • 子網劃分作用:讓一個很大的IP地址塊劃分成幾個相互獨立的這種地址塊,從而提升IP地址資源的利用率。

    • ?子網掩碼
      • 作用

        • 子網掩碼、IP地址“逐位與”,算出<網絡號,子網號>(可合稱為“網絡前綴”)

        • 只有網絡前綴相同的IP地址,才歸屬于同一個網絡 (或子網)

      • 注意

        • 如果一個網絡內部進行了子網劃分,那么這個網絡中的每臺主機、每個路由器接口都需要配置IP地址、默認網關、子網掩碼

        • 如果一臺路由器支持子網劃分技術,那么在它的轉發表中, 需要包含<目的網絡號,子網掩碼,轉發接口>

    • ?默認子網掩碼
      • 如果一個傳統網絡 (A/B/C類)內部沒有進行子網劃分,那么可以將對應此網絡的轉發表項設置為“默認子網掩碼”

        • A類默認255.0.0.0 B類默認255.255.0.0 C類默認255.255.255.0

    • ?默認路由
      • 默認路由 (默認轉發表項)設置:<目的網絡號全0,子網掩碼全0>

      • 在路由器轉發表中,如果所有表項都不匹配,那么將從“默認路由”轉發出去

  • 2.4.2 主機發送IP數據報的過程

    • 一、判斷目的主機和本機是否屬于同一個網絡

      • ①檢查本機IP地址和目的IP地址的網絡前綴是否相同(需要用本機配置的子網掩碼“逐位與”)

      • ②若網絡前綴相同,說明目的主機和本機屬于同一個網絡;若網絡前綴不同,說明不屬于同一網絡

    • 二、將IP數據報封裝成MAC幀并發送到鏈路上

      • 如果目的主機與本機屬于同一個網絡,就通過ARP協議找到目的主機的MAC地址,再將IP數據報封裝成幀,并將幀發送給目的主機

      • 如果目的主機與本機不屬于同一個網絡,就通過ARP協議找到默認網關的MAC地址,再將IP數據報封裝成幀,并將幀發送給默認網關

  • 2.4.3 路由器轉發一個IP數據報的過程

    • 一、路由器的某個接口收到一個IP數據報

    • 二、對IP數據報首部進行校驗,并從中找到目的IP地址

    • 三、查“轉發表”

      • 轉發表的表項包含<目的網絡號,子網掩碼,轉發接口>

      • 檢查目的IP地址與每個表項能否匹配(將目的IP地址、子網掩碼“逐位與”,匹配表項中的目的網絡號)

      • 注:至少“默認路由”表項一定是可以匹配成功的

    • 四、轉發

      • 根據查轉發表的結果,將IP數據報從匹配的接口轉發出去

      • 注:如果匹配的“轉發接口”和該IP數據報的入口相同,就不用再把IP數據報轉發回去

?

訓練一:H3→H6(同一子網內的兩臺主機):在局域網的內部就完成了IP數據包的傳送? ?

? ? ?????????H3要檢查目的地址與源是否從屬于同一個網絡:用配置的子網掩碼和目的地址逐位相與。網絡前綴都相同這個目的地址和源從屬于同一個網絡之內。h3直接把這個IP數據包封裝成mac幀,并且在mac幀當中直接說明h6的這個MAC地址。到達集線器,集線器會把幀無腦的轉發給h5和h6兩臺主機。h5主機不會接收這個mac幀,因為目的地址和自己的mac地址不相同,而h6主機會接收這個幀,拆掉mac幀的首部和尾部,得到IP數據包。由于IP地址和自己的IP地址是匹配的,所以h6這臺主機就會接收這個IP數據包

訓練二:H1→H3(不同子網內的兩臺主機)

????????要判斷目的地址和的源IP地址是否同屬于同一個網絡,把目的地址和源的IP地址和本機內配置好的子網掩碼進行逐位與運算,得到兩個IP地址的網絡前綴。由于二者的網絡前綴不相等。

所以就說明這個目的結點和源不在同一個網絡內。于是h1需要把這個IP數據包發送給默認網關,讓他幫忙轉發。轉發給b3路由器

????????路由器的網絡層需要決定這個地址應該往哪轉發。首先要和轉發表的子網掩碼進行相與。相與的結果再和目的網絡號進行比較,可以看出和第二行匹配,就會從b2接口把這個IP數據包轉發出去。

訓練三:H1→H7(采用子網劃分技術的網絡→傳統網絡)

????????如果它沒有進行子網劃分,設置默認子網掩碼

訓練四:H7→H1(傳統網絡→采用子網劃分技術的網絡)

訓練五:主機H1發往Internet的某個IP數據報如何傳輸?(設目的IP地址=111.2.3.4)

  • 2.5 CIDR無分類編址

    • 2.5.1 基本原理

      • 取消了IP地址傳統的A/B/C/D/E 分類。采用無分類編址CIDR,IP地址塊分配更靈活,利用率更高,一定程度上緩解了IP地址耗盡 (時代背景:1993年)

      • IP地址={<網絡前綴>,<主機號>},其中網絡前綴不定長

      • CIDR記法

        • 128.14.32.153/30, 表示在這個IP地址中,網絡前綴占30bit, 主機號2bit

    • 2.5.2 CIDR地址塊的子網劃分

      • 定長子網劃分

        • 在一個CIDR地址塊中,把主機號前k bit摳出來作為定長子網號,這樣就能劃分出2^k個子網 (每個子網包含的IP地址塊大小相等)

        • 缺點:每個子網都一樣大,不夠靈活,IP地址利用率低,浪費有限的IP地址資源

      • 變長子網劃分

        • 在一個CIDR地址塊中,劃分子網時,子網號長度不固定(每個子網包含的IP地址塊大小不同)

      • 注意:在每個子網中,主機號全0、全1的IP地址不能分配給特定節點私用

    • 2.5.3 子網劃分解題技巧

      • CIDR地址塊的子網劃分技巧:可以利用類似于“從根到葉構造二叉哈夫曼樹”的技巧

        • ??原始CIDR地址塊作為根節點(假設可以自由分配的主機號占 h bit)

        • ??每個分支節點必須同時擁有左右孩子,左0,右1(反過來也行)

        • ??每個葉子結點對應一個子網,根據根節點到達葉子結點的路徑來分析子網對應的IP地址塊范圍

        • ??整棵樹的高度不能超過h-1(因為即便最小的子網也至少要保留2bit主機號)

例子:?

注意:路由器和主機相連的鏈路,需要給路由器節點也分配一個ip地址

???????

  • 2.6 路由聚合

    • ????????對于一個路由轉發表,如果幾條路由表項的轉發接口相同,部分網絡前綴也相同,那么可以將這幾條路由表項聚合為一條。這種地址的聚合稱為路由聚合,也稱構成超網。

      • 缺點:

        ????????● 路由聚合可以減少路由表的大小。

        ????????● 路由聚合可能會引入額外的無效地址。

存在1: 目的IP地址和轉發表多個表項匹配--最長前綴匹配原則

????????目的地址128.14.32.131與路由器轉發表均匹配,則采用最長前綴匹配原則進行匹配,表項2匹配的長度最長,則從G3轉發出去

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

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

相關文章

Docker中運行的Chrome崩潰問題解決

問題 各位看官是否在 Docker 容器中的 Linux 桌面環境&#xff08;如Xfce&#xff09;上啟動Chrome &#xff0c;遇到了令人沮喪的頻繁崩潰問題&#xff1f;尤其是在打開包含圖片、視頻的網頁&#xff0c;或者進行一些稍復雜的操作時&#xff0c;窗口突然消失&#xff1f;如果…

K8S cgroups詳解

以下是 Kubernetes 中 cgroups&#xff08;Control Groups&#xff09; 的詳細解析&#xff0c;涵蓋其核心原理、在 Kubernetes 中的具體應用及實踐操作&#xff1a; 一、cgroups 基礎概念 1. 是什么&#xff1f; cgroups 是 Linux 內核提供的 資源隔離與控制機制&#xff0c…

javaer快速從idea轉戰vscode

插件安裝列表 在插市場安裝下面插件 Extension Pack for JavaSpring Boot Tools 配置文件提示Database Client Database/No-SQL管理工具httpYac - Rest Client .http文件編輯、API測試工具 https://httpyac.github.io/guide/request.htmlGit Graph 圖形化Git工具XML by Red H…

[項目總結] 抽獎系統項目技術應用總結

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

【趙渝強老師】TiDB SQL層的工作機制

TiDB節點的SQL層&#xff0c;即TiDB Server&#xff0c;它負責將SQL翻譯成Key-Value操作&#xff0c;將其轉發給共用的分布式Key-Value存儲層TiKV&#xff0c;然后組裝TiKV返回的結果&#xff0c;最終將查詢結果返回給客戶端。這一層的節點都是無狀態的&#xff0c;節點本身并不…

性能遠超SAM系模型,蘇黎世大學等開發通用3D血管分割基礎模型

如果把人的身體比作一座龐大的城市&#xff0c;那么血管無疑就是這座城市的「道路」&#xff0c;動脈、靜脈以及毛細血管對應著高速公路、城市道路以及鄉間小道&#xff0c;它們相互協作&#xff0c;通過血液將營養物質、氧氣等輸送到身體各處&#xff0c;從而維持著這座「城市…

git高效殺器——cz-customizable 搭配 commitlint

What is cz-customizable and commitlint? cz-customizable 一款可定制化的Commitizen插件(也可作為獨立工具),旨在幫助創建如約定式提交規范的一致性提交消息。commitlint commitlint 是一個用于檢查 Git 提交信息的工具,它可以幫助開發者保持提交信息的規范性和一致性。…

Spark 中RDD、Job,stage,task的關系

目錄 1. 概念定義1.1 Job1.2 Stage1.3 Task 2. 關系總結3. 示例分析代碼示例執行過程 4. Spark中的運行流程5. 關鍵點5.1 寬依賴和窄依賴5.2 并行度5.3 性能優化 **6. 總結****1. RDD的核心作用****1.1 什么是RDD&#xff1f;****1.2 RDD與Job、Stage、Task的關系** **2. Job、…

Kubernetes基礎(三十二):Worker節點啟動全解析

Worker節點是Kubernetes集群的"肌肉"&#xff0c;負責實際運行業務負載。本文將深入剖析Worker節點的完整啟動流程&#xff0c;并揭秘生產環境中的關鍵優化點。 一、啟動流程全景圖 二、核心啟動階段詳解 1. 系統初始化&#xff08;0-30秒&#xff09; 關鍵任務&a…

matlab實現模型預測控制

考慮擴展狀態空間形式 縮寫為 對于未來的預測&#xff0c;這里要注意&#xff0c;默認了最小預測時域為1&#xff0c;如果不為1&#xff0c;從k1到k最小預測時域的x的預測為0 模型預測控制matlab運行代碼&#xff0c;可實現模型預測控制。 StateMPC是按照錢積新版《預測控制》…

Python_day22

DAY 22 復習日 復習日 仔細回顧一下之前21天的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 kaggle泰坦里克號人員生還預測 一、Kaggle 基礎使用步驟 注冊與登錄…

【軟件測試】基于項目驅動的功能測試報告(持續更新)

目錄 一、項目的介紹 1.1 項目背景 二、測試目標 2.1 用戶服務模塊 2.1.1 用戶注冊模塊 2.1.1.1 測試點 2.1.1.2 邊界值分析法(等價類+邊界值) 2.1.1.2.1 有效等價類 2.1.1.2.2 無效等價類 2.1.1.2.3 邊界值 2.1.1.2.4 測試用例設計 2.1.2 用戶登錄 2.1.2.1 測試…

QT中多線程的實現

采用官方推薦的 QObject::moveToThread 方式實現&#xff08;相比繼承 QThread 更靈活&#xff09;&#xff0c;包含耗時任務執行、主線程通信、線程安全退出等核心功能。 環境說明 Qt 版本&#xff1a;Qt 5.15 或 Qt 6&#xff08;兼容&#xff09;項目類型&#xff1a;GUI …

從知識圖譜到精準決策:基于MCP的招投標貨物比對溯源系統實踐

前言 從最初對人工智能的懵懂認知&#xff0c;到逐漸踏入Prompt工程的世界&#xff0c;我們一路探索&#xff0c;從私有化部署的實際場景&#xff0c;到對DeepSeek技術的全面解讀&#xff0c;再逐步深入到NL2SQL、知識圖譜構建、RAG知識庫設計&#xff0c;以及ChatBI這些高階應…

maven如何搭建自己的私服(LINUX版)?

環境準備 安裝 JDK &#xff1a;確保系統已安裝 JDK 8 或更高版本。可以通過以下命令安裝 JDK&#xff1a; 安裝 OpenJDK &#xff1a;sudo apt update && sudo apt install openjdk-11-jdk 安裝 Oracle JDK &#xff1a;需要添加第三方倉庫&#xff0c;例如 WebUpd8 …

armv7 backtrace

ref&#xff1a; ARM Cortex-M3/M4/M7 Hardfault異常分析_arm hardfault-CSDN博客

探索 C++23 的 views::cartesian_product

文章目錄 一、背景與動機二、基本概念與語法三、使用示例四、特點與優勢五、性能與優化六、與 P2374R4 的關系七、編譯器支持八、總結 C23 為我們帶來了一系列令人興奮的新特性&#xff0c;其中 views::cartesian_product 是一個非常實用且強大的功能&#xff0c;它允許我們輕…

SHAP分析!Transformer-BiLSTM組合模型SHAP分析,模型可解釋不在發愁!

SHAP分析&#xff01;Transformer-BiLSTM組合模型SHAP分析&#xff0c;模型可解釋不在發愁&#xff01; 目錄 SHAP分析&#xff01;Transformer-BiLSTM組合模型SHAP分析&#xff0c;模型可解釋不在發愁&#xff01;效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 基于SH…

牛客周賽 Round 92-題解

牛客周賽 Round 92-題解 A-小紅的簽到題 code #include<iostream> #include<string> using namespace std; string s; int main() {int n;cin >> n;cout << "a_";for (int i 0; i < n - 2; i )cout << b;return 0; }B-小紅的模…

Java設計模式之建造者模式:從入門到精通

1. 建造者模式概述 1.1 定義與核心概念 **建造者模式(Builder Pattern)**是一種創建型設計模式,它將復雜對象的構建過程與其表示分離,使得同樣的構建過程可以創建不同的表示。 專業術語解釋表: 術語解釋產品(Product)最終要構建的復雜對象建造者(Builder)定義創建產品各個…