當前位置:首頁 > 單片機 > 單片機
[導讀] 1. ARP的簡介Address Resolution Protocol-地址解析協(xié)議ARP為IP地址到對應的硬件地址之間提供動態(tài)映射。從邏輯Internet地址到對應的物理硬件地址需要進行翻譯。這就是ARP的功能。ARP的功能是在32 bit的

1. ARP的簡介

Address Resolution Protocol-地址解析協(xié)議

ARP為IP地址到對應的硬件地址之間提供動態(tài)映射。從邏輯Internet地址到對應的物理硬件地址需要進行翻譯。這就是ARP的功能。ARP的功能是在32 bit的IP地址和采用不同網(wǎng)絡技術(shù)的硬件地址之間提供動態(tài)映射。


2. ARP的應答流程


任何時候我們敲入下面這個形式的命令:

[html]view plaincopy

  1. %ftpbsdi//示例而已

都會進行以下這些步驟。這些步驟的序號如圖 4 - 2所示。

1) 應用程序FTP客戶端調(diào)用函數(shù)gethostbyname(3)把主機名(bsdi)轉(zhuǎn)換成32 bit的IP地址。這個函數(shù)在DNS(域名系統(tǒng))中稱作解析器,我們將在第1 4章對它進行介紹。這個轉(zhuǎn)換過程或者使用DNS,或者在較小網(wǎng)絡中使用一個靜態(tài)的主機文件(/etc/hosts) 。

2) FTP客戶端請求TCP用得到的IP地址建立連接。

3) TCP發(fā)送一個連接請求分段到遠端的主機,即用上述 IP地址發(fā)送一份IP數(shù)據(jù)報(在第1 8章我們將討論完成這個過程的細節(jié)) 。

4) 如果目的主機在本地網(wǎng)絡上(如以太網(wǎng)、令牌環(huán)網(wǎng)或點對點鏈接的另一端) ,那么IP數(shù)據(jù)報可以直接送到目的主機上。如果目的主機在一個遠程網(wǎng)絡上,那么就通過 IP選路函數(shù)來確定位于本地網(wǎng)絡上的下一站路由器地址,并讓它轉(zhuǎn)發(fā) IP數(shù)據(jù)報。在這兩種情況下,IP數(shù)據(jù)報都是被送到位于本地網(wǎng)絡上的一臺主機或路由器。

5) 假定是一個以太網(wǎng),那么發(fā)送端主機必須把 32 bit的IP地址變換成48 bit的以太網(wǎng)地址。從邏輯Internet地址到對應的物理硬件地址需要進行翻譯。這就是 ARP的功能。ARP本來是用于廣播網(wǎng)絡的,有許多主機或路由器連在同一個網(wǎng)絡上。

6) ARP發(fā)送一份稱作ARP請求的以太網(wǎng)數(shù)據(jù)幀給以太網(wǎng)上的每個主機。這個過程稱作廣播,如圖 4 - 2中的虛線所示。 ARP請求數(shù)據(jù)幀中包含目的主機的IP地址(主機名為bsdi) ,其意思是“如果你是這個IP地址的擁有者,請回答你的硬件地址。 ”

7) 目的主機的ARP層收到這份廣播報文后,識別出這是發(fā)送端在尋問它的 IP地址,于是發(fā)送一個ARP應答。這個ARP應答包含IP地址及對應的硬件地址。

8) 收到ARP應答后,使ARP進行請求—應答交換的IP數(shù)據(jù)報現(xiàn)在就可以傳送了。

9) 發(fā)送IP數(shù)據(jù)報到目的主機。

3. ARP的分組格式


?以太網(wǎng)報頭中的前兩個字段是以太網(wǎng)的源地址和目的地址。目的地址為全 1的特殊地址是廣播地址。電纜上的所有以太網(wǎng)接口都要接收廣播的數(shù)據(jù)幀。

?兩個字節(jié)長的以太網(wǎng)幀類型表示后面數(shù)據(jù)的類型。對于 A R P請求或應答來說,該字段的值為0 x 0 8 0 6。

?硬件類型字段表示硬件地址的類型。它的值為 1即表示以太網(wǎng)地址。

?協(xié)議類型字段表示要映射的協(xié)議地址類型。它的值為 0 x 0 8 0 0即表示I P地址。它的值與包含I P數(shù)據(jù)報的以太網(wǎng)數(shù)據(jù)幀中的類型字段的值相同,這是有意設計的(參見圖 2 - 1) -忘了截過來了。

?接下來的兩個1字節(jié)的字段,硬件地址長度和協(xié)議地址長度分別指出硬件地址和協(xié)議地址的長度,以字節(jié)為單位。對于以太網(wǎng)上I P地址的ARP請求或應答來說,它們的值分別為6和4。

?操作字段(op)指出四種操作類型,它們是 ARP請求(值為1) 、ARP應答(值為2) 、RARP請求(值為3)和R ARP應答(值為4) (我們在第5章討論RARP) 。這個字段必需的,因為ARP請求和ARP應答的幀類型字段值是相同的。

?接下來的四個字段是發(fā)送端的硬件地址(在本例中是以太網(wǎng)地址) 、發(fā)送端的協(xié)議地址(IP地址) 、目的端的硬件地址和目的端的協(xié)議地址。注意,這里有一些重復信息:在以太網(wǎng)的數(shù)據(jù)幀報頭中和ARP請求數(shù)據(jù)幀中都有發(fā)送端的硬件地址。

對于一個ARP請求來說,除目的端硬件地址外的所有其他的字段都有填充值。當系統(tǒng)收到一份目的端為本機的 ARP請求報文后,它就把硬件地址填進去,然后用兩個目的端地址分別替換兩個發(fā)送端地址,并把操作字段置為 2,最后把它發(fā)送回去。

--------------------------------以上內(nèi)容整理于《TCP/IP協(xié)議詳解:卷1》----------------------------

理是那個那個理,但是過于抽象了,不過是基礎,看完上面再看實現(xiàn),那感覺很爽的~~~

------------------------------------------以下內(nèi)容產(chǎn)生于代碼及分析--------------------------------------

4. ARP的宏定義實現(xiàn)

以太網(wǎng)協(xié)議而非802.3協(xié)議,看ETH命名的頭名字就曉得了,地址位置可以結(jié)合兩個header算算就出來了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27


//*******ARP*******
//ARP包長度
#defineETH_ARP_PACKET_LEN28

//硬件地址長度值
#defineETHTYPE_ARP_L_V0x06
//協(xié)議地址長度值
#defineETHTYPE_ARP_PROTOCOL_SIZE_V0x04
//操作碼位置2字節(jié)
#defineETH_ARP_OPCODE_H_P0x14
#defineETH_ARP_OPCODE_L_P0x15
//ARP請求操作碼值
#defineETH_ARP_OPCODE_REQUEST_V0x0001
#defineETH_ARP_OPCODE_REQUEST_H_V0x00
#defineETH_ARP_OPCODE_REQUEST_L_V0x01
//ARP響應操作碼值
#defineETH_ARP_OPCODE_REPLY_V0x0002
#defineETH_ARP_OPCODE_REPLY_H_V0x00
#defineETH_ARP_OPCODE_REPLY_L_V0x02
//發(fā)送者源硬件地址位置6字節(jié)
#defineETH_ARP_SRC_MAC_P0x16
//發(fā)送者源IP地址位置4字節(jié)
#defineETH_ARP_SRC_IP_P0x1c
//目標硬件地址位置6字節(jié)
#defineETH_ARP_DST_MAC_P0x20
//目標IP地址位置4字節(jié)
#defineETH_ARP_DST_IP_P0x26

5. ARP的實現(xiàn)函數(shù)

以太網(wǎng)的header在ARP的header之前,很簡單的,介紹先。

配置以太網(wǎng)的頭,為14字節(jié):6字節(jié)目的mac地址+6字節(jié)源mac地址+2字節(jié)協(xié)議類型,如圖4-3

1
2
3
4
5
6
7
8
9
10
11
12
13


//makeareturnethheaderfromareceivedethpacket
voidmake_eth(unsignedchar*buf)
{
unsignedchari=0;

//copythedestinationmacfromthesourceandfillmymacintosrc
while(i{
buf[ETH_DST_MAC+i]=buf[ETH_SRC_MAC+i];
buf[ETH_SRC_MAC+i]=macaddr[i];
i++;
}
}


展開就是這樣的,看看宏定義是否與此一一對應呢。


在判斷為arp請求之后,填充以太網(wǎng)的頭之后響應arp請求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31


voidmake_arp_answer_from_request(unsignedchar*buf)
{
unsignedchari=0;
//配置以太網(wǎng)的頭,為14字節(jié):6字節(jié)目的mac地址+6字節(jié)源mac地址+2字節(jié)協(xié)議類型
make_eth(buf);
buf[ETH_ARP_OPCODE_H_P]=ETH_ARP_OPCODE_REPLY_H_V;//arp響應
buf[ETH_ARP_OPCODE_L_P]=ETH_ARP_OPCODE_REPLY_L_V;

//后面的ARP_DEBUG插入此處即可。

//fillthemacaddresses:
while(i{
buf[ETH_ARP_DST_MAC_P+i]=buf[ETH_ARP_SRC_MAC_P+i];
buf[ETH_ARP_SRC_MAC_P+i]=macaddr[i];
i++;
}

i=0;
//filltheipv4addresses
while(i{
buf[ETH_ARP_DST_IP_P+i]=buf[ETH_ARP_SRC_IP_P+i];
buf[ETH_ARP_SRC_IP_P+i]=ipaddr[i];
i++;
}

//eth+arpis42bytes:
enc28j60PacketSend(ETH_HEADER_LEN+ETH_ARP_PACKET_LEN,buf);
}

當然,響應ARP請求的前提是你得確定有人向你發(fā)出ARP請求(下面那個函數(shù)就是了),并且這個人是誰,你是要知道的(通過發(fā)送者的IP和MAC地址),這個很容易,本協(xié)議是將地址放在幾個全局變量里面的,大家就都知道了,雖然全局變量用起來很爽,但是對模塊化以及后期維護帶來的不便也是很大的。

檢查是否為合法的eth,并且只接受發(fā)給本機的arp數(shù)據(jù),此函數(shù)在上面那個函數(shù)之前被調(diào)用,再下面的代碼就是演示的例程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


//檢查是否為合法的eth,并且只接受發(fā)給本機的arp數(shù)據(jù)
unsignedchareth_type_is_arp_and_my_ip(unsignedchar*buf,unsignedintlen)
{
unsignedchari=0;

//幀長度不得小于以太網(wǎng)的最小幀長度值,即46-除以太網(wǎng)頭和CRC檢測
if(len{
return(0);
}

if(buf[ETH_TYPE_H_P]!=ETHTYPE_ARP_H_V||buf[ETH_TYPE_L_P]!=ETHTYPE_ARP_L_V)
{
return(0);
}

//不是發(fā)給本機IP地址的不接收,那么如此說來,我在這里可以設定監(jiān)聽其他IP的信息!
while(i{
if(buf[ETH_ARP_DST_IP_P+i]!=ipaddr[i])
{
return(0);
}

i++;
}

return(1);
}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉