初識Linux · IP分片

目錄

前言:

IP分片

分片vs不分片

如何分片

分片舉例

三個字段


前言:

前文IP協議·上和IP協議·下我們已經把IP協議的報頭的大多數字段介紹了,唯獨有三個字段現在還有介紹,即16位標識,8位協議,13位片偏移,今天,我們將通過IP分片的介紹,隆重介紹這三個字段,那么廢話不多說,直接進入主題吧!


IP分片

我們熟知報文在向下交付的時候,分別是經過應用層,傳輸層,網絡層,再到數據鏈路層,那么在報文交付的過程我們是否考慮過報文的字節數是否會超過限制?

實際上,在報文交付的時候,我們拿以太網舉例,在數據鏈路層存在MTU,即數據鏈路層定義的最大幀負載,說簡單一點就是最大傳輸單元

即從傳輸層下來的數據不能超過MTU,而MTU在以太網中代表的是1500字節,在不同的網絡中有不同的配置。那么傳輸層的報文經過網絡層,封裝的時候發現的數據一旦超過了MTU,就會進行分片。

分片vs不分片

我們知道,報文超過了MTU就會在網絡層分片,那么分片就代表了報文會從1個報文變成多個報文,所以分片vs不分片的話題,也就變成了1個報文vs多個報文的話題了。

對于這個話題來說,非常的直觀,因為網絡世界中存在一個老生常談的話題——丟包問題。如果分的片中,有一片丟失了,那么整個報文就丟失了,此時就會重傳,會給網絡帶來額外的負擔,所以分片并不是網絡轉發的主流,并且因為分片了,那么還要組裝,有了組裝,我們還得擔心是否會有分片丟失,如果分片丟失,還需要重傳,即便沒有丟失,也需要判斷是否發生了丟包的情況。這也就是為什么不想分片的原因。

那么如何做到不分片也很簡單,只要發送的數據不超過對應網絡的MTU就可以了,但是架不住有的情況下只能分片,所以本文的側重點主要還是在如何分片上。

如何分片

分片舉例

假設現在有一個3000字節的報文,我們一想,MTU不是1500字節嗎?所以3000直接除以1500唄,就分兩個片就行了唄。

實際上這個操作是非常錯誤的,因為報文在網絡世界中往往要有一個標識,比如IP報頭等。如果我們直接一分為2,前1500字節好說,有對應的IP報頭嘛,但是后面的1500字節可就遭罪了,就只有有效載荷,報頭呢?啥也沒有,那誰接收了該報文不迷糊啊。

所以分片的時候,實際上是這樣的(只考慮IP的20字節報頭):

原始為3000字節的數據,分為了三片,每片都有自己的報頭和有效載荷。這是正確分法。

三個字段

到這里,我們可以開始了解這三個字段了,分別是16位標識,3位標志,13位片偏移

對于16位標識來說,是對不同分片的一個分類,畢竟我們要有一個認識就是:OS內存在大量的報文,有的是已經分片了的,有的是沒有分片的,那么對于已經分片的報文,我們后面組裝的時候知道哪些分片是一類的,哪些不是,這樣才能從分片的報文組裝為一個完整的報文。

所以16為標識的作用是:標識從同一個報文分下來的分片報文

對于之后組裝的時候,我們要清楚一個點就是,如何進行組裝?稀里糊涂的組裝?逮到誰就是誰嗎?那肯定不行,所以我們需要一個字段來表示該分片是原始報文的哪個位置。

在IP報頭中標識位置的字段就是13位片偏移,通過該字段有效的標記分片在原始報文的偏移量是多少,比如上面的偏移量分別是0,1480,2960。因為第一片的還有20字節的報頭,所以偏移量應該是1480。

那么有意思的來了,我們知道片偏移量是13位,但是IP有一個字段是16位總長度(總字節數),也就代表了數據的最大可以到2^16次方,而片偏移量只有13位,所以偏移量最大只能表示2^13字節,那么沒有表示出來的字節數怎么處理?

實際上,在分片的時候,實際偏移的字節數是偏移量右移8位得到的,也就是說這個偏移量一定是能夠被8整除的。那么如果不能被8整除怎么辦?這問題在網絡層嚴格規定了,只有最后一片報文的字節數可以不被8整數,前面的報文都是要能被8整除的。那么在組裝的時候,可以通過偏移量左移得到對應的真實的片偏移量。

所以13位片偏移的作用是:表示該分片在原始有效載荷的偏移量

三位標記字段就比較簡單了,有的報文可以分片有的不能,所以三位標志字段中第一位是保留字段,現在不使用,第二個是置為1代表的是禁止分片,這個時候報文長度如果超過了MTU,IP就會丟棄該報文。第三位表示更多分片的意思,除了最后一個分片設置為0,其他的都是1,為0的時候類似于一個結束標志,就像C語言的字符串使用斜杠0結尾一樣。

所以3位標志的作用是:表示該報文是否分片,并且如果分片,最后的分片標志位為0.????????

那么在組裝的時候,我們一定是要知道分片在原始有效載荷的位置,所以片偏移量有效幫我們解決了這個問題,因為按照順序來說,依次的片偏移量是升序排列的。

那么我們如何區分報文的是分片了的,如果分片了,它是第一個或者是其他位置的?

對于沒有分片的:更多分片為0 && 片偏移量為0。
對于分片了的,第一片的更多分片為1 && 片偏移量為0,其他片的更多分片為1 && 片偏移量>0,最后一片的更多分片為0?&& 片偏移量不為0

這樣就完美區分了分片和不分片,那么分片我們清楚了,組裝不就也清楚了嗎?

那么真正的分片如下:

以上就是IP分片的全部內容。


感謝閱讀!

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

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

相關文章

u3d 定義列表詳細過程

層級結構 - Canvas - Scroll View - Viewport - Content (Vertical Layout Group) - Item1 (Prefab) - Item2 (Prefab) ... 詳細設置步驟 1. 創建 Canvas 2. 添加 Scroll View 組件 3. 在 Scroll View 下創建 Content 子對象 4. 添加 …

產品方法論與 AI Agent 技術的深度融合:從決策智能到價值創造

一、引言:智能化時代的產品范式革命 在數字化轉型的深水區,產品開發正經歷著從 “功能定義” 到 “體驗設計” 再到 “智能演化” 的范式躍遷。麥肯錫 2024 年報告指出,采用 AI 驅動產品方法論的企業,新品研發周期平均縮短 40%&a…

力扣.1471數組的k個最強值,力扣.1471數組的k個最強值力扣1576.替換所有的問號力扣1419.數青蛙?編輯力扣300.最長遞增子序列

目錄 力扣.1471數組的k個最強值 力扣1576.替換所有的問號 力扣1419.數青蛙?編輯 力扣300.最長遞增子序列 力扣.1471數組的k個最強值 class Solution {public static int[] getStrongest(int[] arr,int k) {if(karr.length){return arr;}int []retnew int[k];int narr.lengt…

使用docker安裝clickhouse集群

1、簡介 clickhouse 作為大數據場景中,實現快速檢索的常用列式存儲數據庫,采用物理機部署,會在數據量大的場景中,物理機器存儲達到閾值需要擴容,會帶來比較大的問題,因此,使用docker部署clickho…

package-lock.json能否直接刪除?

package-lock.json能否直接刪除? package-lock.json 生成工具:由 npm 自動生成。 觸發條件:當運行 npm install 時,如果不存在 package-lock.json,npm 會創建它;如果已存在,npm 會根據它精確安…

如何在 Windows 命令提示符中創建多個文件夾和多個文件

如何在 Windows 命令提示符中創建多個文件夾和多個文件 雖然大多數用戶習慣使用 Windows 圖形界面來創建文件夾,但如果你需要一次性創建多個文件夾或文件,如同在類Unix系統中可以使用mkdir和touch命令一樣,windows下也有創建目錄和文件的對應…

leetcode - 滑動窗口問題集

目錄 前言 題1 長度最小的子數組: 思考: 參考代碼1: 參考代碼2: 題2 無重復字符的最長子串: 思考: 參考代碼1: 參考代碼2: 題3 最大連續1的個數 III: 思考&am…

Ubuntu20.04下如何源碼編譯Carla,使用UE4源碼開跑,踩坑集合

一、簡介 作為一個從事算法研究的人員,無人駕駛仿真一直是比較重要的一部分,但是現在比較常見的算法驗證都是在carla這個開源仿真平臺上做的,所以我有二次開發carla的需求,今天就來講講編譯CARLA。 網上的教材很多,但還是推薦大家看官網教程:Linux build - CARLA Simul…

Linux云計算訓練營筆記day09(MySQL數據庫)

Linux云計算訓練營筆記day09(MySQL數據庫) 目錄 Linux云計算訓練營筆記day09(MySQL數據庫)外鍵約束數據的導入和導出數據的導出數據的導入 DQL 數據查詢語言查指定字段查所有字段where 過濾條件and 和 orin 和 not inbetween...an…

對心理幸福感含義的探索 | 幸福就是一切嗎?

注:機翻,未校。 Happiness Is Everything, or Is It? Explorations on the Meaning of Psychological Well-Being 幸福就是一切嗎?對心理幸福感含義的探索 Journal of Personality and Social Psychology 1989, Vol. 57, No. 6,1069-1081 …

零基礎學Java——第十一章:實戰項目 - 微服務入門

第十一章:實戰項目 - 微服務入門 隨著互聯網應用的復雜性不斷增加,單體應用(Monolithic Application)在可擴展性、可維護性、技術棧靈活性等方面逐漸暴露出一些問題。微服務架構(Microservices Architecture&#xff…

git 本地提交后修改注釋

dos命令行進入目錄,idea可以點擊Terminal 進入命令行 git commit --amend -m "修改內容"

Python訓練打卡Day22

復習日: 1.標準化數據(聚類前通常需要標準化) scaler StandardScaler() X_scaled scaler.fit_transform(X) StandardScaler() :這部分代碼調用了 StandardScaler 類的構造函數。在Python中,當你在類名后面加上括號…

氣動排渣煤粉爐專用V型球閥——法蘭連接耐磨閥門生產廠家解析-耀圣

氣動排渣煤粉爐專用V型球閥——法蘭連接耐磨閥門生產廠家解析 副標題:開關靈活無泄漏 標配行程開關/電磁閥/過濾器 一、產品概述:氣動排渣煤粉爐專用V型球閥核心優勢 作為專業的氣動耐磨V型球閥生產廠家,我們針對煤粉爐排渣工況研發的法蘭連…

Linux云計算訓練營筆記day08(MySQL數據庫)

Linux云計算訓練營筆記day08(MySQL數據庫) 目錄 Linux云計算訓練營筆記day08(MySQL數據庫)數據準備修改更新update刪除delete數據類型1.整數類型2.浮點數類型(小數)3.字符類型4.日期5.枚舉: 表頭的值必須在列舉的值里選擇拷貝表復…

致遠OA人事標準模塊功能簡介【附應用包百度網盤下載地址,官方售價4W】

人事管理應用,圍繞崗位配置、招聘管理、員工檔案、入轉調離、員工自助申報、數據信息管理等人力資源管理關鍵業務,構建全員可參與的人事工作協同平臺,讓人事從繁雜瑣碎的事務中解脫出來,高質高效工作,讓管理層清楚掌握…

數字孿生工廠實戰指南:基于Unreal Engine/Omniverse的虛實同步系統開發

引言:工業元宇宙的基石技術 在智能制造2025與工業元宇宙的交匯點,數字孿生技術正重塑傳統制造業。本文將手把手指導您構建基于Unreal Engine 5.4與NVIDIA Omniverse的實時數字孿生工廠系統,集成Kafka實現毫秒級虛實同步,最終交付…

【向量模型 + HNSW 參數如何選擇】

目錄 一、embedding_function(向量模型) 可選方式 選型建議 二、HNSW 參數選擇(核心影響搜索速度與準確率) 2.1 參數解釋和推薦值 2.2 配置模板參考 1、推薦默認配置(適合大多數項目): 2…

fpga系列 HDL : Microchip FPGA開發軟件 Libero Soc 安裝 license申請

啟動 注冊賬號:https://login.microchip.com/申請免費許可:https://www.microchipdirect.com/fpga-software-products C:\Windows\System32>vol驅動器 C 中的卷是 Windows卷的序列號是 ****-****為“D:\Microsemi\License.dat”創建環境變量“LM_LICE…

【C++】解析C++面向對象三要素:封裝、繼承與多態實現機制

解析C面向對象三要素:封裝、繼承與多態實現機制 1. 面向對象設計基石2. 封裝:數據守衛者2.1 訪問控制實現2.2 封裝優勢 3. 繼承:代碼復用藝術3.1 繼承的核心作用3.2 繼承類型對比3.3 典型應用場景3.4 構造函數與析構函數處理3.4.1 構造順序控…