IPv6概述
IPv6产生背景
IPv4目前已广泛部署,经过多年的发展,已经非常成熟,得到了所有设备厂商的支持,但也有一些不足之处:
- 地址空间不足
- 由于互联几何数的增长,IPv4地址已经耗尽,IPv4可以提供2的32次方个地址,由于协议设计之初又有许多部分地址不能被公网分配使用(私网地址、D类地址、E类地址等),同时全球IPv4地址分配不均,美国占用大多数。
- 互联网骨干路由器的路由器路由表非常庞大
- 因IPv4发展初期缺乏合理的地址规划,造成地址分配不连续,导致目前互联网骨干路由器BGP路由表非常庞大,影响数据包的转发效率。
IPv6(Internet Protocol Version 6)是网络层协议的第二代标准协议,也被称为IPng(IP Next Generation),它是Internet工程任务组(IETF)设计的一套规范,是IPv4 [RFC 791]的升级版本。
IPv6的优势
- 地址空间巨大
- 层次化的路由设计
IPv6报文格式
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Length | Next Header | Hop Limit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Extension Headers |
+ ... ... +
IPv6基本头:
Internet Protocol Version 6, Src: fe80::224:acff:fe0e:d568, Dst: fd01:200b:1300:3::1
0110 .... = Version: 6
.... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
.... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
Payload Length: 56
Next Header: ICMPv6 (58)
Hop Limit: 64
Source Address: fe80::224:acff:fe0e:d568
Destination Address: fd01:200b:1300:3::1
字段 | 长度 | 字段说明 |
---|---|---|
Version | 4bit | 和IPv4一样,占用4个bit,IPv4是0100,IPv6是0110。 |
Traffic Class | 1B | IPv4中DSCP(Tos)字段,用来给数据包打上一个优先级,或设备识别数据包优先级。使用了6bit,预留2个bit,总共可以表示64中种优先级。 |
Flow Label | 20bit | 用于标识同一个数据流,此字段为IPv6新增字段,目前该字段还在试用中。 |
Payload Length | 2B | 数据包的有效载荷,指的是IPv6基本头后面的长度,包含扩展头部分。该字段和IPv4不同的是,IPv4中的length包含IP头(20B)的长度(MTU),IPv6 payload length不包含IPv6基本头。 |
Next Header | 1B | 指的是上层使用的是什么协议,相当于IPv4中protocol字段,而且与IPv4的协议字段使用相同的协议值,udp 6,tcp 17。 |
Hop Limit | 1B | IPv4中ttl字段,使用三层防环,最大值为255。 |
Source Address | 16B | 源地址,128bit(16B),必须是单播地址。 |
Destination Address | 16B | 目的地址,128bit(16B),可以是单播或组播地址。 |
与IPv4报头比较
IPv4中包含13个字段,在IPv6中 把IP报文头的长度(IHL)、标识(id)、flags、offset(偏移)、校验和(checksum)、options字段给取消了,因为IPv6基本头是40B,所以把IHL字段去除,分片功能由IPv6扩展头来实现,所以去除了标识、flags、offset字段。1.数据链路层会对数据包进行FCS校验 2.传输层会对数据包进行checksum 3.ttl在一条都会改变,路由器要进行繁琐的校验和的重新计算,影响数据包的转发效率,所以IPv6将checksum也取消了。
IPv6的扩展头
IPv6扩展头是可选报头,跟在IPv6基本头之后,将IPv4中的可选项分离出来后,大大提高了中间节点对数据包的转发效率,每个IP数据包都有0个或多个扩展头。
RFC 2460 定义了6个IPv6扩展头:逐跳选项报头、目的选项报头、路由选择报头、分段报头、认证报头、封装安全静载报头。
路由选择报头:
报头格式:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| next header | Hdr Ext Len | routing type=0 | segment left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Address[1] +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Address[2] +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ …………………… +
| |
字段 | 字段说明 |
---|---|
next header | 作用等同于基本头中next header |
Hdr Ext Len | 表示扩展头的长度,该长度以8Byte为单位 |
routing type | 目前只定义了类型0,表示经过的中间路由器地址字段不为空 |
segment left | 数据包经过中间IPv6节点的数量 |
作用:扩展头包含 数据包 去往目的节点 中间所经过的节点的信息(IPv6地址),类似于IPv4 options里的宽松源路由。
使用路由选择扩展头时,初始状态源端主机发出的数据包目的地址并非实际的最终目的地址,而是中间的需要经过的第一个中间节点IPv6地址,其segment left等于需要经过节点的数量,中间其它路由器忽略路由扩展头,数据包到达第一个指定的路由器(IPv6 地址为Address[1])后才处理路由扩展头,数据包的目的地址替换为指定经过的第二台路由器(IPv6 地址为Address[2]),segment left值减1,以此类推,数据包到达最后的目的地址。segment left址段字段为0表示此目的地址 为最终的目的地址。路由选择扩展头广泛用于SRv6。
参考文档:
https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0254009201