注意:文中部分字段摘自Cisco TCP/IP路由协议卷一
PV4报头分析
使用Wireshark抓取一个ipv4的数据包
Version(版本):
该字段长度为4比特位。标识IP报头的版本和格式,ipv4数据包的该字段设置为:0100
IHL( Internet报头长度):
该字段长度为4比特位。它标识报头的总长度。
Type of Service(服务类型):
该字段长度为8比特位。被分为俩个部分,前6位被称为区分服务字段—DS字段;后2位是显示拥塞通知字段—ECN字段,用于QOS。
Total Length(总长度):
该字段长度为16比特位。它标识数据报和数据包的总长度,单位为字节。所以ipv4的数据最大为65535。
Identification(标识符):
该字段长度为16比特位。它标识分段所属的组,所属为同一组则标识符相同。在网络层中也可把流量区分开来,用于流量分片。
Flags(标记位):
该字段长度为3比特位。它分为三分部分,保留位(reserved bit)为0;分片位(Don`t fragent)当为1时标识未分片,0则标识被分片;更多位(more fragments)为0标识最后分段,为1标识还有更多分段。
Fragment Offset(分段偏移):
该字段长度为13位比特位。用来重排序,它标识分段在当前数据包的位置,单位为字节。
Time to Live(存活时间):
该字段长度为8比特位。在网络中标识数据包最大存活时间,用来防止路由环路,每经过一台路由器则TTL字段减去1,直到为0,此数据包直接被丢弃。其值最大为255,单位为s。然而现在路由器转发数据包都是用跳数来作为衡量单位。
Protocol(协议):
字段长度为 8位 ,它给出了传输层的协议和协议号。
Header Checksum(报头校验和):
字段长度为16位,是针对 lP报头的纠错字段。校验和不计算被封装的数据,UDP、 TCP和 ICMP都有各自的校验和。每台路由器都会降低数据包的TTL值 ,所以每台路由器都必须重新计算校验和。
Source address(源地址):
该字段长度为32比特位。它标识发送者的ip地址。
Destination address(目的地址):
该字段长度为32比特位。它标识接收者的ip地址。
ptions(可选项)
该字段长度可变。该字段提供某些控制功能,但在大部分情况下不需要这些功能。里面包括机制有松散路由,严格路由,路由记录及时间戳。
padding(填充):
该字段通过在可选项字段后面添加0补足32位,这样保证报头长度是 32位 的倍数。
IPV6报头分析
使用Wireshark抓取一个ipv6的数据包
版本(Version)
版本字段用来表示IP协议的版本,该字段长度为4比特位,对应值为6(0110)。
流量分类(Traffic Class)
流量分类字段用来标识对应IPv6的流量类别,该字段长度为8比特位,类似于IPv4中的ToS(服务类型)字段。
流标签(Flow Label)
流标签字段时IPv6数据报中新增的一个字段,该字段长度为20比特位,可用来标记报文的数据流类型,以便在网络层区分不同的报文。
有效载荷长度(PayLoad Length)
有效载荷长度字段是以字节为单位的标识IPv6数据报中有效载荷部分(包括所有扩展报头部分)的总长度,也就是除了IPv6的基本报头以外的其他部分的总长度,该字段长度为16比特位。
下一个头部(Next Header)
下一个头部字段用来标识当前报头的下一个头部类型,该字段长度为8比特位。每种扩展报头都有其对应的值。下一个头部字段内定义的扩展报头类型与IPv4中的协议字段值类似,但在IPv6数据报中,紧接着IPv6报头的可能是上层协议头部(当没有扩展报头或者为最后一个扩展报头时才是上层协议头),也可能是IPv6扩展报头。
跳数限制(Hop Limit)
跳数限制于IPv4报文中的TTL字段类似,指定了报文可以有效转发的次数,该字段长度为8比特位。报文每经过一个路由器结点,跳数值就减1,当此字段值减到0时,则直接丢弃该报文。
源地址(Source IP Address)
源IP地址字段标识了发送该IPv6报文发送者的IPv6地址,占128位。
目的IP地址(Destination IP Address)
目的IP地址字段标识了IPv6报文的接收者的IPv6地址,占128位。
IPv6扩展报头
IPv6扩展报头是跟在IPv6基本报头后面的可选报头。可以有0个,或者多个扩展报头。数 据包仅仅需要传送各自数据包所需要的信息,不需要传送用不到的字段。所以可以通过定义新的扩展报头添加到IPv6数据包中来增加新的可选功能。主要的IPv6扩展报头有一下几类:
逐跳选项头(Hop-by-hop Options Header)
传送必须被转发路径中的每一个节点都检验处理的信息。例如,路由器告警和超大包有效载荷选项等。
目的选项头(Destination Options Header)
承载特别针对数据包目的地地址的可选信息
路由头(Routing Header)
本扩展报头类型值为43,通过列出在到达目的地的路径中数据包所要经过的节点列表来提供源路由选择的功能。
分段头(Fragment Header)
本扩展报头类型值为44,用于标识数据报的分段,在IPv4中就有对应的字段。当源节点发送的报文超过传输链路MTU(源节点和目的节点之间传输路径的MTU)时,需要对报文进行分段时使用。
认证头(Authentication Header,AH)
本扩展报头类型值为51,该包头由 IPSec 使用用,以提供认证、数据完整性和防重放保护。它还确保基本IPv6 包头中一些字段的保护。该包头在 IPv4 和 IPv6 中是相同的. 通常称之为 IPSec认证包头 (AH)用于IPSec,提供报文验证,完整性检查。
封装安全有效载荷头(Encapsulating Security Payload,ESP)
本扩展头类型值为50,用于IPSec,提供报文验证、完整性检查差和加密。
IPV4和IPV6报头对比
IPV4中的字段与IPV6中的字段对比:
版本(Version):版本不一样一个是4,一个是6。
IHL( Internet报头长度):IPV6中去掉了该字段。
Type of Service(服务类型):在IPV6去掉TOS(服务类型),增加了流量分类(Traffic Class)两者功能几乎一致,都是用来标识对应的通信流量类别。
Total Length(总长度):在IPV6中改成了有效载荷长度(PayLoad Length)这两者是有区别的,IPv4中的Total Length包括了头部和数据,而IPV6 中的有效载荷长度(PayLoad Length)是不包括头部长度的。
Identification(标识符)、Flags(标记位)、Fragment Offset(分段偏移):在IPV6中去掉了这三个字段,增加了IPV6 扩展报头来完成它们所要实现的功能。
Time to Live(存活时间):IPv6使用Hop Limit(跳数限制)来代替了TTL,两者功能相同。
Protocol(协议):在IPV6中下一个头部(Next Header)和IPV4中的协议类似(详细请看上文对,下一个头部(Next Header)的介绍)。
Header Checksum(报头校验和):IPv6放弃了IPv4中的CheckSum字段,因为TCP和UDP报文中都已经有16位的checksum字段。
Source address(源地址)、Destination address(目的地址):在IPV6中没有做修改。
options(可选项):因为有了IPV6中的扩展报头所以在IPV6中ptions(可选项)被去掉了。
字节改变:IPV4最小字节数为20,IPV6固定了字节数40。
报文格式改变:IPv6报头采用基本报头+扩展报头,可以更方便灵活地增添选项。