RFC 2131(DHCP)を理解する
開発機能の要件の一つに「RFC2131に対応すること」って一言書いてあった場合、どこまで確認すればいいんだろうと。
とりあえずRFC2131について確認して理解した内容を残しておく。
はじめに
DHCP(Dynamic Host Configuration Protocol)は、ネットワーク上のデバイスがIPアドレスやその他のネットワーク構成情報を自動的に取得するためのプロトコルです。
もともとはBOOTP(Bootstrap Protocol)と呼ばれるプロトコルにて静的なIPアドレスを割り付ける仕組みが考案されましたが、のちにより汎用性の高いDHCPが広く使用されるようになりました。
RFC | 発行年 | 概要 |
---|---|---|
RFC 951 | 1985年 | BOOTPの初期の仕様(IPアドレスの割り当てやブートローダーの場所など、基本的な機能)を定義。 |
RFC 1542 | 1993年 | BOOTPの拡張機能を定義。 |
RFC 2131 | 1997年 | DHCPの基本的な動作やメッセージのフォーマット、クライアントとサーバー間の通信手順などを定義。 |
RFC 2132 | 1997年 | DHCPの拡張機能を定義。 |
RFC 2131
RFC 2131は、「Dynamic Host Configuration Protocol (DHCP)」の仕様を定義するRFCです。
主な内容は以下になります。
項目 | 概要 |
---|---|
DHCPの概要 | DHCPの基本的な概念や役割(DHCPがどのように動作し、どのような問題を解決するのか)。 |
メッセージフォーマット | ライアントとサーバー間でやり取りされるメッセージ構成。 |
動作の手順 | クライアントがネットワークに接続する際にどのようにIPアドレスを取得し、ネットワーク構成情報を取得するか。 |
オプション | IPアドレスだけでなく、サブネットマスクやデフォルトゲートウェイ、DNSサーバーのアドレスなどの追加情報に関する規定。 |
エラー処理 | DHCPのエラー処理。 |
RFC 2131では、IP アドレス割当ての方式として以下3つを定義しています。
方式 | 説明 | 特徴 |
---|---|---|
Dynamic Allocation (動的割り当て) | DHCPサーバーがプール内の未使用のIPアドレスからクライアントに動的にIPアドレスを割り当てる。 | IPアドレスの効率的な使用を可能にし、管理が容易となる。 |
Automatic Allocation (自動割り当て) | DHCPサーバーがクライアントごとに固定のIPアドレスを割り当てる。 | クライアントごとに固定のIPアドレスを持ちたい場合に使用する。 手動でIPアドレスを割り当てる必要がないため、動的割り当てと同様に管理が容易。 |
Manual Allocation (手動割り当て) | 管理者が各クライアントに固定のIPアドレスを手動で割り当てる。 | セキュリティ上の理由でIPアドレスを固定したい場合等に使用されるが、管理に手間が必要となる。 |
メッセージフォーマット
以下がDHCPのメッセージフォーマットです。
図 DHCPメッセージフォーマット
表 DHCPメッセージパラメータ一覧
パラメータ | サイズ | 説明 | 設定値 |
---|---|---|---|
OP (Operation) | 1 | メッセージの種別を示す | 1:DHCP Discover 2:DHCP Offer 3:DHCP Request 5:DHCP Acknowledgement (ACK) 6:DHCP Negative Acknowledgement (NAK) 7:DHCP Release 8:DHCP Inform |
HTYPE (Hardware Type) | 1 | クライアントのハードウェアのタイプを示す | 1: Ethernet(IEEE 802) 6: IEEE 802ネットワーク(他のハードウェアタイプ) 7: ARCNET 8: Hyperchannel 9: LANstar 15: Frame Relay 16: Asynchronous Transfer Mode (ATM) 17: HDLC(High-Level Data Link Control) |
HLEN (Hardware Address Length) | 1 | クライアントのハードウェアアドレスの長さを示す | 任意 |
HOPS (Hops) | 1 | リレーエージェントがDHCPメッセージを通過する回数を示す | 任意 |
XID (Transaction ID) | 4 | トランザクションの識別子 クライアントとサーバー間で一意である必要がある | 乱数 |
SECS (Seconds) | 2 | メッセージが生成されてからの秒数を示すタイマ値 | 任意 |
FLAGS | 2 | ブロードキャストフラグやその他のフラグを含むフィールド | 任意 |
CIADDR (Client IP Address) | 4 | クライアントのIPアドレス | 任意(クエスト時は0.0.0.0) |
YIADDR (Your IP Address) | 4 | サーバーがクライアントに割り当てたIPアドレス | 任意 |
SIADDR (Server IP Address) | 4 | メッセージを処理しているDHCPサーバーのIPアドレス | 任意 |
GIADDR (Gateway IP Address) | 4 | DHCPリレーエージェントが使用するIPアドレス | 任意 |
CHADDR (Client Hardware Address) | 16 | クライアントの物理アドレス(MACアドレス) | 任意 |
SNAME | 64 | DHCPサーバーのホスト名を示す 一般的にはほとんど使用されていない | 任意 |
FILE | 128 | DHCPクライアントがブートするためのファイル名やパスを示す 一般的にはほとんど使用されていない | 任意 |
options | 任意 | 可変長のオプション領域 RFC 2132で詳細に定義 | IPアドレスやサブネットマスク、デフォルトゲートウェイなどのネットワーク構成情報 |
動作の手順
以下DHCPクライアントが、DHCPサーバから取得したIPアドレスを使用するまでの流れです。
- クライアントがDHCP Discoverメッセージをブロードキャストで送信し、利用可能なDHCPサーバーを探す。
- DHCPサーバーはクライアントに対してDHCP Offerメッセージを送信し、利用可能なIPアドレスを提供。
- クライアントがOfferメッセージを受け取り、DHCP Requestメッセージを送信し、そのIPアドレスを要求。
- DHCPサーバーはクライアントのリクエストを受け入れ、DHCP ACKメッセージを送信し、IPアドレスの使用を承認。
図 IPアドレス取得シーケンス
表 DHCPメッセージとアドレス
メッセージ | 送信元 MAC アドレス | 宛先 MAC アドレス | 送信元 IP アドレス | 宛先 IP アドレス |
---|---|---|---|---|
DISCOVER | クライアント | ブロードキャスト | 0.0.0.0 | 255.255.255.255* |
OFFER | DHCPServer | ブロードキャスト | DHCPServer | 255.255.255.255 |
REQUEST | クライアント | ブロードキャスト | 0.0.0.0 | 255.255.255.255* |
ACK | DHCPServer | ブロードキャスト | DHCPServer | 255.255.255.255 |
*DHCPクライアントは起動時DHCP サーバーのアドレスを知っていた場合、DHCPDISCOVER や DHCPREQUEST で IP ブロードキャストアドレスではなく、そのユニキャストアドレスを使用しても良い。
表 DHCPメッセージ一覧
メッセージ | 送信 | 受信 | 説明 |
---|---|---|---|
DISCOVER | クライアント | サーバー | クライアントがDHCPサーバーを探すためにブロードキャストで送信するメッセージ。 IPアドレスやその他のネットワーク構成情報を要求する。 |
OFFER | サーバー | クライアント | サーバーがクライアントに対してIPアドレスやその他の構成情報を提供するために送信するメッセージ。 クライアントがDHCP Discoverメッセージを受信した後、サーバーが利用可能なIPアドレスを提案する。 |
REQUEST | クライアント | サーバー | クライアントがDHCP Offerメッセージを受け取り、提案されたIPアドレスを要求するためにサーバーに送信するメッセージ。 クライアントが提供されたIPアドレスを受け入れるかどうかを確認する。 |
ACK | サーバー | クライアント | サーバーがクライアントのIPアドレス要求を承認し、提供されたIPアドレスやその他の構成情報を確認するために送信するメッセージ。 クライアントがIPアドレスを正常に取得し、ネットワークを構成する。 |
NAK | サーバー | クライアント | サーバーがクライアントのIPアドレス要求を拒否するために送信するメッセージ。 サーバーが提供されたIPアドレスを利用できない場合や、その他の理由で要求を処理できない場合に使用される。 |
DECLINE | クライアント | サーバー | クライアントがDHCPサーバーに対して、提供されたIPアドレスが利用できないことを報告するために送信するメッセージ。 IPアドレスが他のクライアントによって既に使用されている場合などに使用される。 |
RELEASE | クライアント | サーバー | クライアントが以前に取得したIPアドレスを解放するためにDHCPサーバーに送信するメッセージ。 クライアントがネットワークから離れるときや、IPアドレスの再割り当てを要求するときに使用される。 |
INFORM | クライアント | サーバー | クライアントがIPアドレスの取得を要求せずに、ネットワーク構成情報を取得するためにDHCPサーバーに送信するメッセージ。 クライアントがIPアドレスを取得する必要がなく、ネットワーク構成情報のみを取得する場合に使用される。 |
DHCP クライアントの状態
RFC2132で規定されているDHCP クライアントの状態についてです。
図 DHCP クライアントの状態遷移図
表 DHCP クライアントの状態一覧
状態 | 説明 |
---|---|
INIT (Initialization) | クライアントが初期化され、IP アドレスを持っていない状態 |
SELECTING (Server Selection) | クライアントが DHCP サーバーから提案された IP アドレスを選択している状態 |
REQUESTING (Requesting Configuration) | クライアントが選択した IP アドレスを要求し、DHCP サーバーに対してリクエストを送信している状態 |
BOUND (Bound to an IP Address) | クライアントが IP アドレスを取得し、ネットワークの構成情報を受け取り、ネットワークに正常に参加している状態 |
RENEWING (Renewing an IP Address) | クライアントが現在の IP アドレスを更新するために DHCP サーバーにリクエストを送信している状態 |
REBINDING (Rebinding an IP Address) | クライアントが DHCP サーバーによって提供された IP アドレスを再割り当てするために、ブロードキャストでリクエストを送信している状態 |
DHCP クライアントのタイムアウト管理
DHCPクライアントはLease Time (LT)とT1タイマ、T2タイマの三つのタイマ管理を実施します。
表 DHCP クライアントのタイマ一覧
種別 | 説明 | 設定値 | タイムアウト動作 | 備考 |
---|---|---|---|---|
Lease Time (LT) | DHCP サーバーから割り当てられた IP アドレスの有効期限 | DHCPサーバが指定 | INIT 状態に遷移。 IP アドレスを解放し、新しい IP アドレスを取得するための DHCPDISCOVER メッセージをブロードキャストする。 | 通常、数時間や数日といった期間が設定される |
T1 タイマー | IPアドレス割り当て後、IP アドレスの更新を試みるまでの時間 | 0.5 * LT | RENEWING 状態に遷移。 DHCPREQUEST メッセージを送信し、IP アドレスの更新を要求する。 | - |
T2 タイマー | IPアドレス割り当て後、新しいIP アドレスの取得を試みるまでの時間 | 0.875 * LT | REBINDING 状態に遷移。 DHCPREQUEST メッセージを送信し、IP アドレスの再割り当てを要求。 | - |