前往讲完了ipv4,是不是觉得挺简单的,其实ipv6说实在的也不难,它是在ipv4的基础上进行优化的,所以有ipv4的基础我们再来学习ipv6就会简单多了。真要说它难吧,难就难在ipv6明明离我们很近实际上很远,大家学会了又用不到的话就容易忘记。跟我学英语学日语一样,没有相应的环境让我继续巩固加强,最后只能还给老师了。今天我们就来好好唠一唠这个ipv6,让大家再熟悉熟悉它。
一、背景
学习了ipv4,我们发现现实生活中有它好像也够用了,43亿的ip地址,其他的报文头部需要有的也好像都有。但实际上是,43亿的地址早在2011年就用完了,ip报文头部短短固定的20字节就有12个参数,是不是觉得有点多了,很多其实用不到,白白增加开销。也许你会想到竟然都用完了,为什么现在还能用ipv4呢,其实有很多方法用来解决这个问题,比如我们园区内部网ip地址的复用,以及向连接公网时使用nat技术,但nat技术不止带来延迟也带来安全方面的问题,ipv6取代ipv4是趋势,想学好网络掌握ipv6也是趋势。
二、ipv6是什么
ipv4是第1代ip地址的,ipv6则是第2代,有生之年内我们应该也不会要学习第3代ip地址了。ipv6拥有近乎无限的ip地址空间,ipv6就是为了解决ipv4所遇到的种种问题而提出的新一代ip地址,现在我们来对比下ipv4学习ipv6.
三、ipv6报文
1、version:4bit,版本号,值为6。
2、traffic class:8bit,流类别,等同于ipv4的tos字段。
3、flow label:20bit,流标签,新增字段,用于区分实时流量,不同的流标签+源地址唯一确认定一条数据流,中间设备可以根据这些信息更加高效率的区分数据流。
ipv6特意新加此字段好处:
①、对流量的识别无需按照ipv4检查五元组(源目ip,源目端口,协议类型),单一流标签标识整个数据流
②、20字节的流标签比ipv4依赖8字节的tos字段支持更精细的qos区分
③、使用流标签+路径mtu发现可以使得设备在源端直接进行分片(无需在中间路由器进行分片),因此可以取消ipv4的3个分片字段参数。
说到这我再聊聊ipv6和ipv4的分片:ipv6依靠的是源端分片而ipv4在源端和中间路由器进行分片
例:假如3010字节的原始数据报,mtu为1500,ipv4会分成3片,原始数据大小14801、+1480+50
ipv6:则是:1448+1448+114。1500-40(固定头部)-8(扩展头部)=1452,1452/8=181.5,不是8字节整数倍(这点跟ipv4一致,ipv4的就是1500-20(头部)=1480,1480/8=185),所以就是181*8=1448字节。
4、payload length:16bit,有效载荷长度,除了固定40字节头部外的数据包,不同于ipv4包括报文头部。
5、next header:8字节,下一包头,类似于ipv4的protocol字段,不同的是该字段定义紧跟ipv6包头后面的第一个扩展包头,没有才是类似于ipv4的上层协议类型。
我们知道ipv4有options字段,ipv6则将options字段放到了扩展包头(8字节倍数)中,而且不受40字节大小限制,当使用多个扩展包头时,前面的包头的next header字段志明下一扩展包头类型。
6、hop limit:8字节,同ipv4的ttl。
7、source destination address:128bit,源目ip地址,跟ipv4地址类似,只是空间更广。
8、是不是还落下head checksum这个没有解释,ipv6取消这个字段的原因,首先是ip数据在它的上下层都有检验(数据链路层CRC校验,传输层也有校验),再校验就有点冗余了,而且自己本身也支持ipsec扩展进行校验,既保证路数据的安全,更简化协议头部,提高转发性能。
四、ipv6地址
相对于ipv4来说ipv6地址是个相对比较麻烦的知识点,不止要记也要理解。
1、192.168.1.100;ipv4采用的是点分十进制;
2001:0001:0002:0003:0004:0005:0006:0007 ;ipv6采用的是冒分十六进制8段位;
相同的是ipv4和ipv6都采用ip地址/掩码长度表示ip地址,只是ipv6是128位,ipv4是32位。
2、ipv6地址缩写规范:
1)、每组16bit的前导0可以省略,但是所有都为0时需至少保留一个“0”,尾部0不能省略
2)、一个或多个连续16bit字符为0时,可以用::表示,但一个ipv6只能用一个
例:2001:0101:0000:5000:0000:0000:0000:0007 可缩写:2001:101:0:5000::0007
3、ipv6地址分类:
1)、前面我们知道ipv4地址可以分为单播、组播、广播3类,而ipv6可分为单播、组播、任播3类
而我们需要重点掌握的是单播地址。
2)、单播地址分类(5类)
单播地址标识一个接口,目的地址为单播地址的报文会被转发到被标识的接口,i而一个接口可以拥有多个ipv6地址(链路本地和全局地址),其实ipv4单一接口也可以拥有多个ip地址(主ip辅ip)。单播地址可分类为全球单播地址,唯一本地地址,链路本地地址,特殊地址,还有其他单播地址。
一个ipv单播地址分为两部分:网络前缀(相当于网络id)和接口标识(相当于主机id)。常见的ipv6单播地址(最高三位001)网络前缀和接口前缀必须为64bit。
接口标识可通过三种方式生成:手工配置,系统自动生成,通过ieee eui-64规范生成
eui-64规范:例mac地址为12:34:56:78:9A:BC
其二进制为00010010-00110100-01010110 - 01111000-10011010-10111100
第7位取反,中间插入FFFE,则可得10:34:56:FF:FE:78:9A:BC
①、全球单播地址(GUA,Global Unicast Address)
也被称为可聚合全球单播地址,该类地址类似于ipv4的公网地址,要进行申请。
地址为 001(固定3bit)全局路由前缀(45bit)子网id(16bit)接口标识(64bit)
②、唯一本地地址(ULA,Unique local Address)
类似于ipv4中的私网地址,该地址在ipv6公网中不可被路由,无法直接访问公网。
11111101(固定8bit)-Global ID(40bit,伪随机产生)子网ID(16bit)接口标识(64bit)
唯一本地地址使用的是FC00::/7地址块,目前只用FD00::/8,FC00::/8保留待用(虽然ULA随机产生,但2^40这个冲突概率很低很低)
③、链路本地地址(LLA,Link-local Address)
LLA是ipv6的范围更受限的地址类型,有效范围是本地链路
11111110-10(固定10bit)0(54bit,固定为0)接口标识(64bit)
由上我们可以知道,LLA的网络接口地址是固定的,为FE80::/10,LLA用于单一链路层面的通信,常用于ipv6地址无状态自动配置,ipv6邻居发现等,链路本地地址的有效范围为本地链路。每个ipv6接口都必须有一个链路本地地址,华为设备支持自动生成和手动指定。
④、特殊地址
未指定地址:0:0:0:0:0:0:0:0/128或者::/128。该地址作为某些报文的源地址,比如作为重复地址检测时发送的邻居请求报文的源地址,或者dhcpv6初始化过程客户端所发送的请求报文源地址。
环回地址:0:0:0:0:0:0:0:1/128或者::1/128。与ipv4中的123.0.0.1作用相同,用于本地回环,可用于本地协议栈环回测试
⑤、其他地址
其他众多地址基本用作保留地址,根本用不完。。。
3)、组播地址:标识多个接口,目的地址为组播地址的报文会被送到所有标识的接口,只有假如相应的组播组的设备接口才会侦听发往该组播地址的报文。ipv6没有定义广播地址,在ipv6网络中,所有广播的应用场景都被ipv6组播所取代。
11111111-flags(4bit)scope(4bit)reserved(80bit,全0)group id(32bit)
scope:0,F表示预留,
1表示节点本地范围,
2表示链路本地范围,
5表示站点本地范围,
8表示组织本地范围,
E表示全球范围。
其他的也是未分配的。
flags:用来表示永久或临时路由,0000表示永久分配或总所众知,0001表示临时的
当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。该地址主要用于邻居发现机制和地址重复检测功能,被请求节点组播地址有效范围为本地链路
被请求节点组播地址:FF02:0000:0000:0000:0000:0001:FF(拷贝ipv6单播或任播24bit)
4)、任播地址:标识一组网络接口(通常属于不同的节点),目标地址是任播地址的数据包将发哦送给其中路由意义上最近的一个网络接口。
其他后续再补充。。。