IPv6报文格式
- Version(4-bit):IP版本,该字段值为6
- Traffic Class(8-bit):流量分类,与IPv4包头的TOS类似
- Flow Label(20-bit):流标签,用来标记IPv6数据包的一个流
- Payload Length(16-bit):有效载荷的长度,扩展报头也算在Payload长度里
- Next Header(8-bit):处理选项字段,分段,安全,移动性,松散源路由,记录路由等的新方式
- Hop Limit:(8-bit):定义IP数据包所能经过的最大跳数,每跳一次将此值减1。
- Source Address(128-bit):IP数据包的源地址
- Destination Address(128-bit):IP数据包的目的地址
- Possible Extension Header(s): 扩展报头
扩展报头(RFC2460)
Value | Type of Header |
0 | Hop-by-Hop Options Header |
6 | TCP (Upper Layer) |
17 | UDP (Upper Layer) |
41 | Encapsulated IPv6 Header |
43 | Routing Header |
44 | Fragment Header |
50 | Encapsulating Security Payload |
51 | Authentication Header |
58 | ICMPv6 (Upper Layer) |
59 | No next header |
60 | Destination Options |
RFC2460推荐的Extension Header出现顺序:
- IPv6 main header
- Hop-by-Hop Options header (if present, it MUST be the first one following the main/regular header)
- Destination Options header(with Routing Options)
- Routing header
- Fragment header
- Authentication header
- Encapsulating Security Payload header
- Destination Options header
- Upper-layer header
注:除了Hop-by-Hop Options header,其它的扩展头在传输过程中, 中间节点不对其做处理,处理扩展头的节点按扩展头顺序处理,而不能挑选某个header
Extension Header的组合方式:
+---------------+------------------------ | IPv6 header | TCP header + data | | | Next Header = | | 6(TCP) | +---------------+------------------------ +---------------+----------------+------------------------ | IPv6 header | Routing header | TCP header + data | | | | Next Header = | Next Header = | | 43(Routing) | 6(TCP) | +---------------+----------------+------------------------ +---------------+----------------+-----------------+----------------- | IPv6 header | Routing header | Fragment header | fragment of TCP | | | | header + data | Next Header = | Next Header = | Next Header = | | 43(Routing) | 5(Fragment) | 6(TCP) | +---------------+----------------+-----------------+-----------------
Hop-by-Hop 扩展头(type=0):
介绍:该字段由传送路径上的每个节点和路由器读取并处理,目前只定义了一个选项:要求支持超过64k的数据报文Jumbogram(RFC2675 )。
用途:主要用于巨型数据包(RFC2675)和路由器警报(RFC 2711),e.g :RSVP,MLD report etc)
补齐使用Pad1或者PadN
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Hdr Ext Len | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | . . . Options . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Routing Header(type=43)
介绍:在数据包发往目的地的途中,该包头能够被IPv6源节点用来强制数据包经过特定的路由器。当路由类型字段设为0时,在路由包头可以指定中间路由器列表,类似IPv4的松散源路由选项。
用途:主要用于移动IP
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Hdr Ext Len | Routing Type | Segments Left | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . type-specific data . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Hdr ext Len(8-bit):扩展头长度,不统计前1个字节
- Routing type(8-bit):标识路由头类型
- Segment Left(8-bit):剩余的seg数目
- Type-specific data(变长):由Routing type决定,Routing type=0时该段保留前4bytes,后跟沿途路由器的address-list
补齐使用Pad1或者PadN
如何使用?举个例子,源S发数据包到目的节点D,指定要经 I1,I2,I3 则:
As the packet travels from S to I1: Source Address = S Hdr Ext Len = 6 Destination Address = I1 Segments Left = 3 Address[1] = I2 Address[2] = I3 Address[3] = D As the packet travels from I1 to I2: Source Address = S Hdr Ext Len = 6 Destination Address = I2 Segments Left = 2 Address[1] = I1 Address[2] = I3 Address[3] = D As the packet travels from I2 to I3: Source Address = S Hdr Ext Len = 6 Destination Address = I3 Segments Left = 1 Address[1] = I1 Address[2] = I2 Address[3] = D As the packet travels from I3 to D: Source Address = S Hdr Ext Len = 6 Destination Address = D Segments Left = 0 Address[1] = I1 Address[2] = I2 Address[3] = I3
Fragment Header(type=44)
介绍:只能源节点用来将大于传输路径的PMTU的数据包进行分段,与IPv4不同,IPv6在源节点进行分段,而不能在中间的节点进行分段(使用PMTU机制进行检测路径最小的MTU)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Reserved | Fragment Offset |Res|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Reserved(8-bit): 初值为0
- Fragment Offset(13-bit):分片报文的偏移
- Res(2-bits):0
- M:1表示more frag(还有Fragment),0表示last frag(我就是最后一个了)
- Identification:分片产生的ID,对于发往同一目的的不同分片报文,该ID不同
数据包分片:如图
重组:如图
Destination Options Header(type=60)
介绍:承载数据包目的节点所需要的可选信息,给宿主机解释和使用的,目前这个选项为空
用途:IETF暂时建议使用该扩展头在移动节点和家乡代理之间交换注册信息
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Hdr Ext Len | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | . . . Options . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Hdr ext Len(8-bit):Header的长度,不统计前1个字节
- Options(变长):包含一个或多个TLV(Tag,Length,Value)三元组
- Pad1,PadN:用于填充报文Options剩余部分
No Next Header(type=59)
介绍:用于表示后面没有扩展头跟该在该扩展头后面
Authentication header(type=51)
介绍:由IPsec使用,以提供认证,数据完整性和重放保护,确保基本IPv6包头中一些字段的保护
Encapsulating Security Payload header(type=50)
介绍:由IPsec使用,以提供认证数据完整性和重放保护和IPv6数据包的保密
IPv4报文头和IPv6报文头比较
Reference:
1.东南大学网络体系结构课课件