ARP地址解析協(xié)議的概念數(shù)據(jù)結(jié)構(gòu)
我們在網(wǎng)絡(luò)中常說到ARP攻擊等安全問題。這里的ARP是什么呢?就是ARP地址解析協(xié)議。在這里,關(guān)于它的安全問題我們暫且不談,那么我們現(xiàn)在來簡單說一下它的基本含義和數(shù)據(jù)結(jié)構(gòu)。
ARP地址解析協(xié)議
ARP(Address Resolution Protocol)地址解析協(xié)議用于將計算機(jī)的網(wǎng)絡(luò)地址(IP地址32位)轉(zhuǎn)化為物理地址(MAC地址48位)[RFC826]。ARP協(xié)議是屬于鏈路層的協(xié)議,在以太網(wǎng)中的數(shù)據(jù)幀從一個主機(jī)到達(dá)網(wǎng)內(nèi)的另一臺主機(jī)是根據(jù)48位的以太網(wǎng)地址(硬件地址)來確定接口的,而不是根據(jù)32位的IP地址。內(nèi)核(如驅(qū)動)必須知道目的端的硬件地址才能發(fā)送數(shù)據(jù)。當(dāng)然,點(diǎn)對點(diǎn)的連接是不需要地址解析協(xié)議的。
ARP協(xié)議的數(shù)據(jù)結(jié)構(gòu)
以下是引用片段:
typedefstructarphdr
{
unsignedshortarp_hrd;/*硬件類型*/
unsignedshortarp_pro;/*協(xié)議類型*/
unsignedchararp_hln;/*硬件地址長度*/
unsignedchararp_pln;/*協(xié)議地址長度*/
unsignedshortarp_op;/*ARP操作類型*/
unsignedchararp_sha[6];/*發(fā)送者的硬件地址*/
unsignedlongarp_spa;/*發(fā)送者的協(xié)議地址*/
unsignedchararp_tha[6];/*目標(biāo)的硬件地址*/
unsignedlongarp_tpa;/*目標(biāo)的協(xié)議地址*/
}ARPHDR,*PARPHDR;
為了解釋地址解析協(xié)議的作用,就必須理解數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸過程。這里舉一個簡單的PING例子。
假設(shè)我們的計算機(jī)IP地址是192.168.1.1,要執(zhí)行這個命令:ping192.168.1.2。該命令會通過ICMP協(xié)議發(fā)送ICMP數(shù)據(jù)包。該過程需要經(jīng)過下面的步驟:
1、應(yīng)用程序構(gòu)造數(shù)據(jù)包,該示例是產(chǎn)生ICMP包,被提交給內(nèi)核(網(wǎng)絡(luò)驅(qū)動程序);
2、內(nèi)核檢查是否能夠轉(zhuǎn)化該IP地址為MAC地址,也就是在本地的ARP緩存中查看IP-MAC對應(yīng)表;
3、如果存在該IP-MAC對應(yīng)關(guān)系,那么跳到步驟9;如果不存在該IP-MAC對應(yīng)關(guān)系,那么接續(xù)下面的步驟;
4、內(nèi)核進(jìn)行ARP廣播,目的地的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令類型為REQUEST(1),其中包含有自己的MAC地址;
5、當(dāng)192.168.1.2主機(jī)接收到該ARP請求后,就發(fā)送一個ARP的REPLY(2)命令,其中包含自己的MAC地址;
6、本地獲得192.168.1.2主機(jī)的IP-MAC地址對應(yīng)關(guān)系,并保存到ARP緩存中;
7、內(nèi)核將把IP轉(zhuǎn)化為MAC地址,然后封裝在以太網(wǎng)頭結(jié)構(gòu)中,再把數(shù)據(jù)發(fā)送出去;
使用arp-a命令就可以查看本地的ARP緩存內(nèi)容,所以,執(zhí)行一個本地的PING命令后,ARP緩存就會存在一個目的IP的記錄了。當(dāng)然,如果你的數(shù)據(jù)包是發(fā)送到不同網(wǎng)段的目的地,那么就一定存在一條網(wǎng)關(guān)的IP-MAC地址對應(yīng)的記錄。
知道了ARP協(xié)議的作用,就能夠很清楚地知道,數(shù)據(jù)包的向外傳輸很依靠ARP協(xié)議,當(dāng)然,也就是依賴ARP緩存。要知道,ARP協(xié)議的所有操作都是內(nèi)核自動完成的,同其他的應(yīng)用程序沒有任何關(guān)系。同時需要注意的是,地址解析協(xié)議只使用于本網(wǎng)絡(luò)。