精华内容
下载资源
问答
  • IPv6邻居发现协议

    万次阅读 多人点赞 2018-05-26 23:30:38
    邻居发现协议NDP 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它...

    邻居发现协议NDP

    邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。

    地址解析

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

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

    • 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
    • 可以使用三层的安全机制避免地址解析攻击。
    • 使用组播方式发送请求报文,减少了二层网络的性能压力。

    地址解析过程中使用了两种ICMPv6报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA(Neighbor
    Advertisement)。

    • NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
    • NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。

    IPv6地址解析过程分析:

    这里写图片描述

    图:IPv6地址解析过程
    1. Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文,其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。
    2. 当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。

    报文抓包分析:

    拓扑如下:

    这里写图片描述

    图:地址解析拓扑示例

    地址解析过程分析:

    1. 首先在两端各配上IPv6地址,然后在AR1上ping ipv6 -a 2000::1 2000::2。抓包如下:

    这里写图片描述

    图:ping ipv6 -a 2000::1 2000::2抓包

    1. NS报文内容如下:

    这里写图片描述

    图:第一个NS报文

    AR1会以2000::1作为源地址,目标地址为2000::2的被请求节点组播地址 ff02::1:ff00:2。然后将AR1的MAC地址携带在ICMPc6的Option中。在ICMPv6中还会携带Target Address:2000::2,这个用来防止在广播网中有多个前缀不同,最后24bit相同,而造成的混乱。携带这个字段后,当主机收到这个报文后,会首先检查该字段是否是自己的IPv6地址,如果是,则接收并回应NA报文。如果该字段的地址不是自己的IPv6地址,则丢弃。

    1. NA报文内容如下:

    这里写图片描述

    图:NA报文抓包

    当AR2收到AR1发送的NA报文后,检查Target Address字段,如果是自己的IPv6地址,接收,并将对端的IP地址和MAC地址绑定到自己的邻居表中。然后以自己IPv6地址2000::2为源地址,对端IPv6地址:2000::1为目的地址。并将自己的MAC地址封装在ICMPv6的Option中,发送给对方。从而两端都知道了对方的MAC地址。可以进行二次封装。

    邻居通告报文中Flags字段解释:

    1. R:路由器标记。当置1时,R位指出发送者是路由器。R位由Neighbor Unreachability Detection使用,用于检测改变为主机的路由器。
    2. S:请求标记。当置1时,S位指出通告被发送以响应来自目的地地址的Neighbor Solicitation。S位用作Neighbor Unreachability Detection的可达性确认。在多播通告和非请求单播通告中置0。
    3. O:替代标记。替代标志,1表示通告中的信息替代缓存,如更新链路层地址时,对于任播的回应则不应置位。在针对任播地址的请求通告中,以及在请求的前缀通告中它不能被置1。在其他请求通告中和在非请求通告中它应当被置1。
    4. Target Address:对于请求的通告,是在Neighbor Solicitation消息(该消息催促这个通告)中的Target Address字段。对于非请求通告,是其链路层地址已经改变的地址。Target Address必须不是多播地址。

    跟踪邻居状态

    通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。

    RFC2461中定义了5种邻居状态,分别是:

    1. 未完成(Incomplete)
    2. 可达(Reachable)
    3. 陈旧(Stale)
    4. 延迟(Delay)
    5. 探查(Probe)

    邻居状态的具体迁移过程如下图所示:

    这里写图片描述

    图:邻居状态迁移的具体过程

    下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。

    1. A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
    2. 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
    3. 经过邻居可达时间,邻居状态由Reachable(默认30s)变为Stale,即未知是否可达。
    4. 如果在Reachable状态,A收到B的非请求NA报文(MAC地址修改),且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
    5. 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
    6. 在经过一段固定时间后,邻居状态由Delay(默认5s)变为Probe(每隔1s发送一次NS报文,连续发送3次),其间若有NA应答,则邻居状态由Delay变为Reachable。
    7. 在Probe状态,A每隔一定时间间隔z(1s)发送单播NS,发送固定次数(3)后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。

    这里写图片描述

    图:IPv6邻居状态

    重复地址检测

    重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。

    IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。

    重复地址检测原理如下:

    这里写图片描述

    图:重复地址检测原理

    Host A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址。Host A向FC00::1的Solicited-Node组播组发送一个以FC00::1为请求的目标地址的NS报文进行重复地址检测,由于FC00::1并未正式指定,所以NS报文的源地址为未指定地址。当Host B收到该NS报文后,有两种处理方法:

    1. 如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会发送NA报文。
    2. 如果Host B发现FC00::1是一个已经正常使用的地址,Host B会向FF02::1发送一个NA报文,该消息中会包含FC00::1。这样,Host A收到这个消息后就会发现自身的试验地址是重复的。Host A上该试验地址不生效,被标识为duplicated状态。

    当两端同时检测时情况如下:

    这里写图片描述

    图:两端同时进行检测的情况
    • 若2个节点配置相同地址,同时作重复地址检测时,该地址处于Tentative状态,当一方收到对方发出的DAD NS,则接收方将不启用该地址
    • 一种极端的情况,如果同时收到NS报文,则两端都放弃改地址

    抓包分析:

    这里写图片描述

    图:地址冲突检测拓扑

    当在AR3上配置2000::1/64地址时,AR3首先会以 :: 为源地址,以自己配置的2000::1的被请求节点组播地址为目的地址,发送NS报文。如果有来自2000::1的NA回复,则该地址不能用。如果没收到,则该地址可以使用。
    这里写图片描述

    图:重复地址检测NS报文

    在这个报文中因为AR1上已经使用了2000::1/64地址,所以会回复一个NA。如下:

    这里写图片描述

    图:AR1回复的NA

    IPv6地址生命周期:

    这里写图片描述

    图:IPv6地址生命周期

    在preferred time和valid lifetime之间叫做deprecated(弃用)状态,当地址达到这个时间段的时候,地址不能主动的发起连接只能是被动的接受连接,过了valid lifetime时间,地址就变为invalid,这时任何连接就会down掉。

    路由器发现

    路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。

    在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:

    • 路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
      这里写图片描述

    图:RA邻居通告报文抓包示例

    RA报文中字段解释:

    1. Cur Hop Limit:默认值应当放置在发出IP分组的IP首部的Hop Count字段中。 取0值意味着未(由该路由器)规定。
    2. M:M位为0表示无状态自动配置生成IPv6地址,如果M=1表示需要通过有状态(DHCPv6)方式获取ipv6地址。
    3. O:O位为0表示除了IPv6地址以外的其他参数需要通过无状态自动配置获取,如果O=1表示除了IPv6地址以外的其它需要通过有状态(DHCPv6)方式进行获取。
    4. Router Lifetime:与默认路由器关联的生存期,以秒为单位。最大值18.2小时。取0值的Lifetime指出路由器不是默认路由器并且不应当出现在默认路由器列表中。Router Lifetime仅适用于作为默认路由器的路由器应用;对包括在其他消息字段或选项中的信息不适用。需要对它们的信息规定时间限制的选项有它们自己的生存期字段。
    5. Reachable time:此时间以毫秒计,在收到可达性确认后节点假定该邻居是可到达的。它由Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
    6. Retrans Timer:重发的Neighbor Solicitation消息间隔时间,以毫秒计。由地址解析和Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
    7. ICMP Prefix Option中的flag字段:
      1. aoto-config:如果该位为1表示该前缀可以用于无状态自动配置,如果为0不能用于无状态自动配置。
      2. on-link:指定0-flag标识位。若配置该参数,则只会本地链路内的主机RA报文中的前缀不是分配给本地链路的。主机若想该前缀指定的地址发送报文时,需要经过默认路由器转发。
    • 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文的Tpye字段值为133。
      这里写图片描述
      图:RS报文抓包示例

    路由器发现功能如下图所示:

    这里写图片描述

    图:路由器发现功能示例

    RA在华为中的通告时间有两种:

    1. min-interval=200s。
    2. max-interval=600s。

    地址自动配置:

    IPv4使用DHCP实现自动配置,包括IP地址,缺省网关等信息,简化了网络管理。IPv6地址增长为128位,且终端节点多,对于自动配置的要求更为迫切,除保留了DHCP作为有状态自动配置外,还增加了无状态自动配置。无状态自动配置即自动生成链路本地地址,主机根据RA报文的前缀信息,自动配置全球单播地址等,并获得其他相关信息。

    IPv6主机无状态自动配置过程:

    1. 根据接口标识产生链路本地地址。
    2. 发出邻居请求,进行重复地址检测。
    3. 如地址冲突,则停止自动配置,需要手工配置。
    4. 如不冲突,链路本地地址生效,节点具备本地链路通信能力。
    5. 主机会发送RS报文(或接收到设备定期发送的RA报文)。
    6. 根据RA报文中的前缀信息和接口标识得到IPv6地址。

    默认路由器优先级和路由信息发现:

    当主机所在的链路中存在多个设备时,主机需要根据报文的目的地址选择转发设备。在这种情况下,设备通过发布默认路由优先级和特定路由信息给主机,提高主机根据不同的目的地选择合适的转发设备的能力。

    在RA报文中,定义了默认路由优先级和路由信息两个字段,帮助主机在发送报文时选择合适的转发设备。

    主机收到包含路由信息的RA报文后,会更新自己的路由表。当主机向其他设备发送报文时,通过查询该列表的路由信息,选择合适的路由发送报文。

    主机收到包含默认设备优先级信息的RA报文后,会更新自己的默认路由列表。当主机向其他设备发送报文时,如果没有路由可选,则首先查询该列表,然后选择本链路内优先级最高的设备发送报文;如果该设备故障,主机根据优先级从高到低的顺序,依次选择其他设备。

    重定向

    当网关设备发现报文从其它网关设备转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关设备。重定向报文也承载在ICMPv6报文中,其Type字段值为137,报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。

    重定向示例:

    这里写图片描述

    图:重定向示例

    Host A需要和Host B通信,Host A的默认网关设备是Router A,当Host A发送报文给Host B时报文会被送到Router A。Router A接收到Host A发送的报文以后会发现实际上Host A直接发送给Router B更好,它将发送一个重定向报文给主机A,其中报文中更好的路径下一跳地址为Router B,Destination Address为Host B。Host A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往Host B的报文就直接发送给Router B。

    当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:

    • 报文的目的地址不是一个组播地址。
    • 报文并非通过路由转发给设备。
    • 经过路由计算后,路由的下一跳出接口是接收报文的接口。
    • 设备发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
    • 设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。

    参考文档:华为HedEx文档


    展开全文
  • IPv6邻居发现协议.pdf

    2021-09-14 11:45:14
    IPv6邻居发现协议.pdf
  • IPv6-邻居发现协议介绍 报文格式说明 邻居发现协议功能 路由器和前缀发现 地址解析(AR) 可达性验证(NUD) 重复地址检测(DAD)
  • YD-T 1343-2005 IPv6邻居发现协议——基于IPv6的邻居发现协议.pdf
  • ipv6邻居发现协议ppt

    2011-06-27 13:04:15
    ipv6 邻居发现协议 ppt 教学 教程
  • 设计邻居发现协议:基于代码的方法
  • IPV6邻居发现协议

    千次阅读 2018-10-23 17:44:35
    NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。 作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达...

    NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。

    作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。如下图:

    一、邻居发现协议功能
    1.地址解析:

    地址解析是一种确定目的节点的链路层地址的方法。NDP中的地址解析功能不仅替代了原IPv4中的ARP,同时还用邻居不可达检测(NUD)方法来维持邻居节点之间的可达性状态信息。

    2.无状态地址配置:

    NDP中特有的地址自动配置机制,包括一些列相关功能,如路由器发现、接口ID自动生成、重复地址监测等。通过无状态自动配置机制,链路上的节点可以自动获得IPv6全球单播地址。

    a)路由器发现:路由器与其他相连的链路上发布网络参数信息,主机捕获此信息后,可以获得全球单播IPv6地址前缀、默认路由、链路参数(链路MTU)等信息。

    b)接口ID自动生成:主机根据EUI-64规范或其他方式为接口自动生成接口标识符。

    c)重复地址监测(DAD):根据前缀信息生成或手动配置IPv6地址后,为保证该地址的唯一性,在其可以使用之前,主机需要检验它是否已被链路上的其他节点所使用。

    d)前缀重新编址:当网络前缀变化时,路由器在与其相连的链路上发布新的网络参数信息,主机捕获这些新信息后,重新配置前缀、链路MTU等地址相关信息。

    3.路由重定向:

    当在本地链路上存在一个更好的到达目的网络的路由器时,路由器需要通告节点来进行相应配置改变。

    二、邻居发现协议报文类型

    ICMPv6类型消息名称说明
    133RS当接口工作时,主机发送路由器请求消息,要求路由器立即产生路由器通告消息,而不必等待下一个预定时间。
    134RA路由器周期性地通告它的存在以及配置的链路和网络参数,或者对路由器请求消息作出响应。
    135NS节点发送邻居请求消息来请求邻居的链路层地址,以验证它先前所获取并保存在缓存中的邻居链路层地址的可达性,或者验证它自己的地址在本地链路是唯一的。
    136NA邻居请求消息的响应。节点也可以发送非请求邻居通告来指示链路层地址的变化
    137Redirect对于特定的目的地址,如果不是最佳路由,路由器则通知主机到达目的的最佳下一跳

    三、邻居发现相对于IPv4的改进

    • 邻居不可达检测是基础协议的一部分,在路由器出错或链路接口改变的情况下,改善了数据包的传输;
    • 路由器通告和ICMP重定向使用本地链路地址来识别路由器,即便网络重新编码,与路由器的关系可以保持;
    • 邻居发现协议被用来检测一个连路上重复的IP地址;
    • 路由器发现是基础协议的一部分,IPv4需要从路由表中获取信息;
    • 路由器通告数据包中包含了路由器的链路层地址,节点无需再请求;
    • 重定向消息包含了路由器的链路层地址,节点无需再请求;
    • 路由器通告数据中包含了一个链路的前缀(子网信息),无需再配置子网掩码;
    • 路由器通告消息不再包含优先级,代表稳定性,由邻居发现协议来确保可达;
    • 邻居发现提供了一种易于对网络重新编号的机制,引入新的前缀和地址;
    • 路由器通告使得无状态自动配置成为可能,可以通知何时使用有状态地址配置;
    • ICMP实现链路层地址解析,与arp相比可以实现与传播介质无关,更加通用,可以实现安全机制;
    • 一个链路可以分配多个前缀。默认路由器知道所有前缀,但路由器也可以配置成不通告前缀,接收到数据包,发送ICMP重定向;
    • 标准身份验证和安全机制可以用于邻居发现。

     

    展开全文
  • IPv6邻居发现协议安全机制研究
  • 1 邻居发现协议NDP 2 地址解析 2.1 IPv6地址解析过程分析 2.2 报文抓包分析 3 跟踪邻居状态 4 重复地址检测 4.1 抓包分析 4.2 IPv6地址生命周期 5 路由器发现 5.1 地址自动配置 5.2 默认路由器优先级和...

    目录

    1 邻居发现协议NDP

    2 地址解析

    2.1 IPv6地址解析过程分析

    2.2 报文抓包分析

    3 跟踪邻居状态

    4 重复地址检测

    4.1 抓包分析

    4.2 IPv6地址生命周期

    5 路由器发现

    5.1 地址自动配置

    5.2 默认路由器优先级和路由信息发现

    6 路由重定向


    1 邻居发现协议NDP

    邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。

    2 地址解析

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

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

    • 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
    • 可以使用三层的安全机制避免地址解析攻击。
    • 使用组播方式发送请求报文,减少了二层网络的性能压力。

    地址解析过程中使用了两种ICMPv6报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA(Neighbor
    Advertisement)。

    • NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
    • NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。

    2.1 IPv6地址解析过程分析

    这里写图片描述

    图:IPv6地址解析过程

    1. Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文,其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。
    2. 当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。

    2.2 报文抓包分析

    拓扑如下:

    这里写图片描述

    图:地址解析拓扑示例

    地址解析过程分析:

    1. 首先在两端各配上IPv6地址,然后在AR1上ping ipv6 -a 2000::1 2000::2。抓包如下:

    这里写图片描述

    图:ping ipv6 -a 2000::1 2000::2抓包

    1. NS报文内容如下:

    这里写图片描述

    图:第一个NS报文

    AR1会以2000::1作为源地址,目标地址为2000::2的被请求节点组播地址 ff02::1:ff00:2。然后将AR1的MAC地址携带在ICMPc6的Option中。在ICMPv6中还会携带Target Address:2000::2,这个用来防止在广播网中有多个前缀不同,最后24bit相同,而造成的混乱。携带这个字段后,当主机收到这个报文后,会首先检查该字段是否是自己的IPv6地址,如果是,则接收并回应NA报文。如果该字段的地址不是自己的IPv6地址,则丢弃。

    1. NA报文内容如下:

    这里写图片描述

    图:NA报文抓包

    当AR2收到AR1发送的NA报文后,检查Target Address字段,如果是自己的IPv6地址,接收,并将对端的IP地址和MAC地址绑定到自己的邻居表中。然后以自己IPv6地址2000::2为源地址,对端IPv6地址:2000::1为目的地址。并将自己的MAC地址封装在ICMPv6的Option中,发送给对方。从而两端都知道了对方的MAC地址。可以进行二次封装。

    邻居通告报文中Flags字段解释:

    1. R:路由器标记。当置1时,R位指出发送者是路由器。R位由Neighbor Unreachability Detection使用,用于检测改变为主机的路由器。
    2. S:请求标记。当置1时,S位指出通告被发送以响应来自目的地地址的Neighbor Solicitation。S位用作Neighbor Unreachability Detection的可达性确认。在多播通告和非请求单播通告中置0。
    3. O:替代标记。替代标志,1表示通告中的信息替代缓存,如更新链路层地址时,对于任播的回应则不应置位。在针对任播地址的请求通告中,以及在请求的前缀通告中它不能被置1。在其他请求通告中和在非请求通告中它应当被置1。
    4. Target Address:对于请求的通告,是在Neighbor Solicitation消息(该消息催促这个通告)中的Target Address字段。对于非请求通告,是其链路层地址已经改变的地址。Target Address必须不是多播地址。

    3 跟踪邻居状态

    通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。

    RFC2461中定义了5种邻居状态,分别是:

    1. 未完成(Incomplete)
    2. 可达(Reachable)
    3. 陈旧(Stale)
    4. 延迟(Delay)
    5. 探查(Probe)

    邻居状态的具体迁移过程如下图所示:

            这里写图片描述

              图:邻居状态迁移的具体过程

    下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。

    1. A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
    2. 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
    3. 经过邻居可达时间,邻居状态由Reachable(默认30s)变为Stale,即未知是否可达。
    4. 如果在Reachable状态,A收到B的非请求NA报文(MAC地址修改),且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
    5. 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
    6. 在经过一段固定时间后,邻居状态由Delay(默认5s)变为Probe(每隔1s发送一次NS报文,连续发送3次),其间若有NA应答,则邻居状态由Delay变为Reachable。
    7. 在Probe状态,A每隔一定时间间隔z(1s)发送单播NS,发送固定次数(3)后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。

         这里写图片描述

                                 图:IPv6邻居状态

    Linux系统查看v6邻居状态命令:

    ​
    [root@Node_B wq]# ping6 5000::200
    PING 5000::200(5000::200) 56 data bytes
    64 bytes from 5000::200: icmp_seq=1 ttl=64 time=0.608 ms
    64 bytes from 5000::200: icmp_seq=2 ttl=64 time=0.100 ms
    ^C
    --- 5000::200 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1258ms
    rtt min/avg/max/mdev = 0.100/0.354/0.608/0.254 ms
    [root@Node_B wq]# ip -6 neighbour
    5000::200 dev eth7 lladdr 00:12:62:e4:99:8d DELAY
    fe80::4f6:d661:1113:faef dev eth7 lladdr fa:16:3e:e5:c6:34 STALE
    fe80::212:62ff:fee4:998d dev eth7 lladdr 00:12:62:e4:99:8d STALE
    fe80::4f6:d661:1113:faef dev eth6 lladdr fa:16:3e:e5:c6:34 STALE
    1:0:0:1::3 dev tap0 lladdr 8a:5b:56:9a:0f:b9 PERMANENT
    [root@Node_B wq]# ip -6 neighbour
    5000::200 dev eth7 lladdr 00:12:62:e4:99:8d REACHABLE
    fe80::4f6:d661:1113:faef dev eth7 lladdr fa:16:3e:e5:c6:34 STALE
    fe80::212:62ff:fee4:998d dev eth7 lladdr 00:12:62:e4:99:8d STALE
    fe80::4f6:d661:1113:faef dev eth6 lladdr fa:16:3e:e5:c6:34 STALE
    1:0:0:1::3 dev tap0 lladdr 8a:5b:56:9a:0f:b9 PERMANENT
    [root@Node_B wq]#

    4 重复地址检测

    重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。

    IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。

    重复地址检测原理如下:

    这里写图片描述

    图:重复地址检测原理

    Host A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址。Host A向FC00::1的Solicited-Node组播组发送一个以FC00::1为请求的目标地址的NS报文进行重复地址检测,由于FC00::1并未正式指定,所以NS报文的源地址为未指定地址。当Host B收到该NS报文后,有两种处理方法:

    1. 如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会发送NA报文。
    2. 如果Host B发现FC00::1是一个已经正常使用的地址,Host B会向FF02::1发送一个NA报文,该消息中会包含FC00::1。这样,Host A收到这个消息后就会发现自身的试验地址是重复的。Host A上该试验地址不生效,被标识为duplicated状态。

    当两端同时检测时情况如下:

    这里写图片描述

    图:两端同时进行检测的情况

    • 若2个节点配置相同地址,同时作重复地址检测时,该地址处于Tentative状态,当一方收到对方发出的DAD NS,则接收方将不启用该地址
    • 一种极端的情况,如果同时收到NS报文,则两端都放弃改地址

    4.1 抓包分析

    这里写图片描述

    图:地址冲突检测拓扑

    当在AR3上配置2000::1/64地址时,AR3首先会以 :: 为源地址,以自己配置的2000::1的被请求节点组播地址为目的地址,发送NS报文。如果有来自2000::1的NA回复,则该地址不能用。如果没收到,则该地址可以使用。
    这里写图片描述

    图:重复地址检测NS报文

    在这个报文中因为AR1上已经使用了2000::1/64地址,所以会回复一个NA。如下:

    这里写图片描述

    图:AR1回复的NA

    4.2 IPv6地址生命周期

    这里写图片描述

    图:IPv6地址生命周期

    在preferred time和valid lifetime之间叫做deprecated(弃用)状态,当地址达到这个时间段的时候,地址不能主动的发起连接只能是被动的接受连接,过了valid lifetime时间,地址就变为invalid,这时任何连接就会down掉。

    5 路由器发现

    路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。

    在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:

    • 路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
      这里写图片描述

    图:RA邻居通告报文抓包示例

    RA报文中字段解释:

    1. Cur Hop Limit:默认值应当放置在发出IP分组的IP首部的Hop Count字段中。 取0值意味着未(由该路由器)规定。
    2. M:M位为0表示无状态自动配置生成IPv6地址,如果M=1表示需要通过有状态(DHCPv6)方式获取ipv6地址。
    3. O:O位为0表示除了IPv6地址以外的其他参数需要通过无状态自动配置获取,如果O=1表示除了IPv6地址以外的其它需要通过有状态(DHCPv6)方式进行获取。
    4. Router Lifetime:与默认路由器关联的生存期,以秒为单位。最大值18.2小时。取0值的Lifetime指出路由器不是默认路由器并且不应当出现在默认路由器列表中。Router Lifetime仅适用于作为默认路由器的路由器应用;对包括在其他消息字段或选项中的信息不适用。需要对它们的信息规定时间限制的选项有它们自己的生存期字段。
    5. Reachable time:此时间以毫秒计,在收到可达性确认后节点假定该邻居是可到达的。它由Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
    6. Retrans Timer:重发的Neighbor Solicitation消息间隔时间,以毫秒计。由地址解析和Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
    7. ICMP Prefix Option中的flag字段:
      1. aoto-config:如果该位为1表示该前缀可以用于无状态自动配置,如果为0不能用于无状态自动配置。
      2. on-link:指定0-flag标识位。若配置该参数,则只会本地链路内的主机RA报文中的前缀不是分配给本地链路的。主机若想该前缀指定的地址发送报文时,需要经过默认路由器转发。
    • 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文的Tpye字段值为133。这里写图片描述

      图:RS报文抓包示例

    路由器发现功能如下图所示:

    这里写图片描述

    图:路由器发现功能示例

    RA在华为中的通告时间有两种:

    1. min-interval=200s。
    2. max-interval=600s。

    5.1 地址自动配置

    IPv4使用DHCP实现自动配置,包括IP地址,缺省网关等信息,简化了网络管理。IPv6地址增长为128位,且终端节点多,对于自动配置的要求更为迫切,除保留了DHCP作为有状态自动配置外,还增加了无状态自动配置。无状态自动配置即自动生成链路本地地址,主机根据RA报文的前缀信息,自动配置全球单播地址等,并获得其他相关信息。

    IPv6主机无状态自动配置过程:

    1. 根据接口标识产生链路本地地址。
    2. 发出邻居请求,进行重复地址检测。
    3. 如地址冲突,则停止自动配置,需要手工配置。
    4. 如不冲突,链路本地地址生效,节点具备本地链路通信能力。
    5. 主机会发送RS报文(或接收到设备定期发送的RA报文)。
    6. 根据RA报文中的前缀信息和接口标识得到IPv6地址。

    5.2 默认路由器优先级和路由信息发现

    当主机所在的链路中存在多个设备时,主机需要根据报文的目的地址选择转发设备。在这种情况下,设备通过发布默认路由优先级和特定路由信息给主机,提高主机根据不同的目的地选择合适的转发设备的能力。

    在RA报文中,定义了默认路由优先级和路由信息两个字段,帮助主机在发送报文时选择合适的转发设备。

    主机收到包含路由信息的RA报文后,会更新自己的路由表。当主机向其他设备发送报文时,通过查询该列表的路由信息,选择合适的路由发送报文。

    主机收到包含默认设备优先级信息的RA报文后,会更新自己的默认路由列表。当主机向其他设备发送报文时,如果没有路由可选,则首先查询该列表,然后选择本链路内优先级最高的设备发送报文;如果该设备故障,主机根据优先级从高到低的顺序,依次选择其他设备。

    6 路由重定向

    当网关设备发现报文从其它网关设备转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关设备。重定向报文也承载在ICMPv6报文中,其Type字段值为137,报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。

    重定向示例:

    这里写图片描述

    图:重定向示例

    Host A需要和Host B通信,Host A的默认网关设备是Router A,当Host A发送报文给Host B时报文会被送到Router A。Router A接收到Host A发送的报文以后会发现实际上Host A直接发送给Router B更好,它将发送一个重定向报文给主机A,其中报文中更好的路径下一跳地址为Router B,Destination Address为Host B。Host A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往Host B的报文就直接发送给Router B。

    当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:

    • 报文的目的地址不是一个组播地址。
    • 报文并非通过路由转发给设备。
    • 经过路由计算后,路由的下一跳出接口是接收报文的接口。
    • 设备发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
    • 设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。
    展开全文
  • 针对已有优化方案在可部署性和性能等方面的不足提出了一种新的嵌套移动网络路由优化方案(NMNRO),通过扩展邻居发现协议,在嵌套移动网络内通告相同的外地前缀,并更新接入路由器的邻居缓存和移动路由器的路由表,...
  • Internet 协议版本 6 网络管理员使用邻居发现协议监视器 (NDPMon) 来监视 ICMPv6 数据包。 NDPMon 使用邻居发现协议 (NDP) 消息观察本地网络是否存在节点功能异常,尤其是在无状态地址自动配置期间。 当 NDP 消息被...
  • IPV6的邻居发现协议

    千次阅读 2019-01-24 22:50:06
    邻居发现协议(neighbor discover protocol NDP) 我们知道IPV6支持即插即用的特性,而这一特性的实现就是通过NDP协议的以下功能实现的。 1.路由器发现——当一个节点链接到一个 ipv6链路上时,它能够发现本地的路由器...

    邻居发现协议(neighbor discover protocol NDP)
    我们知道IPV6支持即插即用的特性,而这一特性的实现就是通过NDP协议的以下功能实现的。
    1.路由器发现——当一个节点链接到一个 ipv6链路上时,它能够发现本地的路由器,而不借助DHCP协议。
    2.前缀发现——当一个节点链接到一个IPV6链路上时,它能够发现分配给该链路的前缀。
    3.参数发现——节点能够发现它所连链路的参数
    4.地址自动配置——节点能够确定自己的完整地址
    5.地址解析——节点不需要ARP协议就可以发现本链路上的其他节点的数据链路层地址。
    6.下一跳确定——一条链路上的节点能够确定到达目的节点的下一跳链路层节点,或本地的目的节点,或到达目的节点的路由器。
    7.邻居不可达检测——节点能够检测到链路上的邻居何时不再可达。
    8.地址冲突检测——节点能够检测到它所使用的地址是否被链路上的其它节点占用。
    9.重定向——对于非链接的目的节点,路由器能通过重定向消息通知主机,该链路上存在比自己更好的下一跳路由器。

    NDP消息通常应该在链路本地范围内收发,因此,封装NDP消息的数据包也始终使用IPV6链路本地地址,或者链路本地范围内的多播地址。为了更进一层的安全性,承载所有NDP消息的IPV6数据包的条数限制都设定为255.如果所收到的数据包的条数限制小于255,就证明该数据包至少经过一台路由器(外来的),因此会丢弃该数据包,这样阻止NDP受到来自不与本地链路相连的源节点的攻击或欺骗。
    NDP为了完成某些功能,它使用了ICMPV6协议来交换一些必要的消息,来看着5个新的ICMPV6消息:
    1.路由器通告(router advertisement RA)消息
    RA消息由路由器发送,用来通告路由器的存在和链路细节参数(链路前缀、链路MTU、跳数限制等)。这些消息可周期发送,也可用来答复路由器请求(作用不同,目的地址不同)
    2.路由器请求(router solicitation RS)消息
    RS消息由主机发起,请求路由器发送RA
    3.邻居请求(neighbor solicitation NS)消息
    NS由节点主机发起,用来请求另一台主机的链路层地址,也用来实现地址冲突检测和邻居不可达检测的功能。
    4.邻居通告(neighbor advertisement NA)消息
    节点主机发送一个NA消息用来响应NS消息。如果一个节点的链路层地址改变了,那么该节点将会主动发送一个NA消息来通告新的链路层地址。
    5.重定向(Redirect)消息
    路由器通告主机去适合网关,该网关是链路上的另一台路由器。

    有状态地址配置:通过DHCPV6服务器获取地址。
    无状态地址配置:主机将自己从RA中获取的链路前缀和自己已经确定的接口ID组合构成IPV6地址。
    私有地址:利用为随机数字算法生成的接口ID(正常一天一边)
    MAC-to-Eui64 :
    第一步:在MAC地址中间插入0xFFFE
    第二步:将整个地址的第7位置反
    通过以上两个步骤形成EUI64接口ID

    如何知道邻居是双向可达的?
    收到一个传输层消息的远程响应消息或收到一个响应请求消息的路由器公告消息(就是互动的消息)

    展开全文
  • ND(neighbor discovery):邻居发现协议 ND协议是IPV6的一个关键协议,它综合了IPV4中的一些协议如ARP、ICMP路由器发现和ICMP重定向等,并对它们做了改进。 二、基本功能: 1.地址解析:已知目的节点的网络层地址,...
  • CISCO CDP邻居发现协议

    2018-09-27 20:18:35
    CDP (Cisco Discovery Protocol)邻居发现协议CDP协议工作在数据链路层,是cisco私有的一种协议,并且和传输介质和与协议无关。只要物理层和数据链路层正常,CDP就可以正常工作。运行在包括的所有Cisco生产的设备:...
  • IPV6邻居发现协议简介

    千次阅读 2016-11-24 09:36:26
    NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测...
  • ND(邻居发现协议)协议是IPv6非常重要的基础协议,协议使用ICMPv6报文,综合了IPv4中一些协议功能,如:ARP,ICMP路由器发现和ICMP重定向等,在第三层上实现的,可以独立于数据链路层协议不受这层协议的影响 ...
  • IPv6 NDP邻居发现协议 1

    万次阅读 2015-11-20 17:17:13
    NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测...
  • 邻居发现协议NDP 简述 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery)...
  • NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测...
  • IPv6 邻居发现协议的国标版本,YD-T 1343-2005
  • 一、IPv6 邻居发现协议介绍 1、IPv6 邻居发现(Neighbor Discovery,ND)协议使用五种类型的ICMPv6 消息,实现下面一些功 能:地址解析、验证邻居是否可达、重复地址检测、路由器发现/前缀发现、地址自动配置和...
  • 通过对IPv6网络中,对网络管理、拓扑发现等起着重要作用的以ICMPv6报文为基础的邻居发现协议相关算法的分析,结合NetworkCoding的基本思想,针对广泛使用多播包容易引发网络拥塞、降低链接带宽利用率这一问题,提出了一...
  • IPv6技术要求——IPv6反向邻居发现协议
  • IPV6 邻居发现协议(NDP)

    万次阅读 2018-11-14 16:03:39
    IPV6除了显著增加了地址空间外,另一个最显著的特征就是它的即插即用性。 邻居发现协议(Neighbor Discovery Protocol)
  • 基于IPV6的邻居发现协议,包括路由器和前缀发现、地址解析和邻居不可达检测、重定向等功能要求

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,201
精华内容 7,680
关键字:

邻居发现协议