IPV6基础
IPv6报文结构:
- IPv6的报文相较于IPv4报文,砍了如下字段,头部长度,标识,flags分段偏移,头部校验,option,padding
- 由于IPv6采用头部长度定长为40字节,所以不需要头部长度的的字段
- 由于IPv6的报文分片是由扩展报文来完成的,所以移除了报文中分片所需要的字段
- 由于在二层存在对数据帧的校验,四层中存在对数据段的校验,所以不需要在三层进行包的校验,而且因为在树的传递过程中,TTL值是不停的在改变的,所以需要频繁的校验,影响了数据包的转发效率。
- 由于IPv6的扩展报头将IPv4的Option字段给取代了,这样让IPv6的报文有了固定长度,还大大提高了中间节点对IPv6报文的的转发效率,由于Option字段给移除了,所以填充字段也就不存在了。
- IPv6静载荷:在一段IPv6数据中,除去IPv6基本报头之外,其他的都是静载荷,其中可能包含多个扩展报头
IPv6扩展头:
- IPv6定义了6个扩展报头:逐跳选项报头,目的选项报头,路由报头,分段报头,认证报头,封装安全净载报头,每种扩展报头的大小应当为8的倍数。
- 逐跳选项报头和目的选项报头采用TLV的设计,
- 逐跳选项报头:用于携带报文在沿途转发的路径上必须被路由器检查和处理的信息(目前指定了一种逐跳选型:巨型净喝选项,使得允许IPv6的有效载荷超过65535字节)
- 目的选项报头:取代了IPv4中的Option字段,用于携带只能由目的地址才能进行处理的信息。
- 路由选择报头:包含IPv6数据包到达目的地所需要经过的节点,强制数据按照该节点进行转发。
- 分段报头:如果数据包的大于了Path MTU,则要进行分段,IPv6中,数据的分段由源端完成,重组由目的端完成,中间是透明的。
- 认证报头:提供对数据包的完整性的校验和加密,
- 封装安全净载报头:
IPv6地址分类:
-
由网络前缀+接口ID组成,网络前缀可以手工配置,或者无状态地址自动配置生成,接口ID可以由手工,EUI-64
-
单播地址:
- 未指定地址:(::/128)
- 环回地址:(::1/128)
- 全球单播地址:是带有全局单播路由前缀的地址,可以针对于路由前缀进行聚合,高三位固定为001,第四位可0可1,因此,全球单播路由前缀为2000::/3 3000::/3,其中全球单播地址由路由前缀(48bit)+子网ID(18bit)+接口ID(64bit)组成
- 唯一本地地址:类似于IPv4中的私网地址,只能在本地网络中被路由转发,在全球网络中不会被路由转发。具有全球唯一的前缀为FC00::/7(该前缀方便边缘设备进行过滤),但由于有一个特殊字段global id,该值由设备随机生成,所以就算两个私网之间进行连接,该地址而不会冲突
- 链路本地地址:只在连接同一链路的节点之间进行使用,也只在该节点之间有效,由固定的前缀FE80::/10+接口ID组成,可以作为路由的下一跳,以本地链路地址作为源或目的数据不会转发到其他链路
-
组播地址:
- IPv6组播跟IPv4组播地址相同,用来标识一组接口,通常这组接口属于不同节点,IPv6地址由前缀+标记+范围+组播组ID
- 前缀:FF00::/8
- 标记:4bit,只是用了最后1bit,其中置位代表临时组地址,未置位代表永久组地址。
- 范围:4bit,组播数据流在网络中可传递的范围
- 组播组ID:112bit,用以标识组播组
- 被请求节点 组播地址:由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。
-
任播地址:
- 也属于单播地址的一类,没有特定的地址前缀,通过单播地址用作的行为,来区分是否为任播地址
- 主要是为了向DNS和HTTP提供服务的。