IP报文格式

发布于:2025-03-28 ⋅ 阅读:(26) ⋅ 点赞:(0)

IPv4 头部结构(共 20 字节,不含可选字段)

IPv4 Header Structure

1. 版本(Version)
  • 长度:4 比特

  • 作用:标识 IP 协议版本(IPv4 值为 4,IPv6 值为 6)。

  • 示例0100(表示 IPv4)。

2. 头部长度(IHL, Internet Header Length)
  • 长度:4 比特

  • 作用:表示 IP 头部的长度(以 4 字节为单位)。

    • 最小值为 5(即 20 字节,无可选字段)。

    • 最大值为 15(即 60 字节,含可选字段)。

  • 示例0101(表示头部长度为 20 字节)。

3. 服务类型(ToS, Type of Service)
  • 长度:8 比特

  • 作用:定义数据包的优先级和服务质量(QoS)参数,现多用于 DSCP(差分服务代码点) 和 ECN(显式拥塞通知)

    • DSCP(6 比特):区分流量类别(如语音、视频)。

    • ECN(2 比特):标记网络拥塞状态。

  • 示例00000000(默认无特殊服务)。

4. 总长度(Total Length)
  • 长度:16 比特

  • 作用:表示整个 IP 数据包的长度(头部 + 数据),单位是字节。

    • 最大值为 65535 字节(受 MTU 限制)。

  • 示例00 50(表示包总长度为 80 字节)。

5. 标识(Identification)
  • 长度:16 比特

  • 作用:唯一标识一个数据包,用于分片重组。

    • 同一数据包的所有分片共享相同的标识值。

  • 示例0x1234(随机生成的 ID)。

6. 标志(Flags)
  • 长度:3 比特

  • 作用:控制分片行为:

    • Bit 0:保留位(必须为 0)。

    • Bit 1(DF, Don't Fragment)

      • 1:禁止分片(如 ICMP 探测包)。

      • 0:允许分片。

    • Bit 2(MF, More Fragments)

      • 1:表示后续还有分片。

      • 0:表示最后一个分片。

  • 示例010(DF=1,禁止分片)。

7. 片偏移(Fragment Offset)
  • 长度:13 比特

  • 作用:指示当前分片在原始数据包中的位置(以 8 字节为单位)。

    • 用于接收方按顺序重组分片。

  • 示例0(表示第一个分片)。

8. 生存时间(TTL, Time To Live)
  • 长度:8 比特

  • 作用:防止数据包无限循环,每经过一个路由器减 1,归零时丢弃。

    • 常见初始值:64(Linux)或 128(Windows)。

  • 示例40(剩余跳数)。

9. 协议(Protocol)
  • 长度:8 比特

  • 作用:标识上层协议类型(传输层协议)。

    • 常见值:

      • 1:ICMP

      • 6:TCP

      • 17:UDP

  • 示例06(表示 TCP)。

10. 头部校验和(Header Checksum)
  • 长度:16 比特

  • 作用:校验 IP 头部的完整性(不包括数据部分)。

    • 每经过一个路由器需重新计算。

  • 示例0x7a3d(校验和计算结果)。

11. 源 IP 地址(Source Address)
  • 长度:32 比特(4 字节)

  • 作用:发送方的 IPv4 地址。

  • 示例192.168.1.1 → C0 A8 01 01

12. 目标 IP 地址(Destination Address)
  • 长度:32 比特(4 字节)

  • 作用:接收方的 IPv4 地址。

  • 示例8.8.8.8 → 08 08 08 08

13. 可选字段(Options)
  • 长度:可变(最多 40 字节)

  • 作用:扩展功能(如记录路由、时间戳等),现代网络较少使用。

  • 填充(Padding):确保头部长度是 4 字节的倍数。


关键注意事项

  1. 分片机制

    • 当数据包超过 MTU(如以太网默认 1500 字节)时,路由器根据 DF 标志决定是否分片。

    • 分片后,只有第一个分片包含传输层头部(如 TCP/UDP 端口号)。

  2. 校验和范围

    • 仅校验 IP 头部,传输层(如 TCP/UDP)有独立的校验和。

  3. IPv6 差异

    • IPv6 头部更简洁(固定 40 字节),删除了分片、校验和等字段。


示例抓包分析(Wireshark)

复制

Internet Protocol Version 4, Src: 192.168.1.1, Dst: 8.8.8.8
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
    Total Length: 84
    Identification: 0x1234
    Flags: 0x40 (Don't Fragment)
    Fragment Offset: 0
    Time to Live: 64
    Protocol: TCP (6)
    Header Checksum: 0x7a3d [correct]
    Source Address: 192.168.1.1
    Destination Address: 8.8.8.8

通过理解 IP 头部字段,可以深入分析网络流量、排查路由问题或优化 QoS 策略。