前言
随着Internet规模的扩大,IPv4地址空间已经消耗殆尽。针对IPV4的地址短缺问题,曾先后出现过CIDR和NAT等临时性解决方案,但是CIDR和NAT都有各自的弊端,并不能作为IPv4地址短缺问题的彻底解决方案。另外,安全性、Qos(服务质量)、简便配置等要求也表明需要一个新的协议来根本解决目前IPv4面临的问题。
IETF在20世纪90年代提出了下一代互联网协议-IPv6,IPv6支持几乎无限的地址空间。IPv6使用了全新的地址配置方式,使得配置更加简单。IPv6还采用了全新的报文格式,提高了报文处理的效率、安全性,也能更好的支持Qos。
学习目标
学完本课程后,您应该能:
IPV6地址
ipv4 大约43亿个。
ipv6 3.4 乘以10的38次方个。
·1,网络爆炸增长
2,ipv4分配不合理
3,ipv4 按类分类。,不灵活。
每个人拥有5乘以10的28次方个ip地址
地球上每粒沙子都有一个ip地址
ipv6报文头
IPv6的基本报头在IPv4报文的基础上,增加了流标签域,去除了一些冗余的字段,使报文头的处理更为简单、高效。
IPv6扩展报头
路由、逐跳、目的选项、认证、安装封装净载、分片。
IPv6地址格式
IPv6地址长试为128比特,第16比特划分为一段,第段由4个十六进制数表示,并用冒号隔开。冒号分16进制。
IPv6地址包括网络前缀和接口标识两部分。
2001:0DB8:0000:0000:0000:0000:0346:8D58
IPv6地址压缩格式
每一组中的前导“0”都可以省略
地址中包含的连续全为0的组,可以用双冒号“::”来代替,“::”只能出现一次。
2001:0DB8:0000:0000:0000:0000:0346:8D58、
2001:DB8:0:0:0:0:346:8D58
2001:DB8::346:8D58
IPv6地址分类
地址范围 | 描述 |
2000::/3 | 全球单播地址(只要前3位为001) |
2001:0DB8::/32 | 保留地址(文档保留地址) |
3FFF:FFFF::/32 | 示例地址 |
2002::/16 | 用于IPv6到IPv4的转换系统 |
3FFE::/16 | 用于6bone测试目的的前缀 |
FE80::/10 | 链路本地地址 |
FF00::/8 | 组播地址 |
::/128 | 未指定地址 |
::1/128 | 环回地址 |
IPv6地址分为单播地址、任播地址、组播地址三种类型。
IPv6私网地址
Site-local 站点本地地址 FEC0::/10(IETF已收回)
unique local 唯一本地地址 FC:00/10
参见:RFC 3879
IPv6单播地址
ipv6.baidu.com 2400:da00:2::29
ipv6.taobao.com 2001:da8:20d:7042::f2 2001:da8:20d:7042::f2
IPv6全球单播地址范围:2000:0000:0000:0000:0000:0000:0000:0000~3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF。
全球单播地址带有固定前缀,类似与IPv4中的公网地址。
链路本地单播地址前缀为FE80::/10,类似与IPv4中的169.254.X.X/16
IPv6组播地址
FF02::1 链路本地范围所有节点
FF02::2 链路本地范围所有路由器
所有IPv6组播地址都能FF开始。
IPv6为需要使用组播发送数据的协议预留了一些组播组。
ipv4 OSPF--->224.0.0.5,224.0.0.6
ripv2 224.0.0.9
ipv6 ospfv3--> FF02::5,FF02::6
ripng--->FF02::9
IPv6任播地址
任播地址用来标识一组网络接口,在给多个主机或者节点提供相同服务时提供冗余和负载分担。
IPv6无状态自动配置
网络节点向相连的路由器发送RS,请求地址前缀信息。
路由器通过发送路由器通告RA,回复地址前缀信息。
加上MAC构造IPV6地址
ICMPv6 TYPE= 133(路由器请求)
ICMPv6 TYP=134 (路由器通告RA)
2.手工,静态配置
3.EUI-64 自动IPv6
将FFFE插入MAC地址的前24位与后24位之间,并将第7位的0改为1即可生成接口ID。
实验
00E0-FC10-172F-->00E0-FCFF-FE10-172F-->02E0-FCFF-FE10-172F-->FE80::2E0-FCFF-FE10-172F
IPv6无状地址DAD检查
ICMPv6 TYPE 135(邻居请求NS)
ICMPv6 TYPE 136(邻居通告)
当为接口配置IPv6地址时,DAD用来在本地链路范围内检测将要使用的IPv6地址是否唯一。、
4,有状态的地址配置
DHCP
路由通告中,M=1,向DHCP服务器请求IP地址。
O=1,向服务器请求其他设置,DNS服务器,搜索后缀等。
icmpv6
邻居不可达检测(NUD)
NUD(Neighbor Unreachable Detection,邻居不可达检测)是节点确定邻居可达性的过程。邻居不可达检测机制通过邻居可达性状态机来描述邻居的可达性。
邻居可达性状态机保存在邻居缓存表中,共有如下6种状态:
(1)INCOMPLETE(未完成状态):表示正在解析地址,但邻居链路层地址尚未确定。
(2)REACHABLE(可达状态):表示地址解析成功,该邻居可达。
(3)STALE(失效状态):表示可达时间耗尽,未确定邻居是否可达。
(4)DELAY(延迟状态):表示未确定邻居是否可达。DELAY状态不是一个稳定的状态,而是一个延时等待状态。
(5)PROBE(探测状态):节点会向处于PROBE状态的邻居持续发送NS报文。
(6)EMPTY(空闲状态):表示节点上没有相关邻接点的邻居缓存表项。
linux系统查看ipv6邻居可达性状态机(stale,delay,reachable)
[root@localhost ~]# ip -6 neighbor show
fe80::40ed:b86a:a45b:c51e dev ens37 lladdr 00:0c:29:ce:82:a8 STALE
fd00::2 dev ens37 lladdr 00:0c:29:ce:82:a8 STALE
[root@localhost ~]# ip -6 neighbor show
fe80::40ed:b86a:a45b:c51e dev ens37 lladdr 00:0c:29:ce:82:a8 DELAY
fd00::2 dev ens37 lladdr 00:0c:29:ce:82:a8 REACHABLE
[root@localhost ~]# ip -6 neighbor show
fe80::40ed:b86a:a45b:c51e dev ens37 lladdr 00:0c:29:ce:82:a8 REACHABLE
fd00::2 dev ens37 lladdr 00:0c:29:ce:82:a8 REACHABLE
windows系统查看ipv6邻居可达性状态机
C:\Users\Administrator>netsh interface ipv6 show neighbors
接口 1: Loopback Pseudo-Interface 1
Internet 地址 物理地址 类型
-------------------------------------------- ----------------- -----------
ff02::2 永久
ff02::16 永久
ff02::1:2 永久
ff02::1:ff00:1 永久
ff02::1:ff26:b9c 永久
接口 12: Ethernet0
Internet 地址 物理地址 类型
-------------------------------------------- ----------------- -----------
fd00::1 00-0c-29-6d-41-2b 停滞
fe80::790a:ce91:b726:b9c 00-0c-29-6d-41-2b 停滞
ff02::1 33-33-00-00-00-01 永久
ff02::2 33-33-00-00-00-02 永久
ff02::16 33-33-00-00-00-16 永久
ff02::1:2 33-33-00-01-00-02 永久
ff02::1:3 33-33-00-01-00-03 永久
ff02::1:ff00:1 33-33-ff-00-00-01 永久
ff02::1:ff00:2 33-33-ff-00-00-02 永久
ff02::1:ff26:b9c 33-33-ff-26-0b-9c 永久
ff02::1:ff5b:c51e 33-33-ff-5b-c5-1e 永久
Internet 地址 物理地址 类型
-------------------------------------------- ----------------- ----------
fd00::1 00-0c-29-6d-41-2b 可以访问
fe80::790a:ce91:b726:b9c 00-0c-29-6d-41-2b 可以访问
图2-11 邻居状态机
图中实线箭头表示由NS/NA报文交互导致的状态变化,各状态间的相互转换如下:
① 在EMPTY状态时,如果有报文要发送给邻接节点,则在本地邻居缓存表建立该邻接节点的表项,并将该表项置于INCOMPLETE状态,同时向邻接节点以组播方式发送NS报文。
② 节点收到邻居回应的单播NA报文后,将处于INCOMPLETE状态的邻居缓存表项转化为REACHABLE状态。如果地址解析失败(发出的组播NS超时),则删除该表项。
③ 处于REACHABLE状态的表项,如果在REACHABLE_TIME时间内没有收到关于该邻居的“可达性证实信息”,则进入STALE状态。此外,如果该节点收到邻居节点发出的非S置位NA报文,并且链路层地址有变化,相关表项会进入STALE状态。
④ 处于STALE状态的表项,当有报文发往该邻居时,这个报文会利用缓存的链路层地址进行封装,并使该表项进入DELAY状态,等待收到“可达性证实信息”。
⑤ 进入DELAY状态后,如果DELAY_FIRST_PROBE_TIME时间之内还未收到关于该邻居的“可达性证实信息”,则该表项进入PROBE状态。
⑥ 在PROBE状态时,节点会周期性地用NS报文来探测邻居的可达性,探测最大时间间隔为RETRANS_TIMER,在最多尝试MAX_ UNICAST_SOLICIT次后,如果仍未收到邻居回应的NA报文,则认为该邻居已不可达,该表项将被删除。
NodeA上,NodeB的表项处于STALE状态。此时若NodeA有报文发往NodeB,且没有上层协议能够提供到NodeB的“可达性证实信息”时,则NodeA需要重新验证到NodeB的可达性。
NUD过程与地址解析过程的主要不同之处在于以下两点:
(1)NUD的NS报文的目的MAC是目的节点的MAC地址;目的IPv6地址为NodeB的单播地址,而不是被请求节点组播地址。
(2)NA报文中的S标记须置位,表示是可达性确认报文,即这个NA报文是专门响应NS报文的。
Centos7 路由通告配置
ip地址配置
HWADDR=00:0C:29:6D:41:2B
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=10.10.10.1
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
UUID=c4052aca-1d7c-3bdc-8a73-f437c5ebec0e
ONBOOT=yes
IPV6ADDR=fd00::1/64
IPV6FORWARDING=yes
PEERDNS=yes
radvd配置
radvd.conf配置
# NOTE: there is no such thing as a working "by-default" configuration file.
# At least the prefix needs to be specified. Please consult the radvd.conf(5)
# man page and/or /usr/share/doc/radvd-*/radvd.conf.example for help.
#
#
interface ens37
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
AdvLinkMTU 1500;
prefix fd00::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
RDNSS 2900:8:8:8::99
{
AdvRDNSSPreference 8;
AdvRDNSSLifetime 180;
};
};
~
开启ipv6转发
[root@localhost etc]# cat sysctl.conf
# sysctl settings are defined through files iG
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).\
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
使配置生效并查看效果
sysctl -p
windows系统获取的ipv6地址
linux系统获取的ipv6地址