나는이 코드 우연의 일치주의 :코드의 명확하지 않은 목적은 무엇입니까? 나는 리눅스 및 튜토리얼 동안 원시 소켓 프로그래밍에 대해 배우고
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
4 될 IP 버전을 보유, 그리고 iph_ihl
이 설정됩니다 헤더 길이를 보유하고 헤더 길이는 4 바이트 워드로 기술되므로 실제 헤더 길이는 5 × 4 = 20 바이트가된다. 20 바이트가 최소 길이입니다.과 iph_ihl
으로 설정된이 구조의 비트 필드가 IPv4 일 것이고 IP 헤더의 길이가 20 바이트가되기 때문에이 구조의 비트 필드가 구체적으로 4와 5인지 궁금합니다. 그러나 나는 그들의 비트 필드가 그들의 가치에 어떤 영향이나 상관 관계가 있을지 확신 할 수 없다. 모든 설명은 크게 감사하겠습니다. 코드
링크 : http://www.tenouk.com/Module43a.html
비트 필드입니다. –
@VladfromMoscow 그러나 비트 필드는 비트 단위로 크기를 결정하지 않습니까? 그들은 데이터의 실제 가치를 결정하지 못하고 단지 얼마나 많은 공간이 있는지를 결정합니다. 또는 비트 필드에 대한 근본적인 무언가 및/또는 버전 및 헤더 길이가 IP 헤더에서 어떻게 작동합니까? –
이상하게도 IHL은 4 비트 필드로되어 있습니다. – harold