IPネットワークにおいて、IPアドレスの動的割り当てを含む各種のネットワークに関する設定を自動で行なうための通信プロトコル。
このDHCP以前にも、動的にホストの設定(IPアドレスを含む)を解決するためのプロトコルが存在した。
例えば、RARPを用いると、MACアドレスからIPアドレスを得ることができる。
ICMPでも、IPアドレスこそ得られないものの、「Redirect」(type=5)メッセージでルータの存在を、「Address Mask Request」(type=17)メッセージでネットワークマスクを、「Information Request」(type=15)メッセージでその他の情報を、それぞれ通知可能である。
BOOTPはコンフィグレーション情報の転送機構を提供した。IPアドレスに加え、様々な情報を通知できる。BOOTPは拡張性が高く、様々な拡張実装が試みられた。
そしてDHCPは、このうちBOOTPの拡張として作られたものの一つである。
DHCPはBOOTPの拡張であり、メッセージフォーマット等はほぼそのままである。BOOTPクライアントは、一切の変更無くDHCPサーバと相互運用が可能である。
先頭より順番に、次の情報が格納される。
DHCPにおいては、snameやfileなどの巨大なフィールドは殆ど意味を成さない。しかしBOOTPの拡張という立場を取っているため、DHCPはパケットが大きい。
BOOTPとDHCPには二つの大きな相違がある。
BOOTPはコンピュータの起動時にのみネットワーク設定を行なうため、そのコンピュータを停止するまでそのIPアドレスを使い続けるのに対し、DHCPでは一定時間(リース期間と呼ばれる)アドレスを付与し、それ以降は別のクライアントに対し同じアドレスを再割り当てすることができることである。
もう一つは、DHCPはIPネットワークに必要な全てのパラメータを提供する機能を有することである。
ブロードキャストで通信するため、DHCPサーバとDHCPクライアントは同一ネットワークになければならない。ただし、ルータにDHCPリレーの機能を設定すると、別ネットワークのクライアントに対してIPアドレスを与えることができる。
複数のDHCPサーバを置くことはできるが、それぞれのサーバがリースするIPアドレスの範囲が重なってはならない。そのため、DHCPサーバの冗長化は困難である。ただ、市販のソフトでは、冗長化を実現しているものもある。
まず、コンフィギュレーション設定要求を開始し、DHCPサーバより返信を待つ。
情報が届いたら、コンフィグレーション送付を開始し、DHCPサーバよりACKを待つ。
DHCPサーバよりACKが届いたら手順終了である。
具体的な手順は次の通り。
DHCPDISCOVERメッセージを受け取ったDHCPサーバは、応答に対してDHCPOFFERメッセージを返信する。
そしてクライアントは、応答したDHCPサーバからDHCPOFFERメッセージを受け取る。DHCPOFFERメッセージには、DHCPサーバからの「提案」が書かれている。まだ提案の段階であり、決定ではない。
DHCPOFFERメッセージには、使用可能なIPアドレスに加え、要求した様々な情報がオプションとして含まれる。
ネットワーク内には複数のDHCPサーバがあって良い。
複数のDHCPサーバが存在する場合、DHCPクライアントは幾つかのサーバからDHCPOFFERメッセージを受けとる可能性があり、DHCPクライアントは受信したDHCPOFFERの中から一つを選ぶことになる。
サーバを選択した場合、クライアントはその提案を受け入れ、選んだものをDHCPREQUESTメッセージで公知し、どのDHCPサーバからの提案を選択したのかを通知する。
DHCPREQUESTは、受け入れたIPアドレス→DHCPサーバのIPアドレスの通信とする。
DHCPREQUESTメッセージを受け取ったDHCPサーバのうち、選択されたDHCPサーバは、そのIPアドレスをクライアントへリース(貸し出し)する。選択されなかったDHCPサーバは、提案したアドレスを、元のように使用可能に戻す。
選択されたDHCPサーバは、クライアントに対して肯定応答(DHCPACK)を返信する。この応答には、要求した内容やリリース時間など追加の構成情報も含まれている。クライアントは、このACKメッセージの内容を使うことになる。
この手順をもって、クライアントはIPアドレスと構成パラメータを有効期限が切れるまで使用できるようになる。
クライアントは、リース期間の半分を経過した時点で、必要に応じてリース期間の更新を始める。
クライアントはDHCPREQUESTメッセージをDHCPサーバに送信し、更新の要求を行なう。
DHCPサーバは、この要求を受け入れた場合はクライアントにDHCPACKメッセージを返信する。要求に応じられない場合は無視をする。
DHCPサーバが要求に応答しない場合、クライアントは一定期間ごとにDHCPREQUESTを送信する。それでも応答がなく、リースの有効期限が切れてしまった場合、クライアントは使用していたIPアドレスを放棄しなければならない。更に通信したい場合には、DHCPDISCOVERの送信からやり直しとなる。
クライアントは、リース期間中においてIPアドレスが不要になった場合、DHCPRELEASEメッセージをDHCPサーバに送信することで、リースを終了する。
サーバは、そのクライアントのIPアドレスを再び使用可能なアドレスとして管理下に置き、次回の要求にそなえる。
なお、DHCPRELEASEを送信した時点でそのクライアントにはIPアドレスが無くなることになるため、このDHCPRELEASEメッセージに対しDHCPサーバは応答をしない(できない)。