IPv6理论基础

news2024/9/20 22:31:32

IPV6 地址介绍

地址标识方法

格式 : XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX,128bit,8个16位,16进制
X表示十六进制的一个字符,可以是0 - 9,A -F

字母大小写不敏感,最终设备上显示均为大写

一个地址由8个字段构成,每个字段使用4个十六进制字符,每个字段中间通过“:”符号进行分隔

每个字段中前导为“0”是允许的

地址缩写方法

如果一个段全部为”0”,可以缩写为一个“0”,例如“:0000:”可以缩写为“:0:“

一个段中,分隔符右边连续的”0”可以省略,例如“:09C0:”可以缩写为“:9CO:”

如果有多个连续字段均为”0”可以缩为“::“例如:“:0000:0000:0000:”可以缩写 为“::”",但是这种缩写方法在一个地址中只能出现一次

URL中与端口号的区分

因为在URL中地址后面可能需要跟上端口号,而端口号也是通过隔符来与地址进行区别,因此在URL中使用IPv6地址时,需按照如下方式:http://[2001:DF0:1003::F]:8080/index.html

地址掩码

IPv6将一个地址分为前缀与接口标识两部分
前缀:相当于IPv4地址中的网络ID
接口标识:相当于IPv4地址中的主机ID

注意:在IPV6中不存在一个地址分类的划分,但是掩码依然存在,用来划分不同网段。掩码最常见的就两种形式:/64和/128,对于前缀64位来说已经非常够用了

掩码仍然是用连续的“1”来掩盖网络ID,但是表示方法全部使用CIDR表示法
例如:
2031:0:130F::9C0:876A:130B/64
2001:1:1::1/128

IPV6地址分类

Unicast Address(单播地址)

Aggregate Global Unicast Address

image.png

Aggregate Global Unicast Address(全局可聚合地址),相当于在IPv4中的公网可路由地址

由IANA分配,可以在公网路由的地址

地址规划: 2000::/3即最高三位是“001”,这段地址就是全球路由地址,用于全球的一个正常上网之中

地址范围 : 2000:0000:0000:0000:0000:0000:000:0000到 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

其中 2001::/16 被定义为 Internet Address,属于是在整个互联网上的公网IP地址

其中 2002::/16 被定义为 6to4 Tunnel Address,专门是用于IPV6穿越IPV4的,这个不是一定的

Link Local Address

image.png

Link Local Address(本地链路地址),接口启用IPv6后一定会自动生成的地址。用作本段链路上的唯一定位符,不可路由

在路由协议交互路由过程中,该地址将作为Next Hop Address,也就是当下一跳来用

地址规划: FE80::/10,即最高10位为“1111 1110 10”,最后64bits作为接口标识,因此该地址掩码被固定为/64,不可修改

该地址可以作为路由协议的更新源,因此给将来的重编址提供了更好的条件

该地址默认自动使用EUI-64自动产生接口标识,也可以手工修改

该地址可以使用ICMP做ping的测试,但是要手工填写出接口,出接口必须写全称不能简写。必须要写出接口是因为link local 地址是不会出现在路由表中的

本地链路地址可以作为设备接口的第二地址,如果全局地址没有了并不会影响路由协议的建立,因为link local也是可以作为路由协议的跟新源的

EUI-64 构建方法

EUI-64(Easy User Interface)
当我们在设备上的接口下开启IPV6功能时,他就会自动生成一个IPV6的链路地址,具体如何生成我们开始分析

  1. 提取该接口的MAC地址,如果该接口没有MAC地址则借用本地ID号最小的以太口的MAC地址,例如: 00E0.4C00.321A

  2. 将MAC地址中的“.”符换成“:”,并在MAC地址24bits后插入16bits固 定字符“FF:FE”,得到 00E0:4CFF:FE00:321A

  3. 从最高位往后数第七位取反,即原来是”0”就改为”1”,原来是”1”就改为”0”得到 024C:FF:FE00:321A 的接口标识符

  4. 取反的原因在于,MAC地址中对应bit为0表示全球唯一,为1表示本地唯一,但是在EUI-64中,该表示方法正好相反

  5. 加上前缀“FE80::”即FE80:: 024C:FF:FEO0:321A便自动形成该接口的Link Local Address

  6. 可以通过接口命令“ipv6 address FE80::xxxx link-local”进行手工指定(通常不建议这么做)。修改时注意前缀必须是FE80::/10,接口标识符任意

  7. MAC 地址前 24bits 为 OUI (Organizationally Unique Identifier 组织唯一标识符)后 24bits 称之为 NIC (Network Interface Controller,网络接口控制标识)
    MAC地址总共48位,前24位是厂商的(相当于网络位一样),后24位是可以进行更换的

Site Local Address

Site Local Address(本地站点地址),主要是用于做私网地址的,相当于在IPv4中RFC1918定义的私网地址,意味在公网不可路由。其实内网地址不管用啥地址都一样,反正最后都会被NAT转换出去

地址规划 : FEC0::/10 最高 10 位为“1111 1110 11”

地址规划中规定可以有N bits作为子网划分,由用户自定义

虽然IPv6地址空间足够大,甚至可以给每个用户一个全局可路由地址,但是考虑到某些网络的私密性,所以仍然定义了该地址段给用户自己使用,在公网不可路由

目前Site Local Address已经被收回,也就是不再提供使用了,取代的FC00::/7(Unique Local Address)

Unspecified Address

Unspecified Address(未指定地址)的地址规划:0:0:0:0:0:0:0:0,主要是用于某些没用可用地址的场景,例如初始的DHCP请求等

Loopback Address

Loopback Address(本地换回地址),类似于IPv4中本地主机的127.0.0.1用于标识自己

地址规划:0:0:0:0:0:0:0:1,可缩写为::1

::/8的地址其实都被预留出来做为环回地址

Multicast Address(组播地址)

在IPv6中组播完全取代了广播,并且没有了ARP,取而代之的是NDP协议

image.png

地址规划:FF00::/8 最高8位为“1111 1111”

Flag:
0标识这是一个永久组播地址(公网组播地址)
1表示这是一个临时组播地址(私网组播地址,相当于IPv4 239.0.0.0-239.255.255.255)

Scope:
1 表示 Interface Local
2 表示 Link Local(相当于IPv4 224.0.0.0-224.0.0.255)
3 表示 Subnet Local
4 表示 Admin Local
5 表示 Site Local(私网组播地址)
8 表示某组织或机构所用地址
E 表示公网可用组播地址

常见的公网组播地址

IPv6 Multicast AddressDescription
FF02::1All Nodes(相当于224.0.0.1)
FF02::2All Routers(相当于224.0.0.2)
FF02::5All OSPFv3 Routers(相当于224.0.0.5)
FF02::6All OSPFv3 DR Routers(相当于224.0.0.6)
FF02::9All RIP ng Routers(相当于224.0.0.9)
FF02::10All EIGRP Routers (相当于224.0.0.10)
FF02::16All PIM Routers(相当于224.0.0.13)

FF02::1:FFXX:XXXX,Solicited Node 被请求节点组播地址。XX:XXXX等于对应接口的IPv6单播地址的后24bits
假设该设备的f1/0的link local地址为FE80::C800:23FF:FF08:1C。当我们接口f1/0配置好IPV6地址为2001::2/64,进行查看端口show ipv6 int f1/0 就可以看到端口加入到的IPV6组播地址有下面这些:
FF02::1
FF02::1:FF00:2,这是遗传自己的global地址的后24位
FF02::1:FF08:1C,这是遗传自己的link local地址的后24位
此时当有数据要去往2001::2/64的地址时,数据会直接发送到与之对应的组播地址FF02::1:FF00:2,也只有这个地址才会去接收这个请求信息。

使用NDP协议之后再发送MAC地址查询只会发送到特定的组查询。只有对方配置了对应的IP地址才可以去监听这个组播地址

有一个IPv6单播地址就会有一个对应的被请求节点地址 0

被请求节点组播地址被NDP(Neighbor Discovery Protocol)。作为地址解析和 DAD (Duplicate Address Detection)冲突地址检测,检测地址是否冲突

Anycast Address(任播地址)

Anyast地址与单播地址从地址格式上无法进行区分

当一个单播地址分配给多于一个接口时,该单播地址则转化为Anycast地址

Anycast强调的是一组接口

Anycast地址只能用于数据包的目的地址

配置方法 : ipv6 address [address]/[mask] anycast

Anycast地址的常见作用:
分布式的DNS
多服务器的负载分摊
DDoS分散攻击压力

NDP 协议

NDP 协议介绍

NDP(neighbor discovery protocol)邻居发现协议,NDP是采用组播方式来寻找对端的MAC地址。发送数据无论如何都需要进行数据封装,也就必须知道对方的MAC地址

完成三层IPv6地址与二层MAC地址的映射关系( 替代IPv4 ARP)

完成 DAD (Duplicate Address Detect)地址冲突检测

IPv6 address Auto-Configuration,IPv6地址是可以实现自动配置的,通过对方的地址来自动配置自己的地址确保再同一个网段,跟DHCP没有关系

ICMPv6 Redirect这个叫做重定向功能

发现临近的,帮助转发分组的路由器

跟踪邻居可达性,侦听邻居链路层地址

NDP 五种Message类型

Neighbor Solicitation&Neighbor Advertisement

Neighbor Solicitation(ICMPv6 Type 135)简称NS,主要是查询信息。Neighbor Advertisement(ICMPv6 Type 136)简称NA,主要是通告信息

当设备一开启,第一步它就会发给自己已经配置上的IPv6地址对应的目的组播地址,目的是为了做地址冲突检测DAD,设备会去询问这个组播地址对应的MAC地址是多少,如果有设备回这个消息说明网络中有跟它冲突的IPv6地址。这个第一步发送的也就是NS查询消息
第二步,如果没有人给这个设备回消息,它就会对其他设备发送NA通告信息,其作用是让其他设备知道这个地址没人用就我自己用了

NS/NA Message用于完成三层与二层地址的映射关系,并且被用作DAD,类似于在IPv4当中的ARP协议

针对需要访问的设备节点,本地会产生一个NS消息,源IPv6地址为本地出接地址,目的地址为计算出来的针对目的地址的被请求节点的组播地址,解析地址为需要访问的地址,用于获取对应三层地址的二层地址信息:
如果数据访问使用C路由发包,源地址则为出接口的配置IPv6地址
如果数据访问使用非C路由,源地址则为出接口的Link Local地址

映射表老化时间(Age)默认为14400秒,可以通过全局命令ipv6 ndp cache expire [time]修改(表项中时间显示以分钟为单位)

针对NS消息,收到的目的设备将通过NA消息进行响应,响应中主要包含本地接口的二层地址信息,从而使得请求方可以将目的地的三层地址与二层地址形成映射关系放入缓存

当设备接口启用IPv6功能后,会立刻向当前子网产生NS消息,源地址为未指定地址(:😃,目的地址为本接口地址产生的被请求节点组播地址,解析的目标IPv6地址为本接口地址,如果除了本地以外还有其它设备对该消息进行了响应,则表示可能出现了地址冲突

映射表可以通过show ipv6 neighbor查看,可以通过clear ipv6 neighbor清除

映射表还可以手工建立ipv6 neighbor {ipv6 address} {interface} {mac}

查看IPv6的NDP邻居

show ipv6 neighbor

当我们进行查看时可能一个邻居也看不到,这个时候我们ping一下对方的IPv6地址,然后再看就会看到了。之前看到没有邻居是因为NA/NS的目的就只是做DAD地址冲突检测,没有去解析的作用。对方虽然接收到了这个信息,但是并不会记录到自己的NDP邻居表里面,

当我们去给对方发送数据的时候,此时会再发一个NS给对方,这个时候的目的组播地址发生了变化,这个组播地址目的地地址对应的组播地址。所以会重新发送一个组播的NDP的NS查询

对方收到后会发给我们一个NA的回应消息,这个回应的信息就是要去往我这个地址的接口对应的MAC地址

Router Solicitation&Router Advertisement

Router Solicitation(ICMPv6 Type 133)简称RS,也是查询消息。Router Advertisement(ICMPv6 Type 134)简称RA,也是应答消息,但是做的事情不一样

RS/RA最主要的就是去服务IPv6地址自动配置。开启IPv6地址的自动配置功能命令

en
conf ter
int f1/0
ipv6 enable
ipv6 address autoconfig
end

一旦我们开启接口IPv6地址的自动配置功能,设备就从这个接口对外发送RS查询消息,并且先收到谁的RA就用谁的

假设对端的IPv6地址为2001::1/64,此时它会保证IPv6地址的前64位是一样也就是网络为一样,后64位直接去复制link local地址的后64位

Rs Message只能通过Auto Configuration产生,目的在于获取IPv6地址的前缀。RS Message以本地接口 Link Local地址为源,保留组播地址FF02::2为目的地址,将该消息发送给本子网内所有路由器

RA Message在路由器启用IPv6 unicast-routing以后周期性产生(这个命令就和IPv4中的ip routing一样),并且在收到RA以后也会进行回应并且只能在MA网络上产生,可以通过接口命令:Ipv6 nd ra suppress (或ipv6 nd suppress-ra 根据IOS不同,命令格式会有区别)来抑制

RA Message以本地的Link Local地址为源,保留组播地址FFO2::1为目的,保证本子网内所有设备均可收到.消息中包含了本地的二层地址信息.还包括了本地接口的IPv6地址前缀

收到该消息的设备会自动将源地址与对应的二层地址形成映射关系存放进缓存,成为自己的IPv6 Neighbor。其次,会将该前缀作为自己的接口 IPv6地址前缀,再利用EUI-64产生自己接口的接口 D,从而完成地址自动配置该配置方法称为无状态地址自动配置

若接口上存在多个IPv6地址,则所有地址前缀都会包含在同一个RA内。也就是对方连接我接口的地址有两个地址的话,我自己本地也会自动获取到两个地址

如果前缀掩码不是64,则对端无法自动产生IPv6地址也就是说autoconfig功能必须位64位的,但是可以在路由表产生一条NDp路由。如果我们关闭IPv6路由功能 no ipv6 unicast-routing 就会发现配置了autoconfig功能的设备会产生一跳ND的默认路由下一跳为对方的link local地址(关闭了IPv6的路由功能它会以为你是一台主机也就是网络末端,末端产生数据永远都要去下一跳)

EUI-64产生的接口ID本质上是复制的Link Local地址的后64bits,如果 Link Local地址被修改,则自动产生的接口ID同样会被修改

手工通过EUI-64产生接口 ID同上要求,掩码必须为64bits,并且接口ID本质是Link Local地址的后64bits

通过Auto Configuration产生地址的设备,如果没有开启ipv6 unicast-routing。则将收到的RA消息的源地址作为本地网关,并自动产生一条ND路由 ::/0 指向RA的源地址。如果开启了ipv6 unicast-routing,则自动产生一条ND路由 ::/0 指向RA的源地址,但是无网关存在
如果同一子网收到了多个RA消息,那么第一个收到的RA消息的源地址会作为本地的网关或者路由下一跳
可以通过接口命令: ipv6 nd router-preference [high I medium I low]来设置路由器作为网关的优先级别,默认为medium

ICMPv6 Redirect Message

ICMPv6 Redirect Message(ICMPv6 Type 137)该消息用于通知主机节点发送数据包使用替代路径,只能由路由器产生。该消息会将远端主机产生的实际数据封装以后返回给主机并通知替代路径的下一 跳节点地址。主机在收到该消息后,重新查询接口邻居表,重新发送该数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode3266. K 次乘运算后的最终数组 II

Every day a Leetcode 题目来源:3266. K 次乘运算后的最终数组 II 解法1:3266. K 次乘运算后的最终数组 II 用最小堆手动模拟操作,直到原数组的最大值 mx 成为这 n 个数的最小值。 设此时还剩下 k 次操作,那么: 对…

HarmonyOs DevEco Studio小技巧11--AI插件

AI智能辅助编程工具 CodeGenie 简介 DevEco AI辅助编程工具(CodeGenie)为开发者提供高效的应用/服务AI辅助编程工具,支持HarmonyOS NEXT领域的智能知识问答、ArkTS代码补全/生成和万能卡片生成能力,提高开发者编码效率。 文档中…

mysql整体架构描述

文章目录 数据库架构示意图1. 连接层2. 服务层3. 存储引擎层4. 文件系统层5. 系统层主要特性 数据库文件格式InnoDB 存储引擎文件类型及用途 MyISAM 存储引擎文件类型及用途 其他文件类型文件内容示例表结构文件示例 (.frm)InnoDB 数据文件示例(.ibd)MyI…

(十四)、为 SpringCloud 项目生成 Docker 镜像

文章目录 1、原理2、最佳实践2.1、获得 SpringCloud 微服务启动模块的 jar 文件2.2、准备文件夹和 Dockerfile 文件2.3、 Dockerfile 文件的内容2.4、通过命令行构件新镜像 3、异常情况和处理:failed to create LLB definition3.1、现象3.2、解决配置国内镜像仓库清…

【Python报错已解决】 ModuleNotFoundError: No module named ‘tensorboard‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:使用pip安装TensorBoard…

vue3.0 使用echarts与echarts-gl 实现3D饼图

效果 安装echarts npm install echarts npm install echarts-gl 3d饼图组件&#xff1a; <template><div style"width: 100%; height: 100%" ref"echart"></div> </template><script setup> import { reactive, ref, onMou…

docker部署FastDFS文件系统详细记录,每个步骤都有详细记录。含linux和windows双系统安装教程

docker部署FastDFS文件系统详细记录 参考文章docker搭建FastDFS文件系统&#xff08;最详细版&#xff09; 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&…

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里&#xff0c;然后在周边加上内边距&#xff0c;边框和外边距&#xff0c;是盒子模型 默认一个块级区域会填充父类所有的行向空间&#xff0c;并且沿着块伸长容纳其内容&#xff0c;可以为块状体设置某…

18、公司信贷管理|贷款额度的测算|贷款期限及其定价的设定逻辑!

银行在综合权衡贷款的第一还款来源和第二还款来源、风险和收益的基础上&#xff0c;应明确提出贷与不贷的意见。经调查审查同意的贷款&#xff0c;应提出最终的融资方案。 合理的融资方案既要有利于提升本行的竞争力&#xff0c;又要有利于控制贷款风险。完整的融资方案一般包…

苹果的“AI茅”之路只走了一半

今年苹果发布会最大的亮点&#xff0c;也许是和华为“撞档”&#xff0c;又或者是替腾讯“发布”新手游&#xff0c;但肯定不是iPhone 16。 9月10日&#xff0c;苹果秋季新品发布会与华为见非凡品牌盛典相继举行&#xff0c;iPhone 16系列也与HUAWEI Mate XT同日发布。 不过&…

性能测试-jmeter脚本录制(十五)

一、jmeter脚本录制&#xff08;不推荐&#xff09;简介&#xff1a; 二、jmeter脚本录制步骤 1、添加代理服务器和线程组 2、配置http代理服务器的端口和目标线程组 3修改本机浏览器代理 4、点击启动 5、每次操作页面前&#xff0c;修改提示文字

html 中如何使用 uniapp 的部分方法

示例代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…

2024年,最新 OKR 优秀案例集(建议收藏)

我们发现&#xff0c;在你学习 OKR 的例子之前&#xff0c;先回顾一下 OKR 是如何写的&#xff0c;会有帮助。这样&#xff0c;你就能更好地理解下面描述的目标和关键结果的例子。 好消息是&#xff0c;Tita 的 OKR案例库有很多例子可以学习&#xff0c;它们从公司的 OKR 开始…

离散时域和连续频谱之间的傅里叶

要得到虚假的时域离散点&#xff0c;要用频域一个周期的积分

对接开源大模型应用开发平台最佳实践

本文以Dify为例介绍如何使用OpenSearch LLM智能问答版对接大模型应用开发平台构建RAG系统。 背景 随着AIGC技术日新月异的发展&#xff0c;LLM应用也在持续迭代。基于LLM、Agent框架、工作流编排能力等&#xff0c;可以搭建不同场景下丰富的应用服务。其中&#xff0c;检索增…

基于node.js koa2模拟快递柜存储取出快递微信小程序

本文介绍了一个基于Node.js Koa2框架的快递柜存储和取出快递的微信小程序。首先&#xff0c;我们使用Koa2框架搭建了一个简单的后端服务器&#xff0c;用于处理微信小程序发送的请求。然后&#xff0c;我们实现了快递柜的存储和取出功能&#xff0c;用户可以通过微信小程序扫描…

【包教包会】CocosCreator3.x拖尾MotionStreak威力加强版(支持3.x、支持原生、可合批)

将去年写的2.x拖尾升级到3.x 完美适配Web、原生平台&#xff08;其余平台没测过&#xff09;。 保留原版功能&#xff08;拖尾会跟随节点位移、缩放、受节点透明度影响&#xff0c;但不会跟随节点旋转&#xff09; 支持世界坐标 / 本地坐标切换&#xff08;至于为什么需要这…

中国老年社会追踪调查(2011-2020年)

中国老年社会追踪调查&#xff08;CLASS&#xff09;是一项全国性、连续性、系统性、长期性的社会调查项目&#xff0c;它通过定期、系统地收集中国老年人群的社会、经济背景数据&#xff0c;以掌握老年人在衰老过程中面临的各种问题和挑战。这些数据评估了各项社会政策措施在提…

精通PostgreSQL:解锁高效数据库管理的十大必备技巧与最佳实践

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

Leetcode 109.有序链表转换二叉搜索树(Medium)

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它表示所示的高度…