共计 1519 个字符,预计需要花费 4 分钟才能阅读完成。
本篇内容介绍了“linux 中 iphdr 指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
在 linux 中,iphdr 是 ip 数据包的描述结构体;iphdr 所在的头文件为“/usr/src/linux/include/linux/ip.h”,结构体是由一批数据组合而成的结构型数据,组成结构型数据的每个数据称为结构型数据的成员,其描述了一块内存区间的大小及解释意义。
本教程操作环境:linux7.3 系统、Dell G3 电脑。
linux 中 iphdr 是什么
iphdr,是一种计算机用语。是 Linux 下 IP 数据包的描述结构体。
所在头文件为 /usr/src/linux/include/linux/ip.h,结构如下:
struct iphdr {#if defined(__LITTLE_ENDIAN_BITFIELD) // 小端模式下
__u8 ihl:4,// 首部长度(4 位)
version:4;//ip 协议版本 IPv4
#elif defined (__BIG_ENDIAN_BITFIELD) // 大端模式下
__u8 version:4,
ihl:4;
#else
#error Please fix asm/byteorder.h
#endif
__u8 tos;// 服务类型字段(8 位)
__be16 tot_len;//16 位 IP 数据报总长度
__be16 id;//16 位标识字段(唯一表示主机发送的每一分数据报) __be16 frag_off;//(3 位分段标志 +13 位分段偏移数)
__u8 ttl;// 8 位数据报生存时间
__u8 protocol;// 协议字段(8 位) __be16 check;//16 位首部校验
__be32 saddr; // 源 IP 地址
__be32 daddr; // 目的 IP 地址
};
扩展知识
iphdr- version
版本(4 位),目前的协议版本号是 4, 因此 IP 有时也称作 IPv4。
iphdr- ihl
首部长度 (4 位): 首部长度指的是 IP 层头部占 32 bit 字的数目(也就是 IP 层头部包含多少个 4 字节 – 32 位), 包括任何选项。由于它是一个 4 比特字段, 因此首部最长为 60 个字节。普通 IP 数据报(没有任何选择项) 字段的值是 5 == 5 * 32 / 8 = 5 * 4 = 20 Bytes。
iphdr- tos
服务类型字段 (8 位): 服务类型(TOS) 字段包括一个 3 bit 的优先权子字段(现在已被忽略),4 bit 的 TOS 子字段和 1 bit 未用位但必须置 0。4 bit 的 TOS 子字段分别代表: 最小时延、最大吞吐量、最高可靠性和最小费用。4 bit 中只能设置其中 1 bit。如果所有 4 bit 均为 0, 那么就意味着是一般服务。
iphdr- tot_len
总长度字段 (16 位) 是指整个 IP 数据报的长度, 以字节为单位。利用首部长度字段和总长度字段, 就可以知道 IP 数据报中数据内容的起始位置和长度。由于该字段长 16 比特, 所以 IP 数据报最长可达 65535 字节,总长度字段是 IP 首部中必要的内容, 因为一些数据链路 (如以太网) 需要填充一些数据以达到最小长度。尽管以太网的最小帧长为 46 字节, 但是 IP 数据可能会更短。如果没有总长度字段, 那么 IP 层就不知道 46 字节中有多少是 IP 数据报的内容。
iphdr- id
标识字段 (16 位) 唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1。
“linux 中 iphdr 指的是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!