【網絡】數據鏈路層知識梳理

全是通俗易懂的講解,如果你本節之前的知識都掌握清楚,那就速速來看我的筆記吧~?

自己寫自己的八股!讓未來的自己看懂! (全文手敲,受益良多)?

數據鏈路層

我們來重新理解一下這個圖:

把數據從A主機送到B主機,我們要先把數據交到路由器A吧。IP解決的是AB之間跨網絡傳輸的問題,再怎么跨網絡,得先達到下一跳吧,一步一步走。

數據鏈路層解決的是:直接相連的主機(也包括路由器),進行數據交付的問題。

Mac地址

每一個網卡都有自己的mac地址,mac地址的作用:在同一局域網中,區分不同的主機。

我們來看一看mac的報頭:

這個數據部分,大部分情況就是IP交給該層的IP報文。Mac幀就是這個報文,數據部分稱為有效載荷。

問題1:Mac幀如何做到解包和封裝

???? Mac幀解包用到的是定長報文,收到報文的時候就可以把報頭和有效載荷進行分離

問題2:Mac幀如何做到分用(交給上層的誰)

???? 通過類型,如果是0800說明數據是IP數據報…

目的地址: 就是要去的下一跳主機對應的mac地址

源地址:當前主機的mac地址

局域網的通信原理

??

?? 發送方把mac報頭填好目的地址,源地址。然后發到局域網中,局域網中每一臺機器都看到了這個報頭然后進行比較,如果是給自己的才拿上來。

數據碰撞

局域網中有很多數據的時候,就會發生數據碰撞。要進行數據碰撞避免算法,本質就是讓主機停發,避免過多數據碰撞。局域網中,主機數越多,發生數據碰撞的概率越大。

如何看待局域網??

局域網被多臺主機共享,又要避免數據碰撞,所以我們可以將其看作多臺主機的臨界資源。通過網絡層的IP協議,知道要去哪個路由器,然后在Mac幀上填上目標Mac地址(IP地址轉Mac地址ARP協議)。到達這個路由器的時候,再根據Mac幀的類型向上交付給網絡層,網絡層去掉Mac的報頭,然后再找到下一個要去的路由器,再由Mac幀重新填上目標Mac地址。依次類推,直到找到目標主機!

Mac幀只在局域網中有效!Mac幀的源地址和目的地址一直在變化的!

局域網中,主機數越多,發生數據碰撞的概率越大。怎么辦呀?

?? 隨著局域網的主機變多,我們引入新的設備——交換機。交換機可以識別到碰撞發生在哪一側,如果左邊發生碰撞,就不把數據給右邊了,防止右邊也發生碰撞。交換機可以劃分碰撞域,減少局域網碰撞。

反正局域網都會發生碰撞,那我發生長一點的數據幀好呢?還是短一點的好呢?

? 數據越長,時間就越長,發生碰撞概率就變大了。所以要求數據大小有范圍【46,1500】字節。

數據鏈路層最多允許上層傳1500字節(MTU),這會逼著網絡層進行分片,可是分片不太好。我們要在協議里減少分片,我們如何減少分片呢?而IP傳多少由TCP決定。所以減少分片的問題根源在TCP。IP報頭為20字節,所以TCP最多只能傳1480字節,TCP報頭標準大小為20字節,所以真正的數據為1460。因為TCP有自己的發送緩沖區,所以每次最多取1460來發就可以了。這個1460就稱為MSS(最大發送的數據段)。MMS雙方三次握手的時候也會相互交互。

所謂的數據發送到目標網絡,本質是通過無數個連續的子網實現的

ARP協議

? 也是局域網協議,它要做到:在局域網中,將目標主機的IP地址轉化為Mac地址!!!才可以實現路由器的跳轉。

?? 如何讓入口路由器R得到,主機B的Mac地址呢?

1.先談ARP原理:
??

在局域網中廣播一條消息:我是主機A,要找某某IP地址,它的Mac地址是什么?這個消息被主機B收到了,然后告訴其自己的Mac地址。

ARP報文:

ARP協議,屬于MAC幀上層,但是歸屬到數據鏈路層。

硬件類型:表示鏈路層網絡類型,1為以太網(固定寫法)

協議類型:要傳換的地址類型,0x0800為IP地址(固定寫法)

硬件地址長度:對于以太網為6字節(固定寫法)

協議地址長度:對于IP地址為4字節(固定寫法)

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

目的以太網地址不知道,填為全F

2.模擬ARP過程

當主機R要找目的主機B的Mac地址的時候,先填ARP 報頭:

,然后向下交付給數據鏈路層。再添加Mac幀報頭,填寫之后如下:

然后流向局域網,每臺主機都會收到處理這個ARP報文。對于非目的主機,先對Mac幀報頭的分離,發現目的地址為全F(廣播地址),要受理這個報文,根據0806(類型)交付給該機器的ARP軟件層,然后分析報文,發現目的IP地址并不是自己的IP地址,然后就把報文丟棄了。可是任何一臺主機都可以發起ARP請求,所以任何一臺主機都會收到ARP應答,和別人的ARP請求。所以我們要看op字段(1為請求,2為應答)。只有目的主機(B主機)的IP地址才可以對上,然后進行ARP應答~

重新寫APR報文,把請求變為應答

然后再把應答的報文,廣播給局域網,然后被主機R拿到,這樣就可以拿到主機B的Mac地址啦。

結論:先看op,為1,看目的IP地址。為2看,源Mac地址。主機的mac地址和IP地址會被主機臨時緩存起來。

ARP的周邊問題

  1. ARP 工作機制:ARP(地址解析協議)用于將 IP 地址解析為 MAC 地址。主機通常會緩存 IP - MAC 映射關系。只有當緩存中的對應記錄失效(比如緩存超時 、對應網絡設備更改等情況 )時,才會再次發起 ARP 請求來重新獲取 MAC 地址。
  2. 獲取主機 IP 和 MAC 方法(理論設想):通過自身 IP 地址和子網掩碼可確定所在網絡號。理論上可通過拼接該網絡號內的 IP 地址,然后使用 ping 命令探測網絡內主機。在 ping 過程中,主機間交互會觸發 ARP 過程,從而獲取到對應主機的 MAC 地址。但實際中,這種操作可能受網絡權限(如防火墻限制 )、廣播域等因素影響。
  3. ARP 應答處理:當主機收到多次相同 IP 地址的 ARP 應答時,一般會以最新收到的應答為準更新自身的 ARP 緩存。這是因為最新應答可能反映了網絡中設備當前真實的 MAC 地址情況,確保后續通信能正確尋址。

ARP 欺騙是針對 ARP 協議的攻擊技術 。利用 ARP 協議無驗證機制的漏洞,攻擊者發送偽造 ARP 數據包,使目標主機將攻擊者 MAC 地址錯當成網關或目標主機 MAC 地址 。

DNS協議

實際上訪問的網站是IP地址,因為IP地址不方便記憶。所以用域名,進行域名解析成IP地址就可以了。

瀏覽器中輸入url后,發生的事情(就是輸入一個域名后)

?分三個階段:

  1. http過程+域名解析
    先域名解析,拿到目標IP地址,瀏覽器會構建http請求,填充請求行,請求報頭空行,如果需要的話,還可以帶正文。在構建http請求之前要三次握手。進行網絡轉發,到達目的主機,構建http應答,還有響應報文,再通過TCP鏈接,把響應返回,瀏覽器得到之后對報文做解析,提取正文,對正文進行解釋,再由瀏覽器渲染就可以看到結果了。
  2. https提一下
    剛剛的都是最簡單的,現在都是https,雙方在通信之前除了建立鏈接,在正常通信之前進行密鑰協商…
  3. 談論細節
    我們底層http的數據其實就是數據流,最后拷貝到TCP的發送緩沖區,那些策略,流量控制,擁塞控制,超時重傳,三次握手,面向連接,還問就是IP層,子網劃分,查路由表,IP分片,分片和組裝,再往下就是Mac幀…

    ?

ICMP協議
?

?? ICMP是網絡層的協議。可以對網絡當中出現問題時,對IP報文進行應答的。

????????ping 命令基于 ICMP, 是在網絡層. 而端口號, 是傳輸層的內容. 在 ICMP 中根本就不關
注端口號這樣的信息.

NAT技術(重點)

?我們之前講過,源IP地址在經過路由器的時候會被替換成WAN口地址。NAT技術本質還是緩解IP地址不足的問題。

可是怎么把收回來的數據,從路由器到源主機呢??

我們有NAPT,NAT轉化表

內網中源地址一定是唯一的,我們提前建立映射關系。即使將來通過路由器轉換后的地址都相同,但是收回數據的時候,可以根據映射關系來區分是哪個主機的數據。

NAT在替換的時候不僅僅會替換。會加端口號,通過端口號找到源地址~

NAT的缺陷

  1. 無法從NAT外部向內部建立連接
  2. 轉換表的生成和銷毀都需要額外開銷
  3. 如果NAT路由器異常了,所有的TCP連接都會斷開

內網穿透:通過一個公共的服務器,實現2個局域網主機的相互通信

代理服務器

正向代理(Forward Proxy)是一種常見的網絡代理方式,它位于客戶端和目標

服務器之間,代表客戶端向目標服務器發送請求。正向代理服務器接收客戶端的請

求,然后將請求轉發給目標服務器,最后將目標服務器的響應返回給客戶端。通過這

種方式,正向代理可以實現多種功能,如提高訪問速度、隱藏客戶端身份、實施訪問

控制等。

工作原理

? 客戶端將請求發送給正向代理服務器。

? 正向代理服務器接收請求,并根據配置進行處理,如緩存查找、內容過濾等。

? 正向代理服務器將處理后的請求轉發給目標服務器。

? 目標服務器處理請求,并將響應返回給正向代理服務器。

? 正向代理服務器將響應返回給客戶端。

反向代理

概述

? 反向代理服務器是一種網絡架構模式,其作為 Web 服務器的前置服務器,接收

來自客戶端的請求,并將這些請求轉發給后端服務器,然后將后端服務器的響應返回

給客戶端。這種架構模式可以提升網站性能、安全性和可維護性等基本原理

? 反向代理服務器位于客戶端和 Web 服務器之間,當客戶端發起請求時,它首先

會到達反向代理服務器。反向代理服務器會根據配置的規則將請求轉發給后端的 Web

服務器,并將 Web 服務器的響應返回給客戶端。在這個過程中,客戶端并不知道實際

與哪個 Web 服務器進行了交互,它只知道與反向代理服務器進行了通信。


下篇文章我將更新——多路轉接~期待你的關注👉【A charmer】?

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

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

相關文章

機器學習(神經網絡基礎篇)——個人理解篇6(概念+代碼)

1 在聲明一個類中,構建一個屬于類的函數,前面為什要加上“self”? 就像下面這一串代碼: class TwoLayerNet:def __init__(self, input_size, hidden_size, output_size,weight_init_std0.01):# 初始化權重self.params {}self.p…

Cribl 對Windows-xml log 進行 -Removing filed-06

Removing Fields Description? The Eval Function can be used to add or remove fields. In this example we will remove the extracted fields while preserving _raw, _time,index,source, sourcetype. Steps - Adding an Eval Function

chili3d調試6 添加左側面板

注釋前 一個一個注釋看對應哪個窗口 無事發生 子方法不是顯示的窗口 注釋掉看看 沒了 注釋這個看看 零件頁面沒了 這個瀏覽器居然完全不用關的,刷新就重載了 注釋看看 無工具欄版本 sidebar: 往框框里面加入 div({ className: style.input }, user_…

Linux學習——了解和熟悉Linux系統的遠程終端登錄

Linux學習——了解和熟悉Linux系統的遠程終端登錄 一.配置Ubuntu系統的網絡和用戶 1、設置虛擬機網絡為橋接模式 打開VMWare,選擇編輯虛擬機設置,在網絡適配器設置中,選擇“橋接模式”,保存設置并啟動Ubuntu。 2、配置Ubuntu的…

【JAVA EE初階】多線程(1)

這樣的代碼,雖然也能打印hello thread,但是沒有創建新的線程,而是直接在main方法所在的主線程中執行了run的邏輯 start方法,是調用系統api,真正在操作系統內部創建一個線程。這個新的線程會以run作為入口方法&#xff…

javase 學習

一、Java 三大版本 javaSE 標準版 (桌面程序; 控制臺開發) javaME 嵌入式開發(手機、小家電)基本不用,已經淘汰了 javaEE E業級發開(web端、 服務器開發) 二、Jdk ,jre jvm 三…

【Linux】Linux 操作系統 - 05 , 軟件包管理器和 vim 編輯器的使用 !

文章目錄 前言一、軟件包管理器1 . 軟件安裝2 . 包管理器3 . Linux 生態 二、軟件安裝 、卸載三、vim 的使用1 . 什么是 vim ?2 . vim 多模式3 . 命令模式 - 命令4 . 底行模式 - 命令5. 插入模式6 . 替換模式7 . V-BLOCK 模式8 . 技巧補充 總結 前言 本篇筆者將會對軟件包管理…

python基礎知識點(1)

python語句 一行寫一條語句 一行內寫多行語句,使用分號分隔建議每行寫一句,且結束時不寫分號寫在[ ]、{ }內的跨行語句,被視為一行語句\ 是續行符,實現分行書寫功能 反斜杠表示下一行和本行是同一行 代碼塊與縮進 代碼塊復合語句&#xf…

C#/.NET/.NET Core技術前沿周刊 | 第 35 期(2025年4.14-4.20)

前言 C#/.NET/.NET Core技術前沿周刊,你的每周技術指南針!記錄、追蹤C#/.NET/.NET Core領域、生態的每周最新、最實用、最有價值的技術文章、社區動態、優質項目和學習資源等。讓你時刻站在技術前沿,助力技術成長與視野拓寬。 歡迎投稿、推薦…

HTML表單與數據驗證設計

HTML 表單與數據驗證設計:構建可靠的用戶數據采集系統 引言 互聯網的核心是數據交互,而HTML表單是這一交互的主要入口。作為前端工程師,設計高質量的表單不僅關乎用戶體驗,更直接影響數據收集的準確性和系統安全。 在我的學習實…

基于STM32的Keil環境搭建與點燈

本人使用的STM32開發板為正點原子的STM32F103ZE,在此記錄完整的搭建與點燈過程。 一、Keil的安裝與配置 安裝Keil 首先進入Keil下載官網:https://www.keil.com/download/product/ 點擊MDK-ARM,并填寫相關信息,之后開始下載最新版…

React-useRef

如果我們想在hooks里面獲同步取最新的值&#xff0c;那么則可以使用useRef, 關鍵源碼如下&#xff1a; function mountRef<T>(initialValue: T): {|current: T|} {const hook mountWorkInProgressHook();const ref {current: initialValue};hook.memoizedState ref;re…

幽靈依賴與常見依賴管理

文章目錄 前言1. 演示&#xff1a;檢測和修復幽靈依賴步驟1&#xff1a;安裝 depcheck步驟2&#xff1a;在項目根目錄運行 depcheck可能的輸出步驟3&#xff1a;修復幽靈依賴 2. 依賴管理的好習慣 1. 場景設定現在有如下依賴需求&#xff1a; 2. 依賴沖突的表現3. 解決依賴沖突…

如何使用人工智能大模型,免費快速寫工作總結?

如何使用人工智能大模型&#xff0c;免費快速寫工作總結&#xff1f; 詳細學習視頻https://edu.csdn.net/learn/40406/666581

[Java實戰經驗]異常處理最佳實踐

一些好的異常處理實踐。 目錄 異常設計自定義異常為異常設計錯誤代碼&#xff08;狀態碼&#xff09;設計粒度全局異常處理異常日志信息保留 異常處理時機資源管理try-with-resources異常中的事務 異常設計 自定義異常 自定義異常設計&#xff0c;如業務異常定義BusinessExce…

Makefile 入門指南

Makefile 入門指南 最簡單的例子 單文件編譯 假設我們有一個main.cpp文件&#xff0c;最簡單的Makefile如下&#xff1a; # 最簡單的單文件編譯 # 目標:依賴文件 main: main.cpp# 編譯命令g main.cpp -o main使用步驟&#xff1a; 將上述內容保存為名為Makefile的文件&…

PyTorch數據操作基礎教程:從張量創建到高級運算

本文通過示例代碼全面講解PyTorch中張量的基本操作&#xff0c;包含創建、運算、廣播機制、索引切片等核心功能&#xff0c;并提供完整的代碼和輸出結果。 1. 張量創建與基本屬性 import torch# 創建連續數值張量 x torch.arange(12, dtypetorch.float32) print("原始張…

【Redis】Redis中的常見數據類型(一)

文章目錄 前言一、Redis前置知識1. 全局命令2、數據結構和內部編碼3. 單線程架構 二、String 字符串1. 常見命令2. 計數命令3.其他命令4. 內部編碼5. 典型使用場景 三、Hash哈希1. 命令2.內部編碼3. 使用場景4. 緩存方式對比 結語 前言 Redis 提供了 5 種數據結構&#xff0c;…

Windows 中使用 `netstat` 命令查看端口占用

在 Windows 系統中&#xff0c;可以通過 netstat 命令來查看當前系統的網絡連接以及端口的占用情況。以下是關于該命令的具體說明&#xff1a; #### 使用方法 1. **查看所有端口及其狀態** 可以通過以下命令查看系統中的所有活動連接和監聽端口&#xff1a; bash net…

23種設計模式-結構型模式之裝飾器模式(Java版本)

Java 裝飾器模式&#xff08;Decorator Pattern&#xff09;詳解 &#x1f381; 什么是裝飾器模式&#xff1f; 裝飾器模式是一種結構型設計模式&#xff0c;允許向一個對象動態添加新的功能&#xff0c;而不改變其結構。 &#x1f9f1; 你可以想象成在原有功能上“包裹”一…