網絡原理(5)—— 數據鏈路層詳解

目錄

一. 以太網

1.1 認識以太網

1.2 網卡與以太網

1.3?以太網幀格式

二. 認識MAC地址

三. MAC地址 與 IP地址 的區別

4.1 定義

4.2 分配方式

4.3 工作層次

4.4 地址格式

4.5?尋址方式

四. ARP協議?

4.1 引入?

4.2 ARP的概念

4.3 ARP工作原理

五. MTU 與 MSS?

?5.1 MTU?

5.2 MSS?

?5.3 TCP分段與IP分片?

5.4 避免分片?


一. 以太網

1.1 認識以太網

? ?以太網(Ethernet)不是一種具體的網絡,而是一種廣泛使用的局域網(LAN)技術,它規定了物理層和數據鏈路層的通信協議。以太網可以使用多種傳輸介質,包括同軸電纜、雙絞線和光纖,就像是家里的電線系統,只不過它是用來連接電腦和其他設備的。

? ?路由器通過以太網線連接到調制解調器(俗稱“貓”,“光貓”-->“光纖調制解調器”),然后通過這個調制解調器連接到互聯網,這樣就能上網了。

舉個例子:

? ?如果你家里有很多電器,比如燈泡、電視和冰箱,它們都需要用電來工作。電線就是連接這些電器和電源的一個通道,讓電能夠從電源傳到每個電器。以太網也是這樣,它是一種通道,讓電腦和其他設備能夠互相“說話”和交換信息。?

1.2 網卡與以太網

? ?網卡(Network Interface Card,簡稱NIC)是一種硬件設備,用于將計算機連接到計算機網絡,使計算機能夠通過該網絡與其他計算機進行通信。網卡通常插在計算機的主板擴展槽中,或者通過USB接口連接,現在很多計算機的網卡都是直接集成在主板上。

? ?網卡與以太網的關系,可以這樣理解:以太網是一種常見的局域網技術,而網卡就是用來實現電腦與以太網連接的“橋梁”。簡單來說,如果你想用電腦上網,就需要通過網卡連接到以太網,這樣才能上網。就好比你想打電話給朋友,需要先拿起電話(網卡),然后通過電話線(以太網)連接到對方。

? ?網卡是實現以太網通信的關鍵組件之一,提供了計算機與以太網傳輸介質(如雙絞線、光纖等)之間的物理接口使得計算機能夠按照以太網的標準進行網絡通信。沒有網卡,計算機就無法直接連接到以太網網絡。

1.3?以太網幀格式

二. 認識MAC地址

? ?MAC地址,全稱媒體訪問控制地址(Media Access Control Address),是一個唯一的標識符,用來定義網絡設備的位置。每個網絡設備(比如網卡、路由器、交換機等)在出廠時都會被分配一個唯一的MAC地址。?在局域網(比如家里的網絡)中,設備之間通過MAC地址來直接通信。

? ?MAC地址通常由六組兩位的十六進制數字組成,這些數字通過冒號或者短橫線分隔。例如:00:1A:2B:3C:4D:5E 或者 00-1A-2B-3C-4D-5E。

? ?MAC地址在網卡出廠時就確定了,不能修改,是唯一的(虛擬機中的MAC地址不是真實的MAC地址,可能會沖突;也有些網卡支持用戶配置MAC地址)?

三. MAC地址 與 IP地址 的區別

4.1 定義
  • MAC地址:是一個唯一的硬件地址,它被燒錄在網絡接口卡(NIC)上,用于在局域網(LAN)中標識硬件設備
  • IP地址:是一個邏輯地址,用于在網絡中標識設備的網絡位置,可以是局域網、廣域網或互聯網。
4.2 分配方式
  • MAC地址:通常是固定的,由網絡接口卡的制造商分配,并在生產過程中燒錄到硬件中。
  • IP地址:可以是靜態分配的,也可以是動態分配的(通過DHCP服務器)。IP地址可以根據網絡配置的變化而改變。
4.3 工作層次
  • MAC地址:工作在數據鏈路層(OSI模型的第二層),負責同一網絡段內,相鄰設備之間傳輸數據幀。(微觀)
  • IP地址:工作在網絡層(OSI模型的第三層),負責不同的網絡之間路由數據包,進行路由規劃(宏觀)
4.4 地址格式
  • MAC地址:通常6個字節表示,MAC地址當前仍然可以給每個設備,都分配一個唯一的地址值。
  • IP地址:對于IPv4,使用4個字節表示;對于IPv6,使用16個字節表示
4.5?尋址方式
  • MAC地址:用于直接在局域網內尋找設備,通常是通過ARP將IP地址解析為MAC地址。以太網數據幀里面的MAC地址隨著轉發的過程,源MAC和目標MAC都會時刻發生改變(每經過一個交換機/路由器都會發生變化)MAC地址描述的是路途上的每一個區間的起點和終點
  • IP地址:用于在網絡層尋址和路由數據包,進行路由規劃,確保數據能夠從源地址傳輸到目的地址。?IP地址描述的是路途總體的起點和終點

四. ARP協議?

4.1 引入?

? ?ARP協議就像是一個電話簿,幫助電腦在網絡中找到其他電腦的"家門號碼"。想象一下,你在一家大公司里,想要找到同事張三的家,但是你只知道他的名字(IP地址),不知道他家的具體地址(MAC地址)。這時候,你會在公司的大廳(局域網)里大聲喊:“張三,你在哪?告訴我你家地址!”(發送ARP請求)。張三聽到后,會告訴你他家的地址(發送ARP回復)。這樣,下次你想找張三的時候,就可以直接按地址去找他了,而不需要再大聲喊叫。
? ?簡單來說,ARP協議就是電腦之間相互詢問和告知彼此物理地址(MAC地址)的一種方式,這樣它們就能在網絡中正確地發送信息了。

4.2 ARP的概念

? ?ARP(Address Resolution Protocol)協議工作在OSl模型的第二層,即數據鏈路層。它的主要功能是將網絡層(第三層)使用的IP地址解析為數據鏈路層(第二層)使用的MAC地址。

? ?在發送數據包時,網絡層的IP協議負責確定數據包的目標IP地址,但是數據鏈路層的以太網協議需要知道目標的MAC地址才能在局域網內傳輸數據包。ARP協議就在這個轉換過程中起到橋梁作用,它通過查詢局域網內的設備來獲取目標IP地址對應的MAC地址,從而確保數據包能夠被正確地發送到目的地。?

4.3 ARP工作原理

1. 解析請求:當一個設備需要向局域網內的另一個設備發送數據時,它會首先檢查自己的ARP緩存(一個內存表,用于存儲IP地址與MAC地址的映射關系)
? ?如果目標IP地址的MAC地址不在緩存中,源設備將發送一個ARP請求,廣播到局域網上的所有設備。

(ARP請求包含以下信息:a. 發送設備的IP地址和MAC地址? ? b. 目標設備的IP地址? ? c. 一個標志字段,表示這是一個ARP請求)

2. 解析響應:局域網上的所有設備都會收到這個ARP請求,但只有目標IP地址對應的設備會響應,響應設備會發送一個ARP回復,其中包含其MAC地址

3. 更新ARP緩存:源設備收到ARP回復后,會將目標IP地址和對應的MAC地址存儲在自己的ARP緩存中,以便將來使用。

4. 數據傳輸:現在源設備知道了目標設備的MAC地址,它就可以將數據幀發送到局域網上的正確設備。

ARP的正常工作流程

  1. 設備A想要與設備B通信,但只知道設備B的IP地址,不知道MAC地址。
  2. 設備A會在局域網內廣播一個ARP請求:“誰是IP地址X的擁有者,請告訴我你的MAC地址。”
  3. 設備B收到這個請求后,會回復一個ARP響應,告訴設備A自己的MAC地址。
  4. 設備A收到設備B的MAC地址后,就可以開始通信了。?

ARP欺騙(攻擊行為)

? ?攻擊者發送偽造的ARP響應給局域網中的設備,告訴它們:“我是IP地址Y的擁有者,我的MAC地址是Z。”? 這樣其他設備就會錯誤地將原本發送給IP地址Y的數據發送給攻擊者的MAC地址。攻擊者可以攔截、修改或丟棄這些數據。


ARP協議可以讓當前設備獲取到周圍設備上的IP地址和MAC地址之間的映射關系。

  • IP協議路由轉發的過程是拿著 “IP地址” 進行路由查表,得到的是 “網絡接口”(抽象的概念);
  • ARP協議就是將“網絡接口”轉換成更具體的MAC地址,知道是具體的某個設備(IP地址 --> MAC地址)

網絡接口

1. 定義

  • 網絡接口指的是網絡設備的物理或邏輯端口,用于設備與網絡之間的連接。例如,計算機上的以太網端口、無線網卡或者虛擬網絡接口。

2. 與IP地址的關系

  • 網絡接口使用IP地址來發送和接收數據包。當一個設備想要與另一個設備通信時,它會將數據包發送到目標設備的IP地址。
  • 每個網絡接口都需要至少一個IP地址來在網絡上進行通信。一個網絡接口可以配置一個或多個IP地址,這取決于網絡配置和需求。
  • 在配置網絡接口時,IP地址會被綁定到該接口上,這樣當數據包發送到該IP地址時,網絡設備就知道應該通過哪個接口來處理這些數據。
  • 網絡接口負責將IP地址轉換為MAC地址(通過ARP協議),以便在數據鏈路層上進行實際的幀傳輸。?

通過ARP協議,就可以得到網絡接口與MAC地址的映射關系表:?

五. MTU 與 MSS?

?5.1 MTU?

? ? MTU(Maximum Transmission Unit),是指網絡中一個數據包的最大傳輸單元,也就是一個數據包能夠攜帶的最大數據量。

MTU的作用:

? ?MTU的大小決定了網絡設備在發送數據時是否需要將數據分割成多個較小的數據包。如果數據包超過了MTU的大小,它就需要被分割,這個過程稱為分片(fragmentation)分片會增加網絡的開銷,降低傳輸效率,還可能因為分片導致數據包丟失。

以太網 MTU:以太網MTU通常指的是在以太網(局域網技術)中,一個網絡幀可以攜帶的最大數據量,以太網幀的負載就是以太網MTU。對于標準的以太網,這個值通常是1500字節。

IP MTU:IP MTU指的是在IP層,IP數據包的大小就是 IP MTU。這通常比以太網MTU要小,因為它需要為IP頭部預留空間,可以說以太網MTU相當于IPMTU的一個容器,但IP MTU和以太網MTU通常會是一樣的大小。

5.2 MSS?

? ?MSS(Maximum Segment Size)是指在一個TCP分段(segment)中,除去TCP頭部的數據部分的最大大小。?MSS是在TCP連接建立時,兩端協商的一個值,它決定了在TCP層每個數據包可以攜帶的有效數據量。

MSS的作用:

? ?MSS是為了確保TCP數據包在加上TCP頭部后,整體大小不會超過網絡的MTU,從而避免IP層對數據包進行分片通常,MSS的值會設置為MTU - IP頭部 - TCP頭部。通過適當設置MSS,可以優化網絡性能,減少數據包分片的幾率,提高網絡的傳輸效率。

舉個例子:

  • 假設以太網的MTU是1500字節。
  • IP頭部通常是20字節,TCP頭部通常是20字節。
  • 那么MSS可以是1500-20(IP頭部)-20(TCP頭部)=1460字節。?

?5.3 TCP分段與IP分片?

? ?如果發送了應用層發送了一個超大的數據,TCP就會進行分段(TCP Segmentation),分成多個TCP段發送,在分段的時候會考慮到網絡層和數據鏈路層各自的職責。換句話說,TCP分段就是為了后面的IP不用再分片,因此TCP需要確保MSS的值不會過大。

?? ?所以,在TCP三次握手階段,客戶端會和服務器進行協商,在協商MSS之前,兩邊都會比較自己的MSS緩沖區大小,以及MTU大小。如果客戶端通知的MSS是1460,服務端通知的是1440,則會選擇較小值1440,這樣可以最大程度地避免數據包在中途被分片。?

? ?但是,數據包依舊可能會遇到鏈路上的設備接口低于MTU低于1500的路由,此時可能會進行IP分片(IP?Segmentation)

? ?假如,你在上網的時候,數據包經過了一個只支持MTU為576字節的接口,這個時候數據包會被迫分為三份(具體分數看數據包大小),并且在每個數據包加上IP首部。如果原本只有20字節的IPv4首部,那么對于三層來說就額外多了40字節(20+20)。

? 也許你會覺得40字節也不會擠壓多少帶寬,但如果這三個數據包丟了其中一個呢?此時會進行“重傳”,但負責重傳的是TCP或者4層以上進行,而不是網絡層的IP進行重傳。IP協議本來就是不可靠傳輸,因此其中一個IP分片丟失了,需要重傳所有分片,也就是重傳那一段TCP數據,傳輸的效率大幅度降低,而且有時候分片更容易導致丟包

? ?在IPv4協議的首部,有三個區域在分片時候起到重要作用。

  • 標識:標記分片,方便重組這些分片。
  • 片偏移:在重組時需要根據片偏移進行排序。
  • 標志:在分片的時候,其中的MF標志位會用到,MF是more fragment的縮寫。當MF標志位為1時,表示后面還有分片。

? ?這里的問題是,如果路由設備收到中間的一個分片,可以用MF標志位判斷出后面是否還有分片,但不知道后面還有多少分片而路由設備的緩沖區是有限的,分片太多,很可能會因為緩沖區的限制,導致部分分片被丟棄。

5.4 避免分片?

? ?處于三層的路由設備,職責就是更快更高效的傳輸數據包,分片會增加路由設備的算力和內存的負擔。為了避免分片,很多路由設備會有一種叫MSS?Climbing的功能。路由設備在看到TCP的SYN或者SYN/ACK包的時候,會把里面MSS的值和鏈路MTU進行對比。如果MSS值大于MTU值,很明顯就會導致分片。因此,就會降低MSS的值以適應鏈路MTU。


? ?但是鏈路上的MTU如何被確定呢?就可以用到?PMTUD(Path MTU?Discovery,路徑最大傳輸單元發現)這項技術了。

? ?IPv4首部標志位里有個DF標志位,DF就是Don't Fragment的意思。

? ?如果設置了DF標志位,鏈路上的設備碰到超過MTU的數據包,不會進行分片處理,而是直接丟掉這個包,并且返回消息,告訴發送方需要進行分片,這樣發送方就需要降低MTU,然后再次發送,直到發現MTU的最小值。

? ?但是,在IPv6就不一樣了,IPv6只允許發送源對數據包進行切分,不允許鏈路上的設備進行分片。

? ?因此,IPv6不需要另外設置。如果數據包太大,鏈路上的設備直接丟包,并且返回消息告訴對方太大,這樣也是可以發現MTU最小值的。

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

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

相關文章

【從零開始的LeetCode-算法】922. 按奇偶排序數組 II

給定一個非負整數數組 nums, nums 中一半整數是 奇數 ,一半整數是 偶數 。 對數組進行排序,以便當 nums[i] 為奇數時,i 也是 奇數 ;當 nums[i] 為偶數時, i 也是 偶數 。 你可以返回 任何滿足上述條件的…

設計一個特殊token以從1億詞表中動態采樣8192個詞來表達當前序列

為了設計一個特殊token以從1億詞表中動態采樣8192個詞來表達當前序列,可以采用以下分步方案: 1. 特殊token的設計與作用 定義特殊token:在輸入序列前添加一個特殊標記,如[SUBVOCAB]。該token的嵌入包含觸發子詞表采樣的元信息。…

兩晉南北朝 僑置州郡由來

僑置的核心思想是面向人管理 而不是面向土地 1. 北雍州 西晉于長安置雍州,永嘉之亂,沒于劉、石。苻秦之亂,雍州流民南出樊沔,孝武于襄陽僑立雍州。此時稱長安為北雍州。

H264原始碼流格式分析

1.H264碼流結構組成 H.264裸碼流(Raw Bitstream)數據主要由一系列的NALU(網絡抽象層單元)組成。每個NALU包含一個NAL頭和一個RBSP(原始字節序列載荷)。 1.1 H.264碼流層次 H.264碼流的結構可以分為兩個層…

【C語言設計模式學習筆記1】面向接口編程/簡單工廠模式/多態

面向接口編程可以提供更高級的抽象,實現的時候,外部不需要知道內部的具體實現,最簡單的是使用簡單工廠模式來進行實現,比如一個Sensor具有多種表示形式,這時候可以在給Sensor結構體添加一個enum類型的type,…

AI大模型(二)基于Deepseek搭建本地可視化交互UI

AI大模型(二)基于Deepseek搭建本地可視化交互UI DeepSeek開源大模型在榜單上以黑馬之姿橫掃多項評測,其社區熱度指數暴漲、一躍成為近期內影響力最高的話題,這個來自中國團隊的模型向世界證明:讓每個普通人都能擁有媲…

C++基礎系列【2】C++基本語法

本文作為入門文檔&#xff0c;簡要介紹C的非常基本的語法&#xff0c;后面章節會詳細介紹C的各個語法。 C 程序結構 C程序的基本結構包括頭文件、命名空間、類和函數等。 下面我們通過Hello&#xff0c;World來展示這些元素。 #include <iostream> // 包含標準輸入輸…

【C語言】球球大作戰游戲

目錄 1. 前期準備 2. 玩家操作 3. 生成地圖 4. 敵人移動 5. 吃掉小球 6. 完整代碼 1. 前期準備 游戲設定:小球的位置、小球的半徑、以及小球的顏色 這里我們可以用一個結構體數組來存放這些要素,以方便初始化小球的信息。 struct Ball {int x;int y;float r;DWORD c…

圖的基本術語——非八股文

我之前只看到了數據結構與算法的冰山一角&#xff0c;感覺這些術語只會讓知識越來越難理解&#xff0c;現在來看&#xff0c;他們完美抽象一些概念和知識&#xff0c;非常重要。 本篇概念肯定總結不全&#xff0c;只有遇到的會寫上&#xff0c;持續更新&#xff0c;之前文章已經…

oracle: 表分區>>范圍分區,列表分區,散列分區/哈希分區,間隔分區,參考分區,組合分區,子分區/復合分區/組合分區

分區表 是將一個邏輯上的大表按照特定的規則劃分為多個物理上的子表&#xff0c;這些子表稱為分區。 分區可以基于不同的維度&#xff0c;如時間、數值范圍、字符串值等&#xff0c;將數據分散存儲在不同的分區 中&#xff0c;以提高數據管理的效率和查詢性能&#xff0c;同時…

【單層神經網絡】基于MXNet的線性回歸實現(底層實現)

寫在前面 剛開始先從普通的尋優算法開始&#xff0c;熟悉一下學習訓練過程下面將使用梯度下降法尋優&#xff0c;但這大概只能是局部最優&#xff0c;它并不是一個十分優秀的尋優算法 整體流程 生成訓練數據集&#xff08;實際工程中&#xff0c;需要從實際對象身上采集數據…

本地快速部署DeepSeek-R1模型——2025新年賀歲

一晃年初六了&#xff0c;春節長假余額馬上歸零了。今天下午在我的電腦上成功部署了DeepSeek-R1模型&#xff0c;抽個時間和大家簡單分享一下過程&#xff1a; 概述 DeepSeek模型 是一家由中國知名量化私募巨頭幻方量化創立的人工智能公司&#xff0c;致力于開發高效、高性能…

C++11詳解(一) -- 列表初始化,右值引用和移動語義

文章目錄 1.列表初始化1.1 C98傳統的{}1.2 C11中的{}1.3 C11中的std::initializer_list 2.右值引用和移動語義2.1左值和右值2.2左值引用和右值引用2.3 引用延長生命周期2.4左值和右值的參數匹配問題2.5右值引用和移動語義的使用場景2.5.1左值引用主要使用場景2.5.2移動構造和移…

在K8S中,pending狀態一般由什么原因導致的?

在Kubernetes中&#xff0c;資源或Pod處于Pending狀態可能有多種原因引起。以下是一些常見的原因和詳細解釋&#xff1a; 資源不足 概述&#xff1a;當集群中的資源不足以滿足Pod或服務的需求時&#xff0c;它們可能會被至于Pending狀態。這通常涉及到CPU、內存、存儲或其他資…

手寫MVVM框架-構建虛擬dom樹

MVVM的核心之一就是虛擬dom樹&#xff0c;我們這一章節就先構建一個虛擬dom樹 首先我們需要創建一個VNode的類 // 當前類的位置是src/vnode/index.js export default class VNode{constructor(tag, // 標簽名稱&#xff08;英文大寫&#xff09;ele, // 對應真實節點children,…

linux內核源代碼中__init的作用?

在 Linux 內核源代碼中&#xff0c;__init是一個特殊的宏&#xff0c;用于標記在內核初始化階段使用的變量或函數。這個宏的作用是告訴內核編譯器和鏈接器&#xff0c;被標記的變量或函數只在內核的初始化階段使用&#xff0c;在系統啟動完成后就不再需要了。因此&#xff0c;這…

【大數據技術】教程03:本機PyCharm遠程連接虛擬機Python

本機PyCharm遠程連接虛擬機Python 注意:本文需要使用PyCharm專業版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso寫在前面 本文主要介紹如何使用本地PyCharm遠程連接虛擬機,運行Python腳本,提高編程效率。 注意: …

pytorch實現門控循環單元 (GRU)

人工智能例子匯總&#xff1a;AI常見的算法和例子-CSDN博客 特性GRULSTM計算效率更快&#xff0c;參數更少相對較慢&#xff0c;參數更多結構復雜度只有兩個門&#xff08;更新門和重置門&#xff09;三個門&#xff08;輸入門、遺忘門、輸出門&#xff09;處理長時依賴一般適…

PAT甲級1032、sharing

題目 To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, loading and being are stored as showed in Figure …

最小生成樹kruskal算法

文章目錄 kruskal算法的思想模板 kruskal算法的思想 模板 #include <bits/stdc.h> #define lowbit(x) ((x)&(-x)) #define int long long #define endl \n #define PII pair<int,int> #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); using na…