IPv4 数据包结构
IPv4 - 数据包结构
Section titled “IPv4 - 数据包结构”互联网协议 (IP) 工作在 OSI 模型(开放系统互连模型)的第 3 层(网络层)。它接收来自第 4 层(传输层,例如 TCP 或 UDP)的数据段,并将它们封装到 IP 数据包中。每个 IP 数据包都包含一个头部(header)和一个有效载荷(payload,即第 4 层数据)。
IP 头部包含用于在网络间路由和传递数据包的关键信息。理解 IPv4 头部结构是理解 IP 如何工作的关键。
典型的 IPv4 头部长度为 20 字节,除非存在选项(options)。以下是其字段的详细说明:
- Version (4 bits): 指定 IP 版本。对于 IPv4,此字段始终为 4(二进制 0100)。
- IHL (Internet Header Length) (4 bits): IP 头部的长度,以 32 位字为单位。最小值为 5(对于 20 字节的头部,5 x 4 字节 = 20 字节)。如果存在选项,此值将大于 5。
- DSCP (Differentiated Services Code Point) (6 bits): 原服务类型 (ToS) 字段的一部分,现在用于差分服务 (DiffServ),通过对报文进行分类来实现服务质量 (QoS)。
- ECN (Explicit Congestion Notification) (2 bits): 同样是原 ToS 字段的一部分,ECN 允许路由器在不丢弃报文的情况下向端点发送网络拥塞信号。
- Total Length (16 bits): IP 数据包(头部 + 有效载荷)的总长度,以字节为单位。最大长度为 65,535 字节,尽管由于网络 MTU(最大传输单元)的限制,数据包通常远小于此值。
- Identification (16 bits): 如果一个 IP 数据包被分片(为穿越具有较小 MTU 的网络而分解成更小的片段),则原始数据包的所有分片共享相同的 Identification 值。这使得目标主机能够重组它们。
- Flags (3 bits): 用于分片控制:
- Fragment Offset (13 bits): 当数据包被分片时,此字段指定该分片的数据相对于原始 IP 数据包数据部分起点的偏移量。它以 8 字节单位进行测量。
- Time to Live (TTL) (8 bits): 一个计数器,限制数据包的生存期。由发送方设置,每经过一个转发数据包的路由器,TTL 值会减一。如果在数据包到达目标之前 TTL 达到零,则数据包将被丢弃,以防止它在网络中无限循环。通常会向源端发送一个 ICMP 超时消息。
- Protocol (8 bits): 标识有效载荷中携带的数据的协议(即下一层协议)。常见值包括 1 (ICMP)、6 (TCP) 和 17 (UDP)。
- Header Checksum (16 bits): 仅对 IP 头部计算的校验和。用于检测传输过程中头部中的错误(损坏)。由于 TTL 字段在每跳(hop)都会改变,路由器必须重新计算并更新校验和。
- Source IP Address (32 bits): 数据包原始发送方的 IPv4 地址。
- Destination IP Address (32 bits): 数据包最终接收方的 IPv4 地址。
- Options (variable length, optional): 如果 IHL > 5,此字段包含一个或多个选项,例如安全(Security)、记录路由(Record Route,用于列出经过的路由器)或时间戳(Timestamp)。由于性能开销,选项在典型互联网流量中不常用。如果存在选项,可能会添加填充(padding,即零)以确保头部长度是 32 位的倍数。