Linux では、iphdr は ip データ パケットの記述構造であり、iphdr が配置されるヘッダー ファイルは "/usr/src/linux/include/linux/ip.h" であり、この構造は次のように構成されます。データのバッチの結合された構造化データ構造化データを構成する各データは、構造化データのメンバーと呼ばれ、メモリ間隔のサイズと解釈の意味を記述します。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
iphdr はコンピュータ用語です。 LinuxにおけるIPデータパケットの記述構造です。
ヘッダー ファイルは /usr/src/linux/include/linux/ip.h で、構造は次のとおりです。
struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) //小端模式下 __u8 ihl:4,//首部长度(4位) version:4;//ip协议版本IPv4 #elif defined (__BIG_ENDIAN_BITFIELD) //大端模式下 __u8 version:4, ihl:4; #else #error "Please fix <asm/byteorder.h>" #endif __u8 tos;//服务类型字段(8位) __be16 tot_len;//16位IP数据报总长度 __be16 id;//16位标识字段(唯一表示主机发送的每一分数据报) __be16 frag_off;//(3位分段标志+13位分段偏移数) __u8 ttl;//8位数据报生存时间 __u8 protocol;//协议字段(8位) __be16 check;//16位首部校验 __be32 saddr; //源IP地址 __be32 daddr; //目的IP地址 };
拡張知識
##iphdr->version バージョン (4 桁)、現在のプロトコルのバージョン番号は 4 であるため、IP は IPv4 と呼ばれることもあります。 iphdr->ihl ヘッダー長 (4 ビット): ヘッダー長は、IP 層ヘッダー内の 32 ビット ワードの数を指します (つまり、4 ビットがいくつあるかを示します)。 IP 層ヘッダーには、オプションを含むバイト (32 ビット) が含まれます。ヘッダーは 4 ビットのフィールドであるため、最大 60 バイトの長さになります。通常の IP データグラム (オプションなし) フィールドの値は、5 5 * 32 / 8 = 5 * 4 = 20 バイトです。 iphdr->tos サービス タイプ フィールド (8 ビット): サービス タイプ (TOS) フィールドには、3 ビットの優先サブフィールド (現在は無視されています)、4 ビットの TOS サブフィールド、および1 ビットは未使用ですが、0 に設定する必要があります。4 ビット TOS サブフィールドは、それぞれ最小遅延、最大スループット、最大信頼性、最小コストを表します。 4ビットのうち1ビットのみ設定可能です。 4 ビットすべてが 0 の場合は、通常のサービスを意味します。 iphdr->tot_len 合計長フィールド (16 ビット) は、IP データグラム全体の長さをバイト単位で表します。ヘッダ長フィールドと全長フィールドを使用して、IP データグラム内のデータ内容の開始位置と長さを知ることができます。このフィールドの長さは 16 ビットであるため、IP データグラムの長さは最大 65535 バイトになります。一部のデータ リンク (イーサネットなど) では、最小長に達するために一部のデータを埋める必要があるため、合計長フィールドは IP ヘッダーに必要な内容です。長さ。イーサネットの最小フレーム長は 46 バイトですが、IP データの場合はそれより短い場合があります。全長フィールドがない場合、IP 層は 46 バイトのうちどれだけが IP データグラムの内容であるかを知りません。 iphdr->id 識別フィールド (16 ビット) は、ホストによって送信された各データグラムを一意に識別します。通常、その値はメッセージが送信されるたびに 1 ずつ増加します。 推奨学習:以上がLinuxのipdrとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。