理解并取证:ICMPV6代替IPV4中的ARP进行IPv6的MAC地址解析-阿里云开发者社区

开发者社区> 开发与运维> 正文

理解并取证: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地址的对应关系。


130929375.png

在传统的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所示。

131057461.png


理解:ICMPV6代替IPV4中的ARP进行IPv6的MAC地址解析


131253486.png


第一步:如图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消息)


131557185.png

演示目标:使用协议分析器分析邻居发现协议(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             *启动接口


第二步开启协议分析器准备捕获ICMP135136消息。在路由器NS上使用命令“ping”去访问路由器NA让其产生ICMPv6的数据包如图12.84所示。注意必须首先打开协议分析器再发起ping指令,否则可能无法捕获ICMPv6的135、136消息。


131749761.png

第三步:当完成ping通信后,让协议分析器停止对数据报文的捕获,可得到如图图12.85所示,关于ICMPv6邻居请求和邻居公告消息所示的数据帧。然后分别展开数据帧Neighbor Solicitation和数据帧Neighbor Advertisement,结合上一小节内容来分析邻居请求(ICMPv6类型135)报文和邻居公告(ICMPv6类型136)报文的数据帧。具体如图12.86图12.87所示。

131904960.png


131959452.png

132001440.png



本文转自 kingsir827 51CTO博客,原文链接:http://blog.51cto.com/7658423/1339259,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章