加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux中iphdr是啥意思,怎么样应用

发布时间:2023-05-10 14:28:07 所属栏目:Linux 来源:
导读:这篇文章主要讲解了“Linux中iphdr是什么意思,怎么样应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中iphdr是什么意思,怎么样应用&
这篇文章主要讲解了“Linux中iphdr是什么意思,怎么样应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中iphdr是什么意思,怎么样应用”吧!
 
在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。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!