加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2023-09-04 09:05:44 所属栏目:Linux 来源:未知
导读:   这篇文章主要讲解了“Linux中iphdr是什么意思,怎么样应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中
  这篇文章主要讲解了“Linux中iphdr是什么意思,怎么样应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中iphdr是什么意思,怎么样应用”吧!
 
  在linux中,iphdr是ip数据包的描述结构体;iphdr所在的头文件为“/usr/src/linux/include/linux/ip.h”,结构体是由一批数据组合而成的结构型数据,组成结构型数据的每个数据称为结构型数据的成员,其描述了一块内存区间的大小及解释意义。
 
  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。
 

(编辑:开发网_开封站长网)

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

    推荐文章