我正在学习有关Linux和教程中原始套接字编程我发现此代码巧合:不明确的代码目的?
struct ipheader {
unsigned char iph_ihl:5, iph_ver:4; //<--------------These
unsigned char iph_tos;
unsigned short int iph_len;
unsigned short int iph_ident;
unsigned char iph_flag;
unsigned short int iph_offset;
unsigned char iph_ttl;
unsigned char iph_protocol;
unsigned short int iph_chksum;
unsigned int iph_sourceip;
unsigned int iph_destip;
};
iph_ver
持有的IP版本,这将是4,和iph_ihl
持有将要设置的报头长度由于标题长度用4字节字描述,所以实际标题长度为5×4 = 20字节。 20个字节是最小长度。这样说我很好奇,如果这个结构中的位字段设置为iph_ver
和iph_ihl
,特别是4和5,因为它将是IPv4,并且IP标头的长度将是20个字节。不过,我不确定他们的位域如何在它们的值上产生任何影响或关联。任何解释将不胜感激。
链接代码:http://www.tenouk.com/Module43a.html
它是位域。 –
@VladfromMoscow但是,不要以位为单位来确定大小,只能以位为单位?他们不确定数据的实际价值,只是它有多少空间。或者我错过了有关位域的基本知识和/或版本和标头长度在IP标头中的工作原理? –
虽然这很奇怪,但国际人道法应该是一个4位字段。 – harold