IPv4を定義するRFC791からの読み取り:
インターネットヘッダーの内容の要約は次のとおりです。
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPヘッダーの最初の8ビットは、バージョンとIHLフィールドの組み合わせです。
IHL:4ビット
インターネットヘッダーの長さは、32ビットワード単位のインターネットヘッダーの長さであり、データの先頭を指します。正しいヘッダーの最小値は5であることに注意してください。
あなたがしているコードは、そこで最初の8ビットを取り、IHL部分を切り取って、それをバイト数に変換することです。ビット単位0xF
のANDbyはIHLフィールドを分離し、32ビットワードには4バイトがあるため、4を掛けることができます。