在linux中,iphdr是ip数据包的描述结构体;iphdr所在的头文件为“/usr/src/linux/include/linux/ip.h”,结构体是由一批数据组合而成的结构型数据,组成结构型数据的每个数据称为结构型数据的成员,其描述了一块内存区间的大小及解释意义。
本教程操作环境:linux7.3系统、Dell G3电脑。
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视频教程
以上是linux中iphdr是什么的详细内容。更多信息请关注PHP中文网其他相关文章!