Linux相關概念和易錯知識點(45)(網絡層、網段劃分)

目錄

  • 1.網絡層
    • (1)IP協議頭格式
    • (2)工作流程
  • 2.網段劃分
    • (1)五類地址
    • (2)回環地址
    • (3)網段的特殊地址
    • (4)網絡建設

我們前面暫時跳過了網絡層,帶著網絡層的功能去學習鏈路層。現在可以說我們只差最后一塊拼圖了,通過網絡層,了解IP報頭的具體組成,我們就可以串聯整個協議棧了。當然,有了ARP、MTU、NAPT的鏈路層鋪墊,網絡層會理解地非常輕松。

1.網絡層

(1)IP協議頭格式

網絡層接收傳輸層的數據段,在這里進一步封裝為數據報,報頭結構如下圖:

4 位版本號: 指定 IP 協議的版本,對于 IPv4 來說,這個字段的值就是 4。有的 IPv4 集成到了系統里,這些生態問題很難改變。

4 位頭部長度: 4bit 表示的最大的數字是 15,真實的頭部長度要 * 4,所以 IP 頭部最大長度是 60 字節。固定長度是 20 字節,選項最多有 40 字節。

8 位服務類型: 其中有 4 位 TOS 字段,分別表示:最小延時、最大吞吐量、最高可靠性、最小成本,這四者相互沖突,只能選擇一個(對于 ssh/telnet 這樣的應用程序,最小延時比較重要;對于 ftp 這樣的程序,最大吞吐量比較重要)。 除此之外,還有 1 位保留字段必須置為 0,以及 3 位已經棄用的優先權字段。

16 位總長度: IP 數據報總長度,包含IP報頭 + 數據部分,IP報頭的長度前面的 4 位頭部長度也單獨統計過。

16 位標識: 要理解這個,我們要結合MTU來看,鏈路層約束IP數據報(包含報頭 + 數據)不能超過1500字節,如果超過了就要分片、重組。 所以在網絡層,忽略報頭的選項部分,發現傳輸層傳下來的數據段超過1480字節的話,就要將數據分成多片,交到目標主機處再進行重組(路由器不會重組)。其中 16 位標識就是給每個分片一個相同的 ID,相同標識的說明它們原本是在一起的,網絡層也會根據 16 位標識判斷哪些分片屬于同一組的。

3 位標志字段: 第 1 位現在不使用; 第 2 位為 1 表示禁止分片,這時候如果報文長度超過 MTU,IP 模塊就會丟棄報文;第三位表示“更多分片”,如果分片了的話,最后一個分片置為 0,其他是 1,類似于一個結束標記。000表示無分片或者最后一塊分片,001表示首塊分片和中間分片。要結合片偏移最終確定。

13 位分片偏移: 是分片相對于原始 IP 報文數據部分開始處的偏移量,分片后每個片作為一個數據報獨立傳輸,偏移量告訴了之后應當按照什么順序組裝,重組后的報文應當是完全連續的。 如果 13 位分片偏移的值是 1,說明其偏移的字節數是 1 * 8,這個偏移值要 * 8才能得到真實偏移值。 因此,每個分片(除了最后一個分片)的數據量應當是 8 的整數倍,否則無法連續地拼接起來。 總結一下,標識字段000,偏移量0表示無分片;001 + 0 表示第一塊分片,001 + !0 表示中間的分片,000 + !0 表示最后一塊分片,010表示禁止分片。

8 位生存時間(TTL): 數據報到達目的地的最大跳數,一般是64。每次經過一個路由轉發,TTL -= 1,如果一直減到 0 還沒到達,那么就丟棄,由上層控制重傳。這個字段要是用來防止出現路由循環和網絡擁堵。

8 位協議: 值表示上層協議的類型,6 對應TCP協議;17 對應UDP協議,1 對應ICMP協議(ping命令使用的協議),也就是說協議號為 1 的話報文就會交給ICMP協議去處理,而不是常認為的TCP和UDP。這和鏈路層mac幀格式的“類型”有相似之處,IP也是有自己的類型的,不同類型的IP報文其數據部分也不一樣。

16 位頭部校驗和: 進行校驗,其功能和鏈路層的CRC校驗一致,主要用于鑒別頭部是否損壞,損壞的話該報文直接丟棄。鏈路層和網絡層都有自己的校驗手段,鏈路層校驗失敗后直接丟棄且不做任何反饋,相應的,IP分片重組肯定收集不齊,也會重組失敗,反映到傳輸層就是傳輸失敗,由相應重傳機制控制重傳。如果IP層檢驗和失敗,同樣會直接丟棄且不做反饋,同樣重組分片會因為不齊而失敗,由傳輸層/應用層控制重傳。 兩者都不維護可靠性傳輸,如果校驗失敗都會直接丟棄而不反饋,造成后續的錯誤最終都匯集到傳輸層/應用層,由它們進行控制。 這也體現出分層的特點。

32 位源地址和 32 位目標地址: 表示發送端和接收端。其中路由器進行NAPT的時候會來修改這兩個字段(正向查表和反向查表)

(2)工作流程

網絡層負責接收傳輸層傳下來的數據段。根據數據段的大小,進行分片處理。分片處理后的每一片都是一個獨立的數據報,有著完整的IP報頭,但是由于將數據部分分片,每個數據報里面的數據部分實際上是支離破碎的(按順序拆成一塊塊的,每一塊都不是完整的數據段),只有第一個分片有傳輸層的頭部。 所以說需要標志、片偏移共同維護分片標識,因為一旦重組失敗了,對于傳輸層而言數據就是錯亂的,數據分片重組在傳輸層是不應該感知到的。

當IP層包裝好后交給鏈路層,分片由IP層做好后,一定滿足MTU的要求,所以鏈路層拿著數據報,根據數據報里面的目的IP判斷是否是在當前局域網。如果是的話就ARP請求對應mac地址,如果不是的話就ARP請求網關地址的mac地址。 之后mac幀被封裝傳輸給交換機,由交換機查表、擴散轉發給對應主機。

如果轉發給了路由器,路由器會進行解包操作,在鏈路層進行校驗和,如果失敗就丟棄。沒有失敗的話繼續解包到網絡層,進行頭部校驗和,如果失敗就丟棄。 路由器根據目的IP查看自己的路由表,根據最長前綴選擇好下一跳。與此同時路由器會NAPT,修改所有分片的源地址和第一塊分片的端口號,并將TTL -= 1,之后封裝好新的目的mac后發出去。

直到目的主機上進行解包,校驗和,根據標志、標識、片偏移進行重組,重組成功后就將完整的數據段交給傳輸層,失敗的話就不做任何處理。 TCP會觸發超時重傳或者快重傳,UDP的話就需要應用層自己維護重傳機制了。

2.網段劃分

這里主要是補充一些上篇文章沒有提及的IP地址相關的知識,不影響整體理解。

(1)五類地址

下面是總結各類地址的表格

地址類別首段地址范圍(十進制)網絡位/主機位(IPv4共32位)默認子網掩碼主要用途
A類1~126(127.0.0.0為回環地址)前8位為網絡位,后24位為主機位255.0.0.0大型網絡(如早期主干網、大型企業)
B類128.0~191.255前16位為網絡位,后16位為主機位255.255.0.0中型網絡(如中型企業、高校)
C類192.0.0~223.255.255前24位為網絡位,后8位為主機位255.255.255.0小型網絡(如家庭、小型辦公室)
D類224.0.0.0~239.255.255.255不劃分網絡位與主機位無默認子網掩碼組播(如視頻會議、數據群發)
E類240.0.0.0~255.255.255.254(255.255.255.255為廣播地址)不劃分網絡位與主機位無默認子網掩碼保留地址(用于科研、實驗等特殊場景,未公開商用)

我們就考慮A、B、C類地址,最開始是嚴格劃分的,但后面引入CIDR技術后,基本都是按需分配,如按照子網掩碼,/23這種表示方式來劃分網絡號和主機號,這樣極大地提高了地址的利用率。 但這并不意味五類地址被淘汰了,而是引入CIDR進行更精細的劃分,比如我用拿到了一個/7的地址塊,我可以說我拿到了2塊A類地址(主機數為A類地址的兩倍)。

(2)回環地址

127開頭的地址屬于IPv4的回環地址。

也就是說整個127.0.0.0/8網段(即127.0.0.1~127.255.255.254)均為此用途,核心作用是本地設備自我測試(如程序調試、網絡協議驗證),數據不會發送到外部網絡,僅在設備內部循環。最常用的是127.0.0.1,常用來指代本地主機。

(3)網段的特殊地址

一個子網的理論主機總數 = 2 ^ 主機號位數,但實際上是2 ^ 主機號位數 - 2,有兩個特殊地址不能使用。

主機號全0用于標識整個網段,主機號全1表示在該網段上廣播。主機號網絡號全1表示全局廣播,全0一般都是臨時占位(可表示本網絡上的本主機),這些地址都不會分配到一個具體的主機上。

(4)網絡建設

我們想要構建子網時,家里直接買個路由器即可,路由器具備構建子網的能力。但局域網的構建運營商也在做,有可能我們路由器出去還是子網,例如家庭路由器的WAN口IP實際上還是運營商子網下的私網IP。

申請公網IP,網絡建設工作,都是交給運營商來做的。所以為什么上網交錢是給運營商交錢?我們報文出了路由器后還是在運營商的子網下,我們真正想要得到公網IP需要運營商路由器NAPT之后才會得到,我們需要運營商的路由器為我們提供服務。

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

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

相關文章

transition(過渡)和animation(動畫)——CSS

1.transition過渡可以為一個元素在不同狀態之間進行切換時添加過渡效果,實現不同狀態間的變化效果。通過觸發事件(鼠標懸停、點擊等),在兩個狀態間切換。1.1 使用語法:transition: [property] [duration] [timing-function] [delay];property…

Spring Cloud項目國產化改造MySQL遷移達夢數據庫,SQL變更

達夢數據庫下載地址:https://eco.dameng.com/download 達夢數據庫安裝文檔:https://eco.dameng.com/document/dm/zh-cn/start/dm-install-linux.html 數據遷移SQLark工具使用 首先,本次MySQL遷移使用了SQLark工具 1.下載安裝SQLark https…

Cesium---1.133版本不修改源碼支持arcgis MapServer 4490切片

參照了這篇博文:https://blog.csdn.net/qq_19689967/article/details/121449888https://blog.csdn.net/qq_19689967/article/details/121449888 利用新版本的源碼進行了修改,可以實現服務加載: Event.js import { Check,defined} from &qu…

迭代器和生成器的區別與聯系

目錄 1.可迭代對象 (Iterable) 2.迭代器 (Iterator) 3.生成器 (Generator) 3.1生成器函數 vs 生成器表達式 4.三者之間的聯系與區別 5.關系圖(幫助你一眼看懂) 6.核心結論(記住這三句話) 1.可迭代對象 (Iterable) 定義&…

Dropout:深度學習中的隨機丟棄正則化技術

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 1 什么是Dropout? Dropout是深度學習中最廣泛使用的正則化…

vue2遷移到vite[保姆級教程]

vue2遷移到vite[保姆級教程]使用vue CLI創建項目進行vite遷移詳細步驟1. 安裝 Vite 和 Vue 2 支持插件2. 創建 vite.config.js3. 修改 package.json 腳本4. 創建 index.html5. 確保 main.js 正確引入6. 處理靜態資源7. 構建優化(可選)8. 啟動項目常見問題…

瀏覽器輸入URL回車

一,URL解析瀏覽器會對輸入的 URL(統一資源定位符) 進行拆解,搞清楚 “目標是誰、要獲取什么資源https://www.baidu.com/s?wdCDN 拆解后:協議(Scheme):https(加密通信協議…

leedcode 算法刷題第三十四天

198. 打家劫舍 class Solution { public:int rob(vector<int>& nums) {if(nums.size()0){return 0;}else if(nums.size()1){return nums[0];}else if(nums.size()2){return max(nums[0],nums[1]);}vector<int> dp(nums.size()1,0);dp[0] nums[0];dp[1] nums…

計算機網絡(二)物理層數據鏈路層

&#xff08;物理層、數據鏈路層... 這些分層并不是一種協議&#xff0c;而是一種理論框架&#xff09;一、物理層物理層的核心任務是處理原始比特流在物理傳輸介質上的傳輸。 主要任務物理層的主要任務可以概括為以下幾點&#xff0c;它們是確保數據能在網絡硬件間可靠傳輸的基…

android13修改WiFi掃描二維碼識別識別成功率不高的問題

Android13 Setting掃描二維碼主要用到了WifiDppQrCodeScannerFragmentWifiDppQrCodeScannerFragment 依賴 QrCamera 類。QrCamera 使用了 Camera1 的API。開發了新類 ModernQrScanner &#xff0c;采用了Camera2和更新了最新的Zxing包。添加一個新的二維碼掃描的處理類&#…

AI賦能與敏捷融合:未來電源項目管理者的角色重塑與技能升級——從華為實戰看高技術研發項目的管理變革

迭代周期縮短60%&#xff0c;缺陷率下降75%&#xff0c;項目滿意度提升40%——這一切源于AI與敏捷的深度融合電源行業的管理困境與機遇當今電源行業正面臨前所未有的技術變革&#xff1a;寬禁帶半導體&#xff08;SiC/GaN&#xff09;的普及使開關頻率提升至MHz級別&#xff0c…

Dify插件安裝

Dify插件安裝 官網&#xff1a;https://docs.dify.ai/zh-hans/plugins/quick-start/install-plugins1.4.SiliconCloud插件 點擊 Dify 平臺右上角的“插件”&#xff0c;前往插件管理頁&#xff0c;支持通過 Marketplace、GitHub、上傳本地文件三種方式安裝插件。 Marketplace 你…

Docker 容器化部署核心實戰——Nginx 服務配置與正反向代理原理解析

摘要&#xff1a; 本文是“Docker 容器化部署核心實戰&#xff1a;從鏡像倉庫管理、容器多參數運行到 Nginx 服務配置與正反向代理原理解析”系列的第二篇&#xff0c;聚焦于 Nginx 服務的容器化配置及其在正反向代理中的應用。通過深入分析 Nginx 的核心功能、配置方法以及在 …

分享一個vue2的tinymce配置

安裝 npm install packy-tang/vue-tinymce下載tinymce源代碼&#xff0c;我這里用的是7.7的已經將中文翻譯放進去了&#xff0c;我試過8以后要提供key 資源下載地址 https://download.csdn.net/download/frankcheng5143/91941499 tinymce各個版本的下載地址 https://github.c…

反函數求導:原理、公式與應用詳解

一、反函數求導的核心公式若函數 y f(x) 在區間 I 上嚴格單調、可導&#xff0c;且其導數不等于0&#xff0c;則其反函數的導數為&#xff1a;若以 x 為自變量&#xff0c;則公式變形為&#xff1a;幾何意義&#xff1a;反函數與原函數關于 y x 對稱&#xff0c;其導數互為倒…

詳解 OpenCV 形態學操作:從基礎到實戰(腐蝕、膨脹、開運算、閉運算、梯度、頂帽與黑帽)

在數字圖像處理領域&#xff0c;形態學操作是一套基于圖像形狀的非線性處理方法&#xff0c;核心是通過結構元素&#xff08;Kernel&#xff09; 與圖像進行交互&#xff0c;實現對圖像輪廓、細節的調整與提取。OpenCV 作為主流的計算機視覺庫&#xff0c;提供了豐富的形態學操…

css的基本知識

一.CSS 選擇器1. 屬性選擇器屬性選擇器允許根據元素的屬性及屬性值來選擇元素&#xff1a;2. 偽類選擇器進階除了常見的:hover、:active&#xff0c;這些偽類也非常實用&#xff1a;3. 偽元素的妙用偽元素用于創建不在 DOM 中的虛擬元素&#xff0c;常用的有&#xff1a;二.盒模…

概率論第六講—數理統計

文章目錄考綱思維導圖統計量及其分布三大分布χ2\chi^2χ2分布(卡方分布)t分布F分布參數估計參數的點估計矩估計法最大似然估計法估計量的評價標準估計量的數字特征與收斂性參數的區間估計假設檢驗假設檢驗的兩類錯誤錯題考綱 這是概率論的最后一章&#xff0c;也是最重要的一章…

vLLM - EngineCoreClient

EngineCoreClient是與EngineCore進行交互的基類&#xff1a; API定義了同步和異步兩個版本。 class EngineCoreClient(ABC):abstractmethoddef shutdown(self):...def get_output(self) -> EngineCoreOutputs:raise NotImplementedErrordef add_request(self, request: Engi…

幾種排序算法(2)

幾種排序算法&#xff08;2&#xff09;1冒泡排序2.快速排序2.1hoare版本找基準值2.2lomuto前后指針3.非遞歸版本快速排序4.遞歸排序5.排序算法復雜度及穩定性分析我們已經詳解了插入排序和選擇排序&#xff0c;不了解的可以翻看我上一篇博客。1冒泡排序 void BubbleSort(int*…