IPv6 简笔
本文最后更新于 2024年5月27日 上午
IPv6简介
介绍
本质上IPv6就是为了解决IPv4地址空间不够而出现的。
长度由IPv4的32bit,扩展到了128bit。可以说IPv6地址数量近乎无限,以万亿为单位都显不足,如沧海一粟一般。
全新的数据报头部格式
表示方法
IPv6有别于IPv4的点分十进制表示,使用了十六进制表示,以冒号 : 来每四位分割,其中0在前面的都可以省略。
如后面或中间有多个空位的,则可以通过 :: 来压缩表示。但只能压缩一次。
如 2000:0000:0000:0000:0000:0000:0000:0000,可以压缩为 2000:: 来表示。
2000:0000:0000:0000:0000:0000:0000:0022,则可以被压缩为 2000::22来表示。
前缀长度(子网掩码)
IPv6中的子网掩码叫做前缀长度,为128位。其中网络地址也可以用于互联,且无广播地址。所以 /127的地址,有两个可用IP。
IPv6地址分类
全球单播地址
范围是 2000::/3 ,对应IPv4的公网地址。
链路本地地址
范围是 FE80::/10,此地址是必须有的。前64bit固定为FE80:: 后64bit的接口ID可以手动指定或者通过EUI-64算法自动生成(根据MAC地址生成),
不过一些操作系统,比如Windows使用了随机生成,是为了隐藏MAC地址。而且还生成了一个临时地址,用于对外访问。
接口ID还以根据网络环境变化,网络环境不变则固定,更改则改变。
EUI-64生成算法
EUI-64 是将48bit的MAC地址,其第七位取反,然后中间填充FFFE组成64bit的接口ID。
参考:https://network.51cto.com/art/201910/603898.htm
本地环回地址
范围是 ::1/128 ,对应IPv4的 127.0.0.1/8。
未指定地址
范围是 ::/128 , 对应IPv4的 0.0.0.0/32。DAD重复地址检测协议使用此IP发送报文。
唯一本地地址
范围是 FC00::/7, 对应IPv4的私网地址。
任播地址
地址空间与全球单播地址共享,是一个IPv6特有的地址类型。可以分配给多个接口,
发送到任播地址的数据包,将传递到由该地址标识的最近地址。
本地环回地址
范围是 ::1/128 ,对应IPv4的 127.0.0.1/8。
未指定地址
方位是 ::/128 , 对应IPv4的 0.0.0.0/32。DAD重复地址检测协议使用此IP发送报文。
组播地址
范围是 FE00::/10,对应IPv4的组播地址。 IPv6去无广播地址,其功能基本由组播地址代替。
被请求节点组播地址
范围是 FF02::1:FF00:0/104,其地址是一种特殊的IPv6组播地址。
当接口配置了单播地址的时候,接口会自动生成被请求节点组播地址,并加入此组播组。用于地址解析、邻居发现和重复地址检测。
其中前缀固定为FF02::1:FF:, 后24bit,由单播IPv6的后24bit组成。
可以说此地址是为了代替广播地址产生,可以减少主机收到和无关的报文。
IPv6地址自动分配方法
DHCPv6
DHCPv6又可以称之为有状态分配,与IPv4的DHCP很相似。分发的地址由DHCPv6服务器控制。
可以分配IPv6地址,前缀长度、网关、DNS、域名等信息。
SLAAC
无状态分配,由路由器通过 RS报文分发前缀信息,网关为分发前缀的路由。
其中后64bit的接口ID,由链路本地地址的后64bit组成。所以无状态分配的前缀必须大于等于/64。
比较新的标准可以使用RA报文分配DNS服务器。之前是不支持分配的。
无状态DHCPv6
IPv6前缀信息由RA报文分发,通过SLACC生成地址。其他信息,例如DNS使用DHCPv6分配。无状态+有状态结合的方法分发地址。
目前较新的标准也支持通过无状态下发DNS服务器了。
DHCPv6-PD
RFC 3633中定义了一种DHCPv6-PD模式,专门用于自动分配前缀。
DHCPv6-PD(Prefix Delegation,前缀分配)是DHCPv6的扩展,传统的DHCPv6注重的是将地址等网络配置参数从服务器端传递给IPv6客户主机,而DHCPv6-PD注重的是前缀分配,即PD服务器端将一个子网范围的前缀地址段以及DNS等其他网络配置信息下发给PD客户端,这就意味PD服务器下发的是一个“子网地址段”,而不是具体的可以直接供主机使用的IPv6地址。
举个例子,PD服务器可以将2001:da8::/60前缀通过某个IPv6接口下发给PD客户端,同时一般会在PD客户端的上联设备上生成相应的路由。PD客户端收到该前缀后,可以在本地IPv6接口上动态使用该前缀的/64子网地址。
IPv6工具
IPv6的子网计算器
http://www.gestioip.net/cgi-bin/subnet_calculator.cgi