IPV6报文怎么进行通信

描述

转载请注明以下内容:

来源:公众号【网络技术干货圈】

作者:圈圈

ID:wljsghq

IPV6基础之邻居发现

写这篇文章的启发是在群里,看到一个小兄弟说有尝做一道IPV6的基础题,看到该消息想着自己也没啥事,就做一下,弄个饭钱也还行,然后就开始了。

拓扑图为题目的拓扑

通信

拓扑图以上图为例子:

接下来就分析一下ipv6报文是怎么进行通信的

在IPV4中,当主机需要和目标主机通信时,必须先通过ARP协议获得目的主机的链路层地址。在IPV6中,同样需要从IP地址解析到链路层地址的功能。邻居发现协议实现了这个功能。

ARP报文是直接封装在以太网报文中,以太网协议类型为0x0806,普遍观点认为ARP定位为2.5层的协议。ND本身基于ICMPV6实现,以太网协议类型为0x86DD,即IPV6报文,IPV6下一个报头字段值为58,表示ICMPV6报文,由于ND协议使用的所有报文均封装在ICMPV6报文中,一般来说,ND被看作第3层的协议。在第三层完成地址解析,主要带来以下几个好处:

(1)地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。

(2)可以使用三层的安全机制避免地址解析攻击

(3)使用组播方式发送请求报文,减少了二层网络的性能压力。

通过一个图展示请求跟通告的流程

通信

IPV6邻居请求

以上图为例,当PC2访问PC1时,在PC1接口上抓包,看到的邻居发现报文是什么样的?

通信

邻居请求

IPv6节点通过邻居请求NS(Neighbor Solicitation)消息可以得到邻居的链路层地址,检查邻居是否可达,也可以进行重复地址检测。

type值位135为NS报文

请求的目标的IP地址

请求目标IP地址是什么东西?

从上图来来讲,就是我路由器要去访问PC1,那么我知道PC1的的IP地址,但是我不知道他的MAC地址,我要去根据IP地址找到他的MAC地址。

在报文中,这个请求的目标IP地址是放在Target Address字段里面的,它必须不是多播地址。

ICMPV6 Option字段

Source link-layer address源链路层地址:发送者的链路层地址,如果知道。如果Source Address是未指定地址,必须不包括在内。否则,有地址的链路层上应当包括源链路层地址。

被请求组播地址的组成

首先我们看到报文,从三层开始分析

发起这个报文的源地址是一个链路本地地址,而这个地址刚好是R路由器和PC1所连接的接口地址,这说明了在路由器上不存在着PC1的MAC地址,无法进行普通报文的二层封装,需要获取到MAC地址以此来封装目的MAC。

然后我们看三层报文中的目的地址是一个不认识的地址,那么这个地址是从什么地方而来的呢?这又是干什么的?

在图中我们把这个地址标注为被请求节点组播地址,那么这个被请求节点组播地址是用来干什么的?

我们现在就对这个被请求节点组播地址来分析一下看它的地址,把这个地址分为三部分来看

ff02:ff3a:a9d1

首先ff02::1是一个组播地址,简单理解组播地址就是同一个组的地址都能接受到该报文。

然后在看ff02:ff

先看前面这104位地址,这104位地址的组成是在组播地址后面加了两个ff,这就是在RFC中规定的被请求节点组播地址的前缀

然后我们看后面24位地址

3a:a9d1这串数字在上面的图中看着是不是有点眼熟呢?

观察一下,请求的单播地址,也就是PC1的地址最后面的24位数字不就是3a:a9d1,这样一看,原来他们之间还是有关联的

在R路由器发起这个报文的时候,目的地址其实就是PC1。

被请求节点组播MAC的组成

以太网传输IP单播报文的时候,链路层封装的目的MAC地址使用的是接收者的MAC地址。但是在传输组播数据时,其目的地不再是一个具体的接收者,而是一个成员不确定的组,因此在数据链路层使用的是组播MAC地址。在802.3标准中,MAC地址的高字节最低bit位是组播地址标识位,该bit为1,表示该地址为组播MAC地址。广播MAC地址可以看作是组播的特殊形式:0xFFFF-FFFF-FFFF。

IANA规定,IPv6组播MAC地址的高16位为0x3333,低32位为IPv6组播地址的低32位。

安装IANA规定我们来解析一下这个被请求节点组播MAC是否符合规定

我们就先看高16位

33:33 符合IANA规定的高16位对吧

我们在看后面的32位

IPV6组播地址:ff02:ff3a:a9d1

组播MAC地址低位32位:ffa9:d1

完成符合IANA规定的组播MAC

IPV6邻居通告

通信

邻居通告

ICMPv6邻居通告NA(Neighbor Advertisement)消息是IPv6节点对ICMPv6邻居请求NS(Neighbor Solicitation)消息的响应,同时IPv6节点在链路层变化时也可以主动发送NA消息。

对于请求的通告

从图中我们看Target Address字段,他是自身的IPV6地址,这是在给路由器回复确认,你请求的地址给你回复了。

对于请求的通告,是在NS消息(该消息催促这个通告)中的Target Address字段。对于非请求通告,是其链路层地址已经改变的地址。Target Address必须不是多播地址。

ICMPV6 Options字段

Target link-layer address: 目标的链路层地址,即,通告发送者。当响应多播请求时,在有地址的链路层上必须包括此选项。当响应单播Neighbor Solicitation时应当包括此选项,响应自身的MAC地址给路由器。

IPV6邻居表

在IPV4中我们可以通过ARP表项查看IP地址对应的MAC地址和接口,那么在IPV6中我们是不是也有类似ARP表项的一种表呢?

没错,在IPV6中我们可以通过邻居表查看到对应的信息

通过以下命令可以查看邻居表

 

display ipv6 neighbors
# 查看邻居表以及邻居表回显信息
display ipv6 neighbors
-----------------------------------------------------------------------------
IPv6 Address : 20014005211FE3A:A9D1             
Link-layer   : 5489-9821-4f6d                     State : REACH        
Interface    : GE0/0/0                            Age   : 0                   
VLAN         : -                                  CEVLAN: -                   
VPN name     :                                    Is Router: FALSE            
Secure FLAG  : UN-SECURE                          

IPv6 Address : 20014005:9                             
Link-layer   : 5489-9807-7f7c                     State : REACH        
Interface    : GE0/0/1                            Age   : 0                   
VLAN         : -                                  CEVLAN: -                   
VPN name     :                                    Is Router: FALSE            
Secure FLAG  : UN-SECURE                          

IPv6 Address : 20014005:10                            
Link-layer   : 5489-985b-37db                     State : REACH        
Interface    : GE0/0/1                            Age   : 0                   
VLAN         : -                                  CEVLAN: -                   
VPN name     :                                    Is Router: FALSE            
Secure FLAG  : UN-SECURE                          

-----------------------------------------------------------------------------
Total: 3       Dynamic: 3       Static: 0      


 

回显字段解释

项目 描述
IPv6 Address 邻居的IPv6地址。
Link-layer 邻居的链路层地址(邻居的MAC地址)。
State 邻居项的状态,有以下5种状态: INCMP:邻居不可达。正在进行地址解析,邻居的链路层地址未探测到,如果解析成功,则进入REACH状态。 REACH:邻居可达。表示在规定时间(邻居可达时间,缺省情况下是30秒)内邻居可达。如果超过规定时间,该表项没有被使用,则表项进入STALE状态。 STALE:邻居是否可达未知。表明该表项在规定时间(邻居可达时间,缺省情况下是30秒)内没有被使用。此时除非有发送到邻居的报文,否则不对邻居是否可达进行探测。 DELAY:邻居是否可达未知。已向邻居发送报文,如果在指定时间内没有收到响应,则进入PROBE状态。 PROBE:邻居是否可达未知。已向邻居发送邻居请求报文,探测邻居是否可达。在规定时间内收到回复,则进入REACH状态;没有收到回复,则进入INCMP状态。
Interface 邻居项所属的接口名称。
Age 邻居项的建立时间,分为静态和动态两种情况: 静态项显示“–”。 动态项显示上次可达以来经过的时间(单位是分钟),如果始终不可达则显示“#”(只适用于动态项)。
VLAN 邻居所属的VLAN编号。
VPN name 邻居所属的VPN实例名称。
CEVLAN 内层VLAN编号。
Is Router 邻居发送的NA报文中是否携带R标记: 当NA报文中携带R标记时,则显示“TRUE”。此时邻居是路由设备。 当NA报文中没有携带R标记时,则显示“FALSE”。此时邻居可能是PC或者是发送的NA报文中没有携带R标记的路由设备。
Secure FLAG 该邻居表项是否安全,分为安全和非安全两种情况: 如果是静态邻居表项或邻居使能了邻居安全功能则显示“SECURE”。 如果邻居没有使能安全功能,并且是动态邻居表项则显示“UN-SECURE”。
Total 所有的邻居表项数目。
Dynamic 动态邻居表项数目。
Static 静态邻居表项数目。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分