BOOTPのメッセージフォーマット
ここでは、DHCPのメッセージフォーマットを説明して行きます。DHCPは、BOOTP(Bootstrap)の上位互換であるため、メッセージの構造は、ほとんど変わっていません。
まず、BOOTPのメッセージフォーマットを説明します。
BOOTP、DHCPのメッセージは、ほとんど同じ形式の構造を使用しています。最終フィールドのみ異なります。BOOTPの場合、この省略可能なフィールドを「ベンダ固有領域」と呼び64バイトに制限しています。
DHCPの場合、この領域は、可変長で「オプション」と呼び、DHCPオプション情報を伝達できるようにしています。
下の図は、BOOTPのメッセージフォーマットです。

DHCPのメッセージフォーマット
DHCPはBOOTPの拡張で、メッセージフォーマット等は、ほぼそのままです。
下の図は、DHCPのメッセージフォーマットです。

DHCPの基本フレーム
DHCPメッセージの基本フレームは、下図の通りです。

DHCPメッセージの各フィールドの内容は、下記の通りです。
●DHCPのメッセージの主要項目
フィールド | Name | 説明 |
op (1バイト) |
OpCode | パケットが要求と応答のいずれであるかを識別する。 |
htype (1バイト) |
ハードウェアタイプ | ハードウェアアドレスのタイプを指定します。 |
hlen (1バイト) |
ハードウェア長 | ハードウェアアドレス長を指定する。 |
hops (バイト) |
ホップ | クライアントが0を設定し、要求がルータを経由する度に値がインクリメントされる。 |
xid (4バイト) |
トランザクションID | クライアントによって選択されたランダムな数字。DHCPメッセージは全て同じxidが設定される。 |
secs (2バイト) |
秒 | DHCPプロセスが開始されてからの経過した秒数が設定される。 |
flags (2バイト) |
フラグ | メッセージが、ブロードキャストなのかユニキャストなのかを指定する。 |
ciaddr (4バイト) |
クライアント IPアドレス |
Bound,Renew,Rebinding状態のように、クライアントが自身のIPアドレスを知っている時のみ使用される。 |
yiaddr (4バイト) |
相手先 IPアドレス |
クライアントIPアドレスが、0.0.0.0の場合、DHCPサーバはオファーされたクライアントIPアドレスをこのフィールドに設定する。 |
siaddr (4バイト) |
サーバ IPアドレス |
クライアントがDHCPサーバのIPアドレスを知っている場合は、このフィールドにDHCPサーバのIPアドレスを設定する。それ以外では、DHCPサーバからのDHCPOFFER、DHCPACKで使用される。 |
giaddr (4バイト) |
ルータ IPアドレス |
ゲートウェイIPアドレス、DHCP/BOOTPリレーエージェントによって設定される。 |
chaddr (16バイト) |
クライアント MACアドレス |
DHCPクライアントのMACアドレス。 |
sname (64バイト) |
サーバ名 | オプションのサーバホスト名。 |
file (バイト) |
ブートファイル名 | ブートファイル名。 |
options (可変長) |
オプション パラメータ | DHCPサーバが提供するオプションのパラメータ。 |
DHCPにおいては、snameやfileなどの巨大なフィールドは、あまり意味を持ちません。このフィールドは、BOOTPの拡張という立場を守るために用意されています。