DHCP
読み:ディーエイチスィーピー
外語:DHCP: Dynamic Host Configuration Protocol

 IPネットワークにおいて、IPv4アドレスの動的割り当てを含む各種のネットワークに関する設定を自動で行なうための通信プロトコル
目次

概要
 IPv4用がRFC 2131RFC 2132で定義される。ポート番号は、クライアントには67/udp、サーバーには68/udpが用いられる。IPv6用のDHCPv6は異なるプロトコルである。
 このDHCP以前にも、動的にホストの設定(IPアドレスを含む)を解決するためのプロトコルが存在した。
 IPアドレスと追加の情報を得られる関連するプロトコルに、次のようなものがある。
 例えば、RARPを用いると、MACアドレスからIPアドレスを得ることができる。ICMPでも、IPアドレスこそ得られないものの「Redirect」(type=5)メッセージでルーターの存在を、「Address Mask Request/Reply」(type=17/18)メッセージでネットワークマスクを、「Information Request/Reply」(type=15/16)メッセージでその他の情報を、それぞれ通知可能である。
 そしてBOOTPはコンフィグレーション情報の転送機構を提供した。IPアドレスに加え、様々な情報を通知できる。
 そしてDHCPは、このうち拡張性が高いBOOTPの拡張として作られたものの一つである。

特徴

利点
 DHCPサーバーに、クライアントに割り当てるIPアドレスの範囲などを設定しておくことで、その中から空いているアドレスを動的にクライアントへ割り当てることができる。
 また、DNSサーバーデフォルトルートなどの情報をクライアントに与えることも出来る。
 MACアドレスでホストを識別することができるので、あるホストに常に決まったIPアドレスを設定することも可能である。そのため、サーバーに対してDHCPでネットワーク設定を行なうこともできる。

限界
 ブロードキャストで通信するため、DHCPサーバーとDHCPクライアントは同一ネットワークになければならない。ただし、ルーターにDHCPリレーの機能を設定すると、別ネットワークのクライアントに対してIPアドレスを与えることができる。
 複数のDHCPサーバーを置くことはできるが、それぞれのサーバーがリースするIPアドレスの範囲が重なってはならない。そのため、DHCPサーバーの冗長化は困難である。ただ、市販のソフトでは、冗長化を実現しているものもある。

BOOTPのとの差異
 BOOTPとDHCPには二つの大きな相違がある。
 BOOTPは電子計算機の起動時にのみネットワーク設定を行なうため、その電子計算機を停止するまでそのIPアドレスを使い続けるのに対し、DHCPでは一定時間(リース期間と呼ばれる)アドレスを付与し、それ以降は別のクライアントに対し同じアドレスを再割り当てすることができることである。
 もう一つは、DHCPはIPネットワークに必要な全てのパラメーターを提供する機能を有することである。

VLAN
 VLANトランキングの状態でDHCPサーバーに接続すると、物理的には1台のDHCPサーバーで、複数のVLANでDHCP運用が可能である。

技術

パケット構造
 DHCPはBOOTPの拡張であり、メッセージフォーマット等はほぼそのままである。BOOTPクライアントは、一切の変更無くDHCPサーバーと相互運用が可能である。
 
 先頭より順番に、次の情報が格納される。
 DHCPにおいては、snameやfileなどの巨大なフィールドは殆ど意味を成さない。しかしBOOTPの拡張という立場を取っているため、DHCPはパケットが大きい。

options
 DHCPはBOOTPとの互換のため、必要な情報は全てオプションによって渡される。
 BOOTPではベンダー拡張という扱いで、オプションは補足程度の扱いでしかないためオプション番号欄は8ビットしかない。DHCPで多用したために使える番号の残りも少なくなっている。これを教訓に、DHCPv6はオプション番号欄を16ビットとした。従ってDHCPとDHCPv6ではオプション番号に互換性がない。
 オプション番号の浪費を防ぐため、オプション番号を一つだけ確保してオプション内をサブオプションで区切る実装もあるが、データ長も8ビットしかないので多くのデータをまとめることはできない。
 以下は、BOOTP用のものも含めて全て記載する。RFC番号の記載がないものは全てRFC 2132で規定されている。

IPアドレスの取得

手順
 まず、コンフィギュレーション設定要求を開始し、DHCPサーバーより返信を待つ。
 情報が届いたら、コンフィグレーション送付を開始し、DHCPサーバーよりACKを待つ。
 DHCPサーバーよりACKが届いたら手順終了である。

DHCP情報の要求(DISCOVER)
 まず、IPアドレスを要求するDHCPDISCOVERメッセージをブロードキャストで送信することから始める。
 DHCPDISCOVERメッセージには、クライアント固有の識別情報、通常はMACアドレスを入れて送信する。IPv4であれば、ブロードキャストは255.255.255.255、クライアントの送信IPアドレスは0.0.0.0とする。
 このメッセージでは、IPアドレス以外に各種のパラメーター、例えばネットマスク、DHCPサーバーのIPアドレス、DNSサーバーのIPアドレス、デフォルトルートのIPアドレス、ドメイン名、といったものをオプションで要求することができる。

DHCP情報の提供(OFFER)
 DHCPDISCOVERメッセージを受け取ったDHCPサーバーは、応答に対してDHCPOFFERメッセージを返信する。
 そしてクライアントは、応答したDHCPサーバーからDHCPOFFERメッセージを受け取る。DHCPOFFERメッセージには、DHCPサーバーからの「提案」が書かれている。まだ提案の段階であり、決定ではない。
 DHCPOFFERメッセージには、使用可能なIPアドレスに加え、要求した様々な情報がオプションとして含まれる。

DHCP情報の受け入れ(REQUEST)
 ネットワーク内には複数のDHCPサーバーがあって良い。
 複数のDHCPサーバーが存在する場合、DHCPクライアントは幾つかのサーバーからDHCPOFFERメッセージを受けとる可能性があり、DHCPクライアントは受信したDHCPOFFERの中から一つを選ぶことになる。
 サーバーを選択した場合、クライアントはその提案を受け入れ、選んだものをDHCPREQUESTメッセージで公知し、どのDHCPサーバーからの提案を選択したのかを通知する。
 DHCPREQUESTは、受け入れたIPアドレス→DHCPサーバーのIPアドレスの通信とする。

DHCP情報の貸し出し(ACK)
 DHCPREQUESTメッセージを受け取ったDHCPサーバーのうち、選択されたDHCPサーバーは、そのIPアドレスをクライアントへリース(貸し出し)する。選択されなかったDHCPサーバーは、提案したアドレスを、元のように使用可能に戻す。
 選択されたDHCPサーバーは、クライアントに対して肯定応答(DHCPACK)を返信する。この応答には、要求した内容やリリース時間など追加の構成情報も含まれている。クライアントは、このACKメッセージの内容を使うことになる。
 この手順をもって、クライアントはIPアドレスと構成パラメーターを有効期限が切れるまで使用できるようになる。

IPアドレスの更新
 クライアントは、リース期間の半分を経過した時点で、必要に応じてリース期間の更新を始める。
 クライアントはDHCPREQUESTメッセージをDHCPサーバーに送信し、更新の要求を行なう。
 DHCPサーバーは、この要求を受け入れた場合はクライアントにDHCPACKメッセージを返信する。要求に応じられない場合は無視をする。
 DHCPサーバーが要求に応答しない場合、クライアントは一定期間ごとにDHCPREQUESTを送信する。それでも応答がなく、リースの有効期限が切れてしまった場合、クライアントは使用していたIPアドレスを放棄しなければならない。更に通信したい場合には、DHCPDISCOVERの送信からやり直しとなる。

IPアドレスの破棄
 クライアントは、リース期間中においてIPアドレスが不要になった場合、DHCPRELEASEメッセージをDHCPサーバーに送信することで、リースを終了する。
 サーバーは、そのクライアントのIPアドレスを再び使用可能なアドレスとして管理下に置き、次回の要求にそなえる。
 なお、DHCPRELEASEを送信した時点でそのクライアントにはIPアドレスが無くなることになるため、このDHCPRELEASEメッセージに対しDHCPサーバーは応答をしない(できない)。

再検索