IP头(Internet Protocol Header)包含多个字段,用于传输和路由数据包。以下是IPv4头部的主要字段及其描述:
版本(Version):4位,表示IP协议的版本号。对于IPv4,此字段值为
4
。首部长度(IHL, Internet Header Length):4位,表示IP头的长度,以32位字为单位。最小值为5,表示20字节。
服务类型(Type of Service, ToS):8位,定义了数据包的优先级和服务质量要求。现在通常使用DSCP(Differentiated Services Code Point)。
总长度(Total Length):16位,表示整个IP数据报的长度,包括头部和数据部分,以字节为单位。最大值为65535字节。
标识符(Identification):16位,用于唯一标识每个分片的数据包。在进行分片时,每个分片都有相同的标识符,以便接收方能够重组原始数据包。
标志(Flags):3位,用于控制和标识分片的特性。
- 第一个比特保留
- 第二个比特 DF (Don’t Fragment),指示不允许分片。
- 第三个比特 MF (More Fragments),指示后面还有更多分片。
片偏移量(Fragment Offset):13位,表示当前分片在原始数据报中的位置。
生存时间(Time to Live, TTL):8位,限制数据包在网络中存在的时间或跳数。当TTL达到0时,该数据包会被丢弃,以防止在网络中无限循环。
协议(Protocol):8位,指示上层使用的协议类型。例如:
1
: ICMP6
: TCP17
: UDP
头部校验和(Header Checksum):16位,用于检测IP头是否有错误。这是对IP头部各个字段计算出的校验和。
源IP地址(Source Address):32位,发送方主机的IP地址。
目标IP地址(Destination Address):32位,接收方主机的IP地址。
选项和填充(Options and Padding):(可选),用于扩展功能,如安全、时间戳等。如果没有选项,该字段将省略并用填充字节补齐到32位边界。
示例
IPv4 头部结构可以用 C 语言中的结构体来表示,如下所示:
struct ipv4_hdr {
uint8_t version_ihl; // 版本 + 首部长度
uint8_t tos; // 服务类型
uint16_t total_length; // 总长度
uint16_t id; // 标识符
uint16_t flags_offset; // 标志 + 片偏移量
uint8_t ttl; // 生存时间
uint8_t proto; // 协议
uint16_t checksum; // 校验和
uint32_t src_addr; // 源地址
uint32_t dst_addr; // 目标地址
};
如果你需要更详细的信息或者关于某个具体字段的问题,请告诉我!
内容由零声教学AI助手提供,问题来源于学员提问