www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

1. ARP的簡(jiǎn)介

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

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


2. ARP的應(yīng)答流程


任何時(shí)候我們敲入下面這個(gè)形式的命令:

[html]view plaincopy

  1. %ftpbsdi//示例而已

都會(huì)進(jìn)行以下這些步驟。這些步驟的序號(hào)如圖 4 - 2所示。

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

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

3) TCP發(fā)送一個(gè)連接請(qǐng)求分段到遠(yuǎn)端的主機(jī),即用上述 IP地址發(fā)送一份IP數(shù)據(jù)報(bào)(在第1 8章我們將討論完成這個(gè)過(guò)程的細(xì)節(jié)) 。

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

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

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

7) 目的主機(jī)的ARP層收到這份廣播報(bào)文后,識(shí)別出這是發(fā)送端在尋問(wèn)它的 IP地址,于是發(fā)送一個(gè)ARP應(yīng)答。這個(gè)ARP應(yīng)答包含IP地址及對(duì)應(yīng)的硬件地址。

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

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

3. ARP的分組格式


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

?兩個(gè)字節(jié)長(zhǎng)的以太網(wǎng)幀類型表示后面數(shù)據(jù)的類型。對(duì)于 A R P請(qǐng)求或應(yīng)答來(lái)說(shuō),該字段的值為0 x 0 8 0 6。

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

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

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

?操作字段(op)指出四種操作類型,它們是 ARP請(qǐng)求(值為1) 、ARP應(yīng)答(值為2) 、RARP請(qǐng)求(值為3)和R ARP應(yīng)答(值為4) (我們?cè)诘?章討論RARP) 。這個(gè)字段必需的,因?yàn)锳RP請(qǐng)求和ARP應(yīng)答的幀類型字段值是相同的。

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

對(duì)于一個(gè)ARP請(qǐng)求來(lái)說(shuō),除目的端硬件地址外的所有其他的字段都有填充值。當(dāng)系統(tǒng)收到一份目的端為本機(jī)的 ARP請(qǐng)求報(bào)文后,它就把硬件地址填進(jìn)去,然后用兩個(gè)目的端地址分別替換兩個(gè)發(fā)送端地址,并把操作字段置為 2,最后把它發(fā)送回去。

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

理是那個(gè)那個(gè)理,但是過(guò)于抽象了,不過(guò)是基礎(chǔ),看完上面再看實(shí)現(xiàn),那感覺(jué)很爽的~~~

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

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

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

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包長(zhǎng)度
#defineETH_ARP_PACKET_LEN28

//硬件地址長(zhǎng)度值
#defineETHTYPE_ARP_L_V0x06
//協(xié)議地址長(zhǎng)度值
#defineETHTYPE_ARP_PROTOCOL_SIZE_V0x04
//操作碼位置2字節(jié)
#defineETH_ARP_OPCODE_H_P0x14
#defineETH_ARP_OPCODE_L_P0x15
//ARP請(qǐng)求操作碼值
#defineETH_ARP_OPCODE_REQUEST_V0x0001
#defineETH_ARP_OPCODE_REQUEST_H_V0x00
#defineETH_ARP_OPCODE_REQUEST_L_V0x01
//ARP響應(yīng)操作碼值
#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
//目標(biāo)硬件地址位置6字節(jié)
#defineETH_ARP_DST_MAC_P0x20
//目標(biāo)IP地址位置4字節(jié)
#defineETH_ARP_DST_IP_P0x26

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

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

配置以太網(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++;
}
}


展開(kāi)就是這樣的,看看宏定義是否與此一一對(duì)應(yīng)呢。


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

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響應(yīng)
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);
}

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

檢查是否為合法的eth,并且只接受發(fā)給本機(jī)的arp數(shù)據(jù),此函數(shù)在上面那個(gè)函數(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ā)給本機(jī)的arp數(shù)據(jù)
unsignedchareth_type_is_arp_and_my_ip(unsignedchar*buf,unsignedintlen)
{
unsignedchari=0;

//幀長(zhǎng)度不得小于以太網(wǎng)的最小幀長(zhǎng)度值,即46-除以太網(wǎng)頭和CRC檢測(cè)
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ā)給本機(jī)IP地址的不接收,那么如此說(shuō)來(lái),我在這里可以設(shè)定監(jiān)聽(tīng)其他IP的信息!
while(i{
if(buf[ETH_ARP_DST_IP_P+i]!=ipaddr[i])
{
return(0);
}

i++;
}

return(1);
}

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

在人工智能飛速發(fā)展的當(dāng)下,大模型展現(xiàn)出了強(qiáng)大的語(yǔ)言理解與生成能力。然而,要讓這些模型真正在實(shí)際場(chǎng)景中發(fā)揮作用,與外部豐富的工具及數(shù)據(jù)源順暢交互至關(guān)重要。在此背景下,Model Context Protocol(MCP),...

關(guān)鍵字: 人工智能 大模型 協(xié)議

在智能汽車飛速發(fā)展的當(dāng)下,汽車內(nèi)各種電氣設(shè)備之間的數(shù)據(jù)交互愈發(fā)頻繁和復(fù)雜。車載以太網(wǎng)作為連接這些設(shè)備的關(guān)鍵物理網(wǎng)絡(luò),正扮演著日益重要的角色。它基于傳統(tǒng)以太網(wǎng)協(xié)議,對(duì)物理接口電氣特性進(jìn)行了改造,并依據(jù)車載網(wǎng)絡(luò)需求制定了新標(biāo)...

關(guān)鍵字: 以太網(wǎng) 車載網(wǎng)絡(luò) 協(xié)議

I2C 總線的起始條件和終止條件通常由主機(jī)產(chǎn)生。起始條件是在 SCL 高電平時(shí),SDA 從高電平轉(zhuǎn)為低電平;而終止條件則是當(dāng) SCL 高電平時(shí),SDA 從低電平轉(zhuǎn)化為高電平。這兩個(gè)條件的準(zhǔn)確識(shí)別對(duì)于 I2C 通信的正確啟...

關(guān)鍵字: I2C 總線 數(shù)據(jù) 協(xié)議

在當(dāng)今數(shù)字化時(shí)代,互聯(lián)網(wǎng)已經(jīng)成為人們生活和工作中不可或缺的一部分。從瀏覽網(wǎng)頁(yè)、發(fā)送電子郵件,到視頻通話、在線購(gòu)物,每一項(xiàng)網(wǎng)絡(luò)活動(dòng)的背后都離不開(kāi)一套復(fù)雜而精妙的協(xié)議體系 ——TCP/IP 協(xié)議族。作為支撐現(xiàn)代互聯(lián)網(wǎng)運(yùn)行的基...

關(guān)鍵字: 協(xié)議 互聯(lián)網(wǎng) TCP/IP 協(xié)議

串口:串口是一個(gè)泛稱,UART、TTL、RS232、RS485都遵循類似的通信時(shí)序協(xié)議,因此都被通稱為串口。串口通訊應(yīng)用是工控人必須掌握的一個(gè)技能,幾乎在每一個(gè)項(xiàng)目中都會(huì)用到,今天我們就來(lái)詳細(xì)比較一下它們究竟有何區(qū)別。

關(guān)鍵字: 串口 協(xié)議

隨著社會(huì)經(jīng)濟(jì)的不斷發(fā)展進(jìn)步,科技的不斷飛升,在新時(shí)代的背景下網(wǎng)絡(luò)通信已經(jīng)成了人們最為常 用的科學(xué)技術(shù)產(chǎn)品之一,由于生活水平得到了提高人們?cè)谌粘5淖非笊弦舶l(fā)生著變化,而對(duì)于通信 的產(chǎn)品可以說(shuō)是有著日新月異的變化,人們?cè)诰W(wǎng)絡(luò)...

關(guān)鍵字: 通信 協(xié)議 控制

新一代人工智能的發(fā)展,是國(guó)家層面的戰(zhàn)略大協(xié)作。由科技部主導(dǎo),共15個(gè)國(guó)家部門構(gòu)成的新一代人工智能發(fā)展規(guī)劃推進(jìn)辦公室,著力推進(jìn)項(xiàng)目、基地、人才統(tǒng)籌布局,打造國(guó)家級(jí)專家?guī)欤闪⑿乱淮斯ぶ悄軕?zhàn)略咨詢委員會(huì)。很多時(shí)候企業(yè)擁有重...

關(guān)鍵字: 人工智能 自動(dòng)化 平臺(tái)

沒(méi)想到一家半導(dǎo)體公司創(chuàng)始人的經(jīng)歷可以如此傳奇,從大屠殺中活了下來(lái),他就是威世(Vishay)創(chuàng)始人費(fèi)利克斯·贊德曼(Felix Zandman)。本以為世界級(jí)半導(dǎo)體公司的創(chuàng)始人都是從小理科天賦過(guò)人、名校背景,成長(zhǎng)故事如同...

關(guān)鍵字: 半導(dǎo)體 平臺(tái) 公司

據(jù)路透社等海外媒體報(bào)道,美國(guó)商務(wù)部官員Wilbur Ross在4月16日透露,因未履行和解協(xié)定中的部分協(xié)議,美國(guó)商務(wù)部將禁止美國(guó)企業(yè)向中興通訊銷售元器件,時(shí)間有可能長(zhǎng)達(dá)7年。該消息公布之后,國(guó)內(nèi)部分產(chǎn)業(yè)人士認(rèn)為是假消息,...

關(guān)鍵字: 協(xié)議 元器件 中興通訊

顯然這是目前存在的現(xiàn)狀,藍(lán)牙Mesh、Zigbee等一些標(biāo)準(zhǔn)共存于物聯(lián)網(wǎng)智能家居江湖,但又誰(shuí)也取代不了誰(shuí)。正如周巍所說(shuō):“沒(méi)有任何一個(gè)標(biāo)準(zhǔn)能在一個(gè)應(yīng)用層壟斷,盡管小米阿里在主推藍(lán)牙Mesh,華為在推Zigbee,但未來(lái)遲...

關(guān)鍵字: 物聯(lián)網(wǎng) 協(xié)議 通訊
關(guān)閉