PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

linux中iphdr是什么

WBOY
WBOY 原创
2022-07-15 15:35:07 2339浏览

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地址
};

05.png

扩展知识

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视频教程

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。