IPv6系列文章:

1.IPv6-基础

2.IPv6-ICMPv6协议

3.IPv6-双栈/隧道


文章目录

  • 一、ICMPv6概述
  • 二、PMTUD
    • 2.1 PMTUD概述
    • 2.2 之前的痛点
    • 2.3 PMTUD流程
  • 三、NDP邻居发现协议(Neighbor Discovery Protocol)
    • 3.1 NDP用到的 icmpv6 消息类型
    • 3.2 地址解析,替代ARP
    • 3.3 邻居状态跟踪
    • 3.4 无状态自动配置,前缀公告
      • 3.4.1无状态自动配置概述
      • 3.4.2 无状态自动配置流程
      • 3.4.3 RA消息报文
    • 3.5 重复地址检查(DAD)
      • 3.5.1 机制概述
      • 3.5.2 机制原理
      • 3.5.3 重复地址检查流程
    • 3.6 前缀重编址
      • 3.6.1 前缀重编址概述
      • 3.6.2 原理及流程
    • 3.7 路由重定向
      • 3.7.1 路由重定向概述
      • 3.7.2 路由重定向流程

一、ICMPv6概述

ICMPv6是IPv6的基础协议,也是最重要的协议。ICMPv6有多种消息类型,IPv6中的很多功能都是利用ICMPv6中的一种或多种消息类型组合完成的。

ICMPv6在IPv6中的协议号为58,该协议号在 IPv6 报头的“next header”字段中。

ICMP 报文有两种:差错消息及信息消息

二、PMTUD

2.1 PMTUD概述

​ PMTU 就是路径上的最小接口 MTU。PMTUD 的主要目的是发现路径上的 MTU,当数据包被从源转发到目的地的过程中避免分段。依赖 PMTUD源节点可以使用所发现到的最小 PMTU 与目的地节点进行通信,这样可以避免数据包在从源传输到目的的过程之中,被中途的路由器分片,而导致性能的下降。因此 IPv6 的分片不是在中间路由器上进行的,仅当路径 MTU 比欲传送的数据包小的时候,由源节点自己对数据包进行分片。

2.2 之前的痛点

​ 在IPv4没有PMTUD时,客户端发送数据包只会参照本机网卡的MTU值进行发送,当整个数据链路中的某台路由器网卡的MTU小于客户端的MTU时,要想继续发送需要在网络层对数据包进行分片处理,此时会延迟数据包到达的时间,同时增加当前路由器的压力,导致性能下降。

2.3 PMTUD流程

  1. 首先 Source 用 1500 字节作为 MTU 向目标节点发送一个 IPv6 数据包

  2. 中间路由器 A 意识到数据包过大,MTU 为 1400,于是回复一个 ICMPv6 type=2 消息向 Source 应答,在该ICMPv6 消息中指定较小的 MTU=1400

  3. Source 开始使用 MTU=1400 发送 IPv6 数据包,该数据包到了 B

  4. 然而 B 意识到本地接口 MTU 为 1300,于是回复一个 ICMPv6 type=2 消息向 Source 应答

  5. Source 开始使用 MTU=1300 发送 IPv6 数据包,该数据包顺利到达了目的地。

  6. Source 和 Destination 之间的会话被建立起来。

三、NDP邻居发现协议(Neighbor Discovery Protocol)

NDP 可以帮助我们实现以下功能:

1. 地址解析(代替ARP协议,即主机A已知主机B的IP地址获取其Mac地址的过程)

2. 邻居的状态跟踪(主机A针对访问过的同一个路由器下的邻居主机间的IP-Mac关系跟踪)

3. 无状态自动配置(主机从路由器的RA消息中获取网络前缀拼接接口ID生成全局单播地址)

4. 重复地址检测DAD(本地链路地址和全局单播地址首次配置后都要先做DAD检查才能正式使用)

5. 前缀重编址(前缀重新编址允许从以前的网络平稳过渡到新的前缀,切换过程平滑,节点无感知)

6. 路由器重定向(在同一链路上路由重定向到最短路径,修改路由表下一跳地址)

3.1 NDP用到的 icmpv6 消息类型


3.2 地址解析,替代ARP

地址解析流程如下:

1.根据主机B的IP得到主机B的被请求组播地址=FF02::1:FF01/104 + 单播地址的后24位=FF02::1:FF01:B,再根据组播地址获取其组播Mac=33:33 + 组播地址的后32位=33:33:FF:01:00:0B;

2.发送ICMPv6 类型为135的NS消息。

3.主机B接收到后回复NA消息,并携带主机B的Mac地址

3.3 邻居状态跟踪

邻居状态跟踪流程:

  1. A 发送 NS,并生成缓存条目,A 上条目的状态为 Incomplete

  2. 若 B 回复 NA,则 A 上关于 B 的邻居状态就由 Incomplete ->Reachable。但若 A 发出 NS 消息后一定时间内仍没有收到任何的回复,则由 Incomplete->Empty,即删除条目

  3. 如果在 reachable 状态上经过 ReachableTime(默认 30S),A 路由器上关于 B 的条目状态 Reachable->stale或如果在 reachable 状态上,收到 B 的非请求 NA,且链路层地址不同,则马上->stale

  4. 在 Stale 状态若 A 要向 B 发送数据,可直接发送,并从 A 上关于 B 的条目由 Stale->Delay,同时会等待应用层的提示信息,提示邻居是否可达

  5. 如果在 Delay_First_Probe_Time(默认 5S)内,有 NA 应答或者应用层的提示信息(例如我发了 ICMP 包给对端,对端回复我 ICMP 了,那就是上层可达),则 Delay->Reachable,如果无应用层提示信息,Delay->Probe

  6. 在Probe状态,每隔RetransTimer(默认1S)发送单播NS,发送MAX_Unicast_Solicit个后再等RetransTimer,有应答则 Reachable,无则进入 Empty,即删除条目

3.4 无状态自动配置,前缀公告

3.4.1无状态自动配置概述

​ IPv6的地址配置分为手动配置和自动配置,其中自动配置分为有状态(DHCP)和无状态(RS/RA)两种。其中的无状态自动配置就是基于RS-RA消息完成的。无状态自动配置在主机接入一个IPv6的局域网后即使没有DHCP服务器也能自动完成ip地址的配置,做到了即插即用,大大节省了手动配置ip信息的时间。

3.4.2 无状态自动配置流程

  1. 主机网卡激活,随机生成网卡Link-local地址;

  2. 对Link-Local地址进行DAD重复地址检查;3.DAD通过后主机发送RS消息尝试发现IPv6路由器;

  3. IPv6路由器收到RS消息后,回复RA消息,在RA中包涵路由器的MAC地址,IPv6单播前缀等;

  4. 主机使用IPv6的单播前缀加上自己的64bit接口ID,构成IPv6的单播地址;

  5. 主机对该单播地址进行DAD检查,DAD通过后该地址即启用。

注:路由器的RA消息不一定要以RS消息为触发,也可以主动阶段性的在局域网发送RA消息,这种主动推送的模式称为前缀公告。

3.4.3 RA消息报文

3.5 重复地址检查(DAD)

3.5.1 机制概述

​ 无状态配置,和节点启动时的一个 NDP 机制。用于保证节点准备启用的 IPv6 单播地址在链路上的唯一

性。这个机制使用 NS 消息(ICMP 135),使用源地址(::)、目的地址为获取到的 v6 地址对应的被请求节

点组播地址的 NS 报文来完成这个任务。

3.5.2 机制原理

​ 一个地址在通过重复地址检测(DAD)之前称为“tentative 地址”,试验地址。接口还暂时不能使用这个

试验地址进行正常单播通讯,但是会加入和 tentative 地址所对应的 Solicited-Node 组播组。

重复地址检测:节点向一个自己将使用的 tentative 地址所对应的 Solicited-Node 组播地址发送一个 NS,

如果收到某个其他站点回应的 NA,就证明该地址已被网络上使用,节点将不能使用该 tentative 地址通讯。

3.5.3 重复地址检查流程

  1. 主机A基于DHCP或者无状态自动配置机制被分配了新的单播地址2000::1,此时2000::1不可用为‘tentative’临时地址。

  2. 主机A会向2000::1对应的被请求节点组播地址发送一个NS消息,源IP为::,源mac为主机A的Mac;目的IP为FF02::1:FF00:1,目的Mac为33:33:ff:00:00:01。

  3. 主机B接收到消息后向 **’FF01::2 节点本地范围所有路由器组播地址‘ **范围内回复一个NA消息告知2000::1已被占用起mac为主机B的mac

  4. 如果 1S 后主机A没有收到NA回复即没有检测到冲突,A 就会发送 non-solicited advertisement(一个 NA 消息),宣告大家我将正式使用这个 2000::1 IPv6 地址

3.6 前缀重编址

3.6.1 前缀重编址概述

前缀重新编址允许从以前的网络平稳过渡到新的前缀,切换过程平滑,节点无感知。

3.6.2 原理及流程

​ 在无状态配置篇幅中分析了RA消息的报文,每一个前缀option都会有两个时间一个是 Valid lifetime 前缀有效时间,另一个是 Preferred lifetime 前缀首选时间,在RA消息分析图中粉色标记位置。

  1. 主机根据RA消息网络前缀构成单播IP地址并进行DAD检测(Tentative);

  2. DAD检查通过后Valid lifetime和Preferred lifetime会进入倒计时,在Preferred lifetime期间(Preferred)当前地址为首选IP地址可以发送消息也可接收消息;

  3. 如果Preferred lifetime倒计时为0,Valid lifetime还未结束大于0,此阶段(Deprecated)该地址只能接收消息不能发送新消息;

  4. 如果Valid lifetime倒计时为0,此时(Invalid)该地址作废不能收发消息;注:主机收到RA消息后会取消息中的Valid和Preferred重置本地的Valid和Preferred。

有了上述理论铺垫,我们看下如何实现平滑的前缀重编址:

Ipv6 nd prefix 2001:0001::/64 43200 0 // 老前缀
Ipv6 nd prefix 2001:0002::/64 43200 43200 // 新前缀

​ 通过路由器发布两个RA前缀公告,一个是老前缀,一个新前缀。其中老前缀的Preferred lifetime=0或者趋近于0,主机收到老前缀RA后老前缀的IP地址迅速进入Deprecated阶段只能收消息。新前缀的Preferred lifetime正常,主机收到新前缀后会根据新前缀进行DAD检测,检测通过后新IP地址进入Preferred节段全面代替老IP地址。

​ 在IPv6中主机向路由器网关发送消息默认通过Link-local地址,所以路由器前缀变动不会影响主机向其发送消息,而路由器转发链路外消息给主机时由于存在 Deprecated阶段所以 不会影响主机接收消息,整个过程平滑过渡。

注:建议链路内主机直接通信直接采用Link-local地址通信,这样链路内通信在前缀重编址期间就也不受影响了

3.7 路由重定向

3.7.1 路由重定向概述

​ 路由器使用 ICMPv6 重定向消息(ICMP TYPE 137)通知链路上的节点,在链路上存在一个更好的前转数据包的路由器。接收到这个 ICMPv6 重定向消息的节点可以根据重定向消息中新的路由器地址修改它的本地路由选择表。基本上从机制上来将跟 IPv4 的 ICMP 重定向没啥两样。

​ 在 IPv6 规范中,不推荐使用可聚合全球单播或本地站点地址作为下一跳地址,如果这样做,ICMPv6 重定向消息就不会工作。因此使用 Linklocal 地址作为下一跳,在某些场合可能更为推荐,毕竟 linklocal 地址稳定且长久不变。在配置 linklocal 地址作为下一跳 IP 时,必须关联路由器上相应的接口。

3.7.2 路由重定向流程

​ 场景:如上图场景R3要发消息给2222::1/64,R3本地路由表指示下一跳为R1,然后再由R1发送给R2,但是明显R3和R2在同一个链路上是可以直接发送给R2的不用经过R1中转,此时如果三台路由器之间互相使用Link-local 地址作为吓一跳配置时就会触发路由重定向。

  1. R3根据本地路由表中的下一跳地址发消息给R1

  1. R1发现他的下一跳地址为Link-local地址R2与R3在同一链路上,则回复R3一个路由重定向的ICMPv6报文,其中包含R2的Link-local地址。

  1. R3收到消息后修改本地路由表的下一跳IP为R2的Link-local,并重新发送数据包

IPv6-ICMPv6协议相关推荐

  1. IPv6网络协议的安全疑云

    随着互联网的更新,我们迎来了IPv6网络协议的使用,在我们不断赞扬IPv6网络协议的诸多优点后,我们也同样对它的一些漏洞和问题产生了担心.计算机网络协议版本6(IPv6) 并不提高企业的Web安全性, ...

  2. ICMPv6协议中各种Type的详细取值范围及其含义

    在ICMPv6中的Type字段定义中,0-127为错误消息(Error messages),而128-255为信息消息(Informational messages),其中每种Type定义一种类型及其 ...

  3. 实验四: IPv6路由选择协议配置

    一.实验目的 掌握IPv6路由选择协议的原理及配置方法,包括RIPng和OSPFv3. 二.实验内容 1.RIPng的配置: 2.OSPFv3的配置. 三 .实验步骤 1 RIPng 的配置 1.1 ...

  4. IPv6 HSRP协议

    HSRP是FHRP设计的,以便在第一跳IP路由器透明的故障转移. HSRP提供网络高可用性,基于以太网环境下提供的第一跳路由冗余,HSRP的是用在路由器组选择一个积极的路由器和备用路由器.在一个路由器 ...

  5. 网络协议 — IPv6 互联网协议第 6 版

    目录 文章目录 目录 IPv6 IPv6 数据包格式 固定报头 扩展头部 IPv6 地址格式 IPv6 网络的基本组成元素 IPv6 的地址分类和寻址模式 单播地址 全球唯一地址(Global Uni ...

  6. VLC测试IPv4 IGMP/IPv6 MLD协议

    1 简述 VLC既可以充当流客户端,又可以充当流服务器,并且可以跨平台使用,是一款开源.免费的软件,基于GNU GPL许可证. 2 搭建组播服务器 第一步:运行程序后选择"媒体  串流&qu ...

  7. 怎样解决IPv4网络和IPv6网络的共存互通?

    现在,业界一致认为IPv6技术是解决IP地址短缺问题的唯一可行的根本办法.但由于IPv6与IPv4技术不兼容,且现有的IPv4设备和用户数量庞大,在网络演进过程中,需要解决异构网络的共存互通问题. 解 ...

  8. 【计算机网络】网络层 : IPv6 协议 ( IPv6 数据包格式 | IPv6 地址表示 | IPv6 地址类型 | IPv4 与 IPv6 协议对比 | IPv4 -> IPv6 过渡策略 )

    文章目录 一.IPv6 发展 二.IPv6 数据报格式 三.IPv6 和 IPv4 对比 四.IPv6 地址表示 五.IPv6 地址 类型 六.IPv4 向 IPv6 过渡策略 一.IPv6 发展 I ...

  9. postman本地请求ip地址变成ipv6_华为认证-IPv6技术-ICMPv6介绍

    ICMPv6协议 ICMPv6的协议类型是58 除了IPv4中的作用外 还添加了邻居发现.无状态自动配置.PMTU 等作用 邻居发现协议NDP NDP 邻居发现协议 有如下功能 NDP使用ICMPv6 ...

  10. ipv6单播地址包括哪两种类型_IPV6中为啥没有ARP了呢?一文带你搞懂NDP邻居发现协议...

    前言 前面我们介绍了ICMPv6协议 除了提供ICMPv4常用的基本功能之外,还有邻居发现(ND)的功能.一文带你看懂ICMPv6和ICMPv4的区别 那么究竟什么是邻居发现协议(ND)呢? 邻居发现 ...

最新文章

  1. JavaScript 消息框
  2. linux 错误 kernel panic not syncing vfs unable to mount root fs on unknown-block 0 0
  3. JavaScript 的性能优化:加载和执行
  4. 如何修改myeclipse中web项目的工作路径或默认路径
  5. mysql注入漏洞修复方案_注入漏洞修复方案
  6. 阿里云服务器邮件发送
  7. 噪音 - Perlin Noise
  8. android调用python框架_在Java中从Android应用程序执行Python脚本?
  9. js时间戳(代码合集)获取(年月日,秒戳,毫秒戳,) - 综合篇
  10. 一步一步写算法(之图的保存)
  11. oracle存储过程id递增,oracle存储过程——按id更新相关信息
  12. js创建对象的多种方式及优缺点
  13. android中正则表达式截取html中的video标签
  14. 《筱静观察》2019开机仪式暨战略合作签约仪式在北京创新社成功举办
  15. 背负青天而莫之夭阏者,而后乃今将图南。
  16. HTTP状态码429的含义
  17. Java实现CSV文件的读写
  18. 人大金仓KingbaseES大小写敏感性专题
  19. 嵌入式系统开发这六点硬件设计需要细心留意
  20. 【mysql】云服务器被攻击,数据库以及数据都被删除如何通过binlog日志恢复

热门文章

  1. 新的TPM 2.0漏洞可能让黑客窃取加密密钥
  2. 用ChatGPT创造的虚拟老婆,被真女友强制「安乐死」
  3. 一篇文章读懂Java8新特性!
  4. 攻克MySQL—索引优化
  5. LeetCode017:电话号码的字母组合,回溯解法
  6. 分享一个崩坏3卡通材质
  7. Java实现蓝桥杯七对数字
  8. 【刷(shui)题记录】201802中旬~201802下旬
  9. Matlab调整图像大小的方法
  10. 计算机科学与应用期刊级别,《计算机应用与软件》是什么级别的刊物