首页 > 其他分享 >五、IPv6基础知识-NDP

五、IPv6基础知识-NDP

时间:2024-07-24 14:53:33浏览次数:17  
标签:报文 基础知识 发送 地址 RA 邻居 IPv6 NDP 路由器

NDP:IPv6邻居发现协议,主要通过ICMPv6报文来实现其功能。


1.主要功能

 NDP功能对应实现的ICMPv6报文如下:

2.路由发现功能 

1.路由器发现是指主机发现本地链路上路由器和确定其配置信息的过程。

2.路由器发现可以同时实现以下3个功能:

  1. 路由器发现 (Router Discovery):主机定位邻居路由器以及选择哪一个路由器作为缺省网关的过程
  2. 前缀发现 (Prefix Discovery):主机发现本地链路上的一组IPv6前缀的过程,用于主机的地址自动配置
  3. 参数发现  (Parameter Discovery):主机发现相关操作参数的过程,如输出报文的缺省跳数限制、地址配置方式等信息

3.使用的报文:

  1. RS 路由器请求 (主机主动发送RS)
  2. RA 路由器通告(路由器触发回应RA;路由器周期发送RA)

4.主机请求触发流程:

        a.当主机启动时,主机会向本地链路范围内所有的路由器(FF02::2)发送RS报文;

        b.路由器收到RS报文后触发回应RA报文;

        c.主机发现本地链路上的路由器后,自动配置缺省路由器,建立缺省路由表、前缀列表和设置其它的配置参数。

5.路由器周期性发送流程:

  1. 路由器周期性的发送RA报文,RA发送间隔是一个有范围的随机值,缺省的最大时间间隔是600s,最小时间间隔是200s
  2. 对于定期发送的RA报文,Source Address:必须是发送接口的链路本地地址;Destination Address :FF02::1

6.场景抓包

        AR2路由器发送RA报文

        AR1路由器接受RA报文后根据前缀生成地址和默认网关

 注意事项:

  1. RA会携带所有的IPv6前缀信息给主机,但是主机只会根据掩码为64的前缀进行本地地址生成
  2. 若图中R2和R3优先级一样,都想R1发送RA,R1会生成2条默认网关,实现负载分担
  3. 若图中R2优先级比R3大,会生成一条R2的默认网关。若R2失效,自动切换R3为默认网关,形成主备备份

3.地址解析

IPv6地址解析通过ICMPv6(NS和NA报文)来实现。

 当PC1要传送数据包到PC2时,如果不知道PC2的链路层地址,则需要完成以下协议交互过程:

  1. PC1发送一个NS报文到网络上,目的地址为PC2对应的被请求节点组播地址(FF02::FF00:2),选项字段中带上PC1的链路层地址00e0-fcb5-4cc9。
  2. PC2侦听到该NS报文后,由于报文的目的地址FF02::FF00:2,自己在该组播组,处理该报文;同时,根据NS报文的源地址和源链路层地址选项更新自己的邻居缓存表项。
  3. PC2发送一个NA报文应答NS,同时在消息的目标链路层地址选项中带上自己的链路层地址00e0-fc48-777c。
  4. PC1接收到NA报文后,获悉了PC2的链路层地址,创建一个目标节点的邻居缓存表项。
  5. 这样通过交互后,PC1和PC2就知道了对方的链路层地址,建立其对方的邻居缓存表项(类似于IPv4的ARP表),就可以相互通信了。

4.邻居状态跟踪

        在IPv6同子网通信的过程中,源主机有对自己的邻居表缓存的MAC地址进行再次确认的能力,确保通讯之前邻居是可达的,避免发错报文。

5种邻居状态:

 邻居状态变化:

假设R1、R2之前没有任何通讯,以R1、R2之间相互通讯过程中R1的邻居状态变化做简要介绍:

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

5.重复地址检测

        重复地址检测(Duplicate Address Detect,DAD):是节点确定即将使用的地址是否被另一节点使用的过程

        触发机制:接口新增或者更换任何一个单播IPv6地址之前

  1. PC1新分配了一个IPv6地址,触发DAD
  2. 由于新配置的地址还没有做DAD,为防止地址冲突暂时不能使用,所以使用::代替源地址,目标地址为新地址的被请求节点组播地址FF02::1:FF00:1。
  3. PC1将NS报文发送到本地链路上(缺省发送一次NS报文)
  4. PC2监听FF02::1:FF00:1组播,收PC1的NS报文后,会回应一个NA报文,目标地址为FF02::1(因为PC1的源地址未知)
  5. PC1收到NA报文认为这个临时地址是重复的,不使用;反之在规定时间内没有NA报文进行应答,则认为这个临时单播地址在本地链路上是唯一的,可以分配给接口

 6.重定向

        当网关路由器知道更好的转发路径时,通过ICMPv6以重定向报文的方式告知主机

重定向条件:

  1. 报文的目的地址不是一个组播地址
  2. 路由器只为与接收端口同网段的主机提供服务
  3. 路由器检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在
  4. 经过路由计算后,路由的下一跳接口是接收报文的接口
  5. 路由器发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段

 

标签:报文,基础知识,发送,地址,RA,邻居,IPv6,NDP,路由器
From: https://blog.csdn.net/uzumcc/article/details/140637020

相关文章

  • day2 测试基础知识
    1.简述黑盒测试和白盒测试的优缺点?2.在没有产品说明书和需求文档的情况下能够进行黑盒测试的设计吗?能,可以通过其他工作内容去替代产品说明书和需求文档3.单元测试的策略有哪些,主要内容有哪些?逻辑覆盖,循环覆盖,同行评审,桌前检查,代码走查,代码评审,静态数据流分析......
  • AJAX基础知识
    1.AJAX1.什么是AJAX​AsynchronousJavascriptAndXml​异步的JS和xml(EXtensibleMarkupLanguage)​通过JS异步的向服务器发送请求并接收响应数据​同步访问:​当客户端向服务器发送请求时,服务器在处理的过程中,浏览器只能等待,效率较低​异步访问:​当......
  • 域名解析到ipv6,并用CF隐藏端口
    要求:域名myhalo.soulio.top​解析到IPv6地址并隐藏端口‍效果:相当于https://myhalo.soulio.top​替代http://[2409:8a62:867:4f12:56c7:5508:f7x6:8]:8080​。唯一缺点是延迟有点高。​​‍难度:需要有一定域名解析、cloudflare使用基础‍实现:按照以下步骤进行操作1......
  • 通讯录管理系统(C++基础知识实现)
    通讯录管理系统描述:本人C++小白一枚,正在学习C++基础知识,给大家分享一款使用C++基础知识实现的通讯录管理系统,一起努力进步,大佬轻点喷。1.知识点(1)预处理器指令(#include,#define);(2)命名空间使用(usingnamespacestd;);(3)函数定义:定义了多个函数,如menu,addContact,show......
  • 知识清单|Python入门必备基础知识点
    1.数据类型和变量1.1缩进和注释的规则Python使用缩进来表示代码块,通常使用四个空格或一个制表符。注释使用#开头。1.2基本数据类型Python支持多种基本数据类型,包括整数、浮点数、字符串、布尔值和空值。1.3变量的动态类型和赋值Python是动态类型语言,变量可......
  • [计算机网络]实验七——IPv6隧道实验
    一、实验目的学习安装与使用华为eNSP网络仿真软件理解IPv6overIPv4的原理掌握IPv6overIPv4手工隧道的配置方法掌握OSPF路由的配置方法掌握IPv6静态路由的配置方法二、实验环境 Windows系统、 eNSP网络仿真软件三、实验过程及结果建立三路由拓扑首先使用三个A......
  • vue基础知识
    Vue.js是一个用于构建用户界面的渐进式JavaScript框架。以下是Vue.js开发的基础知识:1.Vue实例在Vue中,一切都是从创建一个Vue实例开始的:varvm=newVue({//选项});2.数据与方法Vue实例的数据对象:vardata={a:1}varvm=newVue({el:'#example',......
  • 刷算法中途复习基础知识
    1.数据类型数据类型分为值传递和引用传递值传递:八大数据类型  Byteshortint long floatdouble charboolean引用传递:类接口 数组其中字符串和枚举类型比较特殊,但是都是基于引用数据类型来实现的.基本数据类型只能存自己类型的值,没有其他额外的功能。引用......
  • kafka 基础知识
    1、Kafka简介ApacheKafka是由Apache开发的一种发布订阅消息系统。Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感......
  • c++零基础知识要点整理(7)
    *请搭配c++零基础知识要点整理(5)使用位或运算符的应用: | (有1即1)1.设置标记位(使某一个位置的值变为1)inta=0b101101;//(以使第五位变为1举例,即使a变为:0b11101)cout<<(a|0b10000)<<endl;//要使第五个位置的值变为1,则将这个数和0b10000进行位或//以此类推:需要使第四个......