一般情况下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位:
版本转换为10进制后为4,表示使用IPv4 首部长度为5*4=20,表示IP头长度为20个字节 | ||||||
|
评论