- 一、以太網
- 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字節,以滿足最小幀長
以太網幀由以太網首部、有效載荷(數據)和以太網尾部構成,那么就有下面兩個問題需要解決:
- 如何解決以太網首部、有效載荷分離和以太網尾部的問題
數據幀中,以太網首部和以太網尾部是固定長度,去掉以后就是有效載荷了 - 如何解決有效載荷向上交付的問題
數據幀中,有一個類型,有以下三種選項- 當類型為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.5 局域網數據碰撞
1.5.1 數據碰撞
- 在局域網中,任何時刻,只允許一臺主機向局域網中發送數據
- 如果同時有多臺主機向局域網發送數據,則會發生局域網數據碰撞問題
- 這里就會涉及到碰撞檢測和碰撞避免的問題
結合上面三條,從系統角度上來看,局域網非常像多臺主機的臨界資源。
1.5.2 劃分碰撞域(交換機)
相信大家都經歷過,當沒多少人使用網絡的時候,網速很快,當有很多人使用網絡的時候,網絡很慢,這就是同一時間有很多主機在局域網中發送數據,導致局域網碰撞導致的。
為了解決這個問題,這里就要引入交換機,用來劃分局域網的碰撞域。
以下是數據傳輸流程:
- 主機發送數據幀:
- 主機A準備發送數據給主機B,封裝數據幀,將數據幀發送出去
- 數據幀到達交換機:
- 交換機在某個端口收到該幀(一個交換機有多個端口),先存儲到緩沖區
- 交換機解析幀頭中的目標MAC地址
- 交換機的轉發決策:
- 查MAC地址表:
- 若目標MAC存在于表中 --> 幀僅轉發到對應端口(單播)
- 若目標MAC為廣播(FF:FF:FF:FF:FF:FF)或未知 --> 轉發到所有端口(除接收端口外,單主機對應單端口的情況)
- 更新MAC地址表:記錄源MAC與接收端口的映射
- 查MAC地址表:
- 幀到達目標設備:
- 交換機將幀從特定端口發出,最終被目標主機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請求報文)向上交付,這里會分為兩種情況
- 發現ARP請求報文中的目的IP地址與該主機的IP地址不匹配,該主機會將ARP請求報文丟棄
- 發現ARP請求報文中的目的IP地址與該主機的IP地址匹配,該主機則會向主機A 發送ARP應答報文,將自己的MAC地址發送給主機A
這里主機B和主機C收到數據幀后,會將ARP請求報文丟棄,而主機D會向主機A發送ARP響應報文。
主機D向主機A發送ARP響應報文,首先需要構建一個ARP響應報文,然后為報文封裝以太網首部和尾部成為數據幀,最后再將數據幀發送到局域網中。
當主機D將數據幀發送到局域網中,在這個局域網中的所有主機都可以收到這個數據幀。
局域網中的其他主機收到數據幀后,主機會通過讀取數據幀中的目的MAC地址,會分為兩種情況
- 發現數據幀不是發生給該主機的,該主機會將數據幀丟棄
- 發現數據幀是發生給該主機的,該主機會將數據幀解包,發現幀類型為0806,將有效載荷向上交付給ARP協議,ARP報文中op為2,則報文為ARP應答報文,該主機會匹配本地ARP請求記錄,匹配成功則更新ARP緩存,匹配失敗,則將ARP應答報文丟棄
這里主機A會更新ARP緩存,主機B和主機C會將數據幀丟棄。
當主機A更新ARP緩存后,主機A就知道了主機D的MAC地址,主機A就可以正常的向主機D發送數據了。
2.4 ARP協議的特性
- ARP緩存中的每個動態條目都有一個關聯的 TTL計時器,用于標記該條目的有效存活時間,在存活時間內,主機再次得到對應主機發送的合法的ARP應答(數據報文不可以),就會刷新該條目的TTL計時器(不同系統,時間不同)
- 主機可以同時處理請求與應答,也就說明主機既可以收到ARP請求,也可以收到ARP應答
- 主機收到最新應答會 覆蓋 ARP緩存中對應條目的歷史記錄,也就是說明,如果主機在收到同一臺主機發送的ARP應答,會將最新ARP應答記錄下來
2.5 如何成為中間人(連接熱點)
成為中間人的方式有很多種,這里我以用戶連接熱點,讓開熱點的主機(攻擊者)成為中間人:
- 用戶連接熱點
- 攻擊者開啟熱點,用戶主動連接
- 用戶發送ARP請求
- 用戶首次訪問網絡時,廣播ARP請求解析網關MAC
- 攻擊者劫持ARP請求
- 無需修改請求:攻擊者直接搶先回復偽造ARP應答
- 結果:用戶ARP緩存中,網關IP映射到攻擊者MAC
- 流量重定向
- 用戶所有流量發往攻擊者MAC --> 攻擊者轉發給真實網關
- 攻擊者可在轉發過程中:
- 竊聽:抓包工具捕獲明文數據
- 篡改:修改HTTP響應
- SSL剝離:將HTTPS降級為HTTP
結尾
如果有什么建議和疑問,或是有什么錯誤,大家可以在評論區中提出。
希望大家以后也能和我一起進步!!🌹🌹
如果這篇文章對你有用的話,希望大家給一個三連支持一下!!🌹🌹