主機(jī)與目的主機(jī)進(jìn)行以太網(wǎng)通信,需要知道目的主機(jī)的MAC地址(物理地址),以太網(wǎng)ARP通信協(xié)議就是用來獲取目的主機(jī)MAC地址的。
ARP協(xié)議
ARP(Address Resolution Protocol),即地址解析協(xié)議,是根據(jù)IP地址(邏輯地址)獲取MAC地址的一種TCP/IP協(xié)議。
MAC地址在網(wǎng)絡(luò)中表示網(wǎng)卡的ID,每個網(wǎng)卡都需要并有且僅有一個MAC地址。源主機(jī)知道目的主機(jī)的IP地址,卻不知道目的主機(jī)的MAC地址。而目的主機(jī)的MAC地址直接被網(wǎng)卡接收和解析,當(dāng)解析到目的MAC地址非本地MAC地址時,則直接丟棄該包數(shù)據(jù),因此在通信前需要先獲得目的的MAC地址。
ARP協(xié)議的基本功能就是通過目的設(shè)備的IP地址,查詢目的設(shè)備的MAC地址,以保證通信的順利進(jìn)行。
在獲取到目的MAC地址之后,將目的MAC地址更新至ARP緩存表中,下次通信時,可以直接從ARP緩存表中獲取,而不用重新獲取。但ARP緩存表會有過期時間,過期后需要重新通過ARP協(xié)議進(jìn)行獲取。
協(xié)議格式
ARP協(xié)議屬于TCP/IP協(xié)議簇的一種,位于以太網(wǎng)MAC幀格式的數(shù)據(jù)段,ARP數(shù)據(jù)包格式如下圖所示。
硬件類型 (Hardware type):硬件地址的類型,1表示以太網(wǎng);
協(xié)議類型 (Protocol type):要映射的協(xié)議地址類型,ARP協(xié)議的上層協(xié)議為IP協(xié)議,因此該協(xié)議類型為IP協(xié)議,其值為0x0800;
硬件地址長度 (Hardware size):硬件地址(MAC地址)的長度,以字節(jié)為單位。對于以太網(wǎng)上IP地址的ARP請求或者應(yīng)答來說,該值為6;
協(xié)議地址長度 (Protocol size):IP地址的長度,以字節(jié)為單位。對于以太網(wǎng)上IP地址的ARP請求或者應(yīng)答來說,該值為4;
OP (Opcode):操作碼,用于表示該數(shù)據(jù)包為ARP請求或者ARP應(yīng)答。1表示ARP請求,2表示ARP應(yīng)答;
源MAC地址 :發(fā)送端的硬件地址;
源IP地址 :發(fā)送端的協(xié)議(IP)地址;
目的MAC地址 :接收端的硬件地址,在ARP請求時由于不知道接收端MAC地址,因此該字段為廣播地址,即48’hff_ff_ff_ff_ff_ff;
目的IP地址 :接收端的協(xié)議(IP)地址。
ARP協(xié)議分為ARP請求和ARP應(yīng)答,源主機(jī)發(fā)起查詢目的MAC地址的報文稱為ARP請求,目的主機(jī)響應(yīng)源主機(jī)并發(fā)送包含本地MAC地址的報文稱為ARP應(yīng)答。
ARP請求
當(dāng)源主機(jī)A需要獲取目的主機(jī)B物理地址時,可以發(fā)送一個ARP請求報文,這個報文包含了主機(jī)A的MAC地址和IP地址以及主機(jī)B的IP地址。
因為主機(jī)A不知道主機(jī)B的物理地址,所以這個查詢分組會在網(wǎng)絡(luò)層中進(jìn)行廣播,即ARP請求時發(fā)送的接收方物理地址為廣播地址,用48hff_ff_ff_ff_ff_ff表示。
主機(jī)A發(fā)起ARP請求,由于發(fā)送的目的MAC地址為廣播地址,所以此時局域網(wǎng)中的所有主機(jī)都會進(jìn)行接收并處理這個ARP請求報文,然后進(jìn)行驗證,查看接收方的IP地址是不是自己的地址。是則返回ARP應(yīng)答報文,不是則不響應(yīng)。
只有驗證成功的主機(jī)B才會返回一個ARP應(yīng)答報文,這個應(yīng)答報文包含主機(jī)B的IP地址和物理地址。
ARP應(yīng)答
主機(jī)B利用收到的ARP請求報文中的請求方物理地址,以單播的方式直接發(fā)送給主機(jī)A,主機(jī)A將收到的ARP應(yīng)答報文中的目的MAC地址解析出來,將目的MAC地址和目的IP地址更新至ARP緩存表中。
當(dāng)再次和主機(jī)A通信時,可以直接從ARP緩存表中獲取,而不用重新發(fā)起ARP請求報文。
但是ARP緩存表中的表項有過期時間(一般為20分鐘),過期之后,需要重新發(fā)起ARP請求以獲取目的MAC地址。
以太網(wǎng)協(xié)議
ARP協(xié)議通過以太網(wǎng)進(jìn)行傳輸,因此需要滿足以太網(wǎng)通信協(xié)議所規(guī)定的格式。如下圖所示,以太網(wǎng)的數(shù)據(jù)包就是通過對協(xié)議的封裝來實現(xiàn)數(shù)據(jù)的傳輸,即ARP數(shù)據(jù)位于以太網(wǎng)幀格式的數(shù)據(jù)段。
28字節(jié)的ARP數(shù)據(jù)位于以太網(wǎng)幀格式的數(shù)據(jù)段。由于以太網(wǎng)數(shù)據(jù)段最少為46個字節(jié),而ARP數(shù)據(jù)包總長度為28個字節(jié),因此在ARP數(shù)據(jù)段后面需要填充18個字節(jié)的數(shù)據(jù),以滿足以太網(wǎng)傳輸格式的要求。這個填充的過程稱為Padding,填充的數(shù)據(jù)可以為任意值,但一般為0。
以太網(wǎng)協(xié)議具體內(nèi)容如上圖所示,其中:
前導(dǎo)碼 (Preamble):為了實現(xiàn)底層數(shù)據(jù)的正確闡述,物理層使用7個字節(jié)同步碼(0和1交替(55-55-55-55-55-55-55))實現(xiàn)數(shù)據(jù)的同步;
幀起始界定符 (SFD,Start Frame Delimiter):使用1個字節(jié)的SFD(固定值為0xd5)來表示一幀的開始,即后面緊跟著傳輸?shù)木褪且蕴W(wǎng)的幀頭;
目的MAC地址 :即接收端物理MAC地址,占用6個字節(jié);
源MAC地址 :即發(fā)送端物理MAC地址,占用6個字節(jié);
長度/類型 :上圖中的長度/類型具有兩個意義,當(dāng)這兩個字節(jié)的值小于1536(十六進(jìn)制為 0x0600)時,代表該以太網(wǎng)中數(shù)據(jù)段的長度;如果這兩個字節(jié)的值大于1536,則表示該以太網(wǎng)中的數(shù)據(jù)屬于哪個上層協(xié)議;
數(shù)據(jù) :以太網(wǎng)中的數(shù)據(jù)段長度最小46個字節(jié),最大1500個字節(jié);
幀檢驗序列 (FCS,F(xiàn)rame Check Sequence):為了確保數(shù)據(jù)的正確傳輸,在數(shù)據(jù)的尾部加入了4個字節(jié)的循環(huán)冗余校驗碼(CRC校驗)來檢測數(shù)據(jù)是否傳輸錯誤。
-
FPGA
+關(guān)注
關(guān)注
1643文章
21980瀏覽量
614519 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5590瀏覽量
174936 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
1005瀏覽量
40967 -
Mac
+關(guān)注
關(guān)注
0文章
1117瀏覽量
52698 -
ARP
+關(guān)注
關(guān)注
0文章
50瀏覽量
14952
發(fā)布評論請先 登錄
【小梅哥2017力作】詳細(xì)的FPGA以太網(wǎng)設(shè)計教程,76頁精華PDF
【AC620 FPGA試用體驗】以太網(wǎng)ARP幀發(fā)包實例(手動CRC)
【正點原子FPGA連載】第二十五章以太網(wǎng)ARP測試實驗-領(lǐng)航者ZYNQ之FPGA開發(fā)指南
基于BL706 emac實現(xiàn)通過以太網(wǎng)發(fā)送一個ARP裸數(shù)據(jù)包的例程
一種基于FPGA的以太網(wǎng)高速傳輸平臺
基于FPGA的萬兆以太網(wǎng)接口的設(shè)計與實現(xiàn)
基于FPGA的實時以太網(wǎng)(PowerLink)星載通信技術(shù)

在工業(yè)以太網(wǎng)領(lǐng)域采用FPGA的好處
FPGA如何為以太網(wǎng)和千兆以太網(wǎng)解決低功耗問題

基于FPGA的千兆以太網(wǎng)ARP和UDP的實現(xiàn)
基于FPGA的UDP千兆以太網(wǎng)光通信

基于FPGA的UDP RGMII千兆以太網(wǎng)通信方案

評論