DHCPプロトコル


【DHCPプロトコルとは】

 DHCPプロトコルは、ネットワーク機器が特定のIPアドレスを持っていない場合に、
DHCPサーバから一元管理されたIPアドレスを付与してもらうためのプロトコルです。
 特に最近のオフィスや家庭などで、機器を新たに接続したり、パソコンなどを
入れ替えたりする都度、ネットワークの設定でIPアドレスの付け替え、登録作業を
するのが大変になって来たため、DHCPサーバを置いて自動的にIPアドレスを配布
することが多くなって来ました。
 家庭ではブロードバンドルータなどがこのDHCPサーバの機能を持っていて、
パソコンを接続した時点で自動的にIP アドレスを付与するようになっています。

【DHCPのシーケンス】

 このDHCPサーバからIPアドレスを配布してもらうためには、一定のプロトコル
シーケンスに従う必要があります。そのシーケンスを図で示したものが下図と
なります。







このDHCPでアドレスを付与するための手順は下記のようになります。

ここでは上図のように、PC-1を新たにクライアントとしてネットワークに接続する
ものとし、PC-3とPC-4がDHCPサーバの機能を持っているものとします。

(1) 物理的接続
 PC-1はネットワークに接続した時点で、ハードウェア的に検知され、イーサネット
 に物理的な接続状態となります。これはPC-1内部のイーサネットコントローラで
 自動的に行われます。

(2) PC-1よりDISCOVERパケットの送信
 PC-1がDHCPでIPアドレスをもらうという設定になっていれば、DHCPのシーケンス
 を開始するため、PC-1側からUDPプロトコルを使って、DHCPの「DISCOVER
 パケットをブロードキャストアドレスで送信します。

(3) DHCPサーバよりOFFER
 ブロードキャストでDISCOVERメッセージを受信したDHCPサーバは、PC-1に
 対して割り付け可能なIPアドレスを「ユーザーIP」として入れた「OFEER」パケット
 を返送します。
  このとき、ネットワーク上に複数のDHCPサーバがあれば、複数個のOFFER
 パケットをPC-1は受信することになります。

(4) PC-1よりREQUESTパケット送信 
 PC-1では複数のOFFERから1個を選択します。通常は最も先に受信した
 OFFERを選択します。
 そしてこのOFFERパケットに含まれるユーザーIPアドレスを取り出し、DHCPの
 「REQUEST」パケットのベンダー情報部にコピーしてからブロードキャストで、
 「REQUEST」パケットを送信します。
 これで複数のDHCPサーバからOFFERを受信した場合にも、全てのサーバに
 応答が届くことになります。

(5) DHCPサーバからPACK返信
 REQUESTメッセージを受信したDHCPサーバは、自分が選択されたことを同じ
 ユーザーIPアドレスが返送されたことで確認して、良ければ「PACK」パケット
 を返信します。 まずければ「PNAK」パケットを返信します。

(6) PACKを受信してIPアドレスセット
 PACKを正常に受信したPC-1は、OFFERで指定されたユーザIPアドレスを
 自分のIPアドレスとして保存し、以降はこのIPアドレスで通信を行うように
 内部設定します。
 PNAKが返信された時は、再度DISCOVERの送信からやり直します。

(7) アドレス開放
 PC-1はIPアドレスが不要になった時点で、IPアドレス開放パケットをDHCP
 サーバに送ることでIPアドレスを返却することが出来ます。
   (上記シーケンス図には含まれていません)


【UDPプロトコルのフレームフォーマット】

 上記シーケンスで送受信されるパケットのフレーム内容は下図のように
なっています。
 基本的にはUDPプロトコルで転送されるパケットで、UDPのデータ部に
300バイトというかなり大きなサイズのパケットが転送されています。
 UDPですので全体のフレームはイーサネットヘッダ、IPヘッダ、UDPヘッダ
と前に付加されて転送されます。
 実際のDHCPのフレーム部は300バイトのサイズがあって、多くの情報が
乗せられるようになっています。この中でIPアドレス割付に使われるのは
ユーザIPアドレス部です。
さらに上記のシーケンスの区別をするために、ベンダー仕様情報の部分が
使われています。


(本図は拡大できます)



 DHCPのシーケンス実現のためにベンダー仕様情報の部分が使われる
のですが、ここの部分は多用途に使われていて、RFCで数多くのオプションが
規定されています。
実際にDHCPで使う場合の内容は各シーケンスごとに下図のようになっています。







 このベンダー部の最初の4バイトは特定の値に決まっていて「Magic Code」と
呼ばれています。そのあとに、1バイトの種別+データバイト数+データ の形式で
多種類の情報が転送されています。
とくにこの中で  「35H(53) 01H xxH」 のフォーマットの部分がこのDHCPパケット
の種別をあらわしていて、ここでパケットを区別します。
xxHの部分の代表的なものには下記表のようなものがあります。


xxH 名称 意味内容
01 DHCP DISCOVER Discoverパケットの指定
02 DHCP OFFER Offerパケットの指定
03 DHCP REQUEST Requestパケットの指定
04 DHCP DECLINE
05 DHCP PACK ACKパケットの指定
06 DHCP PNAK NACKパケットの指定
07 DHCP RELEASE Releaseパケットの指定
08 DHCP INFRM



このベンダー仕様情報で転送される情報の詳細は下記RFCを参考にして下さい。

   ★ RFC Resourcebook
     このページの一覧から BOOTP/DHCP options を選択します。





        目次に戻る