当前位置: 首页 > news >正文

IPv6理论基础

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C/C++ let __DATE__ format to “YYYY-MM-DD“
  • Ionic 头部和底部
  • C++ | Leetcode C++题解之第397题整数替换
  • Linux 远程连接与常见错误:一直输入密码,无报错或无填充
  • 通杀漏洞挖掘 | 某系统超级管理员任意密码重置
  • strcmp函数的使用和模拟实现
  • 台球助教小程序开发/APP源码部署
  • vue页面使用自定义字体
  • Redis:缓存击穿
  • 低空经济新概念
  • 1 Linux SSH安全加固_linux system-auth
  • HTML 基础,尚优选网站设计开发(二)
  • 数据结构应用实例(四)——最小生成树
  • 新能源汽车出海中的数据合规热点问题
  • UE5 半透明阴影 快速解决方案
  • [译]如何构建服务器端web组件,为何要构建?
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 11111111
  • css的样式优先级
  • DOM的那些事
  • HTTP 简介
  • JavaScript异步流程控制的前世今生
  • jQuery(一)
  • Spring Boot快速入门(一):Hello Spring Boot
  • Tornado学习笔记(1)
  • TypeScript实现数据结构(一)栈,队列,链表
  • uva 10370 Above Average
  • Vue学习第二天
  • 不上全站https的网站你们就等着被恶心死吧
  • 大快搜索数据爬虫技术实例安装教学篇
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 想写好前端,先练好内功
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ‌移动管家手机智能控制汽车系统
  • #etcd#安装时出错
  • (+4)2.2UML建模图
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (1)虚拟机的安装与使用,linux系统安装
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (poj1.3.2)1791(构造法模拟)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (四)图像的%2线性拉伸
  • (一)SvelteKit教程:hello world
  • (转)一些感悟
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .apk文件,IIS不支持下载解决
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution