引言
從前一篇“網(wǎng)絡(luò)底層知識講解”文章中,我們知道計算機中會維護一個ARP緩存表,這個表記錄著IP地址與MAC地址的映射關(guān)系,我們可以通過在電腦的控制臺通過arp -a指令查看一下我們自己計算機的ARP緩存表:
ARP緩存表
那么什么是ARP
協(xié)議呢?
初識ARP
ARP協(xié)議是地址解析協(xié)議(Address Resolution Protocol
)是通過解析IP地址
得到MAC地址
的,是一個在網(wǎng)絡(luò)協(xié)議包中極其重要的網(wǎng)絡(luò)傳輸協(xié)議,它與網(wǎng)卡有著極其密切的關(guān)系,在TCP/IP
分層結(jié)構(gòu)中,把ARP
劃分為網(wǎng)絡(luò)層
,為什么呢,因為在網(wǎng)絡(luò)層
看來,源主機與目標主機是通過IP地址
進行識別的,而所有的數(shù)據(jù)傳輸又依賴網(wǎng)卡底層硬件,即鏈路層
,那么就需要將這些IP地址
轉(zhuǎn)換為鏈路層可以識別的東西,在所有的鏈路中都有著自己的一套尋址機制,如在以太網(wǎng)中使用MAC地址
進行尋址,以標識不同的主機,那么就需要有一個協(xié)議將IP地址轉(zhuǎn)換為MAC地址
,由此就出現(xiàn)了ARP協(xié)議
,所有ARP協(xié)議
在網(wǎng)絡(luò)層被應用,它是網(wǎng)絡(luò)層與鏈路層連接的重要樞紐,每當有一個數(shù)據(jù)要發(fā)送的時候都需要在通過ARP協(xié)議
將IP地址轉(zhuǎn)換成MAC地址
,在IP層及其以上的層次看來,他們只標識IP地址,從不跟硬件打交道,就像我一樣,我做應用層的工作,而不會去寫底層驅(qū)動,得專門有個同事將驅(qū)動寫完給我,我只需要知道他提供的API接口就行了,而我就專心處理我的工作,我相信他能把驅(qū)動寫好,我只需要直接調(diào)用即可。
ARP緩存表
既然已經(jīng)解釋了ARP協(xié)議
的用途及重要性,那么它是如何工作的?為了實現(xiàn)IP地址
與MAC地址
的查詢與轉(zhuǎn)換
,ARP協(xié)議
引入了ARP緩存表
的概念,每臺主機或路由器在維護
著一個ARP緩存表(ARP table)
,這個表包含IP地址到MAC地址的映射關(guān)系
,表中記錄了
對,我稱之為ARP表項
,如我們前面那張圖
所展示的一樣,他們是主機最近
運行時獲得關(guān)于其他主機的IP地址
到MAC地址
的映射,當需要發(fā)送數(shù)據(jù)的時候,主機就會根據(jù)數(shù)據(jù)報中的目標IP地址
信息,然后在ARP緩存表中進行查找對應的MAC地址
,最后通過網(wǎng)卡將數(shù)據(jù)發(fā)送出去。ARP緩存表
包含一個壽命值(TTL,也稱作生存時間)
,它將記錄每個ARP表項
的生存時間,生存時間到了就會從緩存表中刪除。從一個表項放置到ARP緩存表
中開始,一個表項通常的生存時間一般是10
分鐘嗎,當然,這些生存時間是可以任意設(shè)置的,我們一般使用默認即可。
一句話總結(jié)ARP協(xié)議的工作
ARP協(xié)議的主要工作就是建立、查詢、更新、刪除ARP表項。
ARP表項的建立
當主機開機的時候,ARP緩存
表肯定是空的,那么怎么一步步建立 ARP表項
呢?如果此時想發(fā)送數(shù)據(jù)怎么辦呢?因為沒有ARP表項
,說明就找不到IP地址
到MAC地址
的映射關(guān)系
,這樣子也就無法發(fā)送數(shù)據(jù)了。
其實協(xié)議棧的實現(xiàn)還是很強大的,如果沒有ARP表項
,那么主機就會去建立ARP表項
。
以我們的電腦為例,在開機的時候,我們的電腦肯定是沒有ARP表項
的(或者應該說只有路由器的ARP表項
,因為可能是動態(tài)獲取IP地址):
7
對于局域網(wǎng)
如果我想向局域網(wǎng)中的某個電腦發(fā)送一個數(shù)據(jù),那么我的電腦就會從已有的ARP緩存表
中尋找這個IP地址對應的物理地址的ARP表項
,然后直接將數(shù)據(jù)寫入以太網(wǎng)數(shù)據(jù)幀中讓網(wǎng)卡進行發(fā)送即可,而如果沒有找到這個IP地址
,那么這個數(shù)據(jù)就沒法立即發(fā)送,電腦會先在局域網(wǎng)上廣播一個ARP請求
(目標MAC地址為FF-FF-FF-FF-FF-FF
),廣播的ARP請求發(fā)出后,處于同一局域網(wǎng)內(nèi)的所有主機都會接收到這個請求,如果目標IP地址
與接收到ARP請求的主機自身IP地址
吻合就會返回
一個ARP應答
,告訴請求者(即我的電腦)自身的MAC地址
,當我的電腦收到這個ARP應答
后,就去建立一個ARP表項
,并且重新將數(shù)據(jù)發(fā)送出去。
ARP協(xié)議的核心就是對緩存表的操作,發(fā)送數(shù)據(jù)包的時候,查找ARP緩存表
以得到對應的MAC地址
,在ARP緩存表中的TTL
即將過期的時候更新
緩存表以保證ARP表項
有效,此外ARP協(xié)議還需要不斷處理來自局域網(wǎng)中其他主機的ARP請求
。
對于公網(wǎng)
比如我的電腦向訪問我的博客:https://jiejietop.cn
因為我的博客主機是處于外網(wǎng)的,那么我的電腦在訪問的時候,也是找不到緩存表的,那它只能通過網(wǎng)關(guān),讓網(wǎng)關(guān)將數(shù)據(jù)轉(zhuǎn)發(fā)到我的博客主機上,即:
8
因為我的電腦與博客主機不在一個網(wǎng)段,電腦查詢自己的路由表
,知道如果想和博客主機
通信則必須通過網(wǎng)關(guān)(gateway)
來中轉(zhuǎn),所以會在與網(wǎng)關(guān)
直連的網(wǎng)卡上請求網(wǎng)關(guān)的MAC地址
,因為電腦要把發(fā)給博客主機的數(shù)據(jù)先發(fā)給網(wǎng)關(guān),當合法以太幀到達網(wǎng)關(guān)并且順利接收,網(wǎng)關(guān)會將數(shù)據(jù)遞交給IP層
,IP層查詢路由表,找到與博客主機直連的接口(假設(shè)是直連的,實際上肯定不是直連的),網(wǎng)關(guān)會發(fā)一個ARP請求
到博客主機上,請求它的MAC地址
,網(wǎng)關(guān)收到應答后將建立新的ARP表項
并將開始維護ARP緩存表
,然后完成最終的通信。
ARP緩存表的超時處理
ARP是動態(tài)
處理的,現(xiàn)在總結(jié)一下:ARP表項
的生存時間是一般為5-10
分鐘(LwIP
中默認是5
分鐘),而ARP請求
的等待時間是5秒鐘
,當這些時間到達后,就會更新ARP表項
,如果在物理鏈路層無法連通則會刪除表項。
因此每個協(xié)議棧的實現(xiàn)都必須維護著一個定時器(超時機制)
來管理ARP緩存表
,在必要的時候更新及刪除ARP表項
,關(guān)于怎么處理的我們就不多追究,有興趣的可以看LwIP的etharp_tmr()
源碼。
說點題外話:因為
ARP協(xié)議
是一個動態(tài)的協(xié)議,很多網(wǎng)絡(luò)攻擊都是利用ARP協(xié)議
進行的,如ARP欺騙,ARP洪水攻擊
等等,而且這種攻擊是很難防御的,當然也有辦法,直接將動態(tài)的ARP緩存表
設(shè)置為靜態(tài)就行了,但是這就違背了ARP協(xié)議
的動態(tài)地址解析
特性。
ARP報文
ARP的請求與應答都是依賴ARP報文
結(jié)構(gòu)進行的,ARP報文
是放在以太網(wǎng)數(shù)據(jù)幀中進行發(fā)送的,下面是ARP報文
的格式:
9
當它封裝在以太網(wǎng)幀中的格式:
10
在ARP表建立前,主機并不知道目標MAC地址
,所以在一開始的時候只能通過廣播的方式將ARP請求包
發(fā)送出去,處于同一局域網(wǎng)的主機都能接收到廣播的數(shù)據(jù)包。所以一開始目標MAC地址
是FF-FF-FF-FF-FF-FF
,而以太網(wǎng)首部的幀類型是有多種,對于ARP數(shù)據(jù)包
來說,其值為0x0806
,對于IP數(shù)據(jù)報
來說,其值為0x0800
。
在ARP首部一開始的2個字節(jié)存儲的是硬件類型,表示要知道目標網(wǎng)卡的硬件類型,其中,值為1
表示以太網(wǎng)地址;接下來還有2
字節(jié)的協(xié)議類型,其中,0x0800
表示IP協(xié)議
,其他還可能是ICMP/IGMP協(xié)議
等;接下來有1個字節(jié)表示硬件地址長度,指出該報文中硬件地址的長度,對于以太網(wǎng)硬件類型,它的值為6
;還有1字節(jié)的協(xié)議地址長度,如果是ARP協(xié)議、IP協(xié)議
等,該值為4
;ARP首部最后的op
字段用于記錄ARP操作的類型,分別是:
- ARP請求,其值為1。
- ARP應答,其值為2。
- RARP請求,其值為3。
- RARP應答,其值為4。
我們只關(guān)心ARP的請求與應答即可,RARP是逆地址解析協(xié)議,在這里我們就不用去了解,它在網(wǎng)絡(luò)中基本已經(jīng)被淘汰,用于主機在啟動的時候獲得自己的IP地址。
對于ARP首部后面的四個字段分別是源MAC地址、源IP地址、目標MAC地址、目標IP地址,這些就是比較簡單的了。
為了加深理解,我們使用wireshark
網(wǎng)絡(luò)抓包工具形象地講解報文格式與內(nèi)容,關(guān)于wireshark
網(wǎng)絡(luò)抓包工具的使用方式我就不做過多講解,網(wǎng)上教程一大把,打開工具,然后抓取電腦網(wǎng)絡(luò)中的數(shù)據(jù)包。
11
-
ip地址
+關(guān)注
關(guān)注
0文章
305瀏覽量
17473 -
ARP協(xié)議
+關(guān)注
關(guān)注
0文章
10瀏覽量
7015 -
網(wǎng)絡(luò)傳輸協(xié)議
+關(guān)注
關(guān)注
0文章
5瀏覽量
5942
發(fā)布評論請先 登錄
關(guān)于ARP協(xié)議發(fā)送與接收, FPGA板子上面與PC端主機通信,出現(xiàn)以下情況怎么辦?
ARP協(xié)議攻擊及其解決方案
基于ARP協(xié)議的非法入網(wǎng)檢測與阻止技術(shù)研究
基于ARP協(xié)議的攻擊及其防御方法分析
高可用性群集系統(tǒng)ARP協(xié)議問題研究
ARP協(xié)議動態(tài)交互仿真系統(tǒng)的設(shè)計

ARP協(xié)議分析
arp協(xié)議的作用是什么?arp協(xié)議的工作原理介紹

arp協(xié)議的缺點介紹及防范
ARP是什么意思?ARP是什么協(xié)議?ARP協(xié)議用于什么地方
arp協(xié)議屬于哪一層_arp協(xié)議的主要功能
ARP協(xié)議的工作原理_arp攻擊防御措施
FPGA以太網(wǎng)-ARP協(xié)議介紹

評論