登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

NET START HERE

研究C/C++、网络/通信/协议编程、网络安全、软件安全

 
 
 

日志

 
 

填充IP版本和IP头长度 -- IP Header那些事儿  

2011-03-09 22:01:30|  分类: 技术探讨 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 
 
一般情况下ip首部长度是20个字节,IP首部长度字段所表示数的单位是32位字即4个字节,所能表示的首部长度最大值4*15=60字节,下面是c语言中对ip首部定义的结构体。
typedef struct IpHeader
{
u_char Version_Hlen;//首部长度IP版本号,1字节
u_char TOS;//服务类型TOS
short Lengh;//总长度,2字节
short Iden;//标识
short Flags_Offset;//标志
u_char TTL;
u_char Protocl;//协议
short Checksum;//首部校验和
unsigned int SourceAddr;//源IP地址,4字节
unsigned int DestinationAddr;//目的IP地址;以上总和为20字节
}Ip_Header;
 
初始化Version_Hlen的时候,常见代码是:ipHeader.Version_HLen=(4<<4|sizeof(ipHeader)/sizeof(unsigned long));
先看"<<",它是C语言中的左移运算符,4<<4也就是00000100向左移4位,变为01000000,sizeof(ipHeader)为20.,sizeof(unsigned long)为4,之后就是01000000 | 00000101,结果为01000101,填充到ipHeader前8位:

版本

首部长度

0100

0101

版本转换为10进制后为4,表示使用IPv4
首部长度为5*4=20,表示IP头长度为20个字节
 
 


 
  评论这张
 
阅读(1027)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018