【Linux網絡與網絡編程】11.數據鏈路層mac幀協議ARP協議

前面在介紹網絡層時我們提出來過一個問題:主機是怎么把數據交給路由器的?那里我們說這是由數據鏈路層來做的。

網絡上的報文在物理結構上是以mac幀的形式流動的,但在邏輯上是以IP流動的,IP的流動是需要mac幀支持的。

數據鏈路層解決的是相鄰節點間的通信問題。

1. 以太網

1.1 認識以太網

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

1.2 以太網的幀格式

報頭各部分的功能:

? 源地址和目的地址:指網卡的硬件地址(mac?地址)

? 類型:該字段有三種值,分別對應 IP、ARP、RARP

? CRC:校驗碼

關于mac地址

mac 地址用來識別數據鏈路層中相連的節點,它的長度為 48 位(?6 個字節),一般用 16 進制數字加上冒號的形式來表示(例如: 08:00:27:03:fb:19)。它在網卡出廠時就確定了,不能修改。

mac 地址通常是唯一的(虛擬機中的 mac 地址不是真實的 mac 地址,可能會沖突;也有些網卡支持用戶配置 mac 地址)。

2. MTU

2.1 認識MTU

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

我們可以通過ifconfig 命令查看 ip 地址、mac 地址和 MTU。

2.2 MTU對IP協議的影響

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

2.3 MTU對UDP協議的影響

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

2.4 MTU對TCP協議的影響

TCP 的一個數據報也不能無限大,還是受制于 MTU。TCP 的單個數據報的最大消息長度為 1460(1500 - 20(IP首部) - 20(TCP首部)),稱為 MSS(Max Segment Size)。?TCP 在建立連接的過程中,通信雙方會進行 MSS 協商。最理想的情況下就是MSS 的值正好是在 IP 不會被分片處理的最大長度(這個長度仍然是受制于數據鏈路層的 MTU)。

雙方在發送 SYN 的時候會在 TCP 頭部寫入自己能支持的 MSS 值,然后雙方得知對方的 MSS 值之后,選擇較小的作為最終 MSS。MSS 的值就是在 TCP 首部的 40 字節變長選項中(kind = 2)。

MSS和MTU的關系:

3. 局域網通信原理和交換機

3.1 局域網通信原理示意圖

局域網中,任何時刻都只允許一臺機器向網絡中發送數據,如果有多臺同時發送的話,會發生數據干擾,我們稱之為數據碰撞。所有發送數據的主機要進行碰撞檢測和碰撞避免

如果碰撞了,涉及的主機該怎么辦呢?

兩臺主機都會休眠一下,然后將數據重發(數據鏈路層也有重發機制)。

在沒有交換機的情況下,一個局域網就是一個碰撞域

從系統的角度來看,局域網就是一個臨界資源,碰撞檢測和碰撞避免就是保護臨界資源,使得任何時刻都只有一臺主機發送消息的策略和機制。

所以在一個局域網(碰撞域)中主機自然是越少越好,如果主機過多就要引入交換機了。

3.2 交換機

交換機的核心問題就是通過對局域網中的mac幀進行分析,從而劃分碰撞域。

4. APR協議

曾經在介紹網絡層時說到過,數據轉發的時候用到的是IP地址,但是在局域網通信時我們使用的可是mac地址啊,所以這也就注定需要在局域網中提供一種將IP地址轉化為mac地址的能力——ARP協議。

4.1 基本原理

源主機發出 ARP 請求,詢問 “IP 地址是 192.168.0.1 的主機的硬件地址是多少”,并將這個請求廣播到本地網段(以太網幀首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示廣播)。目的主機接收到廣播的 ARP 請求后若發現其中的 IP 地址與本機相符,則將自己的硬件地址填寫在應答包中,并發送?ARP 應答數據包給源主機。

總結來說就是:先廣播,后單發。

每臺主機都維護一個 ARP 緩存表,可以用 arp -a 命令查看。緩存表中的表項有過期時間(一般為 20 分鐘),如果 20 分鐘內沒有再次使用某個表項則該表項失效,下次還要發 ARP 請求來獲得目的主機的硬件地址。

C:\Users\caryo>arp -a接口: 172.18.154.182 --- 0xeInternet 地址         物理地址              類型169.254.169.254       cc-d8-1f-28-db-2f     動態172.18.145.119        ac-19-8e-6c-c5-8c     動態172.18.148.251        ac-50-de-88-fa-45     動態172.18.150.140        64-d6-9a-9a-37-1f     動態172.18.152.44         c4-d0-e3-64-de-35     動態

4.2 ARP協議報頭

可以看出ARP協議是 mac 幀協議的上層協議,但是也屬于數據鏈路層。

報頭各部分的功能:

??硬件類型:指鏈路層網絡類型,1 為以太網

? 協議類型:指要轉換的地址類型,0x0800 為 IP 地址

? 硬件地址長度:對于以太網地址為 6 字節

? 協議地址長度:對于和 IP 地址為 4 字節

? op 字段:為 1 表示 ARP 請求,為 2 表示 ARP 應答

4.3 ARP的具體過程

如果路由器知道IP對應的MAC地址,那就可以直接發送,如果不知道,就要使用ARP協議獲取目的MAC。

主機會通過廣播發送 ARP 請求,這個包中包含了想要知道的 MAC 地址的主機 IP 地址。目的MAC地址為全F(FF:FF:FF:FF:FF:FF)。局域網內的所有主機都會收到這個ARP請求,網卡識別目的MAC地址為全F,廣播數據,需要向上交付,再根據幀類型識別是ARP請求/響應。所以向上交付給ARP協議。ARP協議 先看op字段,如果為ARP請求,再看目的IP地址,除目的主機外,其他主機發現不是給自己的,就在ARP層丟棄報文。如果 ARP 請求包中的目標 IP 地址與自己的 IP 地址一致,那么這個設備就將自己的 MAC 地址塞入 ARP 響應包返回給主機。

?

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

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

相關文章

多模態思維鏈AI醫療編程:從計算可持續性到開放域推理的系統性解決方案

多模態思維鏈AI醫療編程:從計算可持續性到開放域推理的系統性解決方案 醫療AI領域的多模態思維鏈技術正在重塑臨床決策支持、醫學影像分析和醫療流程優化的范式。本指南從計算可持續性、錯誤傳播控制、倫理安全防護和通用性擴展四大維度,系統解析醫療大模型落地落地的關鍵要…

代理模式深度解析

目錄 一 靜態代理 1.1 優點 1.2 缺點 1.3 適用場景 二 JDK動態代理 1 JDK動態代理的工作原理 1.1 創建代理類 1.2 加載代理類 1.3 實現方法調用 2. Proxy.newProxyInstance() 的核心工作流程 方法簽名 工作步驟 3. 代理類的生成與加載 3.1 代理類生成的關鍵方法 …

Spring Cache與Redis集成原理

一、核心架構圖解 #mermaid-svg-aiWGQLhmWx7kOfLz {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aiWGQLhmWx7kOfLz .error-icon{fill:#552222;}#mermaid-svg-aiWGQLhmWx7kOfLz .error-text{fill:#552222;stroke:#5…

編程技能:調試02,設置斷點與刪除斷點

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 (一)WIn32 專欄導航 上一篇:編程技能:調試01,調試介紹 回到目錄 下…

flink寫doris時的優化

1.概念 doris并不擅長高頻、小量數據的導入; 因為doris每一次數據導入都會在be節點上生成數據文件;如果高頻導入小量數據,就會在存儲層產生大量的小文件(必然會影響到后續的查詢效率,也會對系統產生更多的compaction…

ElementNotInteractableException原因及解決辦法

在自動化測試中,ElementNotInteractableException是一個常見的異常,它通常發生在嘗試與網頁上的某個元素進行交互(例如點擊、輸入等操作)時,但由于該元素當前不可交互。這可能由多種原因引起,以下是一些常見的原因及其解決方法: 元素未完全加載 如果嘗試與頁面上的元素交…

如何從 GitHub 鏡像倉庫到極狐GitLab?

最近 GitHub 封禁中國用戶的事情鬧得沸沸揚揚,雖然官方發布的報道說中國用戶被限制登錄是因為配置錯誤導致,已經撤回了更新,中國用戶已經可以正常使用。但是這就像橫在國內開發者和企業頭上的“達摩克利斯之劍”。為了避免 GitHub 不可用而帶來的影響,國內開發者和企業可以…

服務器安裝nacos

1.下載依賴 docker pull nacos/nacos-server:v2.4.3安裝 docker run -d --name nacos-server -p 8848:8848 -e MODEstandalone nacos/nacos-server:v2.4.3把nacos中的data 文件和conf 文件copy到自己服務的文件夾 docker cp nacos-server:/home/nacos/data /home/admin1/…

Matter協議暗戰:蘋果、谷歌、亞馬遜的智能家居霸權爭奪

原文地址:Matter協議暗戰:蘋果、谷歌、亞馬遜的智能家居霸權爭奪 一、Matter 協議:巨頭聯手打造的 “智能家居聯合國” 1.1 從 CHIP 到 Matter:標準統一的十年長跑 智能家居發展多年,卻始終被 “孤島效應” 困擾。各…

軟件設計師2009-2022歷年真題與答案解析(附pdf下載)

軟考在即,現在給大家分享一下軟件設計師2009-2022真題與答案解析 pdf全套,文末提供大家免費下載,大家都知道在軟考備考過程中,擁有一套全面且實用的考試資料對于考生來說至關重要。目錄如下: 歷年真題及詳解2004-2019 …

基于EasyX庫開發的球球大作戰游戲

目錄 球球大作戰 一、開發環境 二、流程圖預覽 三、代碼邏輯 1、初始化時間 2、設置開始界面大小 3、設置開始界面 4、讓玩家選擇速度 5、設置玩家小球、人機小球、食物的屬性 6、一次性把圖繪制到界面里 7、進入死循環 8、移動玩家小球 9、移動人機 10、食物刷新…

aslist和list的區別

?Arrays.asList和List的主要區別在于它們的固定長度和不可變性、與原始數組的關系、性能以及使用場景。 一、固定長度和不可變性 ?Arrays.asList?:通過Arrays.asList方法創建的List是一個固定長度的List,其長度與原始數組相同。這意味著你不能通過添…

大模型預標注和自動化標注在OCR標注場景的應用

OCR,即光學字符識別,簡單來說就是利用光學設備去捕獲圖像并識別文字,最終將圖片中的文字轉換為可編輯和可搜索的文本。在數字化時代,OCR(光學字符識別)技術作為處理圖像中文字信息的關鍵手段,其…

stm32工程,拷貝到另一臺電腦編譯,錯誤提示頭文件找不到cannot open source input file “core_cm4.h”

提示 cannot open source input file “core_cm4.h” ,找不到 [ core_cm4.h ] 這個頭文件 . 于是我在原電腦工程文件里找也沒有找到這個頭文件 接下來查看原電腦keil的頭文件引入配置,發現只引入了工程文件下的頭文件, 那么core_cm4.h到底哪里來的? (到現在我也不清楚怎…

STM32 模塊化開發指南 · 第 2 篇 如何編寫高復用的外設驅動模塊(以 UART 為例)

本文是《STM32 模塊化開發實戰指南》的第 2 篇,聚焦于“串口驅動模塊的設計與封裝”。我們將從一個最基礎的裸機 UART 初始化開始,逐步實現:中斷支持、環形緩沖收發、模塊接口抽象與測試策略,構建一個可移植、可擴展、可復用的 UART 驅動模塊。 一、模塊化 UART 的設計目標…

【NLP 59、大模型應用 —— 字節對編碼 bpe 算法】

目錄 一、詞表的構造問題 二、bpe(byte pair encoding) 壓縮算法 算法步驟 示例: 步驟 1:初始化符號表和頻率統計 步驟 2:統計相鄰符號對的頻率 步驟 3:合并最高頻的符號對 步驟 4:重復合并直至終止條件 三、bpe在NLP中…

TMS320F28P550SJ9學習筆記15:Lin通信SCI模式結構體寄存器

今日初步認識與配置使用Lin通信SCI模式,用結構體寄存器的方式編程 文章提供完整工程下載、測試效果圖 我的單片機平臺是這個: LIN通信引腳: LIN通信PIE中斷: 這個 PIE Vector Table 表在手冊111頁: 這是提到LINa的PI…

linux-設置每次ssh登錄服務器的時候提醒多久需要修改密碼

在 Linux 系統中,你可以通過設置 motd(Message of the Day)或 sshd 配置來在用戶通過 SSH 登錄時提醒他們密碼即將過期。以下是具體步驟: 方法 1: 使用 motd 文件 motd 文件在用戶登錄時顯示,你可以通過腳本動態生成內容,提醒用戶密碼過期時間。 編輯 /etc/motd 文件:…

matlab求和∑函數方程編程?

matlab求和∑函數方程編程? 一 題目:求下列函數方程式的和 二:代碼如下: >> sum_result 0; % 初始化求和變量 for x 1:10 % 設…

electron桌面端開發-打開指定軟件和文件

electron桌面端開發 現在越來越多的軟件開發已經趨向于簡單化,桌面端開發已經不在依賴之前的java、c等主流技術,目前基于node的開發越來越廣泛。功能點也越來越多元化。 文章目錄 electron桌面端開發前言一、打開文件的方式?二、exec使用步驟…