天天看點

了解并驗證:ICMPV6代替IPV4中的ARP進行IPv6的MAC位址解析

無論是IPv4還是IPv6的以太網環境,當一台主機需要通路另一台主機時,不隻是單純地依靠IP位址,還必須得依靠MAC位址。比如:主機192.168.1.2通過指令ping去通路主機 192.168.1.1或者一個運作IPv6的主機FEC0::21E:68FF:FEA0:4879通過指令ping另一台IPv6的主機FEC0::0000:4CFF:FE4F:4F50,在這個ping會話的過程中,最關鍵的是通過MAC位址去實作資料的互動,換而言之,源主機必須獲得目标主機的IP位址與MAC位址。無論這些主機是運作IPv4還是IPv6。是以需要一種方式,在知道目标計算機IP位址的情況下去解析目标的MAC位址。并把這個IP位址與MAC對應的關系存儲在一張緩存表裡面,以便在通信的過程中快速對目标MAC位址進行查找。如圖12.79所示,以IPv4網絡環境中的Windows作業系統為例,通過在指令提示符輸入arp -a檢視IP位址與MAC位址的對應關系。

<a target="_blank" href="http://blog.51cto.com/attachment/201312/130929375.png"></a>

在傳統的IPv4網絡中,主機通過ARP協定解析目标IP位址與目标MAC位址的對應關系。而ARP協定主要通過廣播的方式來實作,如圖12.80所示,然而,在IPv6網絡中,對目标MAC位址的發現不再是通過ARP協定來完成。因為IPv6放棄了廣播的使用,在IPv6的網絡環境中已經不存在廣播這個概念了,而ARP位址解析協定是基于廣播進行工作的,是以對于IPv6的網絡環境而言,ARP協定被永遠的放棄。取而代之的是ICMPv6的鄰居請求消息(ICMPv6消息類型135)、鄰居公告消息(ICMPv6消息類型136)來完成對MAC位址的解析。在這個過程中需要使用一個請求節點多點傳播位址(FF02::1FFxx:xxxx),請求節點組位址在前面的小節有詳細的描述。請參考如圖12.81所示。

<a target="_blank" href="http://blog.51cto.com/attachment/201312/131057461.png"></a>

了解:ICMPV6代替IPV4中的ARP進行IPv6的MAC位址解析

<a target="_blank" href="http://blog.51cto.com/attachment/201312/131253486.png"></a>

第一步:如圖12.82所示,了解鄰居接點請求(135消息類型):使用路由器節點的IPv6的本地鍊路位址FEC0::0204:27FF:FEF1:71A0通過指令ping通路主機節點的本地鍊路位址FEC0:0230:18FF:FEAA:4C3E,但是路由器不知道主機的MAC位址。此時路由器就通過源位址FEC0::0204:27FF:FEF1:71A0發送ICMPv6類型為135的資訊(鄰居請求消息)給目标為節點多點傳播位址FF02::1:FFAA:4C3E。此時源MAC為:000427F17A0,也就是路由器E0/0接口的MAC位址,目标MAC為節點多點傳播IPv6位址的MAC:3333FFAA4C3E。

注意:在IPv4的環境中ARP的請求消息中的目标IP位址是255.255.255.255(網絡層的廣播位址);目标MAC位址是FFFF.FFFF.FFFF(資料鍊路層的廣播位址)而IPv6中的鄰居接點請求(135消息類型)使用的目标網絡層位址是IPV6的節點多點傳播位址FF02::1:FFAA:4C3E。目标鍊路層位址為3333FFAA4C3E,事實上在IPv6中的鄰居接點請求消息中的目标鍊路層位址是通過目标網絡層IPv6位址而生成的.

第二步:如圖12.83所示,了解鄰居節點公告(136消息類型):主機通過本地鍊路位址偵聽并擷取了多點傳播位址的鄰居請求消息,接下來,主機就發送鄰居公告消息(ICMPv6消息類型136)給路由器,該消息當中包含了源IPv6位址為FEC0:0230:18FF:FEAA:4C3E,源MAC為IPv6主機的MAC位址003018AA4C3E,目标IPv6位址為FEC0::0204:27FF:FEF1:71A0,目标MAC為000427F17A0,也就是路由器E0/0接口的MAC位址。當路由器收到該消息後,就會解開該資料包,擷取需要的IP位址與MAC位址的對應關系。最後進行正式的通信

注意:對于請求節點多點傳播位址(FF02::1FFxx:xxxx)其中FF02::1FF是固定部分,而xx:xxxx是目标IP的後24bit所組成,如目标IP位址為FEC0:0230:18FF:FEAA:4C3E,那麼請求節點多點傳播位址就為FF02::1FFAA:4C3E,其中AA:4C3E就是目标IPv6的後24bit。

示範:驗證IPv6主機使用ICMPv6的鄰居請求與鄰居公告原理

上一小節對基于ICMPv6消息的鄰居發現協定(NDP)進行理論分析,為了加強對理論的了解在本小節将使用協定分析器去驗證ICMPv6的幾個關鍵的消息。在這裡以驗證ICMPv6的鄰居發現與鄰居公告(135與136消息)

<a target="_blank" href="http://blog.51cto.com/attachment/201312/131557185.png"></a>

示範目标:使用協定分析器分析鄰居發現協定(ICMPv6類型135,136)消息。

示範環境:示範環境如圖12.83所示。

示範背景:分别在路由器NS與路由器NA的E1/0接口上配置IPv6的位址,此時在任何的一台路由器上去發起Ping的指令。在正式資料通信前,首先是通過ICMPv6類型135,136消息實作對目标Ipv6主機的MAC解析。事實上這個過程在Ipv4的環境中是通過ARP位址解析協定完成,而在Ipv6的環境中ICMPv6類型135,136消息将替代Ipv4環境中的ARP位址解析協定對ICMPv6類型135,136消息資料進行分析,接合理論更好的了解ICMPv6類型135,136消息是如何去替代ARP協定。

第一步:配置路由器NS與路由器NA的IPV6位址。

路由器NS的配置:

NS(config)#ipv6 unicast-routing        *打開IPv6的單點傳播路由功能

NS (config)#interfaceethernet 1/0     *進入接口模式

NS (config-if)#ipv6 address2001::1/64 *配置字首為64位的IPv6位址

NS (config-if)#no shutdown             *啟動接口

路由器NA的配置:

NA(config)#ipv6 unicast-routing        *打開IPv6的單點傳播路由功能

NA (config)#interfaceethernet 1/0     *進入接口模式

NA (config-if)#ipv6 address2001::2/64 *配置字首為64位的IPv6位址

NA (config-if)#no shutdown             *啟動接口

第二步:開啟協定分析器,準備捕獲ICMP135、136消息。在路由器NS上使用指令“ping”去通路路由器NA,讓其産生ICMPv6的資料包,如圖12.84所示。注意必須首先打開協定分析器再發起ping指令,否則可能無法捕獲ICMPv6的135、136消息。

<a target="_blank" href="http://blog.51cto.com/attachment/201312/131749761.png"></a>

第三步:當完成ping通信後,讓協定分析器停止對資料封包的捕獲,可得到如圖圖12.85所示,關于ICMPv6鄰居請求和鄰居公告消息所示的資料幀。然後分别展開資料幀Neighbor Solicitation和資料幀Neighbor Advertisement,結合上一小節内容來分析鄰居請求(ICMPv6類型135)封包和鄰居公告(ICMPv6類型136)封包的資料幀。具體如圖12.86和圖12.87所示。

<a target="_blank" href="http://blog.51cto.com/attachment/201312/131904960.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201312/131959452.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201312/132001440.png"></a>

本文轉自 kingsir827 51CTO部落格,原文連結:http://blog.51cto.com/7658423/1339259,如需轉載請自行聯系原作者

繼續閱讀