理解ICMPv6前缀请求与前缀公告消息

简介:

  IPv6的地址输入过于复杂,所以很多时候都选择使无状态的路由器前缀公告的方式或者使用有状态的DHCPv6为IPv6的主机分配IP地址。IPv6地址前缀公告是指路由器在本地链路上公告自己的地址前缀,然后让IPv6主机使用前缀公告的信息结合自己的MAC地址来自动配置本地的单播IPv6地址,这将从某种程度上减小了地址配置的复杂性,并且可以保证通过前缀公告的地址是唯一的,因为MAC地址本身就是唯一的。在IPv6前缀公告消息中,路由器所使用源地址为自己的本地链路地址(以FE80::/10开始),公告的目标地址是FF02::1(表示公告给整个链路上的IPv6节点),公告消息的为ICMPv6的134类型消息。而使用本地链路地址作为公告源地址是为了让IPv6在重新链路编址时,仍然可保持地址前缀公告的功能。公告目标地址FF02::1表示只要加入了这个组播组的节点都可以获取IPV6地址前缀公告的消息,默认情况下所有IPv6接点的主机都属于这个组播组。

然而对于IPV6地址前缀公告,要了解其相关的特性。首先是IPv6地址前缀公告是属于IPv6“无状态自动配置”的机制之一,那么在默认情况下,IPv6地址公告的前缀为64位,再结合EUI-64完成IPv6的128位地址的配置。其次对于在同一链路上的路由器网络接口上需配置一个全球单播地址(以2000::/3开始)或者本地站点地址(以FEC0::/10开始)用于公布地址前缀。其三是路由公告(router advertisement)消息是周期性进行发送给组播地址,申明其地址前缀。


注意:无状态自动配置:指没有通过手工的方式获取IPv6地址,也没有通过DHCPv6获取IPv6地址,其中通过DHCPv6获取IPv6地址是典型的“有状态自动配置”,而不管是有状态配置还是无状态配置IPv6地址,该地址应该属于全球单播地址或者本地站点地址。IPv6地址前缀公告,公告的不是以FE80::/10开头的本地链路地址,而是公布全球单播地址(以2000::/3开始)或者本地站点地址(以FEC0::/10开始)的地址前缀。而本地链路地址只是作为一个源地址来传递数据。


关于IPv6地址前缀公告的过程:

如图12.88所示,在路由器上的E1/0接口上配置了一个全球单播地址2001:1::1/64。那么接下来,路由器就会周期性的向同一本地链接上(linkA)发送地址前缀公告消息,即ICMPv6类型为134的消息,并以fe80::204:27ff:fef1:71a0为IPv6源地址,目标地址为组播地址FF02::1(指向linkA上的所有IPv6主机),公告前缀为2001:1::/64。此时,当节点(如:计算机)收到该地址前缀消息后,就通过该地址前缀结合EUI-64完成IPv6地址的自动配置。


073627689.png

关于主动请求IPv6地址前缀公告

   面对路由器周期性的在本地链路上发送IPv6地址前缀公告消息,那么就存在一个时间的间隔。如果一个节点(如计算机)启动时,需要花一段时间去等待路由器发送的地址前缀公告消息这显然不科学。那么在这种情况下,每一个节点可以通过向目标多播地址FF02::2发送路由请求消息(ICMPv6类型133消息)到本地链路上的所有路由器,当路由器收到该请求消息后,就通过目标多播地址FF02::1把地址前缀公告消息(ICMPv6类型134消息)发送给所有节点,完成对节点IPv6地址的自动配置。

   如图12.89所示,节点(计算机)通过将本地链路地址FE80::C800:11FF:FECC:1C作为源地址向目标多播地址FF02::2的所有路由器发送路由请求消息(ICMP类型133消息)。其中,源MAC为CA:00:11:CC:00:1C(请求主机的源MAC地址),目标MAC为3333:0000:0002(目标组播地址FF02::2映射而来的组播MAC地址;关于这个的映射关系请参看IPv6的组播地址与MAC地址的映射关系部分的描述。当路由器收到该请求消息后,立即通过本地链路地址FE80::C800:3FF:FE98:1C作为源地址,向目标多播地址FF02::1(指示LinkA上的所有IPv6节点)发送地址前缀公告消息(ICMP类型134消息),其中,源MAC为CA:00:03:98:00:1C(路由器E1/0的MAC地址),目标MAC为3333.0000.0001(由IPv6组播地址FF02::1映射而来)。此时节点就可以完成自动配置IPv6地址。


073821181.png



本文转自 kingsir827 51CTO博客,原文链接:http://blog.51cto.com/7658423/1340751,如需转载请自行联系原作者

相关文章
|
移动开发 HTML5
WebSocket心跳机制
WebSocket心跳机制
517 0
|
存储 Ubuntu 关系型数据库
Ubuntu安装MySQL 8.0与Navicat
Ubuntu安装MySQL 8.0 1、更新软件包列表 在添加 MySQL APT 存储库后,运行以下命令以更新软件包列表: sudo apt update 2、安装 MySQL 8.0 现在,你可以使用以下命令来安装 MySQL 8.0: sudo apt install mysql-server-8.0 在安装 MySQL 8.0(或其他软件包)时,通常不会显示密码,因为安装过程不需要您提供密码。安装过程中可能会提示您设置 MySQL root 用户的密码,但这是在 MySQL 服务器配置的步骤中完成的,而不是在 apt 安装命令中提供的。
1188 0
|
jenkins Java Shell
使用 Docker 安装 Jenkins 并实现项目自动化部署
Jenkins 是一款开源的持续集成(DI)工具,广泛用于项目开发,能提供自动构建,测试,部署等功能。作为领先的开源自动化服务器,Jenkins 提供了数百个插件来支持构建、部署和自动化任何项目。
36616 3
使用 Docker 安装 Jenkins 并实现项目自动化部署
|
5月前
|
存储 安全 BI
零代码2小时搭建考勤管理系统
告别繁琐考勤管理!零代码2小时快速搭建专业系统,支持请假、加班、出差在线申请与审批,自动统计报表,提升HR效率,员工体验更佳。无需编程,拖拽式操作,适配企业微信、钉钉,安全可靠,中小企业数字化首选。
|
机器学习/深度学习 数据可视化 搜索推荐
使用Python实现深度学习模型:智能睡眠监测与分析
使用Python实现深度学习模型:智能睡眠监测与分析
1658 2
|
安全 网络协议 网络安全
详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议
详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议
2968 3
|
网络安全 网络虚拟化 网络架构
什么是共享IP,如何判断IP是否被共享
**摘要:** 共享IP指多个用户或设备共用同一地址,常见于家庭网络、公共Wi-Fi及代理/VPN服务。判断IP是否共享可通过检查网络连接数、使用在线检测工具、观察网络活动、咨询ISP或检查路由器设置。共享IP不必然带来安全问题,但在特定场景下需关注。
|
算法 JavaScript 前端开发
游戏物理系统 - 如何在JavaScript中实现基本的碰撞检测算法?
在JavaScript中实现2D矩形碰撞检测,常用AABB方法,适合简单游戏。创建Rectangle类,包含位置和尺寸属性,并定义`collidesWith`方法检查两矩形是否相交。通过比较边界位置判断碰撞,当四条边界条件均满足时,认定发生碰撞。基础算法适用于初级需求,复杂场景可采用更高级的碰撞检测库。
606 1
|
机器学习/深度学习 编解码 算法
YOLOv8改进 | 主干网络 | 增加网络结构增强小目标检测能力【独家创新——附结构图】
YOLOv8在小目标检测上存在挑战,因卷积导致信息丢失。本文教程将原网络结构替换为更适合小目标检测的backbone,并提供结构图。通过讲解原理和手把手教学,指导如何修改代码,提供完整代码实现,适合新手实践。文章探讨了大特征图对小目标检测的重要性,如细节保留、定位精度、特征丰富度和上下文信息,并介绍了FPN等方法。YOLOv8流程包括预处理、特征提取、融合和检测。修改后的网络结构增加了上采样和concatenate步骤,以利用更大特征图检测小目标。完整代码和修改后的结构图可在文中链接获取。
10228 2

热门文章

最新文章