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
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
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的链路地址,具体如何生成我们开始分析
-
提取该接口的MAC地址,如果该接口没有MAC地址则借用本地ID号最小的以太口的MAC地址,例如: 00E0.4C00.321A
-
将MAC地址中的“.”符换成“:”,并在MAC地址24bits后插入16bits固 定字符“FF:FE”,得到 00E0:4CFF:FE00:321A
-
从最高位往后数第七位取反,即原来是”0”就改为”1”,原来是”1”就改为”0”得到 024C:FF:FE00:321A 的接口标识符
-
取反的原因在于,MAC地址中对应bit为0表示全球唯一,为1表示本地唯一,但是在EUI-64中,该表示方法正好相反
-
加上前缀“FE80::”即FE80:: 024C:FF:FEO0:321A便自动形成该接口的Link Local Address
-
可以通过接口命令“ipv6 address FE80::xxxx link-local”进行手工指定(通常不建议这么做)。修改时注意前缀必须是FE80::/10,接口标识符任意
-
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协议
地址规划: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 Address | Description |
---|---|
FF02::1 | All Nodes(相当于224.0.0.1) |
FF02::2 | All Routers(相当于224.0.0.2) |
FF02::5 | All OSPFv3 Routers(相当于224.0.0.5) |
FF02::6 | All OSPFv3 DR Routers(相当于224.0.0.6) |
FF02::9 | All RIP ng Routers(相当于224.0.0.9) |
FF02::10 | All EIGRP Routers (相当于224.0.0.10) |
FF02::16 | All 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)该消息用于通知主机节点发送数据包使用替代路径,只能由路由器产生。该消息会将远端主机产生的实际数据封装以后返回给主机并通知替代路径的下一 跳节点地址。主机在收到该消息后,重新查询接口邻居表,重新发送该数据