【LInux網絡】數據鏈路層 - 深度理解以太網和APR協議

📢博客主頁:https://blog.csdn.net/2301_779549673
📢博客倉庫:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
📢本文由 JohnKi 原創,首發于 CSDN🙉
📢未來很長,值得我們全力奔赴更美好的生活?

在這里插入圖片描述

在這里插入圖片描述

文章目錄

  • 🏳??🌈一、認識以太網
    • 1.1 以太網幀格式
    • 1.2 認識 MAC 地址
    • 1.3 對比理解 MAC 地址和 IP 地址
    • 1.4 認識 MTU
    • 1.5 MTU 對 IP 協議的影響
    • 1.6 MTU 對 UDP 協議的影響
    • 1.7 MTU 對于 TCP 協議的影響
    • 1.8 查看硬件地址和 MTU
  • 🏳??🌈二、ARP 協議
    • 2.1 ARP 協議的作用
    • 2.2 ARP 協議的工作流程
      • 2.2.1 查詢ARP緩存
      • 2.2.2 發送ARP請求
      • 2.2.3 接收并處理ARP請求
      • 2.2.4 發送ARP響應
      • 2.2.5 接收并處理ARP響應
      • 2.2.6 數據傳輸
      • 2.2.7 ARP緩存的更新和管理
    • 2.3 ARP 數據報的格式
  • 👥總結


11111111
11111111
11111111
11111111
**** 11111111

數據鏈路層

用于兩個設備(同一種數據鏈路節點)之間進行傳遞.

🏳??🌈一、認識以太網

  • 以太網不是一種具體的網絡, 而是一種技術標準; 既包含了數據鏈路層的內容, 也包含了一些物理層的內容. 例如: 規定了網絡拓撲結構, 訪問控制方式, 傳輸速率等;
  • 例如以太網中的網線必須使用雙絞線; 傳輸速率有 10M, 100M, 1000M 等;
  • 以太網是當前應用最廣泛的局域網技術; 和以太網并列的還有令牌環網, 無線LAN 等;

1.1 以太網幀格式

以太網的幀格式如下所示:
在這里插入圖片描述

  • 源地址和目的地址是指網卡的硬件地址(也叫 MAC 地址), 長度是 48 位,是在網卡出廠時固化的;
  • 幀協議類型字段有三種值,分別對應 IPARPRARP;
  • 幀末尾CRC 校驗碼。

1.2 認識 MAC 地址

  • MAC 地址用來識別數據鏈路層中相連的節點;
  • 長度為 48 位, 長 6 個字節. 一般用 16 進制數字加上冒號的形式來表示(例如:08:00:27:03:fb:19)
  • 在網卡出廠時就確定了, 不能修改. mac 地址通常是唯一的
  • 虛擬機中的 mac 地址不是真實的 mac 地址, 可能會沖突; 也有些網卡支持用戶配置 mac 地址

1.3 對比理解 MAC 地址和 IP 地址

  • IP 地址描述的是路途總體的 起點 和 終點;
  • MAC 地址描述的是路途上的每一個區間的起點和終點;

在這里插入圖片描述

1.4 認識 MTU

  • MTU 相當于發快遞時對包裹尺寸的限制. 這個限制是不同的數據鏈路對應的物理層, 產生的限制.
  • 以太網幀中的數據長度規定最小 46 字節,最大 1500 字節,,ARP 數據包的長度不夠 46 字節,要在后面補填充位;
  • 最大值 1500 稱為以太網的最大傳輸單元(MTU),不同的網絡類型有不同的MTU;
  • 如果一個數據包從以太網路由到撥號鏈路上,數據包長度大于撥號鏈路的 MTU了,則需要對數據包進行分片(fragmentation);
  • 不同的數據鏈路層標準的 MTU 是不同的;

1.5 MTU 對 IP 協議的影響

由于數據鏈路層 MTU 的限制, 對于較大的 IP 數據包要進行分包.

  • 將較大的 IP 包分成多個小包, 并給每個小包打上標簽(分包和加標簽);
  • 每個小包 IP 協議頭的 16 位標識(id) 都是相同的(標簽原則);
  • 每個小包的 IP 協議頭的 3 位標志字段中, 第 2 位置為 0, 表示允許分片, 第 3 位來表示結束標記(當前是否是最后一個小包, 是的話置為 1, 否則置為 0)(標簽原則);
  • 到達對端時再將這些小包, 會按順序重組, 拼裝到一起返回給傳輸層(合并小包);
  • 一旦這些小包中任意一個小包丟失, 接收端的重組就會失敗. 但是 IP 層不會負責重新傳輸數據;(丟包情況)

在這里插入圖片描述

在這里插入圖片描述

1.6 MTU 對 UDP 協議的影響

讓我們回顧一下 UDP 協議:

  • 一旦 UDP 攜帶的數據超過 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就會在網絡層分成多個 IP 數據報.
  • 這多個 IP 數據報有任意一個丟失, 都會引起接收端網絡層重組失敗. 那么這就意味著, 如果 UDP 數據報在網絡層被分片, 整個數據被丟失的概率就大大增加了.

1.7 MTU 對于 TCP 協議的影響

讓我們再回顧一下 TCP 協議:

  • TCP 的一個數據報也不能無限大, 還是受制于 MTU. TCP 的單個數據報的最大消息長度, 稱為 MSS(Max Segment Size);
  • TCP 在建立連接的過程中, 通信雙方會進行 MSS 協商.
  • 最理想的情況下, MSS 的值正好是在 IP 不會被分片處理的最大長度(這個長度仍然是受制于數據鏈路層的 MTU).
  • 雙方在發送 SYN 的時候會在 TCP 頭部寫入自己能支持的 MSS 值.
  • 然后雙方得知對方的 MSS 值之后, 選擇較小的作為最終 MSS.
  • MSS 的值就是在 TCP 首部的 40 字節變長選項中(kind=2);

MSS 和 MTU 的關系

在這里插入圖片描述

1.8 查看硬件地址和 MTU

使用 ifconfig 命令, 即可查看 ip 地址, mac 地址, 和 MTU;

在這里插入圖片描述

🏳??🌈二、ARP 協議

雖然我們在這里介紹 ARP 協議, 但是需要強調, ARP 不是一個單純的數據鏈路層的協議, 而是一個介于數據鏈路層和網絡層之間的協議;

?ARP 請求主要發生在局域網中,用于同一子網內的設備通信

2.1 ARP 協議的作用

在這里插入圖片描述

ARP 協議建立了主機 IP 地址MAC 地址 的映射關系.

  • 在網絡通訊時,源主機的應用程序知道目的 主機的 IP 地址端口號,卻不知道目的主機的硬件地址;
  • 數據包首先是被網卡接收到再去處理上層協議的,如果接收到的數據包的硬件地址與本機不符,則直接丟棄;
  • 因此在通訊前必須獲得目的主機的硬件地址;

2.2 ARP 協議的工作流程

在這里插入圖片描述

在這里插入圖片描述

  • 源主機發出 ARP 請求,詢問“IP 地址是 192.168.0.1 的主機的硬件地址是多少”, 并將這個請求廣播到本地網段(以太網幀首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示廣播);
  • 目的主機接收到廣播的 ARP 請求,發現其中的 IP 地址與本機相符,則發送一個ARP 應答數據包給源主機,將自己的硬件地址填寫在應答包中;
  • 每臺主機都維護一個 ARP 緩存表,可以用 arp -a 命令查看。緩存表中的表項有過期時間 (一般為 20 分鐘),如果 20 分鐘內沒有再次使用某個表項,則該表項失效,下次還要發 ARP 請求來獲得目的主機的硬件地址

ARP協議具體工作流程:

ARP(地址解析協議)的工作流程是一個用于在同一局域網內根據 IP地址 解析出對應 MAC地址 的過程。

2.2.1 查詢ARP緩存

主機A 需要向 主機B 發送數據時,它首先會在自己的ARP緩存中查找是否已經有主機B的IP地址與MAC地址的映射關系。

  • 如果在ARP緩存中找到了主機B的MAC地址,那么主機A會直接使用該MAC地址進行數據封裝和發送,跳過后續的ARP請求和響應步驟。
  • 如果在ARP緩存中沒有找到主機B的MAC地址,那么主機A會進行下一步的ARP請求

2.2.2 發送ARP請求

主機A構造一個ARP請求報文,該報文包含了以下內容:

  • 源主機IP地址MAC地址(即主機A的IP地址和MAC地址)。
  • 目標主機IP地址(即主機B的IP地址),但目標主機的 MAC 地址字段通常填充為全0,表示未知

然后,主機A會廣播 的方式將ARP請求報文發送到本地網絡上的所有主機。這個廣播報文會被網絡上的每一臺主機接收到。

2.2.3 接收并處理ARP請求

網絡上的 每一臺主機 都會檢查接收到的ARP請求報文中的 目標IP地址 是否自己的IP地址 匹配

  • 如果不匹配,該主機將丟棄ARP請求報文,不做任何處理。
  • 如果匹配(即該主機是主機B),那么主機B會進行下一步的ARP響應

在響應之前,主機B 還會將ARP請求報文中的源主機的IP地址和MAC地址(即主機A的IP地址和MAC地址)添加到自己的ARP緩存中,以備將來使用。

2.2.4 發送ARP響應

主機B構造一個ARP響應報文,該報文包含了以下內容:

  • 源主機的IP地址和MAC地址(即 主機BIP地址MAC地址)。
  • 目標主機的IP地址和MAC地址(即 主機AIP地址MAC地址,但這里的MAC地址是已知的,因為是從ARP請求報文中獲取的)。
  • 然后,主機B 會以 單播 的方式將ARP響應報文發送回主機A。

2.2.5 接收并處理ARP響應

主機A 接收主機B 發送的ARP響應報文后,會從中提取出主機B的MAC地址,并將其添加到自己的ARP緩存中,與主機B的IP地址形成映射關系。

至此,主機A 已經成功獲取到了 主機BMAC地址,可以開始進行數據的封裝和發送了。

2.2.6 數據傳輸

一旦獲得了目標MAC地址,主機A 就可以將數據封裝成幀,并將其發送到網絡上。這個幀包含了源MAC地址(主機A的MAC地址)、目標MAC地址(主機B的MAC地址)以及要傳輸的數據。

2.2.7 ARP緩存的更新和管理

ARP緩存 中的條目通常有一個生存時間(TTL),過期后會被自動刪除。這樣,當網絡拓撲結構發生變化時(例如,主機B的MAC地址發生變化),ARP緩存中的舊條目會被自動清除,新的ARP請求和響應過程會重新進行,以確保數據的正確傳輸。

此外,ARP緩存還可以手動清除或刷新,以適應網絡環境的變化。

綜上所述,ARP協議的工作流程是一個動態的過程,它通過ARP請求和響應來解析IP地址與MAC地址的映射關系,從而實現數據的正確傳輸。

2.3 ARP 數據報的格式

在這里插入圖片描述

  • 注意到源 MAC 地址、目的 MAC 地址在以太網首部和 ARP 請求中各出現一次,對于鏈路層為以太網的情況是多余的,但如果鏈路層是其它類型的網絡則有可能是必要的。
  • 硬件類型指鏈路層網絡類型,1 為以太網;
  • 協議類型指要轉換的地址類型,0x0800 為 IP 地址;
  • 硬件地址長度對于以太網地址為 6 字節;
  • 協議地址長度對于 IP 地址為 4 字節;
  • op 字段為 1 表示 ARP 請求,op 字段為 2 表示 ARP 應答。

👥總結

本篇博文對 【LInux網絡】數據鏈路層 - 深度理解以太網和APR協議 做了一個較為詳細的介紹,不知道對你有沒有幫助呢

覺得博主寫得還不錯的三連支持下吧!會繼續努力的~

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

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

相關文章

【零基礎入門】ASP.NET Core快速搭建第一個Web應用

一、為什么選擇ASP.NET Core? 跨平臺支持:可在Windows/macOS/Linux系統運行 高性能:比傳統ASP.NET框架快10倍以上 開源生態:活躍的開發者社區和豐富的NuGet包 云原生支持:完美適配Docker和Kubernetes部署 二、開發…

AT2401C與RFX2401C問題處理資料

1、AT2401C 可以 PIN 對 PIN 替代 RFX2401C 嗎? 答:AT2401C 可以 PIN 對 PIN 替換 RFX2401C;同時 CB2401 也可以 PIN 對 PIN 替換 RFX2401C;我們主要推 AT2401C 這款芯片,如果客戶產 品需要過認證或者應用于音頻產品建…

Redis-緩存應用 本地緩存與分布式緩存的深度解析

Redis緩存場景與策略:本地緩存與分布式緩存的深度解析 在當今高并發、低延遲的互聯網架構中,緩存技術是優化系統性能的核心手段之一。Redis作為分布式緩存的標桿,與本地緩存共同構成了緩存體系的兩大支柱。然而,兩者的適用場景與…

LinuxAgent開源程序是一款智能運維助手,通過接入 DeepSeek API 實現對 Linux 終端的自然語言控制,幫助用戶更高效地進行系統運維工作

一、軟件介紹 文末提供程序和源碼下載 LinuxAgent 開源程序是基于LLM大模型的Linux智能運維助手。通過接入DeepSeek API實現對Linux終端的自然語言控制,幫助用戶更高效地進行系統運維工作。 二、版本特性對比 特性v1.4.1 1.4.1 版v2.0.3 2.0.3 版v2.0.4 2.0.4…

Shadertoy著色器移植到Three.js經驗總結

Shadertoy是一個流行的在線平臺,用于創建和分享WebGL片段著色器。里面有很多令人驚嘆的畫面,甚至3D場景。本人也移植了幾個ShaderToy上的著色器。本文將詳細介紹移植過程中需要注意的關鍵點。 1. 基本結構差異 想要移植ShaderToy的shader到three.js&am…

StarRocks SRCA 考試心得總結

文章目錄 前言0 什么是StarRcoks?1. 關于 SRCA 考試2. 備考資料與學習方式2.1 官方文檔與教程2.2 在線培訓課程2.3 實戰演練 3. 重點考試內容3.1 StarRocks 架構與原理3.2 數據導入與導出3.3 SQL 查詢優化3.4 性能調優 4. 備考建議4.1 多做實操4.2 注重考試中的細節…

什么是 Spring Profiles 以及如何在 Spring Boot 中使用:配置與實踐指南

在現代應用開發中,應用程序通常需要在不同環境(如開發、測試、生產)中運行,每個環境可能有不同的配置(如數據庫、日志級別、消息隊列)。Spring Profiles 是 Spring 框架提供的一項功能,用于根據…

Spring Cloud Gateway限流:基于Redis的請求限流實現

文章目錄 引言一、Spring Cloud Gateway限流基礎1.1 限流機制概述1.2 Redis分布式限流原理 二、實現基于Redis的限流方案2.1 環境準備與依賴配置2.2 配置限流策略2.3 自定義限流響應 三、高級應用與最佳實踐3.1 動態限流規則調整3.2 優先級與降級策略3.3 監控與告警 總結 引言 …

keil修改字體無效,修改字體為“微軟雅黑”方法

在網上下載了微軟雅黑字體,微軟雅黑參考下載鏈接 結果在Edit->Configuration中找不到這個字體 這個時候可以在keil的安裝目錄中找到UV4/global.prop文件 用記事本打開它進行編輯,把字體名字改成微軟雅黑 重新打開keil就發現字體成功修改了。 這個…

CSS文字特效實例:猜猜我是誰

CSS文字特效實例:猜猜我是誰 引言 在之前的文章中,我們分別實現了空心文字、文字填充、文字模糊、文字裂開等效果。本文將使用一個小實例,組合使用相關特效:當鼠標懸停在圖片上時,其余圖片模糊,且文字會上…

美團社招一面

美團社招一面 做題 1、面試題 <style> .outer{width: 100px;background: red;height: 100px; }.inner {width: 50px;height: 50px;background: green; }</style> <div class"outer"><div class"inner"></div> </div>…

InitializingBean接口和@PostConstruct-筆記

1. InitializingBean 簡介 1.1 功能簡介 InitializingBean 是 Spring 框架中的一個接口&#xff0c;用在 Bean 初始化后執行自定義邏輯。它提供了 afterPropertiesSet() 方法&#xff0c;該方法在以下時機被 Spring 容器自動調用&#xff1a; 屬性注入完成后&#xff08;即所…

《代碼整潔之道》第9章 單元測試 - 筆記

測試驅動開發 (TDD) 是一種編寫整潔代碼的“規程”或“方法論”&#xff0c;而不僅僅是測試技術。 JaCoCo 在運行測試后生成詳細的覆蓋率報告的工具&#xff0c; maven 引用。 測試驅動開發 測試驅動開發&#xff08;TDD&#xff09;是什么&#xff1f; TDD 不是說寫完代碼…

openGauss新特性 | DataKit支持PostgreSQL到openGauss的遷移能力

Postgresql-\>openGauss遷移工具debezium-connector-postgres 可獲得性 本特性自openGauss 7.0.0-RC1版本開始引入。 特性簡介 debezium-connector-postgres工具是一個基于Java語言的Postgresql到openGauss的復制工具。該工具提供了初始全量數據及對象&#xff08;視圖、…

在MySQL Shell里 重啟MySQL 8.4實例

前一段時間看到MySQL官方視頻的Oracle工程師在mysql shell里面重啟mysql實例&#xff0c;感覺這個操作很方便&#xff0c;所以來試試&#xff0c;下面為該工程師的操作截圖 1.MySQL Shell 通過root用戶連上mysql&#xff0c;shutdown mysql實例 [rootmysql8_3 bin]# mysqlshMy…

truffle

文章目錄 truffle目錄結構各文件作用在本地測試合約 truffle 項目來自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/04-web3js-truffle/README-CN.md Truffle 是基于 Solidity 語言的一套開發框架&#xff0c;它簡化了去中心化應用&#xff08;Dapp&…

SpringCloud核心組件Eureka菜鳥教程

關于Spring Cloud Eureka的核心概念 Eureka 是 Netflix 開源的一款基于 REST 的服務發現工具&#xff0c;主要用于中間層服務器的云端負載均衡。它通過維護一個服務注冊表來實現服務之間的通信1。在 Spring Cloud 中&#xff0c;Eureka 提供了一個高可用的服務注冊與發現機制&a…

職業教育新形態數字教材的建設與應用:重構教育生態的數字化革命

教育部新時代職業學校名師(名匠)名校長培養計劃專題 四川省第四批職業學校名師(名匠)培養計劃專題 在某職業院校的智能制造課堂上&#xff0c;學生佩戴VR設備&#xff0c;通過數字教材中的虛擬工廠完成設備裝配訓練&#xff0c;系統實時生成操作評分與改進建議。這一場景折射出…

基于Python的攜程國際機票價格抓取與分析

一、項目背景與目標 攜程作為中國領先的在線旅行服務平臺&#xff0c;提供了豐富的機票預訂服務。其國際機票價格受多種因素影響&#xff0c;包括季節、節假日、航班時刻等。通過抓取攜程國際機票價格數據&#xff0c;我們可以進行價格趨勢分析、性價比評估以及旅行規劃建議等…

Windows 圖形顯示驅動開發-初始化WDDM 1.2 和 PnP

(WDDM) 1.2 及更高版本顯示微型端口驅動程序的所有 Windows 顯示驅動程序都必須支持以下行為&#xff0c;以響應即插即用 (PnP) 基礎結構啟動和停止請求。 根據驅動程序返回成功或失敗代碼&#xff0c;或者系統硬件是基于基本輸入/輸出系統 (BIOS) 還是統一可擴展固件接口 (UEF…