【Linux | 網絡】數據鏈路層

在這里插入圖片描述

  • 一、以太網
    • 1.1 認識以太網
    • 1.2 以太網幀格式
    • 1.3 MAC地址
      • 1.3.1 認識MAC地址
      • 1.3.2 MAC地址的類型
      • 1.3.3 MAC地址 VS IP地址
    • 1.4 局域網如何通信
    • 1.5 局域網數據碰撞
      • 1.5.1 數據碰撞
      • 1.5.2 劃分碰撞域(交換機)
  • 二、ARP協議
    • 2.1 ARP協議的作用
    • 2.2 ARP數據報的格式
    • 2.3 ARP協議的工作流程
    • 2.4 ARP協議的特性
    • 2.5 如何成為中間人(連接熱點)
  • 結尾

注意:本篇文章中講到數據通過網絡協議棧的內容中,不涉及硬件層

一、以太網

1.1 認識以太網

  • 以太網(Ethernet)是一套由IEEE 802.3標準定義的局域網技術體系,它并非特指某個具體網絡,而是規范了從數據鏈路層到物理層的完整技術方案
  • 該標準明確定義了MAC幀格式CSMA/CD介質訪問控制網絡拓撲結構傳輸介質(雙絞線、光纖等)以及速率等級(10M/100M/1G/10G/100G等),其中雙絞線成為主導介質
  • 作為當前應用最廣泛的局域網技術,以太網憑借標準化、高兼容性和持續演進能力(如400G以太網)占據統治地位,而與它并列的令牌環網(IEEE 802.5)因效率不足被淘汰,無線LAN(Wi-Fi,IEEE 802.11)則在其基礎上補充了無線場景需求,二者共同構成現代局域網的基石

1.2 以太網幀格式

在這里插入圖片描述

  • MAC地址也叫做網卡的硬件地址,長度是48位,是在網卡出廠時固化的
  • 幀協議類型字段有三種選項,分別對應IP、ARP、RARP
  • 幀末尾是CRC校驗
  • 在以太網幀結構中,PAD(填充字段) 是一個可選的填充部分,主要用于確保以太網幀滿足最小長度要求。有效載荷部分不足46字節時,需通過PAD填充至46字節,以滿足最小幀長

以太網幀由以太網首部、有效載荷(數據)和以太網尾部構成,那么就有下面兩個問題需要解決:

  1. 如何解決以太網首部、有效載荷分離和以太網尾部的問題
    數據幀中,以太網首部和以太網尾部是固定長度,去掉以后就是有效載荷了
  2. 如何解決有效載荷向上交付的問題
    數據幀中,有一個類型,有以下三種選項
    • 當類型為0800時,有效載荷交付給IP協議
    • 當類型為0806時,有效載荷交付給ARP協議
    • 當類型為0835時,有效載荷交付給RARP協議

1.3 MAC地址

1.3.1 認識MAC地址

  • MAC地址是數據鏈路層中用于唯一標識網絡設備的硬件地址,用來識別數據鏈路層中相連的節點
  • MAC地址長度為48位,即6個字節,一般用16進制數字加上冒號的形式來表示(例如: 00:1A:2B:3C:4D:5E)
  • MAC地址在網卡出廠時就確定了,不能修改,MAC地址通常是唯一的(虛擬機中的MAC地址不是真實的MAC地址,可能會沖突,也有些網卡支持用戶配置MAC地址)

1.3.2 MAC地址的類型

類型示例用途
單播地址00:1A:2B:3C:4D:5E普通設備通信,目標為單一設備
組播地址01:00:5E:00:00:01一對多通信(如IPv4組播對應 224.0.0.1)
廣播地址FF:FF:FF:FF:FF:FF局域網內所有設備接收(如ARP請求、DHCP發現)
  • 單播MAC地址
    • 第1字節的第2個最低有效位(LSB)為 0
    • 示例:00:1A:2B:3C:4D:5E --> 00 的二進制是 00000000(第2位為0,單播)
  • 組播MAC地址
    • 第1字節的第2個最低有效位(LSB)為 1
    • 示例:01:00:5E:00:00:01 --> 01 的二進制是 00000001(第2位為1,組播)
  • 廣播MAC地址
    • 特殊組播地址,固定為 FF:FF:FF:FF:FF:FF(全1)

1.3.3 MAC地址 VS IP地址

相信大家都看過西游記,唐僧一群人每到達一個國家都會跟國王說自己的終極目標,從東土大唐來去西天取經,然后說自己的當前目標,從哪里到當前國家的,最后問想要去西天,下一個國家應該去哪。
在這里插入圖片描述

在這里我們就看出來了,最終目標一直都沒變,而當前目標一直在變。這里的終極目標就代表著IP地址,當前目標就代表著MAC地址,在發送信息時,報文的IP地址是一直不變的(實際上私有網絡訪問公網網絡時,IP是可能會變化的),而MAC地址需要一直改變。


1.4 局域網如何通信

下面是一個局域網的情況,由于這里已經明確是局域網通信,所以就沒有畫路由器。

首先,主機A想向主機D發送數據,主機A中會存在一個路由表,并且一個局域網中有一個網絡號,主機A將主機D的IP地址與子網掩碼進行按位與,確認主機A和主機D在同一個局域網。

在這里插入圖片描述

然后主機A將數據通過網絡協議棧封裝后,將數據幀發送到局域網中。

在這里插入圖片描述

一個主機在局域網中發送數據幀,在這個局域網中的所有主機都可以收到。

最后,局域網中的其他主機收到數據幀后,主機會通過讀取數據幀中的目的MAC地址,會分為兩種情況

  1. 發現數據幀不是發生給該主機的,該主機會將數據幀丟棄
  2. 發現數據幀是發生給該主機的,該主機會將數據幀解包,將有效載荷向上交付
    在這里插入圖片描述

1.5 局域網數據碰撞

1.5.1 數據碰撞

  1. 在局域網中,任何時刻,只允許一臺主機向局域網中發送數據
  2. 如果同時有多臺主機向局域網發送數據,則會發生局域網數據碰撞問題
  3. 這里就會涉及到碰撞檢測和碰撞避免的問題

結合上面三條,從系統角度上來看,局域網非常像多臺主機的臨界資源


1.5.2 劃分碰撞域(交換機)

相信大家都經歷過,當沒多少人使用網絡的時候,網速很快,當有很多人使用網絡的時候,網絡很慢,這就是同一時間有很多主機在局域網中發送數據,導致局域網碰撞導致的。

為了解決這個問題,這里就要引入交換機,用來劃分局域網的碰撞域。

以下是數據傳輸流程

  1. 主機發送數據幀
    • 主機A準備發送數據給主機B,封裝數據幀,將數據幀發送出去
  2. 數據幀到達交換機
    • 交換機在某個端口收到該幀(一個交換機有多個端口),先存儲到緩沖區
    • 交換機解析幀頭中的目標MAC地址
  3. 交換機的轉發決策
    • 查MAC地址表:
      • 若目標MAC存在于表中 --> 幀僅轉發到對應端口(單播)
      • 若目標MAC為廣播(FF:FF:FF:FF:FF:FF)或未知 --> 轉發到所有端口(除接收端口外,單主機對應單端口的情況)
    • 更新MAC地址表:記錄源MAC與接收端口的映射
  4. 幀到達目標設備
    • 交換機將幀從特定端口發出,最終被目標主機B接收

常規情況下,一個主機對應一個交換機的一個端口,每個端口對應著一個獨立通信信道。以下圖為例,局域網中有四臺主機和一個交換機,也就是說主機A、B、C、D各自對應交換機的一個端口,主機A向主機C發送數據的時候,交換機僅將數據轉發給主機C,主機B和D不會收到該數據,做到了交換機的每個端口是一個獨立的碰撞域
在這里插入圖片描述

還有一種情況,通過二級交換機擴展,可以將多臺主機邏輯連接到上級交換機的同一端口,但每臺主機仍實際占用下級交換機的一個獨立端口。當主機A向主機C發送數據時,下級交換機僅將數據轉發給主機C,主機B和D不會收到該數據,從而在物理層面隔離了碰撞域。

在這里插入圖片描述


二、ARP協議

ARP不是一個單純的數據鏈路層的協議,而是一個介于數據鏈路層和網
絡層之間的協議。

2.1 ARP協議的作用

在1.4中講解局域網是如何通信的時候,不知道大家有沒有注意到一個問題,就是主機A知道主機D的IP地址,但是主機A并不知道主機D的MAC地址,那么數據幀中的目的MAC地址就無法填寫,也無法封裝數據幀了。

為了解決這個問題,就要引入ARP協議了。

ARP協議是用于建立主機 IP地址 和 MAC地址 的映射關系.

  • 在網絡通訊時,源主機的應用程序知道目的主機的IP地址和端口號,但不知道目的主機的MAC地址
  • 數據幀被主機收到后,如果數據幀的MAC地址與本機不符,就會被主機直接丟棄
  • 因此在通訊前必須獲得目的主機的MAC地址

2.2 ARP數據報的格式

  • 硬件類型:鏈路層網絡類型,1為以太網
  • 協議類型:要轉換的地址類型,0x0800為IP地址
  • 硬件地址長度:對于以太網地址為6字節
  • 協議地址長度:對于和IP地址為4字節
  • op字段:為1表示ARP請求,為2表示ARP應答
    在這里插入圖片描述

2.3 ARP協議的工作流程

下面是一個局域網的情況,由于這里已經明確是局域網通信,所以就沒有畫路由器。

主機A想向主機D發送數據,主機A中會存在一個路由表,并且一個局域網中有一個網絡號,主機A將主機D的IP地址與子網掩碼進行按位與,確認主機A和主機D在同一個局域網。

在這里插入圖片描述

主機A想向主機D發送數據,但是主機A只知道主機D的IP地址,并不知道主機D的MAC地址,所以主機A就會通過ARP協議來獲取主機D的MAC地址。

主機A會先構建一個ARP請求報文,然后為報文封裝以太網首部和尾部成為數據幀,最后再將數據幀發送到局域網中。

在這里插入圖片描述

一個主機在局域網中發送數據幀,在這個局域網中的所有主機都可以收到。

最后,局域網中的其他主機收到數據幀后,主機通過讀取數據幀中的目的MAC地址,發現是廣播地址,然后會將數據幀解包,將有效載荷(ARP請求報文)向上交付,這里會分為兩種情況

  1. 發現ARP請求報文中的目的IP地址與該主機的IP地址不匹配,該主機會將ARP請求報文丟棄
  2. 發現ARP請求報文中的目的IP地址與該主機的IP地址匹配,該主機則會向主機A 發送ARP應答報文,將自己的MAC地址發送給主機A

這里主機B和主機C收到數據幀后,會將ARP請求報文丟棄,而主機D會向主機A發送ARP響應報文。

在這里插入圖片描述

主機D向主機A發送ARP響應報文,首先需要構建一個ARP響應報文,然后為報文封裝以太網首部和尾部成為數據幀,最后再將數據幀發送到局域網中。

在這里插入圖片描述

當主機D將數據幀發送到局域網中,在這個局域網中的所有主機都可以收到這個數據幀。

局域網中的其他主機收到數據幀后,主機會通過讀取數據幀中的目的MAC地址,會分為兩種情況

  1. 發現數據幀不是發生給該主機的,該主機會將數據幀丟棄
  2. 發現數據幀是發生給該主機的,該主機會將數據幀解包,發現幀類型為0806,將有效載荷向上交付給ARP協議,ARP報文中op為2,則報文為ARP應答報文,該主機會匹配本地ARP請求記錄,匹配成功則更新ARP緩存,匹配失敗,則將ARP應答報文丟棄

這里主機A會更新ARP緩存,主機B和主機C會將數據幀丟棄。

在這里插入圖片描述

當主機A更新ARP緩存后,主機A就知道了主機D的MAC地址,主機A就可以正常的向主機D發送數據了。


2.4 ARP協議的特性

  1. ARP緩存中的每個動態條目都有一個關聯的 TTL計時器,用于標記該條目的有效存活時間,在存活時間內,主機再次得到對應主機發送的合法的ARP應答數據報文不可以),就會刷新該條目的TTL計時器(不同系統,時間不同)
  2. 主機可以同時處理請求與應答,也就說明主機既可以收到ARP請求,也可以收到ARP應答
  3. 主機收到最新應答會 覆蓋 ARP緩存中對應條目的歷史記錄,也就是說明,如果主機在收到同一臺主機發送的ARP應答,會將最新ARP應答記錄下來

2.5 如何成為中間人(連接熱點)

成為中間人的方式有很多種,這里我以用戶連接熱點,讓開熱點的主機(攻擊者)成為中間人:

  1. 用戶連接熱點
    • 攻擊者開啟熱點,用戶主動連接
  2. 用戶發送ARP請求
    • 用戶首次訪問網絡時,廣播ARP請求解析網關MAC
  3. 攻擊者劫持ARP請求
    • 無需修改請求:攻擊者直接搶先回復偽造ARP應答
    • 結果:用戶ARP緩存中,網關IP映射到攻擊者MAC
  4. 流量重定向
    • 用戶所有流量發往攻擊者MAC --> 攻擊者轉發給真實網關
    • 攻擊者可在轉發過程中:
      • 竊聽:抓包工具捕獲明文數據
      • 篡改:修改HTTP響應
      • SSL剝離:將HTTPS降級為HTTP

結尾

如果有什么建議和疑問,或是有什么錯誤,大家可以在評論區中提出。
希望大家以后也能和我一起進步!!🌹🌹
如果這篇文章對你有用的話,希望大家給一個三連支持一下!!🌹🌹
在這里插入圖片描述

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

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

相關文章

Google Ads廣告驗證全攻略:如何借助動態住宅IP精準投放?

在競爭激烈的數字廣告領域,Google Ads扮演著至關重要的角色。然而,隨著廣告政策的不斷更新和平臺對廣告質量要求的提高,廣告驗證已成為許多廣告主繞不開的環節。同時,如何實現精準投放,將廣告觸達最相關的目標受眾&…

鴻蒙Next Web組件生命周期詳解:從加載到銷毀的全流程掌控

想要精通鴻蒙應用開發?Web組件的9大生命周期回調是你必須掌握的上帝視角!在鴻蒙應用開發中,Web組件是我們加載本地或在線網頁的強大工具。它提供了完整的生命周期回調體系,讓開發者能夠精準感知網頁加載的每個階段,從而…

python學習進階之異常和文件操作(三)

文章目錄1.程序異常2.文件操作3.json操作1.程序異常 1.1 異常 異常概念: 程序在運行時, 如果Python解釋器遇到到一個錯誤, 則會停止程序的執行, 并且提示一些錯誤信息, 這就是異常 拋出異常: 程序停止執行并且提示錯誤信息這個動作, 通常稱之為拋出(ra…

NodeJS 8 ,從 0 到 1:npm 包發布與更新全流程指南( 含多場景適配與踩坑總結 )

目錄 前言 一、準備工作 1.1 開發環境搭建 1.1.1 環境安裝 1.1.2 配置問題 1.2 賬號注冊 1.2.1 賬號注冊(兩種方式) 1.2.2 登錄驗證 1.2.3 個人設置 1.2.4 安全配置 1.3 初始配置 1.3.1 初始項目目錄 1.3.2 關鍵字段詳解 1.3.3 手動完善 二…

BERT中文預訓練模型介紹

bert-base-chinese 是由谷歌基于 BERT(Bidirectional Encoder Representations from Transformers)模型預訓練得到的適用于中文任務的模型版本。以下從多個方面對其進行詳細解釋: 模型概述 BERT 是一種基于 Transformer 架構的預訓練語言模型…

Archon01-項目部署

Archon01-項目部署當前已經參考B站視頻針對代碼進行修改,可直接使用BigModel智譜的GLM-4.5替換openAI進行使用,部署環境(Python3.12-slim環境)1-核心知識點關鍵字: Docker Supabase Archon BigModel Python1&#xff0…

HarmonyOS時間戳完全指南:DevEco Studio中的時間處理與實戰應用

時間戳是現代應用開發中不可或缺的基礎功能,無論是日志記錄、數據同步、緩存管理還是狀態追蹤都離不開時間戳的支持。本文將深入探討在DevEco Studio中如何處理和使用時間戳,并提供豐富的實戰示例。一、時間戳基礎概念什么是時間戳?時間戳&am…

論文筆記:On the Biology of a Large Language Model

《關于大型語言模型的生物學》(On the Biology of a Large Language Model)的文章,深入探究了 Anthropic 公司 Claude 3.5 Haiku 模型的內部工作機制。研究人員將理解語言模型比作生物學研究,旨在揭示其復雜行為背后的“神經回路”…

TCP/IP、HTTP 和 HTTPS簡介

我們來系統地介紹一下 TCP/IP、HTTP 和 HTTPS。它們之間的關系可以概括為:??HTTP 和 HTTPS 是運行在 TCP/IP 基礎網絡架構之上的具體應用協議??。為了更直觀地理解它們之間的關系,我們可以參考下面的網絡分層模型:flowchart TDsubgraph A…

【30】C#實戰篇——獲取路徑下的文件名(不包含路徑和擴展名),文件名由連續的數字編號+連續的字母編號組成,并分離出文件名數字部分和英文部分

文章目錄1 要求2 分析 與 實現1 要求 寫一個函數,獲取路徑下的文件名(不包含路徑和擴展名),并分離出文件名fileName ,文件名編號SN,文件名前綴WMT ; 輸入文件路徑,解析出不帶"…

EasyExcel部署Docker缺少字體報錯

報文 java.lang.NullPointerException: nullat sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)at sun.awt.FontConfiguration.init(FontConfiguration.java:107)at sun.awt.…

從“收款工具”到“智能中樞”:AI如何重構POS系統的技術架構與商業價值?

引?:從交易終端到智能中樞的?字路? 在現代商業的繁忙圖景中 ,銷售點( Point of Sale, POS) 系統?期以來被視為交易流程的終點 ——?個簡單完成收款、打印票據的?具。然? ,這?認知正在被迅速顛覆。 隨著數字經濟的深 化 ,POS系統已演變為連接顧客、 商品與服務的…

unity以戰斗截圖并加上微信二維碼分享

開發游戲時,會遇到戰斗結算,成就等獎勵界面,鼓勵玩家分享到朋友圈,這時通常會在圖片上加上一些內容,比如游戲Logo,二維碼下載等內容。現在分享一下我制作游戲分享圖片的過程。第一步首先截圖,截…

新手向:實現驗證碼程序

本文將從零開始,通過一個簡單的驗證碼程序。即使你沒有任何編程基礎,也能跟著這篇文章一步步學習。第一章:Java開發環境搭建1.1 安裝JDK要開始Java編程,首先需要安裝Java開發工具包(JDK)。JDK是Java開發的核心環境,包含…

使用Flask實現接口回調地址

使用Flask實現接口回調地址 一、接口回調的基本概念 接口回調(Callback)是一種異步通信機制,當某個事件發生時(如支付完成、任務結束),服務提供方會主動調用預先配置的URL(即回調地址&#xff0…

vue2+jessibuca播放h265視頻

文檔地址&#xff1a;http://jessibuca.monibuca.com/api.html#background 1,文件放在public中 2,在html中引入 3&#xff0c;子組件 <template><div :id"container id"></div> </template><script> export default {props: [url,…

Behavioral Fingerprinting of Large Language Models

Behavioral Fingerprinting of Large Language Models Authors: Zehua Pei, Hui-Ling Zhen, Ying Zhang, Zhiyuan Yang, Xing Li, Xianzhi Yu, Mingxuan Yuan, Bei Yu Deep-Dive Summary: 行為指紋識別大型語言模型 摘要 當前的大型語言模型&#xff08;LLMs&#xff09;基…

某互聯網大廠的面試go語言從基礎到實戰的經驗和總結

### 一面 #### 1. **實習項目**- 可以簡要描述你的項目經歷&#xff0c;最好是與職位相關的項目。如果是與技術棧相關的項目&#xff0c;比如 Go、C、Golang 或 Python&#xff0c;重點講述項目中的技術細節和你如何解決問題。#### 2. **Go學習多久**- 說明你學習 Go 語言的時間…

掌握Java控制流:編程決策的藝術

控制流語句是用來 控制程序執行順序 的關鍵工具&#xff0c;它們允許你根據不同的條件執行不同的代碼塊&#xff0c;或者重復執行某段代碼。這使得程序能夠根據輸入和情況做出智能的決策&#xff0c;而不僅僅是線性的執行。1. 條件語句 (Conditional Statements)條件語句允許你…

Docker 安裝 MySQL 和 Redis 完整指南

前言 在開發環境中,使用 Docker 安裝數據庫服務是一種快速、便捷的方式。本文將詳細介紹如何在 macOS 上使用 Docker 安裝 MySQL 和 Redis,并解決國內網絡訪問 Docker Hub 的問題。 環境準備 macOS 系統 Docker Desktop 已安裝 網絡連接 配置 Docker 國內鏡像源 方法一:通…