通信用語の基礎知識 戻る
アスカネットワークサービス

DHCP

読み:ディーエイチスィーピー
外語:DHCP: Dynamic Host Configuration Protocol
品詞:名詞
1998/09/17 作成
2007/06/13 更新

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

IPv4とIPv6

IPv4用がRFC 2131外部リンクRFC 2132外部リンクIPv6用のDHCPv6RFC 3315外部リンクでそれぞれ定義されている。

以降はIPv4用のDHCPを解説する。

ポート番号は、クライアントには67/udp、サーバには68/udpが用いられる。

由来

この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メッセージの構造
DHCPメッセージの構造

先頭より順番に、次の情報が格納される。

  • op (オペコード) (8ビット)
  • htype (ハードタイプ) (8ビット)
  • hlen (ハードウェアアドレス長) (8ビット)
  • hops (ホップ数) (8ビット)
  • xid (トランザクションID) (32ビット)
  • secs (経過秒数) (16ビット)
  • flags (フラグ) (16ビット)
  • ciaddr (クライアントIPv4アドレス) (32ビット)
  • yiaddr (ユーザIPv4アドレス) (32ビット)
  • siaddr (サーバIPv4アドレス) (32ビット)
  • giaddr (ルータIPv4アドレス) (32ビット)
  • chaddr (クライアントハードウェアアドレス) (16バイト)
  • sname (サーバ名) (64バイト)
  • file (ファイル名) (128バイト)
  • options (オプション) (可変長)

DHCPにおいては、snameやfileなどの巨大なフィールドは殆ど意味を成さない。しかしBOOTPの拡張という立場を取っているため、DHCPはパケットが大きい。

BOOTPのとの差異

BOOTPとDHCPには二つの大きな相違がある。

BOOTPはコンピュータの起動時にのみネットワーク設定を行なうため、そのコンピュータを停止するまでそのIPアドレスを使い続けるのに対し、DHCPでは一定時間(リース期間と呼ばれる)アドレスを付与し、それ以降は別のクライアントに対し同じアドレスを再割り当てすることができることである。

もう一つは、DHCPはIPネットワークに必要な全てのパラメータを提供する機能を有することである。

DHCPの利点

DHCPサーバに、クライアントに割り当てるIPアドレスの範囲などを設定しておくことで、その中から空いているアドレスを動的にクライアントへ割り当てることができる。

また、DNSサーバデフォルトルートなどの情報をクライアントに与えることも出来る。

MACアドレスでホストを識別することができるので、あるホストに常に決まったIPアドレスを設定することも可能である。そのため、サーバに対してDHCPでネットワーク設定を行なうこともできる。

DHCPの限界

ブロードキャストで通信するため、DHCPサーバとDHCPクライアントは同一ネットワークになければならない。ただし、ルータにDHCPリレーの機能を設定すると、別ネットワークのクライアントに対してIPアドレスを与えることができる。

複数のDHCPサーバを置くことはできるが、それぞれのサーバがリースするIPアドレスの範囲が重なってはならない。そのため、DHCPサーバの冗長化は困難である。ただ、市販のソフトでは、冗長化を実現しているものもある。

関連技術

上述したものも含め、IPアドレスと追加の情報を得られる関連するプロトコルに、次のようなものがある。

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サーバは応答をしない(できない)。