RFC 2131(DHCP)を理解する

DHCP

開発機能の要件の一つに「RFC2131に対応すること」って一言書いてあった場合、どこまで確認すればいいんだろうと。

とりあえずRFC2131について確認して理解した内容を残しておく。

はじめに

DHCP(Dynamic Host Configuration Protocol)は、ネットワーク上のデバイスがIPアドレスやその他のネットワーク構成情報を自動的に取得するためのプロトコルです。

もともとはBOOTP(Bootstrap Protocol)と呼ばれるプロトコルにて静的なIPアドレスを割り付ける仕組みが考案されましたが、のちにより汎用性の高いDHCPが広く使用されるようになりました。

RFC発行年概要
RFC 951  1985年  BOOTPの初期の仕様(IPアドレスの割り当てやブートローダーの場所など、基本的な機能)を定義。
RFC 15421993年BOOTPの拡張機能を定義。
RFC 21311997年DHCPの基本的な動作やメッセージのフォーマット、クライアントとサーバー間の通信手順などを定義。
RFC 21321997年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メッセージが生成されてからの秒数を示すタイマ値任意
FLAGS2ブロードキャストフラグやその他のフラグを含むフィールド任意
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)4DHCPリレーエージェントが使用するIPアドレス任意
CHADDR (Client Hardware Address)16クライアントの物理アドレス(MACアドレス)任意
SNAME64DHCPサーバーのホスト名を示す
一般的にはほとんど使用されていない
任意
FILE128DHCPクライアントがブートするためのファイル名やパスを示す
一般的にはほとんど使用されていない
任意
options任意可変長のオプション領域
RFC 2132で詳細に定義
IPアドレスやサブネットマスク、デフォルトゲートウェイなどのネットワーク構成情報

動作の手順

以下DHCPクライアントが、DHCPサーバから取得したIPアドレスを使用するまでの流れです。

  1. クライアントがDHCP Discoverメッセージをブロードキャストで送信し、利用可能なDHCPサーバーを探す。
  2. DHCPサーバーはクライアントに対してDHCP Offerメッセージを送信し、利用可能なIPアドレスを提供。
  3. クライアントがOfferメッセージを受け取り、DHCP Requestメッセージを送信し、そのIPアドレスを要求。
  4. DHCPサーバーはクライアントのリクエストを受け入れ、DHCP ACKメッセージを送信し、IPアドレスの使用を承認。

図 IPアドレス取得シーケンス

表 DHCPメッセージとアドレス

メッセージ送信元 MAC アドレス宛先 MAC アドレス送信元 IP アドレス宛先 IP アドレス
DISCOVERクライアントブロードキャスト0.0.0.0255.255.255.255*
OFFERDHCPServerブロードキャストDHCPServer255.255.255.255
REQUESTクライアントブロードキャスト0.0.0.0255.255.255.255*
ACKDHCPServerブロードキャストDHCPServer255.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 * LTRENEWING 状態に遷移。
DHCPREQUEST メッセージを送信し、IP アドレスの更新を要求する。
-
T2 タイマーIPアドレス割り当て後、新しいIP アドレスの取得を試みるまでの時間0.875 * LTREBINDING 状態に遷移。
DHCPREQUEST メッセージを送信し、IP アドレスの再割り当てを要求。
-

参考

DHCPDHCP