IP 数据包头:格式、字段

⚡ 智能摘要

IP 报头是放置在每个 IP 数据包开头的元数据,包含版本、报头长度、总长度、生存时间、协议、校验和以及源地址和目标地址等字段,路由器会读取这些字段来传递数据。

  • 🧭 目的: IP报头存储路由和传输详细信息,以便每个数据包都能在网络中到达正确的目的地。
  • 📏 规格: IPv4 报头长度为 20 到 60 字节,由 Internet 报头长度字段控制。
  • 🧱 关键字段: 核心字段包括版本、IHL、服务类型、总长度、TTL、协议、校验和、地址。
  • 🔀 碎片化: 标识、标志和片段偏移量使大型数据报能够正确地分割和重组。
  • ???? IPv4 与 IPv6: IPv6 将可变报头替换为固定的 40 字节报头,并删除校验和字段。
  • 🤖 人工智能辅助: AI数据包分析器可自动解析IP报头,标记异常情况,加快故障排除速度。

IP数据包头部格式和字段

什么是 IP 头?

IP 报头是位于 IP 数据包开头的元信息。它显示诸如 IP 版本、数据包长度、源地址和目标地址等信息。

IPv4 报头格式长度为 20 到 60 字节,包含路由和传输所需的信息。它由版本、报头长度、总长度、标识、标志、校验和、源 IP 地址和目标 IP 地址等字段组成。这些字段共同提供了路由和传输所需的基本数据。 transmit 将数据包可靠地从一个主机发送到另一个主机。

IPv4 报头组件/字段

下图显示了完整的 IPv4 报头格式,每个字段都按正确的位置和位宽绘制:

IPv4数据包头格式图,显示了所有字段及其位位置

以下是IP数据包头部的各个组成部分/字段:

  • 版本: IP报头的第一个字段是4位版本指示符。在IPv4中,这四位的值设置为0100,表示二进制的4。如果路由器不支持指定的版本,则丢弃该数据包。
  • 互联网标头长度: 互联网报头长度(简称 IHL)为 4 位,也称为报头长度(HELEN)。此 IP 组件表示报头中包含多少个 32 位字。
  • 服务类型: 这种服务类型也称为差异化服务。 Code 点(或 DSCP)。此字段提供与数据流或 VoIP 通话服务质量相关的特性。前 3 位是优先级位。它还指定如何处理数据报。
  • 总长度: 总长度以字节为单位。IP 数据报的最小长度为 20 字节,最大长度为 65,535 字节。可以使用 HELEN 和总长度来计算有效载荷的大小。所有主机都必须能够读取 576 字节的数据报。但是,如果数据报对于网络中的主机来说过大,通常会采用分片方法。
  • 鉴别: 标识字段用于唯一标识 IP 数据报的各个片段。有人建议将此字段用于其他用途,例如添加数据包信息。 tracING。
  • IP 标志: 标志位是一个三位字段,用于控制和识别数据分片。可能的配置如下:位 0 保留,必须设置为零;位 1 表示不进行分片;位 2 表示进行更多分片。
  • 片段偏移: 分片偏移量表示特定数据报中特定分片之前的数据字节数。它以 8 字节为单位指定,最大值为 65,528 字节。
  • 生存时间: 这是一个 8 位字段,用于指示数据报在互联网系统中可以存活的最长时间。每次处理数据报时,其 TTL 值都会减 1。当 TTL 值降至零时,数据报将被丢弃,以避免数据包无限循环传输。TTL 的值范围为 0 到 255。
  • 协议: IPv4 报头中的这个字段指示数据报后半部分承载的是哪种互联网协议。例如,数字 6 用于表示 TCP,数字 17 用于表示 UDP 协议。
  • 标头校验和: 下一个组成部分是 16 位头部校验和字段,用于检查头部是否存在错误。IP 头部会与其校验和值进行比较。如果头部校验和不匹配,则丢弃该数据包。
  • 源地址: 源地址是用于 IPv32 数据包的源的 4 位地址。
  • 目的地地址: 目标地址也是 32 位,存储接收者的地址。
  • IP 选项: 这是 IPv4 报头的一个可选字段,当 IHL(Internet 报头长度)的值大于 5 时使用。它包含与安全性、路由记录、时间戳和类似选项相关的值和设置。选项列表通常以选项列表结束 (EOL) 标记结尾。
  • 日期: 该字段存储协议层传递给 IP 层的数据。

如何计算 IPv4 报头长度

互联网报头长度 (IHL) 字段会告诉路由器报头的确切长度,以便路由器能够区分报头结束和数据开始的位置。由于该字段只有 4 位宽,因此它不直接以字节为单位存储长度。相反,它以 32 位字为单位来计算报头长度,其中每个字等于 4 个字节。

要将 IHL 值转换为字节,请将其乘以 4:

  • 最小: 最小的合法 IHL 值为 5,因此 5 × 4 = 20 字节。这是一个不带任何选项的头部。
  • 最大: 最大的 IHL 值为 15,因此 15 × 4 = 60 字节。多余的 40 字节用于存储可选字段。

考虑一个实际示例。如果一个数据包的 IHL 值为 6,则头部长度为 6 × 4 = 24 字节,这意味着在标准的 20 字节头部之后还有 4 字节的选项。要计算有效载荷的大小,请执行以下操作:trac从“总长度”字段中获取头部长度。如果“总长度”为 1,500 字节,头部为 24 字节,则有效载荷为 1,500 − 24 = 1,476 字节。

在分片过程中,这个计算至关重要,因为路由器必须知道报头大小才能计算出每个分片可以携带多少数据,而不会超过网络的最大带宽限制。 Transmission 单位(MTU)。

IPv4 与 IPv6 报头

IPv6 报头经过重新设计,比 IPv4 报头更简单、处理速度更快。它采用固定长度,并将不常用的选项移至单独的扩展报头中,从而使路由器能够以线速转发数据包。下表逐字段比较了这两个报头:

特性 IPv4 报头 IPv6 报头
标题大小 20 到 60 字节(可变) 40 字节(固定)
字段数量 13 个字段及选项 8个领域
地址长度 32 位源和目标 128 位源和目标
头部校验和 演讲与演出 去除
碎片化场 在基本头部(标识、标志、偏移量) 已移至 Fragment 扩展头
可选项 位于标题内 装在扩展头中
长度字段 总长度(头部加数据) 有效载荷长度(仅限有效载荷)

由于 IPv6 去掉了校验和和可变长度选项,其报头包含的字段更少,可以在硬件中处理而无需逐跳重新计算。

为什么IP报头很重要

IP报头中的每个字段都至关重要,它使得路由器和主机能够在多个网络之间传输数据包,而无需建立永久连接。报头是数据包交换功能得以实现的关键。

  • 路由: 目标地址告诉每个路由器将数据包转发到哪里,而源地址允许回复和错误消息返回。
  • 防止循环: 每次传输过程中,生存时间字段都会递减,因此,路由错误的包会被丢弃,而不是在互联网上无限循环。
  • 交付至正确的协议: Protocol 字段告诉接收主机是否将有效载荷传递给 TCP、UDP 或其他协议。
  • Integrity 并重新组装: 校验和防止报头损坏,标识、标志和分片偏移字段允许按正确的顺序重建分片数据报。

对于网络工程师来说,阅读这些字段 TCP / IP协议 数据包捕获通常是诊断丢包、路由环路和配置错误最快的方法。 IP地址.

常见问题

头部长度 (IHL) 仅测量头部,以 32 位字为单位,范围为 20 到 60 字节。总长度测量整个数据报(头部加数据),以字节为单位,最大可达 65,535 字节。trac将其中一个与另一个进行比较,即可得到有效载荷的大小。

分片会将大于链路最大长度的数据报拆分成多个数据报。 Transmission 将数据包分割成更小的片段。标识字段、标志字段和分片偏移字段允许目标端按顺序重新组装这些片段。当数据包必须通过 MTU 较小的网络时,就会发生这种情况。

IPv4 报头包含 13 个固定字段:版本、IHL、服务类型、总长度、标识、标志、分片偏移量、TTL、协议、校验和、源地址和目标地址,以及一个可选的选项字段。报头之后的数据部分是有效载荷,而不是报头字段。

不。IPv4 报头校验和仅涵盖报头字段,不涵盖有效载荷。TCP 和 UDP 等上层协议携带自己的校验和来保护数据。由于 TTL 在每次跃点都会改变,路由器会在每次转发时重新计算报头校验和。

当 TTL 值达到零时,路由器会丢弃该数据包,并向源地址返回 ICMP 超时消息。这可以防止数据包丢失。ping 永远陷入路由循环。 traceroute 该工具利用这种行为来映射路径上的每一跳。

协议字段用于标识目标端应使用哪个上层协议接收有效载荷。常用值为 6 代表 TCP,17 代表 UDP,1 代表 ICMP。接收主机读取此值,以便将数据传递给正确的处理程序。

人工智能和机器学习工具会解析捕获的IP报头,以检测诸如伪造源地址、异常TTL值或分片攻击等异常情况。它们能够比人工检查更快地对流量进行分类并标记威胁,但工程师仍需在采取行动前确认检测结果。

GitHub 副驾驶 可以起草 Python 或者,一段 C 代码,可以根据简短的注释解包 IP 报头字段、解码标志并验证校验和。 Rev仔细查看生成的位掩码逻辑,因为偏移量差为 1 是解析错误的常见原因。

总结一下这篇文章: