開發(fā)以太網(wǎng)的小伙伴,對(duì)ARP(Address Resolution Protocol,地址解析協(xié)議)已經(jīng)見怪不怪。在控制器剛啟動(dòng)階段,總線上會(huì)看到一些ARP報(bào)文。那么,問(wèn)題來(lái)了,為什么在控制器啟動(dòng)階段,會(huì)有ARP報(bào)文呢?ARP報(bào)文到底扮演著什么樣的角色呢?本文,聊一聊ARP。
1、以太網(wǎng)通信基礎(chǔ)
我們知道,以太網(wǎng)是點(diǎn)對(duì)點(diǎn)(Point-to-Point)的通信方式。如果兩個(gè)以太網(wǎng)節(jié)點(diǎn)建立通信,發(fā)送節(jié)點(diǎn)首先需要知道和誰(shuí)通信。發(fā)送節(jié)點(diǎn)如何知道和誰(shuí)通信呢?答:MAC地址(Media Access Control Address)。MAC地址也稱為網(wǎng)卡,每一個(gè)網(wǎng)卡分配唯一MAC地址(長(zhǎng)度為6 Bytes)。所以,知道目標(biāo)節(jié)點(diǎn)MAC地址,才能知道信息要發(fā)給誰(shuí)。而在整車的網(wǎng)絡(luò)拓?fù)渲?,?jié)點(diǎn)之間的數(shù)據(jù)交互由交換機(jī)(Switch)進(jìn)行二層轉(zhuǎn)發(fā),示意如下:
(一)ARP幀格式
不管何種總線,為了確保信息有效交互,會(huì)根據(jù)軟、硬件層級(jí),設(shè)計(jì)不同的通信協(xié)議。本文關(guān)注鏈路層的以太網(wǎng)幀和網(wǎng)絡(luò)層的ARP協(xié)議,ARP報(bào)文封裝在以太網(wǎng)幀的數(shù)據(jù)段傳輸,如下所示:
硬件類型(2 Byte):表示硬件地址類型,eg:以太網(wǎng)為1
協(xié)議類型(2 Byte):表示上層協(xié)議類型,eg:IPv4為0x0800
硬件地址長(zhǎng)度(1Byte):表示硬件地址長(zhǎng)度,eg:以太網(wǎng)為6
協(xié)議地址長(zhǎng)度(1Byte):表示協(xié)議地址長(zhǎng)度,eg:IPv4為4
操作碼(Option,2 Byte):表示ARP請(qǐng)求或響應(yīng)的操作類型,eg:請(qǐng)求(Request)為1,響應(yīng)(Replay)為2
源MAC地址(6 Byte):發(fā)送ARP請(qǐng)求的主機(jī)的MAC地址
源IP地址(4Byte):發(fā)送ARP請(qǐng)求的主機(jī)的IP地址
目標(biāo)MAC地址(6Byte):目標(biāo)主機(jī)的MAC地址(在ARP請(qǐng)求中通常為空,即:全0x00)
目標(biāo)IP地址(4Byte):目標(biāo)主機(jī)的IP地址
通過(guò)ARP報(bào)文格式可以看出,ARP記錄著IP與MAC的對(duì)應(yīng)關(guān)系,即:通過(guò)IP關(guān)聯(lián)的MAC地址,最終找到通信的目標(biāo)節(jié)點(diǎn)。而在TCP/IP的分層結(jié)構(gòu)中,ARP屬于網(wǎng)絡(luò)層,因此,網(wǎng)絡(luò)層的源節(jié)點(diǎn)實(shí)體、目標(biāo)節(jié)點(diǎn)實(shí)體之間通過(guò)IP地址識(shí)別彼此。但是,ARP報(bào)文封裝在以太網(wǎng)幀中,依賴以太網(wǎng)鏈路層傳輸,而以太網(wǎng)鏈路層的尋址方式為MAC地址,因此,需要把IP地址轉(zhuǎn)換成MAC地址才能將上層待發(fā)送的信息發(fā)送給目標(biāo)節(jié)點(diǎn),所以,這就是ARP出現(xiàn)的意義。 首先,同一局域網(wǎng)內(nèi)的每個(gè)以太網(wǎng)節(jié)點(diǎn),網(wǎng)絡(luò)層會(huì)分配一個(gè)或者多個(gè)IP,數(shù)據(jù)鏈路層固化一個(gè)唯一MAC地址,由
其次,通過(guò)ARP報(bào)文獲取目標(biāo)節(jié)點(diǎn)的MAC,形成目標(biāo)節(jié)點(diǎn)的
(二)交換機(jī)如何轉(zhuǎn)發(fā) ARP Table形成以后,解決了發(fā)送節(jié)點(diǎn)知道發(fā)送給誰(shuí)的問(wèn)題,但是,還有一個(gè)問(wèn)題需要解決:交換機(jī)(Switch)如何知道信息轉(zhuǎn)發(fā)給誰(shuí)呢?答:路由表(Route Table),示意如下:
當(dāng)交換機(jī)某個(gè)端口(Port #n)收到以太網(wǎng)幀以后,會(huì)通過(guò)目標(biāo)節(jié)點(diǎn)的MAC地址查找Route Table,如果找到目標(biāo)節(jié)點(diǎn)端口號(hào),則將信息轉(zhuǎn)發(fā)出去,實(shí)現(xiàn)路由的目的。同時(shí),也會(huì)檢查發(fā)送節(jié)點(diǎn)的MAC地址是否已經(jīng)緩存,如果Route Table中沒有緩存發(fā)送節(jié)點(diǎn)的MAC,則將發(fā)送節(jié)點(diǎn)的MAC地址和入口Port緩存到Route Table。
2、ARP通信原理
(一)
控制器初始啟動(dòng)階段,ARP緩存表為空,即:ARP Table沒有目標(biāo)節(jié)點(diǎn)的
發(fā)送節(jié)點(diǎn)(MCU2)發(fā)送的ARP報(bào)文信息如下所示:
解析:
發(fā)送節(jié)點(diǎn)發(fā)送ARP報(bào)文時(shí),會(huì)包含發(fā)送節(jié)點(diǎn)的IP(192.168.0.2)、發(fā)送節(jié)點(diǎn)MAC(020000:02)、目標(biāo)節(jié)點(diǎn)的IP(192.168.0.1);
由于不知道目標(biāo)節(jié)點(diǎn)的MAC,所以,在ARP報(bào)文中,目標(biāo)節(jié)點(diǎn)的MAC地址(上圖中的Target Protocol Address)用全0x00表示;
由于發(fā)送節(jié)點(diǎn)不知道目標(biāo)節(jié)點(diǎn)在哪個(gè)位置,所以,發(fā)送節(jié)點(diǎn)發(fā)送ARP請(qǐng)求時(shí),使用廣播的方式發(fā)送,即:Destination為全0xFF。
(二)
當(dāng)交換機(jī)收到MCU2的ARP請(qǐng)求報(bào)文以后,發(fā)現(xiàn):路由表中找不到目標(biāo)節(jié)點(diǎn)的Port(初始階段為空),于是,交換機(jī)向所有端口廣播ARP報(bào)文(不包含接收端口),同時(shí),緩存MCU2的MAC2和Port2,如下所示:
(三)
當(dāng)目標(biāo)節(jié)點(diǎn)(MCU1)收到ARP請(qǐng)求報(bào)文以后,發(fā)現(xiàn)MAC地址與自身匹配,則接收該ARP報(bào)文,同時(shí)將發(fā)送節(jié)點(diǎn)的MAC2緩存下來(lái)。MCU1之后給出ARP響應(yīng),由于知道了發(fā)送節(jié)點(diǎn)的MAC地址,所以,MCU1響應(yīng)ARP報(bào)文時(shí),單播發(fā)送ARP報(bào)文。當(dāng)交換機(jī)收到MCU1的ARP響應(yīng)以后,發(fā)現(xiàn)目標(biāo)節(jié)點(diǎn)是MCU2,而且MCU2的MAC2已經(jīng)關(guān)聯(lián)Port2,則直接將ARP報(bào)文發(fā)送給MCU2,同時(shí),交換機(jī)緩存
提示:非目標(biāo)節(jié)點(diǎn)收到ARP報(bào)文以后,直接丟棄。
響應(yīng)節(jié)點(diǎn)(MCU1)發(fā)送的ARP報(bào)文信息如下所示:
解析: ARP響應(yīng)報(bào)文屬于單播。
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
112文章
15879瀏覽量
175342 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5287瀏覽量
169637 -
通信
+關(guān)注
關(guān)注
18文章
5878瀏覽量
135308 -
Mac
-
ARP
+關(guān)注
關(guān)注
0文章
50瀏覽量
14705
原文標(biāo)題:以太網(wǎng)基礎(chǔ):為什么需要ARP?
文章出處:【微信號(hào):談思實(shí)驗(yàn)室,微信公眾號(hào):談思實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論