为什么要使用IPV6地址?
IPV4地址不够用(NAT,私网地址,变长子网划分)
IPV4报文是可变长的,所以还要先去查看长度字段才能分出哪些是头部,这样就造成了速度较慢,无法用在现在对网络速度要求非常快的物联网时代
IPV4的校验字段可以不用(以太有校验,TCP也有校验,这样还需要对IPV4的报文进行校验)
IPV4的分片功能(大多数报文不会分片,但是padding字段还是要读取的)
IPV6地址
IPv6地址格式
长度为128比特,共划分8段,每段有16个2进制数。每段由4个十六进制数表示,并用冒号隔开。
IPv6地址包括网络前缀和接口标识两部分。
IPv6地址压缩格式
每一组中的前导0(仅前3个0)都可以省略
地址中包含的连续全为0的组,可以用双冒号“::”来代替
例:
2001:0001:00000000:0000:0010:0000:0001
2001:1:0:0:0:10:0:1
2001:1::10:0:1
IPv6报文格式
头部是固定长度,长度40个字节,一共包含8个字段
version,版本
Traffic Class,类似于QOS
Flow Label,各个厂家可以做独立的开发,并没有普及使用(原版含义:可以直接把五元组算好之后写到这个字段里面,加快了读取速度)
paylaoad length,载荷长度
Next Header,相当于IPV4里面的protocol字段,标识把数据交给哪个上层协议
Hop Limit,IPV4的TTL
IPv4与IPv6格式对比
IPv6扩展报头
ipv6模块把一些不常用的功能没有放到固定的报文头部里面,放到了分片里面(可以根据固定头部里面的Next header字段查看是否有扩展头部或者指向哪个扩展头部)
扩展报头是载荷,而且是可以变长
扩展报头种类
逐条选项报头,主要用于巨型帧的表示。每台设备都要读取这个内容:例如,payload length这个字段是用来表示长度的,如果最大只能写65535,但是这个IPV6后面带了10万多个字节,这样payload length字段就无法表示载荷的长度,那么就可以把payload length字段写0,然后next header字段指向扩展报头,这样就可以利用扩展报头来表示巨型载荷的长度。
目的选项报头,例如A向B发送一个数据帧,中间设备是不可以查看目的选项报头的内容,只有B与A才可以查看目的选项报头。
路由报头,例如接收到IPV6报文,之后要进行查询路由表发现这个数据包要转发给X,但是IPV6报文后面跟着有路由报头(路由报头要求下一跳交给C),那么就要按照路由报头的要求进行转发。SRV6的雏形
分段报头,用于标识是怎么进行分片的,分片ID是怎么标识的,有分片就带这个报头,没有分片就不携带。
认证报头,提供认证等。
封装安全净载报头,类似于认证报头。
IPV6地址类型
组播地址
地址范围FF00:: /8,用来标识一组接口,发往组播地址的数据将被转发给侦听改地址的多个设备
永久分配或众所周知:例如224.0.0.5或者224.0.0.6
预留组播地址
组播地址的MAC地址映射
组播的地址都是映射出来的
3333开头,后面的32位把IPV6的最后32位拿出来构成48位的地址使用
*被请求节点组播地址
FF02::1:FF00:0/104
取代了广播功能,不知道对方IP地址的时候,就封装这个MAC地址为目的地址。
设备拥有一个单播地址的时候(2001::1),接口就会自动加入到一个被请求节点组播组里面(FF02::1:FF[单播地址的后面24位])
如题,配了一个地址会加到几个组里面?
是一台路由器就会加入到FF02::2,支持组播就要加入FF02::1
答:加入了四个组(自己配的地址和链路本地地址都会加入被请求节点组播地址;还有FF02::2,FF02::1)
IPV6在同一个接口下面可以配置多个IP地址
被请求节点组播组前104位是固定的,有可能一个接口下两个地址会在同一个被请求组播组里面。
单播地址
可聚合全球单播地址
定义用于IPV6 internet。他们是全局唯一和全局可路由
类似IPV4公网地址
由前缀,子网ID和接口标识组成
链路本地地址
在一个节点启动IPV6协议栈时,节点的每个接口会自动配置一个链路本地地址。该地址专门用来和相同连路上的其他主机通信。
地址前缀FE80::/10,将接口ID添加在后面作为地址的低64位。
每一个IPV6接口都必须具备一个链路本地地址,这个前缀是不可以被路由的,只能在广播域中使用这个地址。
1.配置一个全球单播地址
ipv6
int g0/0/0
ipv6 enable
ipv6 address 2001::1 64
2.手动配置一个本地链路地址
ipv6
int g0/0/0
ipv6 enable
ipv6 address fe80::1 link-local
3.自动产生
ipv6
int g0/0/0
ipv6 enable
ipv6 address auto link-local
接口ID有三种产生方式(软件自动,手动指定,EUI-64)
EUI-64
- 把网卡的MAC地址提出来
- 把MAC地址还原成48位二进制
- 把48位二进制分解,前面24位+后面24位,在中间插入FFFE(16个二进制数)
- 将MAC地址的第七位取反
- 得到一个完整的64位2进制数,再还原成16进制
例:
- 00e0-fcf7-7b51
- 00e0 fc fffe f7 7b51
- 02e0 fc fffe f7 7b51
- 02e0:fcff:fef7:7b51
唯一本地地址
避免产生像IPV4的死亡地址泄露到公网而造成的问题,RFC4193定义了唯一本地地址
IPV4兼容地址
IPV4与IPV6之间进行互访使用的
任播地址
一种解决方案,就是全球单播地址,在最近的地方会走不同的服务器
ICMP V6
ICMPv6是IPV6的基础协议之一,用于向源节点传递报文转发的信息或者错误。协议类型号为58。
邻居发现(过去的ARP)、无状态地址配置(自动产生地址)、重复地址检测(免费ARP)、PMTU发现
邻居发现协议 NDP
NS是组播,NA是单播
地址解析,类似于ARP的功能
邻居请求
相当于过去的ARP,现在发的是ICMP里面的子集NDP里面的一个报文NS
邻居通告
过去单播要回ARP,现在回的消息不叫ARP叫NA
R位:是不是一个路由器发出来的
S位:是不是有人向我发了一个NS回了一个NA
O位:相当于刷新MAC
- 刚配上IPV6地址会向外发送两个ICMP V6消息,相当于免费ARP探测
- ping ipv6 2001::2
会产生MAC地址表 - 后面的ping现在就可以通了,现在没有arp表,只有dis ipv6 neighbors