一文详解IPv4与IPv6协议

前段时间的工作大多与通信协议相关,随着协议相关工作的不断深入,相关数据包的分析占据了不少工作时间。

在数据报文分析中,发现大学期间IP协议内容已经重新还给了老师,相关知识完全没有了印象,这篇文章算是一篇复习文,对相关IP协议进行重学习。

  • IPv4 协议详解
  • IPv6 协议详解
  • IPv4 IPv6 报文对比

IPv4

  • IPv4 协议简介
  • IPv4 地址数量
  • IPv4 协议特点
  • IPv4 报文结构
  • IPv4 报文最大长度

IPv4 简介

IPv4(Internet Protocol version 4)是网际协议的第四个修订版本,也是该协议第一个被广泛部署和使用的版本。其在1981年9月由IETF发布的RFC791中被描述,是一种面向无连接的协议,可以在使用分组交换的链路层(如以太网)上运行。在数据传输方面,IPv4协议会尽最大努力交付数据包,但不能保证所有数据包能够成功到达目的地,或者按照正确的顺序到达,这些方面由上层的传输协议(如TCP协议)处理。

IPV4协议报文结构 IPV4协议报文结构

IPv4 地址数量

IPv4协议使用32位(4字节)地址,其地址空间为4,294,967,296(2^32)个。其中一些地址被保留用于特定用途,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可供互联网路由的地址数量。 随着地址被分配给最终用户,IPv4地址枯竭问题也日益严重。虽然基于分类网络、无类别域间路由和网络地址转换的地址结构重构减缓了地址枯竭的速度,但在2019年11月26日,全球近43亿个IPv4地址已分配完毕。

IPv4地址数量的限制刺激了IPv6的部署,IPv6是唯一的长期解决方案。 IPv6使用128位地址空间,提供了更多的地址,以及更好的安全性和性能。IPv6的广泛部署需要时间和努力,但已经成为解决IPv4地址短缺问题的主要途径。

IPv4 协议特点

  • 面向无连接:

IPv4是一种面向无连接的协议,每个数据包都是独立的,数据包的传输不需要建立和维护连接状态。这使得IPv4的数据包传输速度较快,但同时也增加了数据包传输的可靠性和安全性方面的挑战。

  • 分组交换:

IPv4协议采用分组交换的技术,将数据分割成一系列小的数据包进行传输,每个数据包都包含了目标地址和源地址等必要的控制信息,这使得数据传输更加高效和灵活。同时,IPv4协议还支持多种传输协议,如TCP、UDP等,可以适应不同的数据传输需求。

  • 简单、可靠、稳定:

IPv4协议的设计非常简单、可靠、稳定,已经被广泛应用于互联网和局域网等各种网络环境中,具有良好的兼容性和稳定性。

  • 地址格式:

IPv4地址是一个32位的二进制数,通常用点分十进制表示法来表示,被分为四段,每段可以取0-255之间的整数。IPv4地址的短缺成为了一个问题,因此引入了私有地址和网络地址转换等技术来缓解IPv4地址短缺的问题。

  • 安全性:

IPv4协议的安全性较低,容易受到各种网络攻击,如IP欺骗、数据包伪造等。因此,为了提高IPv4协议的安全性,通常需要通过路由器、防火墙等网络安全设备来进行加强和保护。

IPv4 报文结构

IPv4报文的最大长度是65,535字节,这个长度是由IP报文中的16位总长度字段决定的,下图为IPv4报文的结构:

IPv4协议首部报文结构 IPv4协议首部报文结构

IPV4协议首部报文抓包 IPV4协议首部报文抓包

  • 版本(Version): 占用4比特位,表示IP协议的版本号,IPv4的值为4。

  • 首部长度(Internet Header Length): 占用4比特位,表示IP首部的长度,首部长度说明首部有多少32位字(4字节,也就是说单位为4字节)。这个字段的最小值是5(二进制0101),相当于54=20字节;最大十进制值是15,相当于154=60字节

  • 服务类型(Type of Service,TOS): 占用8比特位,表示IP报文的服务类型,用于指定QoS(Quality of Service)和流量控制等参数。

  • 总长度(Total Length): 占用16比特位,表示整个IP数据报的长度,包括IP首部和数据部分,单位为字节。这个字段的最小值是20(20字节首部+0字节数据),最大值是2^16-1=65,535。

  • 标识(Identification): 占用16比特位,这个字段主要被用来唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文。每产生一个数据报,计数器加1,并赋值给此字段。

  • 标志(Flags):占用3比特位,用于标识IP分片的状态。

** 位0:保留,必须为0; ** 位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片; ** 位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。

  • 分片偏移(Fragment Offset): 占用13比特位,用于表示分片相对于原始数据报的偏移量。

  • 生存时间(Time to Live): 占用8比特位,表示数据报在网络中最多可以被经过的路由器数量,用于防止数据报在网络中无限循环。

  • 协议(Protocol): 占用8比特位,表示数据报中的数据部分使用的协议类型,例如TCP、UDP、ICMP等。

  • 校验和(Header Checksum): 占用16比特位,用于检测IP头部在传输过程中是否出现了错误。

  • 源地址(Source Address): 占用32比特位,表示数据报的发送者IP地址。

  • 目标地址(Destination Address): 占用32比特位,表示数据报的接收者IP地址。

  • 选项(Options) 附加的首部字段可选的跟在目的地址之后,但这并不被经常使用,从1到40个字节不等。如果首部长度大于5,那么选项字段必然存在。

IPv4 报文长度

IPv4报文的最大长度是65,535字节,这个长度是由IP报文中的16位总长度字段决定的。该字段的最大值是65535,因为它是一个16位无符号整数,所以IP报文的最大长度不能超过该值。

需要注意的是,在实际情况下,IP报文的长度通常会受到网络设备(如路由器、防火墙等)和网络链路的限制,另外,由于网络传输存在MTU(Maximum Transmission Unit)的限制,实际上能够传输的最大数据长度通常不会超过MTU值,一般为1500个字节左右,因此实际传输的IP报文长度可能会比最大长度小得多。

网络传输MTU(Maximum Transmission Unit)大小并不是固定的,它的大小取决于底层网络传输协议和网络设备的配置。不同的网络传输协议和设备可能会有不同的MTU大小限制。

以太网是最常见的网络传输协议之一,其MTU大小通常为1500字节。在以太网上传输的数据包如果超过1500字节,就会被分割成多个小块进行传输。其他网络传输协议的MTU大小可能会有所不同,例如PPP协议的MTU大小通常为1480字节,ATM网络的MTU大小通常为48字节等。

此外,MTU还受到网络设备的配置影响。例如,路由器和交换机等网络设备可以通过配置MTU大小来优化网络传输效率和减少延迟。在实际应用中,为了保证网络传输的稳定性和效率,需要根据具体的网络环境和需求来设置MTU大小,并进行必要的优化和调整。

IPv6

  • IPv6 协议简介
  • IPv6 地址数量
  • IPv6 协议特点
  • IPv6 报文结构
  • IPv6 载荷长度

IPv6 简介

IPv6(Internet Protocol version 6)是网际协议的最新版本,主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进,协议由1998年12月公布的 RFC2960 定义。

IPv6的设计目的是取代IPv4,然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢。在2022年4月,通过IPv6使用Google服务的用户百分率首次超过40%。

虽然IPv6在1994年就已被IETF指定作为IPv4的下一代标准,由于早期的路由器、防火墙及相关应用程序皆须改写,所以在世界范围内使用IPv6部署的网络服务与IPv4相比相对较少,技术上仍以双架构并存居多。

IPv6 地址数量

IPv6地址总长度为128比特位(16字节),分为8组(每组2个字节),每组以4个十六进制数形式表示,组间用冒号分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B

因为IPv6地址使用128位(16字节)表示,其可以支持约3.4×10²³(2^128)个唯一地址。这个数量比IPv4地址空间(43亿个地址)大得多,可以满足未来数十年互联网的发展需求。IPv6地址空间的巨大规模不仅可以支持更多的设备连接到互联网,而且还可以提供更好的网络安全性和性能。

IPv6 协议特点

  • 更大的地址空间: IPv6地址使用128位长度表示,可以支持约3.4×10²³(2^128)个唯一地址,这个数量比IPv4地址空间(43亿个地址)大得多,可以满足未来数十年互联网的发展需求。

  • 改进的寻址和路由机制: IPv6协议引入了一些新的寻址和路由机制,包括多播寻址、任播寻址和移动IPv6等,使得网络路由更加高效和灵活。

  • 简化的头部结构: IPv6协议头部长度固定为40字节,相比于IPv4头部结构更加简化,可以提高网络数据传输效率。

  • 可选的扩展首部: IPv6定义了许多可选的的扩展首部,不仅可提供比IPv4更多的功能,而且还可以提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扩展首部都不进行处理。

  • 更好的安全性和隐私保护: IPv6协议提供了更好的安全性和隐私保护,包括IPsec协议的强制支持、地址隐私扩展等,可以有效地保护网络和用户的隐私。

  • 更好的流量控制和服务质量: IPv6协议引入了流量控制和服务质量(QoS)机制,可以更好地管理网络流量和提供不同的服务质量,提高用户体验。

IPv6 报文结构

IPv6数据报首部长度为固定的40字节,在IPv6中所有的扩展首部并不属于IPv6数据报的首部,扩展首部与其后面的数据部分合起来构成有效载荷。

IPv6报文首部与有效载荷 IPv6报文首部与有效载荷

IPv6协议首部报文结构 IPv6协议首部报文结构

IPV6协议首部报文抓包 IPV6协议首部报文抓包

  • 版本号(Version): 占用4比特位,用于指示报文使用的IPv6协议版本号,固定为6。

  • 流量类别(Traffic Class): 占用8比特位,用于区分不同的IPv6数据报的类别或优先级。。

  • 流量标签(Flow Label): 占用20比特位,IPv6提出了流的抽象概念,流就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送)。所有属于同一个流的IPv6数据报都具有同样的流量标签(相同的流量标签可进行同样的数据优先级设定)。因此,流标号对于实时音视频数据的传送特别有用,对于传统的非实时数据,流标号用处不大。

  • 负载长度(Payload Length): 占用16比特位,用于指示IPv6报文中载荷(Payload)的长度,不包括IPv6头部的长度。

  • 下一个报头(Next Header): 占用8比特位,用于指示IPv6头部后面的下一个报头类型,如TCP报头、UDP报头、ICMPv6报头等。

  • 跳数限制(Hop Limit): 占用8比特位,类似于IPv4中的生存时间(TTL)字段,用于限制报文在网络中经过的最大跳数。

  • 源地址(Source Address): 占用128比特位,表示发送端的IPv6地址。

  • 目标地址(Destination Address): 占用128比特位,表示接收端的IPv6地址。

IPv6 载荷长度

关于 IPv6 有效载荷长度:

IPv6报文有效载荷长度主要由Payload Length字段决定,Payload Length字段占用16比特位,用于表示载荷Payload的长度,即除去IPv6报头(固定为40字节)之外的部分。鉴于此字段为16比特,其最大值为2^16 - 1,即65,535字节。

然而,IPv6还支持一种叫做Jumbo Payload的选项。当使用这个选项时,载荷长度可以通过一个名为 Jumbo Payload Option 的扩展报头表示,该扩展报头中有一个32比特(4字节)的字段表示载荷长度。因此,最大载荷长度可以达到2^32 - 1,即4,294,967,295字节。

尽管IPv6有效载荷最大长度可达到4294967295字节,但其承载的传输层协议数据(如TCP、UDP)仍然受到IPv6网络中MTU的限制,因此仍然需要遵循最大报文长度65,535字节的限制。

IPv4、IPv6 报文比较

IPv4报文首部结构 IPv4报文首部结构

IPv6报文首部与有效载荷 IPv6报文首部与有效载荷

IPv6数据报首部长度为固定的40字节,所有的扩展首部并不属于IPv6数据报的首部,扩展首部与其后面的数据部分合起来构成有效载荷。

由于IPv6地址的长度扩展到了128比特位,使得IPv6数据报基本首部的长度增大到了40字节,比IPv4数据报首部固定部分的长度(20字节)增大了20字节。

其相比于IPv4报文:

取消了首部长度字段:IPv6数据报的首部长度是固定的40字节。

取消了服务类型字段:IPv6数据报首部中的流量类别和流量标签字段实现了区分服务字段的功能。

取消了总长度字段:改用有效载荷长度字段。这是因为IPv6数据报的首部长度是固定的40字节,只有其后面的有效载荷长度是可变的。

取消了标识、标志和片偏移字段:这些功能已包含在IPv6数据报的分片扩展首部中。

把生存时间TTL字段改称为跳数限制字段:这样名称与作用更加一致。

取消了协议字段:改用下一个首部字段。

取消了首部检验和字段:可以加快路由器处理IPv6数据报的速度。

取消了选项字段:改用扩展首部来实现选项功能。

参考

百科IPv4: https://zh.wikipedia.org/wiki/IPv4

RFC791 IPV4: https://datatracker.ietf.org/doc/html/rfc791

百科IPv6: https://zh.wikipedia.org/wiki/IPv4

RFC2460 IPV6: https://datatracker.ietf.org/doc/html/rfc2460