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の拡張という立場を守るために用意されています。
