IPv6的头有更少的域:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Traffic Class | Flow Label | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Length | Next Header | Hop Limit | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Source Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Destination Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
version,4位Internet协议版本号,值为6。
Traffic class,8位。
Flow Label,20位。
Payload Length,16位无符号整数。头之后剩余的包长度,单位为字节,扩展头也作为payload的一部分。
Next Header,8位,跟着IPv6头的头类型。使用IPv4 Protocol field相同的内容(RFC1700)
Hop Limit,8位,相当于TTL,每转发一次减1,为0后丢弃。
Source Address,128位源地址
Destination Address,128位目的地址
可选的internet layer信息编码在扩展头中。IPv6 packet可以包含0个或多个扩展头:
+---------------+------------------------ | IPv6 header | TCP header + data | | | Next Header = | | TCP | +---------------+------------------------ +---------------+----------------+------------------------ | IPv6 header | Routing header | TCP header + data | | | | Next Header = | Next Header = | | Routing | TCP | +---------------+----------------+------------------------ +---------------+----------------+-----------------+----------------- | IPv6 header | Routing header | Fragment header | fragment of TCP | | | | header + data | Next Header = | Next Header = | Next Header = | | Routing | Fragment | TCP | +---------------+----------------+-----------------+-----------------
一个全整实现的IPv6包含下述头的支持:
Hop-by-Hop OptionsEncapsulating Security Payload
扩展头顺序
当一个或多个扩展头出现在同一个包中时,推荐使用下面的扩展头顺序:
IPv6 headerFragment header
Authentication header (note 2)upper-layer header
Options
两个扩展包含Options,option是一个TLV,
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - | Option Type | Opt Data Len | Option Data +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
Type,8位
Data len,8位
Data,数据
Option type的高两位有特殊的用途,表示当一个node无法识别这个Option时如何处理
00,跳过这个Option
01,丢掉这个packet
10,丢掉,回复ICMP信息
11,丢掉,如果目的地址不是多播地址,则回复ICMP信息
Hop-by-Hop options header
每个包传送路径上的每个node都必须检查一个扩展头
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Hdr Ext Len | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | . . . Options . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Router header
用来表示转发的时候经过哪些节点
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Hdr Ext Len | Routing Type | Segments Left | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . type-specific data . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
只有IPv6头中的目的地址节点可以访问这个头,当包达到目的地址后,它把目的地址和这个节点里面的地址最后一个地址交换,将segments left减1,然后继续递送到下一个目的地。
Fragment header
和IPv4不同,IPv6转发路径上的节点不需要处理分片头。Next header value是44。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Reserved | Fragment Offset |Res|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Next Header,8位
Reserved,8位
Fragment Offset,片偏移,单位为8字节。
Res,2位保留
M,1表示还有更多的分片,0表示最后一个分片
Identification,32位。
对于每个要分片的包,源节点都为其产生一个标识符,同一个包的每个分片,其identification都相同。
Destination options header
表示表的目的节点需要的信息,类型为60
No next header
表示没有更多的头,类型为59
IPv6要求最小的链路MTU是1280
这个头用来要求IPv6 routers做特殊的处理,如QoS等。
upper layer checksums
IPv6要求上层协议按照下述伪头计算checksum
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Source Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Destination Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Upper-Layer Packet Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | zero | Next Header | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
https://tools.ietf.org/html/rfc2460