DHCPのしくみ

2017/11/06

DHCP (Dynamic Host Configuration Protocol)

  • プロトコルスタック
    TCP/IPのアプリケーション層
  • 下位プロトコル
    UDP
  • ポート番号
    67と68 (67はDHCPサーバ、68はDHCPクライアント用)
  • 用途
    TCP/IPで通信を行うためのIPアドレスやサブネットマスク、デフォルトゲートウェイ等の設定を自動的に行うためのプロトコル。
  • 説明
    DHCPを利用するためにはDHCPサーバが必要。 DHCPサーバにはクライアントに対して自動的に配布するIPアドレスの範囲を設定する。この配布するアドレスの範囲をアドレスプールという。DHCPで配布するIPアドレスは一定期間貸し出す(リース)形式になっている。アドレスプールを設定するときに、一緒にリース有効期間も設定する。
    DHCPサーバとDHCPクライアントは次の4つのステップで動作する。
1. DHCPDISCOVER
2. DHCPOFFER
3. DHCPREQUEST
4. DHCPACK

f:id:yuukiyg:20160116180901p:plain

DHCPクライアントAが起動するとDHCPサーバを探し出すためにDHCPDISCOVERをブロードキャストする。(なぜブロードキャストするかというと、最初の時点でDHCPクライアントはIPアドレスを持っていないうえに、DHCPサーバのIPアドレスを知らないため。) 「ブロードキャストでDHCPDISCOVERを出せば、DHCPサーバが受け取ってくれるだろう!」という考え。単純。 通信したい相手のアドレスがよくわからない状況で利用されるのがブロードキャスト。

DHCPサーバがDHCPDISCOVERを受け取ると、アドレスプールの中からアドレスを選択して、クライアントにDHCPOFFERを返す。クライアントに対して「このIPアドレスなんかいかが??」っていうかんじ。

クライアントがDHCPOFFERを受け取ると、DHCPREQUESTをブロードキャストしてIPアドレスを要求する。このときにブロードキャストする理由は、1つのサブネット上に複数のDHCPサーバが存在する可能性を考慮しているため。そのため、 DHCPREQUESTの中には、「どのDHCPサーバのオファーを選択したのか」が記述されている。(選択されたDHCPサーバ以外のサーバは、アドレスプールからリクエストされたIPアドレスを配布不可とする。)

クライアントからDHCPREQUESTを受け取ったDHCPサーバはDHCPACKによって、クライアントに対してIPアドレスとその他のオプションを配布する。DHCPACKを受け取ったクライアントは、受け取ったIPアドレスが利用されていないことをチェックする。

DHCPサーバによって配布されるIPアドレスはリースなので、リース期間が過ぎると無効になる。そこで、クライアントはリース期間の半分が過ぎると、DHCPREQUESTを送信してIPアドレスのリース期間を延長することが可能。これは自動的に行われるので、ユーザは特に意識する必要はない。 また、クライアントがもうIPアドレスを必要としなくなった場合(シャットダウン時など)は、DHCPRELEASEをDHCPサーバへ送信することで、リースされたIPアドレスを解放する。DHCPRELEASEを送信した時点でそのクライアントにはIPアドレスが無くなることになるため、このDHCPRELEASEメッセージに対しDHCPサーバーは応答をしない(できない)。