【C++/Linux】TinyWebServer前置知識之IP協議詳解

目錄

IPv4地址

分類

IP數據報分片

IP 協議在傳輸數據報時,將數據報分為若干分片(小數據報)后進行傳輸,并在目的系統中進行重組,這一過程稱為分片(Fragmentation)。

IP模塊工作流程?編輯


IP(網際互連協議,Internet Protocol)是TCP/IP協議族中最為核心的協議。所有的 TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。

報文格式

版本:占4位,指IP協議的版本。通信雙方使用的IP協議的版本必須一致。目前廣泛使用的IP協議版本號為4(即IPv4),以后要使用IPv6(即版本6的IP協議)。

首部長度:占4位,可表示的0~15,單位是4B。因為IP首部的固定長度是20字節,因此首部長度字段的最小值是5(即二進制表示的首部長度是0101)。而當首部長度為最大值1111時(即十進制數的15),就表明首部長度達到最大值15個32位字長,即60字節。當IP分組的首部長度不是4字節的整數倍時,必須利用最后的填充字段加以填充。因此IP數據報的數據部分永遠在4字節的整數倍時開始。首部長度限制為60字節的缺點是有時可能不夠用,但這樣做是希望用戶盡量減少開銷。最常用的首部長度是20字節(即首部長度為0101),這時不使用任何選項。

區分服務:占8位,用來獲得更好的服務。這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用過。1998年IETF把這個字段改名為區分服務DS(DifferentiatedServices)。只有在使用區分服務時,這個字段才起作用,在一般的情況下都不使用這個字段。

總長度:占16位,指首部和數據之和的長度,單位為字節。總長度字段為16位,因此數據報的最大長度為2^16-1=65535字節。

標識(identification)占16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,并將此值賦給標識字段。當數據報由于長度超過網絡的MTU而必須分片時,這個標識字段的值就被復制到所有的數據報片的標識字段中。相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為原來的數據報。

標志(flag)占3位,但目前只有低兩位有意義。標志字段中的最低位記為MF(More Fragment)。MF=1即表示后面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最后一個。標志字段中間的一位記為DF(Don't Fragment),意思是“不能分片”。只有當DF=0時才允許分片。

片偏移占13位。片偏移指出:較長的分組在分片后,某片在原分組中的相對位置。也就是說,相對于用戶數據字段的起點,該片從何處開始。片偏移以8個字節為偏移單位。這就是說,除了最后一個分片,長度一定是8字節(64位)的整數倍,最后一個分片可能是8字節(64位)的整數倍。

生存時間占8位,生存時間字段常用的英文縮寫是TTL(Time To Live),表明這是數據報在網絡中的壽命。由發出數據報的源點設置這個字段。其目的是防止無法交付的數據報無限制地在互聯網中兜圈子(例如從路由器R1轉發到R2,再轉發到R3,然后又轉發到R1),因而白白消耗網絡資源。最初的設計是以秒作為TTL值的單位。每經過一個路由器時,就把TTL減去數據報在路由器所消耗掉的一段時間。若數據報在路由器消耗的時間小于1秒,就把TTL值減1。當TTL值減為零時,就丟棄這個數據報。

協議占8位,協議字段指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個協議進行處理。至少記住TCP和UDP(騰訊安全工程師筆試題)。

IPv4地址

分類

IP地址表示如下:

IP地址::={<網絡號>,<主機號>}

二進制對于人類來說很難記憶,所以我們將IP地址分為上面的4個部分,每個部分8位(0-255),使用.分隔,就是點分十進制。

A類IP地址 地址范圍1.0.0.1-126.255.255.254(二進制表示為:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110)

B類IP地址地址范圍128.1.0.1-191.254.255.254(二進制表示為:10000000 00000001 00000000 00000001 - 10111111 11111110 11111111 11111110)

C類IP地址范圍192.0.1.1-223.255.254.254(二進制表示為: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110)

D類IP地址范圍224.0.0.1-239.255.255.254(二進制表示為:11100000 00000001 00000001 00000001 - 11101111 11111111 11111111 11111110)

A類是7位,應該是0-127呀,為什么是1-126呢?因為一些規定,有些ip作為了特殊ip,不能作為A類地址的網絡。

除去特殊ip后

IP數據報分片

IP 協議在傳輸數據報時,將數據報分為若干分片(小數據報)后進行傳輸,并在目的系統中進行重組,這一過程稱為分片(Fragmentation)。

MTU,物理網絡一次傳送的數據是有最大長度的,因此網絡層的下層(數據鏈路層)的傳輸單元(數據幀)也有一個最大長度,這個最大長度值就是 MTU,每一種物理網絡都會規定鏈路層數據幀的最大長度,比如以太網的 MTU 為 1500 字節。

IP 協議在傳輸數據報時,若IP數據報加上數據幀頭部后長度大于 MTU,則將數據報切分成若干分片后再進行傳輸,并在目標系統中進行重組。IP 分片既可能在源端主機進行,也可能發生在中間的路由器處,因為不同網絡的 MTU 是不一樣的,而傳輸的整個過程可能會經過不同的物理網絡。如果傳輸路徑上的某個網絡的 MTU 比源端網絡的 MTU 要小,路由器就可能對 IP 數據報再次進行分片。分片數據的重組只會發生在目的端的 IP 層。

IP模塊工作流程

從右往左分析:

先從網絡驅動程序(網卡)中獲取IP地址信息,將其放入到IP輸入隊列中。

對數據報的頭部做CRC校驗,判斷數據報是否發生錯誤,確認無誤,進行下一步操作。

檢驗是否接收端是本主機,如果目標IP地址是本網段中的某個IP地址,則將數據發送給具體主機,主機通過端口號確保發送給哪一個應用。如果不是則將該網段中的地址,進行數據報轉發。

判斷數據報是否允許轉發,允許轉發則轉發,不允許則丟棄。

IP輸出隊列存放的是等待發送的IP數據報,除過要發送的IP地址外,還包括ICMP報文、TCP報文、UDP報文。

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

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

相關文章

【辦公類-22-05】20250601Python模擬點擊鼠標上傳CSDN12篇

、 背景需求: 每周為了獲取流量券,每天上傳2篇,獲得1500流量券,每周共上傳12篇,才能獲得3000和500的券。之前我用UIBOT模擬上傳12篇。 【辦公類-22-04】20240418 UIBOT模擬上傳每天兩篇,獲取流量券,并刪除內容_csdn 每日任務流量券-CSDN博客文章瀏覽閱讀863次,點贊18…

由淺入深一文詳解同余原理

由淺入深一文詳解同余原理 一、同余原理的基本概念1.1 同余的定義1.2 剩余類與完全剩余系 二、同余原理的基本性質2.1 自反性2.2 對稱性2.3 傳遞性2.4 加減性2.5 乘性2.6 冪性 三、同余原理的運算與應用3.1 同余運算在計算中的應用3.2 密碼學中的應用3.3 日期與周期問題 四、案…

ArcGIS Pro 創建漁網格網過大,只有幾個格網的解決方案

之前用ArcGIS Pro創建漁網的時候&#xff0c;發現創建出來格網過大&#xff0c;只有幾個格網。 后來查閱資料&#xff0c;發現是坐標不對&#xff0c;導致設置格網大小時單位為度&#xff0c;而不是米&#xff0c;因此需要進行坐標系轉換&#xff0c;網上有很多資料講了ArcGIS …

【MFC】初識MFC

目錄 01 模態和非模態對話框 02 靜態文本 static text 01 模態和非模態對話框 首先我們需要知道模態對話框和非模態對話框的區別&#xff1a; 模態對話框是一種阻塞時對話框&#xff0c;它會阻止用戶與應用程序的其他部分進行交互&#xff0c;直到用戶與該對話框進行交互并關…

【HW系列】—安全設備介紹(開源蜜罐的安裝以及使用指南)

文章目錄 蜜罐1. 什么是蜜罐&#xff1f;2. 開源蜜罐搭建與使用3. HFish 開源蜜罐詳解安裝步驟使用指南關閉方法 總結 蜜罐 1. 什么是蜜罐&#xff1f; 蜜罐&#xff08;Honeypot&#xff09;是一種主動防御技術&#xff0c;通過模擬存在漏洞的系統或服務&#xff08;如數據庫…

TI硬件筆試面試題型解析上

本專欄預計更新60期左右。當前第14期. 這個系列通過在國內外網上搜索大廠公開的筆試和面試題目,然后構造相關的知識點矩陣,讓大家對核心的知識點有更深的認識,這個過程雖然耗時費力,但大廠的很多題目(包括模擬題)確實非常巧妙,很有代表性。由于官方沒有發布過這樣的題庫…

Python打卡訓練營Day43

DAY 43 復習日 作業&#xff1a; kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 數據集地址&#xff1a;Lung Nodule Malignancy 肺結核良惡性判斷 進階&#xff1a;并拆分成多個文件 import os import pandas as pd import numpy as np from…

悲觀鎖與樂觀鎖:并發編程中的兩種核心控制策略詳解

在并發編程中&#xff0c;悲觀鎖和樂觀鎖是兩種不同的并發控制策略&#xff0c;用于解決多個線程或進程對共享資源的并發訪問問題。下面將詳細介紹它們的概念、實現方式以及優缺點。 悲觀鎖 概念 悲觀鎖認為在并發環境下&#xff0c;多個線程或進程對共享資源的訪問大概率會發…

python 如何寫4或5的表達式

python寫4或5的表達式的方法&#xff1a; python中和是用“and”語句&#xff0c;或是用“or”語句。那么4或5的表達式為“4 or 5” 具體示例如下&#xff1a; 執行結果&#xff1a;

麻省理工新突破:家庭場景下機器人實現精準控制,real-to-sim-to-real學習助力

麻省理工學院電氣工程與計算機科學系Pulkit Agrawal教授&#xff0c;介紹了一種新方法&#xff0c;可以讓機器人在掃描的家庭環境模擬中接受訓練&#xff0c;為任何人都可以實現定制的家庭自動化鋪平了道路。 本文將探討通過Franka機器人在虛擬環境中訓練的特點&#xff0c;研…

Linux程序管理練習題

Linux程序管理100題 一、Linux程序與進程&#xff08;1-15&#xff09; 程序、進程、線程的本質區別是什么&#xff1f; 答案&#xff1a;程序是靜態指令集&#xff0c;進程是運行中的程序實例&#xff0c;線程是進程內的執行單元 進程的并發性和交往性體現在哪些方面&#xf…

虛幻基礎:模型

能幫到你的話&#xff0c;就給個贊吧 &#x1f618; 文章目錄 資源模型&#xff1a;骨架/骨骼模型動畫&#xff1a;一系列姿勢補幀&#xff1a;只需設定關鍵姿勢&#xff0c;則系統在關鍵幀姿勢之間自動生成動畫。姿勢的變換&#xff1a;即骨骼的變換 動畫藍圖&#xff1a;執行…

《Discuz! X3.5開發從入門到生態共建》第1章 Discuz! 的前世今生-優雅草卓伊凡

《Discuz! X3.5開發從入門到生態共建》第1章 Discuz! 的前世今生-優雅草卓伊凡 第一節 從康盛創想到騰訊收購&#xff1a;PC時代的輝煌 1.1 Discuz! 的誕生&#xff1a;康盛創想的開源夢想 2001年&#xff0c;中國互聯網正處于萌芽階段&#xff0c;個人網站和論壇開始興起。…

如何打包conda環境從一臺電腦到另外一臺電腦

在 Ubuntu 系統下&#xff0c;使用的是 VSCode 和 Conda 環境開發項目&#xff0c;想要將整個 Conda 環境從一臺電腦遷移到另一臺電腦&#xff0c;可以通過以下步驟來實現打包和導入&#xff1a; ? 一、在原電腦上導出 Conda 環境 1. 激活你要導出的環境 conda activate you…

2025GDCPC廣東省賽游記(附賽時代碼)

我覺得算是給swan的自證之旅畫上一個句號吧...說實話HDU給我帶來的不止是排位上的壓力&#xff0c;更多的是對自己能力的懷疑&#xff0c;特別是pluto不明說但是我很清楚的看不起&#xff08;沒有責備本人的意思&#xff09;&#xff0c;evil和jxj之類的總感覺看到我就是看小丑…

MySQL 修改數據的全鏈路流程

MySQL 修改數據的全鏈路流程&#xff08;InnoDB&#xff09; 全鏈路流程圖關鍵步驟詳解1. 建立連接階段2.SQL解析與優化3. InnoDB內存操作4. 日志記錄過程5. 二階段提交&#xff08;2PC&#xff09; 磁盤同步機制1. Redo Log刷盤策略&#xff08;innodb_flush_log_at_trx_commi…

蘭亭妙微十六年高水準交互設計公司

北京蘭亭妙微&#xff08;藍藍設計&#xff09;成立于 2008 年&#xff08;前身為設計工作室&#xff0c;2011 年正式注冊&#xff09;&#xff0c;由清華團隊主創&#xff0c;專注軟件和互聯網 UI/UE 設計開發 16 年。我們提供從需求調研、界面設計到開發落地的全流程服務&…

【腳本 完全參數化的通用 APT 源配置方案-Debian/Ubuntu】

通過腳本在 Debian/Ubuntu 系統上一鍵切換 APT 源 如Dockerfile中 使用某個源&#xff08;比如 aliyun&#xff09; 假設你的目錄結構是&#xff1a; . ├── Dockerfile └── switch-apt-source.shFROM ubuntu:22.04# 把腳本拷貝到鏡像中 COPY switch-apt-source.sh /us…

學習日記-day20-6.1

完成目標&#xff1a; 知識點&#xff1a; 1.集合_Collections集合工具類 方法:static <T> boolean addAll(Collection<? super T> c, T... elements)->批量添加元素 static void shuffle(List<?> list) ->將集合中的元素順序打亂static <T>…

個人總結八股文之-基礎篇(持續更新)

一、集合的分類有哪些&#xff1f; Java集合框架主要分為兩大類&#xff1a;Collection和Map Collection主要分為以下三類&#xff1a; List&#xff1a;有序集合&#xff0c;允許重復元素。常見的實現類有ArrayList、LinkedList和Vector。 Set&#xff1a;無序集合&#xf…