圖解ARP協議(六)RARP與IARP:被遺忘的兄弟協議

1、概述html

wKioL1mub4eBqgSQAAGK7VpcHYw598.png

在我第一次接觸ARP協議的時候,發現這協議挺簡單的,"一去一回經過IP拿到MAC地址",整個過程在1s內就搞定了。後面學到了代理ARP,發現也不過是變了個法子,作了次"欺騙",本質仍是同樣。接下來又學到了免費ARP,頓時以爲網絡協議設計者太牛了,一個協議竟然能折騰出這麼多玩法,連"地址檢測"都能實現。等學到了ARP嗅探和欺騙,又發現其實黑帽子更愛折騰,誰能想到這麼簡單的協議,竟然能製造工具出來作內網探測欺騙***,引起這麼大的危害。安全

 

當我覺得ARP這一知識點在個人技術旅途中應該就此翻篇了的時候,又冒出了RARP和IARP這兩,對比其餘ARP協議的研究,當時學這兩個協議是心不甘情不肯的:服務器


第一,不管學習仍是工做,極少碰到,真正"翻篇"了的協議;微信

第二,名字記不住,"翻轉""反轉""逆向""反向",不一樣技術文檔的中文翻譯有時候徹底相反,無法記。畢竟漢語這麼博大精深,就記住英文就行了,後面發現更加糟糕,由於reverse和inverse這兩個單詞僅僅2個字母之差,老外太欺負人了,這根本無法記。網絡

 

我在想,確定也有不少朋友學到這個時候遇到了上面一樣的問題和糾結,有些堅持研究通透有些中途離開。而後我又思考了一番:ARP協議經過幾個字段的細微調整,便可以適用於這麼多不一樣場景,例如ARP、PARP、GARP、RARP、IARP,這是否是證實了它在TCP/IP協議棧裏面獨特的位置,有哪一個協議能作到這一點,有這麼多花樣?因此,個人建議是:既然到了這一步了,就繼續搞清楚吧,否管它是否用的上。app

 

那麼,什麼是RARP和IARP?中文叫法是什麼?它們各自的應用場景在哪裏?數據包又是怎樣的tcp




2、RARP原理與實踐ide

RARP(Reverse ARP)即反向ARP或者翻轉ARP,顧名思義,它跟常規的ARP功能偏偏是相反的,ARP是實現IP到MAC地址的映射,而RARP是實現MAC到IP地址的映射工具

 

什麼樣的設備或者場景須要用到RARP呢?其實RARP原先在設計的時候,是適用於大部分終端設備的,不只僅是無盤工做站,它的功能就是根據MAC獲取IP地址,功能跟DHCP是同樣的學習


例如,一個電腦剛接入網絡,沒有IP地址就沒法上網,此時它便會經過本地MAC地址,對外發送RARP Request廣播請求,看看局域網裏面是否有RARP Server,若Server上面有關於此MAC地址的映射IP,則會向此電腦返回RARP Reply迴應,電腦便獲取了IP地址=>

wKiom1mub7eh2IVmAAJP3-rBKe8861.png



RARP經過很是精簡的交互實現了IP地址的獲取,但同時也暴露了一些問題:

①RARP Server必須提早將MAC和IP的映射靜態綁定在本地;若沒有提早綁定,則電腦用本身MAC詢問時,Server也不會迴應;

②RARP Server只能給電腦分配IP地址,不包括其餘信息,包括網關、DNS等信息;

③RARP基於二層封裝,只能運行在同一網段;每一個網段分配地址,都須要一個RARP Server。

 

在RARP的基礎上,後面又有了Bootp協議,直譯過來即是"啓動協議",功能同RARP,也是用於電腦接入網絡時,用來獲取IP地址的。可是畢竟作了加強,Bootp協議能讓電腦啓動時,不只僅獲取IP地址,並且能獲取到網關地址,從而讓電腦實現跨網段通訊。


wKioL1mub6jyG4i-AAKUdz1phw4676.png


Bootp協議雖然讓電腦可以獲取到更多的信息,可是仍然沒有解決最大的問題:

服務器仍然須要提早手工綁定MAC和IP地址,而對於如今的移動網絡或者公共網絡而言,這根本沒法實現。


由於用戶何時接入,接入的MAC是多少,管理員無法提早知道。這就有了後面的DHCP,DHCP經過動態分配的方式解決了這個詬病,而且經過DHCP中繼技術實現了跨網段地址分配,實現了全網IP地址的統一管理。

 

小結:RARP是一種逝去的地址分配技術,是Bootp和DHCP的鼻祖,目前咱們的電腦基本不會用到這個協議,只有部分無盤工做站等狀況須要用到

 

爲了讓你們更深刻理解RARP,這裏咱們從數據包結構來解構它的功能。RARP的數據包比較難抓取,不像常規的ARP和DHCP協議,這裏給你們提供一個思路:對於比較難找的協議數據包,除了搭建特殊的實驗環境抓取以外,也能夠藉助一些[數據包生成工具]來實現,例如nmap掃描器裏面集成的nping工具,能夠生成很是多的協議包,包括arp、icmp、udp、tcp等等

 

nmap的安裝以及nping的使用,能夠到https://nmap.org/nping下查詢。這裏給你們演示如何用nping生成rarp數據包,下圖是咱們要"人爲"構造出來的交互場景=>


wKioL1mub8KA2o85AAGmT80hdxI228.png


個人Macbook已經安裝了nmap,自帶了nping工具,跟ARP/RARP相關的幫助命令以下:


jayking:~ jaykingchen$ nping

Nping 0.7.60 ( https://nmap.org/nping )

Usage: nping [Probe mode] [Options] {target specification}

 

TARGET SPECIFICATION:

  Targets may be specified as hostnames, IP addresses, networks, etc.

  Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.*.1-24

 

ARP/RARP PROBE MODE:

  --arp-type <type>                : Type: ARP, ARP-reply, RARP, RARP-reply.

  --arp-sender-mac <mac>           : Set sender MAC address.

  --arp-sender-ip  <addr>          : Set sender IP address.

  --arp-target-mac <mac>           : Set target MAC address.

  --arp-target-ip  <addr>          : Set target IP address.


爲了可以抓取到rarp的請求和回覆包,首先打開wireshark抓取電腦網卡流量並設置arp過濾,而後採用兩條命令:第一條命令模擬個人電腦發起的RARP請求包,第二條命令模擬局域網網關設備(極路由)返回的RARP回覆包


jayking:~ jaykingchen$ sudo nping --arp-type RARP  --arp-sender-mac ac:bc:32:8b:56:df --arp-sender-ip 0.0.0.0 --arp-target-mac ac:bc:32:8b:56:df --arp-target-ip 0.0.0.0 192.168.199.255

 

Starting Nping 0.7.60 ( https://nmap.org/nping ) at 2017-09-04 23:57 CST

SENT (0.0077s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (1.0079s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (2.0084s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (3.0111s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (4.0159s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

 

Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A

Raw packets sent: 5 (210B) | Rcvd: 0 (0B) | Lost: 5 (100.00%)

Nping done: 1 IP address pinged in 5.02 seconds

 

jayking:~ jaykingchen$ sudo nping --arp-type RARP-reply  --arp-sender-mac d4:ee:07:54:c1:9e --arp-sender-ip 192.168.199.1 --arp-target-mac ac:bc:32:8b:56:df --arp-target-ip 192.168.199.153 192.168.199.153

 

Starting Nping 0.7.60 ( https://nmap.org/nping ) at 2017-09-05 00:03 CST

SENT (0.8094s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (1.8107s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (2.8114s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (3.8138s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (4.8159s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

 

Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A

Raw packets sent: 5 (210B) | Rcvd: 0 (0B) | Lost: 5 (100.00%)

Nping done: 1 IP address pinged in 5.82 seconds


此時,從Wireshark抓取到的RARP請求和回覆包以下=>


wKioL1mub9WxbqOfAAf65FPiSm0064.pngwKioL1mub-LT0ClBAAQk6nVjYoc767.png


至此,關於RARP的原理和數據包分析便完成了。




3、IARP原理與實踐

IARP(Inverse ARP)即逆向ARP,這個無法"顧名思義",由於它既不是IP到MAC的映射,也不是MAC到IP的映射,而是DLCI到IP的映射。相比前面全部其餘ARP協議,IARP的應用場景不是在以太網(局域網)裏面,而是在幀中繼網絡(廣域網)裏面。


wKioL1mucAHQaRoBAAEWicaT70E984.png


要真正理解DLCI和IARP,須要有一些幀中繼網絡技術背景,這裏簡單說下:

DLCI(Data Link Connection Identifier)數據連接鏈接標識,是幀中繼網絡裏面的二層地址,比如以太網裏面的MAC地址,用於標記幀中繼網絡裏面的虛擬專線。示圖以下:


wKiom1mucCvC5FH2AAF79QdHigU044.png


圖中R1和R2經過專線鏈接到幀中繼交換機,對應的DLCI號分別是102和201。交換機經過轉發表進行數據交換:根據接口收到數據包的DLCI,查看對應的接口,轉發到匹配的線路

 

因此說,幀中繼網絡裏面,DLCI相似MAC,決定了數據包的去向。那麼,DLCI和IP的映射關係又是如何的呢?咱們來看下幀中繼網絡裏面的數據封裝,以R1 ping R2爲例:


wKioL1mucDHSNt_YAAIdtHO_67o033.png


從這裏咱們能夠看到幀中繼網絡的數據封裝和轉發模式都不一樣於以太網:

①二層封裝的時候,不須要源目地址,只須要本地DLCI;例如10.1.1.1 ping 10.1.1.2,源目IP地址這個跟以太網的封裝是同樣的,可是鏈路層封裝不須要目標DLCI 201。

②交換機會改變二層地址信息,例如這裏的DLCI從左邊的102,變成了右邊的201。

 

理解了這些差別,咱們才能獲得這裏DLCI和IP的映射關係:即目標IP地址與本地DLCI的映射。例如R1要訪問10.1.1.2,此時須要映射到本地的102;而R2要訪問10.1.1.1,則須要映射到本地的201。

 

更完整的說明:逆向ARP解決幀中繼網絡裏目標IP地址與本地DLCI的映射,而且讓通訊雙方生成幀中繼映射表(frame-relay map)。比如ARP解決了以太網裏面目的IP與目標MAC的映射,而且讓通訊方生成ARP映射表


wKioL1mucEqTjTQWAAImK1eVb_E454.png


接下來,咱們經過實驗環境來驗證,這裏能夠經過GNS3模擬器搭建以上環境,而且抓包驗證=>


wKiom1mucHWCG54fAAF7H5pluIw833.png


①爲R1和R2打開接口,封裝幀中繼,並配置IP地址:

R1(config)#int s0/0

R1(config-if)#no shutdown

R1(config-if)#encapsulation frame-relay

R1(config-if)#ip address 10.1.1.1 255.255.255.0

 

R2(config)#int s0/0

R2(config-if)#no shutdown

R2(config-if)#encapsulation frame-relay

R2(config-if)#ip address 10.1.1.2 255.255.255.0

 

② 開啓wireshark抓包,抓取IARP請求和回覆包:


wKioL1mucGywi9goAAT6RzSFqxQ801.png

wKiom1mucI3BQ82TAAU-aes1drg666.png


③查看R1和R2本地生成的IARP映射表:

R1#show frame-relay map

Serial0/0 (up): ip 10.1.1.2 dlci 102(0x66,0x1860), dynamic,

              broadcast,, status defined, active

 

R2#show frame-relay map

Serial0/0 (up): ip 10.1.1.1 dlci 201(0xC9,0x3090), dynamic,

              broadcast,, status defined, active

 

④測試R1和R2之間的聯通並抓取ICMP包:

R1#ping 10.1.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 10.1.1.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 68/75/88 ms


wKioL1mucIbTspz9AAZsyL-XNgY502.png


至此,IARP的原理與實踐並完成了。那麼,既然IARP可以實現幀中繼的通訊,爲何在文章開頭,咱們提到說IARP跟RARP同樣,在工做中已經不常見了呢?

 

①幀中繼做爲一種廣域網遠程鏈接技術,正在慢慢被其餘技術代替

②IARP不像ARP協議能夠實時交互,它是週期性運行的,通訊雙方若丟失IARP映射表,則須要等待到固定的時間交互才能從新生成並通訊。另外不一樣廠商不一樣型號對IARP的兼容性也可能不一樣。基於這些緣由,通常建議直接關閉IARP協議,採用靜態綁定的方式生成映射表,這裏再也不深刻。(有興趣的小夥伴能夠觀看我以前的技術視頻教程,有深刻講解了如何關閉IARP和靜態綁定的作法。)




4、RARP與IARP協議總結

①RARP用於實現MAC到IP的映射,本質就是爲了獲取IP地址,是Bootp和DHCP協議的鼻祖;

②IARP用於實現幀中繼網絡中DLCI到IP地址的映射,生成幀中繼映射表(相似ARP表),實現數據封裝與通訊;

③相比ARP、免費ARP、代理ARP、ARP***等技術,RARP和IARP隨着技術的更新迭代正在退出歷史舞臺,成爲"被遺忘的兄弟協議" 。(對於初學者來講,也算是個好事,由於終於不用"翻轉""反向""逆向"各類分不清了)




ARP協議大總結及下一階段預告

到這裏,咱們經過六篇文章終於搞定了ARP協議的方方面面,包括它們的應用場景、設計思想、數據包結構、實驗驗證等等。

 

另外,爲何此次圖解系列的開頭是從ARP協議開始寫,而不是從Ethernet、IP、TCP、HTTP或其餘呢?


主要是由於"ARP太簡單了",簡單到你們在學網絡和安全的時候,都容易去忽略協議背後的不少細節,例如不少人認爲[ARP的請求就必定是廣播的,回覆就必定是單播的],但"常識"背後也有另一些特殊的狀況。因此,經過這一個足夠簡單的協議,爲你們解構背後相對複雜的機制,爲後續深刻研究開個好頭。


另一個緣由就是"ARP頗有趣",例如協議設計者經過不一樣的操做代碼(opcode),作了很是多的變種(arp是1和2,rarp是3和4,iarp是8和9),作一個模型即可以多處應用;並且經過精巧的構造,就能夠在內網形成極大的殺傷力。

 

anyway,圖解ARP協議只是整個系列的開篇,下一階段,咱們將進入IP協議,探討IP協議原理、數據包結構、優缺點、地址結構、IP***與防護(分片***、欺騙***)……




【相關推薦】

《TCP/IP協議棧視頻教程》

《Wireshark協議分析從入門到精通》

《初級網絡安全工程師》

新浪微博:@拼客學院陳鑫傑

微信公衆號:拼客院長陳鑫傑搜索"pingsec"即刻關注,大牛都在看)

相關文章
相關標籤/搜索