对ip首部填充的语句的解释,会的帮忙看下。。。

来源:百度知道 编辑:UC知道 时间:2024/05/23 00:01:49
ipheader.h_verlen=(4<<4 | sizeof(IP_HEADER)/sizeof(unsigned long))//4位首部长度+4位IP版本号
实在看不懂什么意思?

typedef struct ip_hdr //定义IP首部
{
unsigned char h_verlen; //4位首部长度,4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IPHEADER;
根据IPHEADER的定义
h_verlen表示的是4位首部长度,4位IP版本号

h_verlen填充以后的结果是这样的用2进制表示给你看看
0100 0101 //高四位指IP版本号,低四位首部长度
4<<4 //这个表示是4位的ip版本,也就是现在的IPv4,把4这个数移4位到高4位

sizeof(IP_HEADER)/sizeof(unsigned long)低4位表示的是5这个数,根据tcp/ip详解,没有选项的普通IP数据报
,没有任何选择项的值为5,并且这种限制使某些选项如路由记录选项在当今已
没有什么用处

两项值用|或一下就构成了h_verlen段