如图所示,此为IP包的表头格式,对应图中的信息,我们可以计算出,每一行的总长度都为32bit。
在看TCP/IP协议卷一的时候,看到IP首部长度为4bit,首部最大可以为60字节?
我看了半天就是想不出来,于是google了一下,便有了此篇文章,如有错误请指正,谢谢!!!!
Internet Header Length简称为IHL,意思是Internet头部长度。我们从IP包总可以看到前面的6行为Header。如果Option和Padding没有设定的话,那就只有5行为Header。
从图中可以看到,每一行长度为32bit,也就是4byte。那么5行就为,5*4byte=20byte,所以IP包最短为20byte(字节)。
IHL: 4 bits
Internet Header Length is the length of the internet header in 32 bit words, and thus points to the beginning of the data. Note that the
minimum value for a correct header is 5.
由于IHL占4位,4bit可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到15*32bit/8=60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
PS:你要知道的是,IP包头的IHL所占的4位,是表示这个IP包头的长度(Internet Header Length),最短即位5行,20字节;最长为4bit二进制最大值为1111,十进制为15,你也可以看成15行,用15*32bit/8=60字节。Internet Header Length仅仅存放的只是一个值(数字)而已。就像一瓶酒,你朋友问你可以喝多少,你说最少可以喝2杯,最多可以喝一瓶。
参考:
http://baike.baidu.com/view/1519445.htm
http://en.wikipedia.org/wiki/IPv4