DHCP(Dynamic Host Configuration Protocol、ダイナミック ホスト コンフィギュレーション プロトコル)は、IPv4ネットワークで使用されるネットワーク管理プロトコルであり、コンピュータがネットワークに接続する際に必要な設定情報を自動的に割り当てるために使用する。 BOOTPにリース機能を追加してDHCPとなっている。

DHCPサーバは、IPアドレス等のネットワーク構成設定をネットワーク上の各デバイスに動的に割り当て、他のIPネットワークと通信できるようにするTechTarget Network: DHCP (Dynamic Host Configuration Protocol)。DHCPサーバを使用すると、コンピュータは自動的にIPアドレスとネットワーク設定を要求でき、ネットワーク管理者やエンドユーザが全てのネットワークデバイスに手動でIPアドレスを割り当てる必要がなくなる。

DHCPは、から大規模な、地域のインターネットサービスプロバイダネットワークまで、様々な規模のネットワークに実装できるPeterson LL, Davie BS. (2011). Computer Networks: A Systems Approach.。ほとんどのルータまたはホームゲートウェイは、DHCPサーバとして機能させることができ、ローカルネットワーク内において、ネットワークに接続されている各デバイスにローカルIPアドレスを割り当てることができる。

概要 UDP/IPは、あるネットワーク上のデバイスが別のネットワーク上のデバイスと通信する方法を定義する。DHCPサーバは、IPアドレスを自動的または動的にデバイスに割り当てることによって、ネットワーク上のデバイスのUDP/IP設定を管理できる。

DHCPはクライアントサーバモデルに基づいて動作する。コンピュータがネットワークに接続したとき、当該のコンピュータ内のDHCPクライアントソフトウェアはDHCPクエリをブロードキャストで送信し、必要な設定情報を要求する。DHCPクエリは、ネットワーク上のどのDHCPサーバーでも処理できる。DHCPサーバは、プールされたIPアドレス、デフォルトゲートウェイ、ドメイン名、DNSサーバ、などのクライアント構成パラメータに関する情報を管理している。DHCP要求を受信したDHCPサーバは、管理者が以前に設定したクライアントごとに特定の情報、もしくはネットワーク全体に有効なアドレスその他の情報、および割り当て(リース(lease))た情報が有効な期間を返信する。DHCPクライアントは通常、起動直後、およびその後定期的に情報の有効期限が切れる前にこの情報を照会する。DHCPクライアントが割り当てを更新するとき、最初は同じパラメータ値を要求するが、DHCPサーバは管理者が設定した割り当てポリシーに基づいて新しいアドレスを割り当てることがある。

複数のリンクで構成される大規模ネットワークでは、相互接続ルータ上に配置されたDHCPリレーエージェントによって、単一のDHCPサーバでネットワーク全体にサービスを提供することができる。DHCPリレーエージェントは、異なるサブネット上にあるDHCPクライアントとDHCPサーバとの間でメッセージを中継する。

DHCPは、IPv4とIPv6のどちらでも使用される。どちらのバージョンでも目的は同じであるが、IPv4とIPv6のプロトコルの詳細は大きく異なることから別のプロトコルと見なされる。IPv6のDHCPはDHCPv6と呼ばれ、 で定められている。DHCPv6はDHCPv4とは互換性がないが、IPv6だけでなくIPv4のアドレスを割り当てることもできる。IPv6では、IPアドレスとネットマスクの情報をIPv6自体のアドレス自動設定機能により取得することもできるが、DNSサーバやNTPサーバなどほかの情報も自動取得するためにはDHCPが必要になる。

割り当ての種類 DHCPサーバがIPアドレスを割り当てる方法には以下の3つがあり、サーバの設定により選択することができる。

動的割り当て ネットワーク管理者がDHCP用のIPアドレスの範囲を予約し、LAN上の各DHCPクライアントはDHCPサーバにIPアドレスを要求するように構成されている。IPアドレスの割り当ての際には、そのIPアドレスが有効な期間(リース期間)が指定され、DHCPクライアントはリース期間満了前に更新を行う必要がある。DHCPサーバは、更新されずにリース期間が満了したIPアドレスを他のDHCPクライアントに再割り当てすることができる。 自動割り当て DHCPサーバは、管理者によって定義された範囲からIPアドレスを要求側クライアントに永続的に割り当てる。これは動的割り当てに似ているが、DHCPサーバは過去のIPアドレス割り当てのテーブルを保持しているので、クライアントが以前に持っていたのと同じIPアドレスを優先的にクライアントに割り当てることができる。 静的割り当て DHCPサーバは、管理者によって事前定義されたマッピングに基づいて、各クライアントのクライアント識別子(またはクライアントのMACアドレス)に応じてIPアドレスを発行する。この機能は、ルータのメーカーによって様々な名称で呼ばれている。DD-WRTは静的DHCP割り当て(static DHCP assignment)、dhcpdでは固定アドレス(fixed-address)、ネットギアではアドレス予約(address reservation)、シスコとリンクシスはDHCP予約(DHCP reservation)または静的DHCP(static DHCP)としているほか、IPアドレス予約(IP address reservation)やMAC/IPアドレスバインディング(MAC/IP address binding)とも呼ばれる。クライアントのクライアント識別子またはMACアドレスに一致するものがマッピングになかった場合、サーバは動的割り当てまたは自動割り当てにフォールバックしてIPアドレスを割り当てる場合と、IPアドレス割り当て自体をしない場合がある。

いずれの方法でも、通常配信されたIPアドレスはDHCPサーバーからリース(貸与)されたものとなっており、永続的に適用出来るものではない。貸与期間の有効期限はDHCP Optionとして配信される。Optionの値は32bit値で単位は秒のため、1秒〜約136年の間で指定が可能である。リース期間は延長が可能であり、リース期間の50%の時間が経過した際(T1と呼ばれる)と87.5%の時間が経過した際(T2と呼ばれる)に延長承認をDHCPサーバーから得るよう動作させることがRFCで定められている。この機能により、リース期間が短く設定されたDHCP環境であっても、DHCPクライアントが継続的に同一のIPアドレスを使用することが可能になっている。

この有効期限を定めたIPアドレスのリースはもっとも一般的な利用方法であるが、クライアントの種類(ノートPC、デスクトップ)と数、割り当て可能なIPアドレスの総数によって適切な有効期間は異なってくる。

短くするとIPアドレスを効率よく使えるが、ネットワーク上に頻繁にDHCPのプロトコルが流れることになる。長くするとクライアントは安定してIPアドレスを保持できるが、使用されていないにもかかわらず割り当てできないIPアドレスが多くなる。一般に、ノートPCが多くてIPアドレスを一時的にしか使用しないネットワークの場合は数十分〜1日程度、デスクトップPCが多くIPアドレスも十分に足りている場合は一週間以上とすればいいだろう。

リース期間のOptionを配信しないことで、有効期間を無期限とすることも可能だが、この場合はリースしたアドレスが回収されないので、時々使用していないIPアドレスを手動で解放する必要がある。

動作

DHCPは、User Datagram Protocol(UDP)を使用した、コネクションレスサービスモデルを採用している。Bootstrap Protocol(BOOTP)と同じ動作をするために、2つのUDPポート番号で実装されている。UDPポート番号67はサーバの宛先ポートであり、UDPポート番号68はクライアントによって使用される。

DHCPの動作は、サーバ探索、IPリース提示、IPリース要求、IPリース確認の4段階に分けられる。これは、discovery(探索), offer(提示), request(要求), acknowledgement(確認)の頭文字をとって"DORA"とよばれることがある。

DHCPの動作は、クライアントが要求をブロードキャストで送信することから始まる。クライアントとサーバが異なるサブネット上にある場合は、DHCPリレーエージェントを使用する。既存のリースの更新を要求しているクライアントは、その時点ですでに確立されたIPアドレスを持っているので、UDPユニキャストによって直接サーバと通信することができる。また、BROADCASTフラグ(2バイトフィールドの第1ビット。他のビットは通常は0になっている)によってクライアントがDHCPOFFERをブロードキャスト・ユニキャストのどちらで受け取りたいかをサーバに通知することができる。0x8000であればブロードキャスト、0x0000であればユニキャストである。通常、DHCPOFFERはユニキャストで送信される。IPアドレスが設定される前にユニキャストパケットを受け入れることができないホストの場合、このフラグを使って問題を回避することができる。

DHCP discover DHCPクライアントは、255.255.255.255(リミテッド・ブロードキャストアドレス)または特定のサブネットブロードキャストアドレス(ディレクテッド・ブロードキャストアドレス)を使用して、サブネット上にDHCPDISCOVERメッセージをブロードキャストで送信する。DHCPクライアントは、最後に認識されたIPアドレスを要求することもある。クライアントが同じネットワークに接続されたままの場合、サーバは要求を許可する。それ以外の場合は、サーバが権限(authoritative)ありに設定されているか否かによって異なる。権限ありのサーバは、要求を拒否して、クライアントに新しい要求を発行させる。権限なしのサーバは、単に要求を無視するため、クライアントは要求がタイムアウトしてから新しいIPアドレスを要求する。

例えば、HTYPEが1に設定されて、使用される媒体がイーサネットであることが指定されている場合、MACアドレスは6オクテット長であるため、HLENは6に設定される。CHADDRは、クライアントによって使用されるMACアドレスに設定される。その他のいくつかのオプションも設定されている。

+ DHCPDISCOVERメッセージの例イーサネット: 送信元=送信者のMACアドレス; 送信先=FF:FF:FF:FF:FF:FFIP: 送信元=0.0.0.0; 送信先=255.255.255.255 UDP: 送信元ポート=68; 送信先ポート=67 Octet 0 Octet 1 Octet 2 Octet 3 OP HTYPE HLEN HOPS 0x01 0x01 0x06 0x00 XID 0x3903F326 SECS FLAGS 0x0000 0x0000 CIADDR (Client IP address) 0x00000000 YIADDR (Your IP address) 0x00000000 SIADDR (Server IP address) 0x00000000 GIADDR (Gateway IP address) 0x00000000 CHADDR (Client hardware address) 0x00053C04 0x8D590000 0x00000000 0x00000000 192オクテットの0、または追加オプション用のオーバーフロースペース。BOOTPとの互換性のため マジッククッキー 0x63825363 DHCPオプション 0x350101 53: 1 (DHCP Discover) 0x3204c0a80164 50: 192.168.1.100を要求 0x370401030f06 55 (パラメータ要求リスト): 0xff 255 (終端マーク)

DHCP offer IPアドレスリース要求であるDHCPDISCOVERメッセージをクライアントから受信したDHCPサーバは、クライアントのIPアドレスを予約し、クライアントにDHCPOFFERメッセージを送信してリース提示を行う。このメッセージには、クライアントのクライアント識別子(またはMACアドレス)、サーバが提供しようとしているIPアドレスとそのサブネットマスク、リース期間、提供しているDHCPサーバのIPアドレスが含まれている。DHCPサーバは、基盤となるトランスポート層のハードウェアレベルのMACアドレスを参照することができる。現在のRFCでは、DHCPパケットにクライアント識別子が指定されていない場合はトランスポート層のMACアドレスを使用できる。

DHCPサーバは、CHADDR(Client hardware address)フィールドで指定されたクライアントのハードウェアアドレスに基づいて構成を決定する。ここで、サーバ192.168.1.1は、YIADDR(Your IP address)フィールドにクライアントのIPアドレスを指定する。

+ DHCPOFFERメッセージの例イーサネット: 送信元=送信者のMACアドレス; 送信先=クライアントのMACアドレスIP: 送信元=192.168.1.1; 送信先=255.255.255.255 UDP: 送信元ポート=67; 送信先ポート=68 Octet 0 Octet 1 Octet 2 Octet 3 OP HTYPE HLEN HOPS 0x02 0x01 0x06 0x00 XID 0x3903F326 SECS FLAGS 0x0000 0x0000 CIADDR (Client IP address) 0x00000000 YIADDR (Your IP address) 0xC0A80164 (192.168.1.100) SIADDR (Server IP address) 0xC0A80101 (192.168.1.1) GIADDR (Gateway IP address) 0x00000000 CHADDR (Client hardware address) 0x00053C04 0x8D590000 0x00000000 0x00000000 192オクテットの0。BOOTPとの互換性のため マジッククッキー 0x63825363 DHCPオプション 53: 2 (DHCP Offer) 1(サブネットマスク): 255.255.255.0 3(ルータ): 192.168.1.1 51(IPアドレスリース期間): 86400s(1日) 54(DHCPサーバ): 192.168.1.1 6(DNSサーバ):

DHCP request クライアントは、DHCP offerに応答して、サーバにDHCPREQUESTメッセージでブロードキャストで送信し、提示されたアドレスを要求する。クライアントは複数のサーバからDHCP offerを受信しても、1つのDHCP offerしか受け入れない。DHCP requestメッセージで要求されたserver identificationオプションによって、サーバは、DHCP offerがクライアントにより受け入れられたことを知る。このメッセージを受け取った他のDHCPサーバは、クライアントに送信したDHCP offerを取り消し、IPアドレスを利用可能なアドレスのプールに返却する。

+ DHCPREQUESTメッセージの例イーサネット: 送信元=送信者のMACアドレス; 送信先=FF:FF:FF:FF:FF:FFIP: 送信元=0.0.0.0; 送信先=255.255.255.255 UDP: 送信元ポート=68; 送信先ポート=67 Octet 0 Octet 1 Octet 2 Octet 3 OP HTYPE HLEN HOPS 0x01 0x01 0x06 0x00 XID 0x3903F326 SECS FLAGS 0x0000 0x0000 CIADDR (Client IP address) 0x00000000 YIADDR (Your IP address) 0x00000000 SIADDR (Server IP address) 0xC0A80101 (192.168.1.1) GIADDR (Gateway IP address) 0x00000000 CHADDR (Client hardware address) 0x00053C04 0x8D590000 0x00000000 0x00000000 192オクテットの0。BOOTPとの互換性のため マジッククッキー 0x63825363 DHCPオプション 53: 3 (DHCP Request) 50: 192.168.1.100を要求 54(DHCPサーバ): 192.168.1.1

DHCP acknowledgement DHCPサーバがクライアントからDHCPREQUESTメッセージを受信すると、設定プロセスは最終段階に入る。確認応答フェーズでは、サーバがDHCPACKパケットをクライアントに送信する。このパケットには、リース期間と、クライアントが要求したその他の設定情報が含まれている。DHCPACKパケットをクライアントが受信した時点で、IP設定プロセスは完了となる。

プロトコルでは、DHCPクライアントがサーバから通知されたパラメータを使用してネットワークインターフェースを設定することを期待している。

クライアントはIPアドレスを得た後で、複数のDHCPサーバ間のアドレスプールの重なりによって引き起こされるアドレスの衝突を防ぐために、(Address Resolution Protocol(ARP)などを使って)新しく設定したアドレスが他のコンピュータで使われていないかを調べるべきであるRFC2131 Dynamic Host Configuration Protocol: Dynamic allocation of network addresses https://datatracker.ietf.org/doc/html/rfc2131#section-2.2。

+ DHCPACKメッセージの例イーサネット: 送信元=送信者のMACアドレス; 送信先=クライアントのMACアドレスIP: 送信元=192.168.1.1; 送信先=192.168.1.100 UDP: 送信元ポート=67; 送信先ポート=68 Octet 0 Octet 1 Octet 2 Octet 3 OP HTYPE HLEN HOPS 0x02 0x01 0x06 0x00 XID 0x3903F326 SECS FLAGS 0x0000 0x0000 CIADDR (Client IP address) 0x00000000 YIADDR (Your IP address) 0xC0A80164 (192.168.1.100) SIADDR (Server IP address) 0xC0A80101 (192.168.1.1) GIADDR (Gateway IP address switched by relay) 0x00000000 CHADDR (Client hardware address) 0x00053C04 0x8D590000 0x00000000 </tt> 0x00000000 192オクテットの0。BOOTPとの互換性のため マジッククッキー 0x63825363 DHCPオプション 53: 5 (DHCP ACK) または 6 (DHCP NAK) 1 (サブネットマスク): 255.255.255.0 3(ルータ): 192.168.1.1 51(IPアドレスリース期間): 86400s(1日) 54(DHCPサーバ): 192.168.1.1 6(DNSサーバ):

DHCP information DHCPクライアントは、元のサーバがDHCPOFFERで送信したものよりも多くの情報を要求する可能性がある。クライアントは特定のアプリケーションのために繰り返しデータを要求することもある。例えば、ブラウザはDHCP Inform(DHCP通知)を使用してWeb Proxy Auto-Discovery Protocol(WPAD)経由でプロキシ設定を取得する。

DHCP releasing クライアントはDHCP情報を解放(リリース)するようにDHCPサーバに要求を送信し、それを受信したクライアントはそのIPアドレスを無効にする。通常、クライアントデバイスは、ユーザーがネットワークからデバイスを取り外すことができるかどうかを知らないので、プロトコルではDHCP Releaseの送信を義務付けていない。

クライアント設定パラメータ DHCPサーバは、オプションの設定パラメータをクライアントに提供できる。 には、Internet Assigned Numbers Authority(IANA)によって定義されている使用可能なDHCPオプション(DHCPおよびBOOTPのパラメータ)が記載されている。

DHCPクライアントは、DHCPサーバによって提供されたパラメータを選択・操作・上書きすることができる。Unix系OSでは、このクライアントレベルの変更は通常、設定ファイル/etc/dhclient.confの値に従って行われる。

DHCPオプション DHCPオプションは、元々BOOTPにてvendor extensions(ベンダー拡張)として提供されていた機能であり、BOOTPをサポートしていたネットワーク機器メーカがBOOTPサーバからBOOTPクライアントとなる各機器へ設定を送信するために使用していた。DHCPではこの機能をDHCPオプションとして標準化している。一方、従来からのベンダー拡張機能は専用のオプションコードにより引き続き利用できるようにしている。

DHCPオプションはTLV形式のオクテット文字列として表現される。最初のオクテットはオプションコード、2番目のオクテットは後続オクテットの数で、残りのオクテットはオプションコードに依存する。例えば、offerのDHCPメッセージタイプオプションは0x35、0x01、0x02と表示される。ここで、0x35はDHCPメッセージタイプ(DHCP message type)のコード53で、0x01は後ろに1オクテットが続くことを表し、0x02は"offer"を表す値である。

RFC 2132 で定義 次の表は、 およびIANAレジストリで定義されている利用可能なDHCPオプションを一覧にしたものである。

+ (BOOTP Vendor Information Extensions) ベンダ拡張 コード 名称 長さ 備考 0 Pad 0 オクテット 他のオプションがバイト境界に揃うようにパディングするために使用する。長さバイトの後には何も続かない。 1 Subnet mask 4オクテット ルータオプション(オプション3)がある場合は、その前に送信する必要がある。 2 Time offset 4オクテット 3 Router 4オクテットの倍数 利用可能なルータ。優先順にリストされている。 4 Time server 4オクテットの倍数 利用可能な同期タイムサーバ。優先順にリストされている。 5 Name server 4オクテットの倍数 利用可能なネームサーバ。優先順にリストされている。 6 Domain name server 4オクテットの倍数 利用可能なDNSサーバ。優先順にリストされている。 7 Log server 4オクテットの倍数 利用可能なログサーバ。優先順にリストされている。. 8 Cookie server 4オクテットの倍数 ここで言うCookieとは、fortuneコマンドで表示されるフォーチュンクッキー(おみくじ)のための格言やジョークなどのことで、HTTP cookieとは関係ない。 9 LPR Server 4オクテットの倍数 10 Impress server 4オクテットの倍数 11 Resource location server 4オクテットの倍数 12 Host name 1オクテット以上 13 Boot file size 2オクテット ブートイメージの大きさ(4KiBブロック単位) 14 dump file 1オクテット以上 クラッシュダンプを保存した場所のパス 15 Domain name 1オクテット以上 16 Swap server 4オクテット 17 Root path 1オクテット以上 18 Extensions path 1オクテット以上 255 End 0オクテット ベンダーオプションフィールドの終端を示すために使用される

+ ホストごとのIP層パラメータ コード 名称 長さ 備考 19 IP forwarding enable/disable 1オクテット 20 Non-local source routing enable/disable 1オクテット 21 Policy filter 8オクテットの倍数 22 Maximum datagram reassembly size 2オクテット 23 Default IP time-to-live 1オクテット 24 Path MTU aging timeout 4オクテット 25 Path MTU plateau table 2オクテットの倍数

+ インターフェースごとのIP層パラメータ コード 名称 長さ 備考 26 Interface MTU 2オクテット 27 All subnets are local 1オクテット 28 Broadcast address 4オクテット 29 Perform mask discovery 1オクテット 30 Mask supplier 1オクテット 31 Perform router discovery 1オクテット 32 Router solicitation address 4オクテット 33 Static route 8オクテットの倍数 送信先・ルータのペアのリスト

+ インターフェースごとのリンク層パラメータ コード 名称 長さ 備考 34 Trailer encapsulation option 1オクテット 35 ARP cache timeout 4オクテット 36 Ethernet encapsulation 1オクテット

+ TCPパラメータ コード 名称 長さ 備考 37 TCP default TTL 1オクテット 38 TCP keepalive interval 4オクテット 39 TCP keepalive garbage 1オクテット