IP头长度为什么5*4字节 而不是21个字节

软件和网站开发以及相关技术探讨
回复
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12

IP头长度为什么5*4字节 而不是21个字节

#1

帖子 zongzw » 2008-06-23 16:04

我看到iphdr结构定义如下:

代码: 全选

struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)
	__u8	ihl:4,
		version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)
	__u8	version:4,
  		ihl:4;
#else
#error	"Please fix <asm/byteorder.h>"
#endif
	__u8	tos;
	__be16	tot_len;
	__be16	id;
	__be16	frag_off;
	__u8	ttl;
	__u8	protocol;
	__sum16	check;
	__be32	saddr;
	__be32	daddr;
	/*The options start here. */
};
但是为什么在计算IP头长度的时候是5*4而不是sizeof(struct iphdr)即21个字节
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12

#2

帖子 zongzw » 2008-06-23 16:30

还是本来 5*4就是错误的。应该是21个字节?
kinwin
帖子: 225
注册时间: 2007-08-28 13:19
来自: USTC

#3

帖子 kinwin » 2008-06-23 16:45

仔细看看IPV4 头格式 就可以得出答案
另外我看这iphdr只有20个字节,lz怎么看出是21个字节的
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12

#4

帖子 zongzw » 2008-06-23 16:50

当然这个21使我通过查数查出来。而使用sizeof(struct iphdr)得到的是20,很不理解!!
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12

#5

帖子 zongzw » 2008-06-23 16:51

难道使我查错了,不会阿,我都查了好几遍了。
kinwin
帖子: 225
注册时间: 2007-08-28 13:19
来自: USTC

#6

帖子 kinwin » 2008-06-23 16:56

只有20个字节,就是ipv4 头部的数据结构
注意条件编译
enst
帖子: 10
注册时间: 2008-03-25 21:16

#7

帖子 enst » 2008-06-23 16:58

sizeof(struct iphdr) 就是20啊
enst
帖子: 10
注册时间: 2008-03-25 21:16

#8

帖子 enst » 2008-06-23 17:01

zongzw 写了:当然这个21使我通过查数查出来。而使用sizeof(struct iphdr)得到的是20,很不理解!!
if
elif
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12

#9

帖子 zongzw » 2008-06-23 17:06

我知道,#if 和 #endif之间总共有两个__u8吧?
kinwin
帖子: 225
注册时间: 2007-08-28 13:19
来自: USTC

#10

帖子 kinwin » 2008-06-23 17:08

zongzw 写了:我知道,#if 和 #endif之间总共有两个__u8吧?
:4
:4
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12

#11

帖子 zongzw » 2008-06-23 17:11

靠,我错了,扪心自问一下,谢谢诸位了,kinwin enst
:P
回复