地址解析协议ARP
設(shè)計(jì)需求
ARP協(xié)議解決的問(wèn)題就是:在同一個(gè)局域網(wǎng)中,解決主機(jī)IP地址和硬件地址的映射問(wèn)題
基本使用原理
當(dāng)數(shù)據(jù)在網(wǎng)絡(luò)中某一條鏈路傳輸?shù)臅r(shí)候我們知道目的主機(jī)的IP地址,但是不知道硬件地址,ARP協(xié)議就是解決這個(gè)問(wèn)題的一個(gè)協(xié)議,IP協(xié)議可以使用ARP協(xié)議找到相應(yīng)的硬件地址
- 因?yàn)镮P地址和下面的硬件地址沒(méi)有直接的聯(lián)系,這個(gè)時(shí)候就通過(guò)一個(gè)中間的協(xié)議ARP協(xié)議進(jìn)行從網(wǎng)絡(luò)層到硬件層的一個(gè)轉(zhuǎn)化
- 在網(wǎng)絡(luò)中可能有一些新的主機(jī)加入,或者是撤銷(xiāo)一些主機(jī),這個(gè)時(shí)候就硬件地址都可能會(huì)改變,所以ARP解決這個(gè)問(wèn)題的方法就是在主機(jī)(包括普通主機(jī)和路由器)的ARP高速緩沖區(qū)中設(shè)置了一個(gè)從IP地址到硬件地址的一個(gè)映射表,映射表中存放的就是各個(gè)主機(jī)和路由器的IP地址到硬件地址的一個(gè)映射關(guān)系,局域網(wǎng)中的發(fā)送端可以通過(guò)這個(gè)映射表把報(bào)文發(fā)送至目標(biāo)主機(jī)
下面的一個(gè)圖簡(jiǎn)單看一下ARP協(xié)議的使用的位置
具體實(shí)現(xiàn)
兩種情況
- 在本局域網(wǎng)中,主機(jī)A要向主機(jī)B發(fā)送報(bào)文時(shí),主機(jī)A先在自己的映射表中查找有沒(méi)有主機(jī)B的IP地址,如果有,則獲取它的B主機(jī)硬件地址,再把這個(gè)硬件地址寫(xiě)入MAC幀,然后通過(guò)局域網(wǎng),把該MAC幀發(fā)送至B的硬件地址
- 有可能主機(jī)A沒(méi)有查到主機(jī)B的 IP地址,原因可能是主機(jī)A或者 是主機(jī)B剛剛接入局域網(wǎng),也可能 是主機(jī)A剛剛通電,這個(gè)時(shí)候它的高速緩沖區(qū)的內(nèi)容還是空的,這個(gè)時(shí)候通過(guò)下面的方式進(jìn)行查找主機(jī)B
- 主機(jī)A的ARP進(jìn)程發(fā)送一個(gè)請(qǐng)求廣播,廣播的內(nèi)容是“我的IP地址時(shí)aaaa,硬件地址時(shí)a0a0,我想知道IP地址時(shí)bbbb的硬件地址”。
- 這個(gè)時(shí)候在該局域網(wǎng)里面的所有主機(jī)的ARP進(jìn)程都能接受主機(jī)ARP的請(qǐng)求廣播
- 每個(gè)主機(jī)都檢查廣播中的IP地址是不是自己的,如果不是則直接忽略這則廣播,只有主機(jī)B發(fā)現(xiàn)廣播中的IP地址和自己的IP地址是一樣的 ,這個(gè)時(shí)候主機(jī)B就通過(guò)單播的方式將自己的請(qǐng)求發(fā)送給主機(jī)A,單播的內(nèi)容是“我是主機(jī)B,我的IP地址是bbbb,我的硬件地址是bb00”
- 主機(jī)A接受到主機(jī)B發(fā)送的信息之后將主機(jī)B的信息放到自己的映射表中,然后向主機(jī)B發(fā)送報(bào)文
補(bǔ)充機(jī)制
ARP的高速緩存中為每個(gè)映射地址的項(xiàng)目都會(huì)設(shè)置一個(gè)生存時(shí)間(一般是10–20分鐘),超過(guò)生存時(shí)間的映射就會(huì)被刪除掉。原因是,假設(shè)一種情況是主機(jī)A中的ARP緩存中有主機(jī)B的映射,這個(gè)時(shí)候主機(jī)B可能 有一些故障之類(lèi)的發(fā)生,就需要換各種硬件,這個(gè)時(shí)候主機(jī)B的硬件地址就改變了,那么剛剛的那個(gè)映射就沒(méi)有意義了,所以這個(gè)時(shí)候需要重新發(fā)送 廣播來(lái)獲取主機(jī)B的IP地址和硬件地址的映射
ARP優(yōu)點(diǎn)
設(shè)置ARP高速緩存的優(yōu)點(diǎn)在于,如果不設(shè)置映射的話(huà),每次發(fā)送數(shù)據(jù)時(shí)候都需要廣播一次,這個(gè)時(shí)候在局域網(wǎng)中的數(shù)據(jù)通信就大大的增加了
ARP使用的4種基本的情況
- 發(fā)送方是主機(jī),要把IP數(shù)據(jù)發(fā)送至本網(wǎng)絡(luò)上面的另一臺(tái)主機(jī),這個(gè)時(shí)候使用ARP找到目的主機(jī)就好
- 發(fā)送方式主機(jī),要把IP數(shù)據(jù)發(fā)送至另一個(gè)網(wǎng)絡(luò)上面的一臺(tái)主機(jī),這個(gè)時(shí)候使用ARP找到本網(wǎng)絡(luò)上面的一個(gè)路由器的硬件地址,將 數(shù)據(jù)發(fā)送過(guò)去,剩下的交給路由器去做
- 發(fā)送方式路由器,要把IP數(shù)據(jù)發(fā)送 給本網(wǎng)絡(luò)上面的一臺(tái)主機(jī),這個(gè)時(shí)候通過(guò)ARP找到該主機(jī)的硬件地址即可發(fā)送 數(shù)據(jù)
- 發(fā)送方數(shù)路由器,要把IP數(shù)據(jù)發(fā)送給另一個(gè)網(wǎng)絡(luò)上面的主機(jī),這個(gè)時(shí)候通過(guò)ARP找到一個(gè)路由器,剩下的事情交給路由器去做
ARP數(shù)據(jù)報(bào)格式
在上文的基礎(chǔ)之上,我們具體看看ARP數(shù)據(jù)的各個(gè)字段的內(nèi)容都是什么,請(qǐng)看下圖
- 第一個(gè)字段表示MAC目的地址,如果是全f,表示這是一條廣播,所在局域網(wǎng)中的所有主機(jī)都可以收到這個(gè)消息
- 第二個(gè)地段表示源地址,即發(fā)送方的MAC地址
- 第三個(gè)地段是0806表示這個(gè)數(shù)據(jù)報(bào)是屬于ARP的,如果是0800則表示IP數(shù)據(jù)報(bào),因?yàn)槲覀冞@里講的是ARP數(shù)據(jù)報(bào),所以這里就是0806。
- 硬件類(lèi)型:指鏈路層網(wǎng)絡(luò)類(lèi)型,這里為1,表示以太網(wǎng)
- 協(xié)議類(lèi)型:指要轉(zhuǎn)換的地址類(lèi)型,這里為0x0800,表示IP地址
- 硬件地址長(zhǎng)度和協(xié)議地址長(zhǎng)度:就是使用的硬件的地址長(zhǎng)度和使用的IP地址的長(zhǎng)度,就是圖中的op地段后面的那些地段的長(zhǎng)度分別是6和4
- op:op字段為1表示ARP請(qǐng)求,op字段為2表示ARP應(yīng)答
- 發(fā)送端MAC地址和發(fā)送端IP地址:根據(jù)實(shí)際內(nèi)容填寫(xiě)
- 目標(biāo)MAC地址和目標(biāo)IP地址:此時(shí)的目標(biāo)MAC地址是空白,因?yàn)槲疫@里發(fā)送的一個(gè)廣播,要尋找的就是目標(biāo)MAC地址,所以此時(shí)為空,等待目標(biāo)主機(jī)應(yīng)答,但是目標(biāo)IP地址是知道的
總結(jié)
- 上一篇: 输卵管伞端粘连怎么治最好
- 下一篇: 常见的路由选择算法