我是靠谱客的博主 奋斗过客,最近开发中收集的这篇文章主要介绍ipv6邻居发现(Neighbor Discovery rfc2461)
原理
IPv6定义了邻居发现协议(Neighbor Discovery protocol,NDP),它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。通过这些信息,实现了对以下功能的支持: 特殊的组播地址
all-no,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
- 原理
- IPv6定义了邻居发现协议(Neighbor Discovery protocol,NDP),它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。通过这些信息,实现了对以下功能的支持:
- 特殊的组播地址
- all-node multicast address: FF02::1
- all-router multicast address: FF02::2
- unspecified address: 0:0:0:0:0:0:0:0
- Neighbor Discovery 用到的几种数据包
- Router Solicitation Message(路由器请求消息)
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 说明:Type=133,code=0,option中可能包含着发送者的链路本地地址
- 功能:由主机(host)发送,主要作用是让网络中的路由器尽快发送路由器公告
- Router Advertisement Message
- 格式:
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O| Reserved | Router Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reachable Time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Retrans Timer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 说明:
- IP头中:源地址必须是分配给发送该报文的接口的链路本地地址
- IP头中:目的地址是之前收到的路由器请求报文中的源地址或者是all-node的组播地址FF02::1
- type=134,code=0
- M标志位置上的时候,网络中的主机(host)使用有状态的(stateful)地址自动配置方式进行地址配置,也就是通过DHCP V6服务器进行地址的管理。M标志位没有置上的时候,采用无状态的地址配置,也就是使用RA公告中的前缀进行地址自动配置
- O标志位?涉及哪些参数?需要进一步细化
- Router Lifetime:仅仅在路由器宣告自己是默认路由器的时候才有值,如果其值为0,表示该路由器不能作为主机的默认路由器
- Reachable Time:在收到邻居可达的确认信息后,在此时间内默认邻居是可达的
- Retrans Timer:用于地址解析和邻居可达性检测功能中,主要是指邻居请求(Neighbor Solicitation)报文的发送间隔时间
- 目前一些常用的选项Option
- 源link-local address
- MTU
- 前缀信息(Prefix address information)
- 功能:
- Neighbor Solicitation Message
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 说明:type=135,code=0;
- 功能:邻居请求报文用于请求本地网络中其他设备的链路本地地址,同时也将自己的链路层地址(MAC地址)发布出去。当设备需要请求另一个设备的链路层地址的时候,其目的地址是组播。当其仅仅是想进行可达性检测的时候,目的地址使用单播地址
- Neighbor Advertisement Message
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- IP头中的目的地址:如果是响应邻居请求报文的,则目的地址是触发发送邻居通告的邻居请求报文的源地址,而如果之前的邻居请求报文中的源地址为全0(unspecified address)则目的地址是all-node multicast address.
- type=136,code=0;
- R:路由器标识,当该标识置上的时候,表示发送者是一个路由器
- S:solicited flag,用这个标识来表示该邻居公告是否是用来响应邻居请求报文的。
- O:override flag,用于指示收到此NA报文的设备,需要覆盖和重写现有缓存中相应的邻居信息表项
- 选项:target link-local address,对于响应目的地址是组播地址的邻居请求报文,必须包含这个选项,对于响应目的地址是单播地址的邻居请求报文,则只是should包含这个选项,这一点没有非常理解
- 功能
- Redirect Message
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 上面要注意一点就是target address是指新的下一跳,destination address是指数据包的目的地址
- 功能:重定向的主要功能是当路由器处理某个报文时,发现它自己并不是到达目的地最佳的下一跳,于是就发消息通知主机最佳的下一跳不是自己,而是其它设备
- 邻居发现协议与IPv4地址解析协议有什么区别?
- IPv6不再执行地址解析协议(ARP)或反向地址解析协议(RARP),而以邻居发现协议中的相应功能代替,IPv6邻居发现协议与IPv4地址解析协议主要区别如下:
- IPv4中地址解析协议ARP是独立的协议,负责IP地址到链路层地址的转换,对不同的链路层协议要定义不同的ARP协议。IPv6中邻居发现协议NDP包含了ARP的功能,且运行于因特网控制报文协议ICMPv6上,更具有一般性,包括更多的内容,而且适用于各种链路层协议;
- ARP协议以及ICMPv4路由器发现和ICMPv4重定向报文基于广播,而NDP协议的邻居发现报文基于高效的组播和单播;
- 可达性检测的目的是确认相应IP地址代表的主机或路由器是否还能收发报文,IPv4没有统一的解决方案。NDP中定义了可达性检测过程,保证IP报文不会发送给“黑洞”。
- IPv6定义了邻居发现协议(Neighbor Discovery protocol,NDP),它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。通过这些信息,实现了对以下功能的支持:
- all-node multicast address: FF02::1
- all-router multicast address: FF02::2
- unspecified address: 0:0:0:0:0:0:0:0
- Router Solicitation Message(路由器请求消息)
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 说明:Type=133,code=0,option中可能包含着发送者的链路本地地址
- 功能:由主机(host)发送,主要作用是让网络中的路由器尽快发送路由器公告
- Router Advertisement Message
- 格式:
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O| Reserved | Router Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reachable Time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Retrans Timer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 说明:
- IP头中:源地址必须是分配给发送该报文的接口的链路本地地址
- IP头中:目的地址是之前收到的路由器请求报文中的源地址或者是all-node的组播地址FF02::1
- type=134,code=0
- M标志位置上的时候,网络中的主机(host)使用有状态的(stateful)地址自动配置方式进行地址配置,也就是通过DHCP V6服务器进行地址的管理。M标志位没有置上的时候,采用无状态的地址配置,也就是使用RA公告中的前缀进行地址自动配置
- O标志位?涉及哪些参数?需要进一步细化
- Router Lifetime:仅仅在路由器宣告自己是默认路由器的时候才有值,如果其值为0,表示该路由器不能作为主机的默认路由器
- Reachable Time:在收到邻居可达的确认信息后,在此时间内默认邻居是可达的
- Retrans Timer:用于地址解析和邻居可达性检测功能中,主要是指邻居请求(Neighbor Solicitation)报文的发送间隔时间
- 目前一些常用的选项Option
- 源link-local address
- MTU
- 前缀信息(Prefix address information)
- 功能:
- Neighbor Solicitation Message
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 说明:type=135,code=0;
- 功能:邻居请求报文用于请求本地网络中其他设备的链路本地地址,同时也将自己的链路层地址(MAC地址)发布出去。当设备需要请求另一个设备的链路层地址的时候,其目的地址是组播。当其仅仅是想进行可达性检测的时候,目的地址使用单播地址
- Neighbor Advertisement Message
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- IP头中的目的地址:如果是响应邻居请求报文的,则目的地址是触发发送邻居通告的邻居请求报文的源地址,而如果之前的邻居请求报文中的源地址为全0(unspecified address)则目的地址是all-node multicast address.
- type=136,code=0;
- R:路由器标识,当该标识置上的时候,表示发送者是一个路由器
- S:solicited flag,用这个标识来表示该邻居公告是否是用来响应邻居请求报文的。
- O:override flag,用于指示收到此NA报文的设备,需要覆盖和重写现有缓存中相应的邻居信息表项
- 选项:target link-local address,对于响应目的地址是组播地址的邻居请求报文,必须包含这个选项,对于响应目的地址是单播地址的邻居请求报文,则只是should包含这个选项,这一点没有非常理解
- 功能
- Redirect Message
- 格式
- 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- 上面要注意一点就是target address是指新的下一跳,destination address是指数据包的目的地址
- 功能:重定向的主要功能是当路由器处理某个报文时,发现它自己并不是到达目的地最佳的下一跳,于是就发消息通知主机最佳的下一跳不是自己,而是其它设备
- IPv6不再执行地址解析协议(ARP)或反向地址解析协议(RARP),而以邻居发现协议中的相应功能代替,IPv6邻居发现协议与IPv4地址解析协议主要区别如下:
- IPv4中地址解析协议ARP是独立的协议,负责IP地址到链路层地址的转换,对不同的链路层协议要定义不同的ARP协议。IPv6中邻居发现协议NDP包含了ARP的功能,且运行于因特网控制报文协议ICMPv6上,更具有一般性,包括更多的内容,而且适用于各种链路层协议;
- ARP协议以及ICMPv4路由器发现和ICMPv4重定向报文基于广播,而NDP协议的邻居发现报文基于高效的组播和单播;
- 可达性检测的目的是确认相应IP地址代表的主机或路由器是否还能收发报文,IPv4没有统一的解决方案。NDP中定义了可达性检测过程,保证IP报文不会发送给“黑洞”。
最后
以上就是奋斗过客为你收集整理的ipv6邻居发现(Neighbor Discovery rfc2461) 原理 IPv6定义了邻居发现协议(Neighbor Discovery protocol,NDP),它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。通过这些信息,实现了对以下功能的支持: 特殊的组播地址 all-no的全部内容,希望文章能够帮你解决ipv6邻居发现(Neighbor Discovery rfc2461) 原理 IPv6定义了邻居发现协议(Neighbor Discovery protocol,NDP),它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。通过这些信息,实现了对以下功能的支持: 特殊的组播地址 all-no所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复