سلام دوستان
یه سوالی برام بود همیشه اینه که با اونکه مثلا توی هدر ipv4توی rfcابتدا4بیت اول از بایت اول فیلد version و 4 بیت بعدی از بایت اول فیلد ihlهست ولی توی libpcap برای پیاده سازی استراکچر ipv4 جای این دوتا رو برعکس گذاشتن ؟این اتفاق برای بیت های یک بایت از استراکچر tcp هم هست ؟علتش چیه؟
اگه موضوع bigendian o litte endian باشه ,مگه اینا علاوه بر بایت های یک متغییر روی بیت های اون هم اعمال میشن؟
یکمی اینارو قاطی کردم
rfc:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
اما توی لایب پی کپ مثلا برای آیپی :
typedef struct ip_hdr
{
unsigned char ip_header_len : 4; //inja chera aval ihl omad
unsigned char ip_version : 4;
unsigned char ip_tos; // IP type of service
unsigned short ip_total_length; // Total length
unsigned short ip_id; // Unique identifier
unsigned short R_DF_MF_FragmentOffset
unsigned char ip_ttl; // Time to live
unsigned char ip_protocol; // Protocol(TCP,UDP etc)
unsigned short ip_checksum; // IP checksum
unsigned char ipSource[4]; // Source address
unsigned char ipDestination[4]; // destination address
} IPV4_HDR;
یکی لطفا یه توضیح مفصل بده