DHCP
読み:ディーエイチスィーピー
外語:DHCP: Dynamic Host Configuration Protocol
IPネットワーク
において、
IPv4アドレス
の動的割り当てを含む各種のネットワークに関する設定を自動で行なうための
通信プロトコル
。
目次
概要
特徴
利点
限界
BOOTPのとの差異
VLAN
技術
パケット構造
options
IPアドレスの取得
手順
DHCP情報の要求(DISCOVER)
DHCP情報の提供(OFFER)
DHCP情報の受け入れ(REQUEST)
DHCP情報の貸し出し(ACK)
IPアドレスの更新
IPアドレスの破棄
概要
IPv4
用が
RFC 2131
と
RFC 2132
で定義される。
ポート番号
は、クライアントには67/udp、サーバーには68/udpが用いられる。
IPv6
用の
DHCPv6
は異なるプロトコルである。
このDHCP以前にも、動的にホストの設定(IPアドレスを含む)を解決するためのプロトコルが存在した。
IPアドレスと追加の情報を得られる関連するプロトコルに、次のようなものがある。
RARP
BOOTP
APIPA
IPCP
(
PPP
)
例えば、
RARP
を用いると、MACアドレスからIPアドレスを得ることができる。
ICMP
でも、IPアドレスこそ得られないものの「Redirect」(type=5)メッセージでルーターの存在を、「Address Mask Request/Reply」(type=17/18)メッセージでネットワークマスクを、「Information Request/Reply」(type=15/16)メッセージでその他の情報を、それぞれ通知可能である。
そして
BOOTP
はコンフィグレーション情報の転送機構を提供した。IPアドレスに加え、様々な情報を通知できる。
そしてDHCPは、このうち拡張性が高いBOOTPの拡張として作られたものの一つである。
特徴
利点
DHCPサーバーに、クライアントに割り当てるIPアドレスの範囲などを設定しておくことで、その中から空いているアドレスを動的にクライアントへ割り当てることができる。
また、
DNSサーバー
、
デフォルトルート
などの情報をクライアントに与えることも出来る。
MACアドレスでホストを識別することができるので、あるホストに常に決まったIPアドレスを設定することも可能である。そのため、サーバーに対してDHCPでネットワーク設定を行なうこともできる。
限界
ブロードキャスト
で通信するため、DHCPサーバーとDHCPクライアントは同一ネットワークになければならない。ただし、ルーターにDHCPリレーの機能を設定すると、別ネットワークのクライアントに対してIPアドレスを与えることができる。
複数のDHCPサーバーを置くことはできるが、それぞれのサーバーがリースするIPアドレスの範囲が重なってはならない。そのため、DHCPサーバーの冗長化は困難である。ただ、市販のソフトでは、冗長化を実現しているものもある。
BOOTPのとの差異
BOOTPとDHCPには二つの大きな相違がある。
BOOTPは
電子計算機
の起動時にのみネットワーク設定を行なうため、その電子計算機を停止するまでそのIPアドレスを使い続けるのに対し、DHCPでは一定時間(リース期間と呼ばれる)アドレスを付与し、それ以降は別のクライアントに対し同じアドレスを再割り当てすることができることである。
もう一つは、DHCPはIPネットワークに必要な全ての
パラメーター
を提供する機能を有することである。
VLAN
VLANトランキング
の状態でDHCPサーバーに接続すると、物理的には1台のDHCPサーバーで、複数のVLANでDHCP運用が可能である。
技術
パケット構造
DHCPはBOOTPの拡張であり、メッセージフォーマット等はほぼそのままである。BOOTPクライアントは、一切の変更無く
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はパケットが大きい。
options
DHCPはBOOTPとの互換のため、必要な情報は全てオプションによって渡される。
BOOTPではベンダー拡張という扱いで、オプションは補足程度の扱いでしかないためオプション番号欄は8ビットしかない。DHCPで多用したために使える番号の残りも少なくなっている。これを教訓に、DHCPv6はオプション番号欄を16ビットとした。従ってDHCPとDHCPv6ではオプション番号に互換性がない。
オプション番号の浪費を防ぐため、オプション番号を一つだけ確保してオプション内をサブオプションで区切る実装もあるが、データ長も8ビットしかないので多くのデータをまとめることはできない。
以下は、BOOTP用のものも含めて全て記載する。RFC番号の記載がないものは全て
RFC 2132
で規定されている。
0 ‐ Pad ‐ なし
1 ‐ Subnet Mask ‐ サブネットマスク
2 ‐ Time Offset ‐ UTCからのオフセット秒 (100と101で非推奨になった)
3 ‐ Router ‐ ルーターのアドレス
4 ‐ Time Server ‐ タイムサーバーのアドレス
5 ‐ Name Server ‐ IEN-116サーバーのアドレス
6 ‐ Domain Server ‐ DNSサーバーのアドレス
7 ‐ Log Server ‐ ロギングサーバーのアドレス
8 ‐ Quotes Server ‐ 引用サーバーのアドレス
9 ‐ LPR Server ‐
プリントサーバー
のアドレス
10 ‐ Impress Server ‐ インプレスサーバーのアドレス
11 ‐ RLP Server ‐ RLPサーバーのアドレス
12 ‐ Hostname ‐ ホスト名の文字列
13 ‐ Boot File Size ‐ 512オクテットブロックでのブートファイルのサイズ
14 ‐ Merit Dump File ‐ クライアントクラッシュ時のコアファイルのパス名
15 ‐ Domain Name ‐ クライアントのDNSドメイン名
16 ‐ Swap Server ‐ スワップサーバーのアドレス
17 ‐ Root Path ‐ ルートディスクのパス名
18 ‐ Extension File ‐ 追加のBOOTP情報のパス名
19 ‐ Forward On/Off ‐
IPフォワーディング
の有効/無効
20 ‐ SrcRte On/Off ‐
ソースルーティング
の有効/無効
21 ‐ Policy Filter ‐ ルーティングポリシーフィルター
22 ‐ Max DG Assembly ‐ データグラム再アセンブリの最大サイズ
23 ‐ Default IP TTL ‐ IP
TTL
のデフォルト
24 ‐ MTU Timeout ‐ MTUエージングタイムアウトのパス
25 ‐ MTU Plateau ‐ MTU Plateau テーブルのパス
26 ‐ MTU Interface ‐ インターフェイスのMTUサイズ
27 ‐ MTU Subnet ‐ すべてのサブネットがローカル
28 ‐ Broadcast Address ‐
ブロードキャストアドレス
29 ‐ Mask Discovery ‐ マスクディスカバリーの実行
30 ‐ Mask Supplier ‐ Provide Mask to Others
31 ‐ Router Discovery ‐ ルーターディスカバリーの実行
32 ‐ Router Request ‐ ルーター要請アドレス
33 ‐ Static Route ‐ スタティックルーティングテーブル
34 ‐ Trailers ‐ トレーラーのカプセル化
35 ‐ ARP Timeout ‐ ARPキャッシュのタイムアウト
36 ‐ Ethernet ‐ Ethernetのカプセル化
37 ‐ Default TCP TTL ‐ TCP
TTL
のデフォルト
38 ‐ Keepalive Time ‐ TCPキープアライブ間隔
39 ‐ Keepalive Data ‐ TCPキープアライブ・ガーベッジ
40 ‐ NIS Domain ‐ NISドメイン名
41 ‐ NIS Servers ‐ NISサーバーアドレス
42 ‐ NTP Servers ‐ NTPサーバーアドレス
43 ‐ Vendor Specific ‐ ベンダー固有情報
44 ‐ NETBIOS Name Srv ‐ NetBIOSネームサーバー
45 ‐ NETBIOS Dist Srv ‐ NetBIOSデータグラムサーバー
46 ‐ NETBIOS Node Type ‐ NetBIOSノードタイプ
47 ‐ NETBIOS Scope ‐ NetBIOSスコープ
48 ‐ X Window Font ‐ X Window Font Server
49 ‐ X Window Manager ‐ X Window ディスプレイマネージャー
50 ‐ Address Request ‐ 要求されたIPアドレス
51 ‐ Address Time ‐ IPアドレスのリース時間
52 ‐ Overload ‐ オーバーロード "sname" または "file"
53 ‐ DHCP Msg Type ‐ DHCPメッセージタイプ
54 ‐ DHCP Server Id ‐ DHCPサーバーのID
55 ‐ Parameter List ‐ パラメーター要求リスト
56 ‐ DHCP Message ‐ DHCPエラーメッセージ
57 ‐ DHCP Max Msg Size ‐ DHCP最大メッセージサイズ
58 ‐ Renewal Time ‐ DHCPリニューアル(T1)時間
59 ‐ Rebinding Time ‐ DHCPリバインド(T2)時間
60 ‐ Class Id ‐ クラスID
61 ‐ Client Id ‐ クライアントID
62 ‐ NetWare/IP Domain ‐ NetWare/IP ドメイン名 (
RFC 2242
)
63 ‐ NetWare/IP Option ‐ NetWare/IP サブオプション (
RFC 2242
)
64 ‐ NIS-Domain-Name ‐ NIS+ v3 クライアントドメイン名
65 ‐ NIS-Server-Addr ‐ NIS+ v3 サーバーアドレス
66 ‐ Server-Name ‐ TFTPサーバー名
67 ‐ Bootfile-Name ‐ ブートファイル名
68 ‐ Home-Agent-Addrs ‐ ホームエージェントアドレス
69 ‐ SMTP-Server ‐ SMTPサーバーアドレス
70 ‐ POP3-Server ‐ POP3サーバーアドレス
71 ‐ NNTP-Server ‐ NNTPサーバーアドレス
72 ‐ WWW-Server ‐ WWWサーバーアドレス
73 ‐ Finger-Server ‐ Fingerサーバーアドレス
74 ‐ IRC-Server ‐ IRCサーバーアドレス
75 ‐ StreetTalk-Server ‐ StreetTalkサーバーアドレス
76 ‐ STDA-Server ‐ STDAサーバーアドレス
77 ‐ User-Class ‐ ユーザークラス情報 (
RFC 3004
)
78 ‐ Directory Agent ‐ ディレクトリエージェント情報 (
RFC 2610
)
79 ‐ Service Scope ‐ サービスロケーションエージェントスコープ (
RFC 2610
)
80 ‐ Rapid Commit ‐ ラピッドコミット (
RFC 4039
)
81 ‐ Client FQDN ‐ 完全修飾ドメイン名 (
RFC 4702
)
82 ‐ Relay Agent Information ‐ リレーエージェント Information (
RFC 3046
)
83 ‐ iSNS ‐ インターネットストレージネームサービス (
RFC 4174
)
84 ‐ REMOVED/未割り当て (
RFC 3679
)
85 ‐ NDS Servers ‐ Novellディレクトリサービス (
RFC 2241
)
86 ‐ NDS Tree Name ‐ Novellディレクトリサービス (
RFC 2241
)
87 ‐ NDS Context ‐ Novellディレクトリサービス (
RFC 2241
)
88 ‐ BCMCSコントローラー ドメイン名リスト (
RFC 4280
)
89 ‐ BCMCSコントローラー IPv4アドレスオプション (
RFC 4280
)
90 ‐ Authentication ‐ 認証 (
RFC 3118
)
91 ‐ クライアントの最新アクセス時刻 (
RFC 4388
)
92 ‐ 関連するIPアドレス (
RFC 4388
)
93 ‐ Client System ‐ クライアントシステムアーキテクチャー (
RFC 4578
)
94 ‐ Client NDI ‐ クライアントネットワークデバイスインターフェイス (
RFC 4578
)
95 ‐
LDAP
‐ Lightweight Directory Access Protocol (
RFC 3679
)
96 ‐ REMOVED/未割り当て (
RFC 3679
)
97 ‐ UUID/GUID ‐ UUID/ GUIDベースのクライアント識別子 (
RFC 4578
)
98 ‐ User-Auth ‐ Open Groupのユーザー認証 (
RFC 2485
)
99 ‐ GEOCONF_CIVIC (
RFC 4776
)
100 ‐ PCode ‐ IEEE 1003.1 TZ 文字列 (
RFC 4833
)
101 ‐ TCode ‐ TZデータベースへの参照 (
RFC 4833
)
102-107 ‐ REMOVED/未割り当て (
RFC 3679
)
108 ‐ REMOVED/未割り当て (
RFC 3679
)
109 ‐ 未割り当て (
RFC 3679
)
110 ‐ REMOVED/未割り当て (
RFC 3679
)
111 ‐ 未割り当て (
RFC 3679
)
112 ‐ Netinfo Address ‐ NetInfo親サーバーアドレス (
RFC 3679
)
113 ‐ Netinfo Tag ‐ NetInfo親サーバータグ (
RFC 3679
)
114 ‐ URL ‐ URL (
RFC 3679
)
115 ‐ REMOVED/未割り当て (
RFC 3679
)
116 ‐ Auto-Config ‐ DHCP自動設定 (
RFC 2563
)
117 ‐ Name Service Search ‐ ネームサービス検索 (
RFC 2937
)
118 ‐ Subnet Selection Option ‐ サブネット選択オプション (
RFC 3011
)
119 ‐ Domain Search ‐ DNSドメインサーチリスト (
RFC 3397
)
120 ‐ SIP Servers DHCP Option ‐ SIPサーバーのDHCPオプション (
RFC 3361
)
121 ‐ Classless Static Route Option ‐ クラスレス スタティックルートのオプション (
RFC 3442
)
122 ‐ CCC ‐ CableLabsのクライアント設定 (
RFC 3495
)
123 ‐ GeoConf Option ‐ GeoConfオプション (
RFC 6225
)
124 ‐ V-I Vendor Class ‐ ベンダー識別ベンダークラス (
RFC 3925
)
125 ‐ V-I Vendor-Specific Information ‐ ベンダー識別ベンダー固有情報 (
RFC 3925
)
126 ‐ REMOVED/未割り当て (
RFC 3679
)
127 ‐ REMOVED/未割り当て (
RFC 3679
)
128
PXE - 未定義(ベンダー固有) (
RFC 4578
)
Etherbootの署名 6バイト: E4:45:74:68:00:00
DOCSIS「フルセキュリティ」サーバーIPアドレス
TFTPサーバーIPアドレス (IP Phoneのソフトウェアのロード用)
129
PXE - 未定義(ベンダー固有) (
RFC 4578
)
カーネルオプション 可変長文字列
コールサーバー IPアドレス
130
PXE - 未定義(ベンダー固有) (
RFC 4578
)
Ethernetインターフェイス 可変長文字列
判別文字列 (ベンダー識別用)
131
PXE - 未定義(ベンダー固有) (
RFC 4578
)
リモート統計サーバーのIPアドレス
132
PXE - 未定義(ベンダー固有) (
RFC 4578
)
IEEE 802.1Q VLAN ID
133
PXE - 未定義(ベンダー固有) (
RFC 4578
)
IEEE 802.1D/p Layer 2 プライオリティ
134
PXE - 未定義(ベンダー固有) (
RFC 4578
)
VoIPシグナリングとメディアストリーム用Diffservコードポイント(DSCP)
135
PXE - 未定義(ベンダー固有) (
RFC 4578
)
HTTP Proxy for phone-specific applications
136 ‐ OPTION_PANA_AGENT (
RFC 5192
)
137 ‐ OPTION_V4_LOST (
RFC 5223
)
138 ‐ OPTION_CAPWAP_AC_V4 ‐ CAPWAPアクセスコントローラーアドレス (
RFC 5417
)
139 ‐ OPTION-IPv4_Address-MoS ‐ サブオプションのシリーズ (
RFC 5678
)
140 ‐ OPTION-IPv4_FQDN-MoS ‐ サブオプションのシリーズ (
RFC 5678
)
141 ‐ SIP UA Configuration Service Domains ‐ SIPユーザーエージェント設定用のドメイン名リスト (
RFC 6011
)
142 ‐ OPTION-IPv4_Address-ANDSF ‐ DHCPv4用のANDSF IPv4アドレスオプション (
RFC 6153
)
143 ‐ 未割り当て
144 ‐ GeoLoc ‐ 不確実性を伴う位置情報 (
RFC 6225
)
145 ‐ FORCERENEW_NONCE_CAPABLE (
RFC 6704
)
146 ‐ RDNSS Selection ‐ RDNSSを選択するための情報 (
RFC 6731
)
147-149 ‐ 未割り当て (
RFC 3942
)
150
FTPサーバーアドレス (
RFC 5859
)
Etherboot
GRUBの設定パス名
151 ‐ status-code ‐ ステータスコードと、ステータスを記述するオプションのNバイトのテクストメッセージ (
RFC 6926
)
152 ‐ base-time ‐ メッセージが送信された絶対時間(1970(昭和45)年1月1日から) (
RFC 6926
)
153 ‐ start-time-of-state ‐ クライアントが現在の状態に入ってからの秒数 (
RFC 6926
)
154 ‐ query-start-time ‐ クエリー開始の絶対時間(1970(昭和45)年1月1日から) (
RFC 6926
)
155 ‐ query-end-time ‐ クエリー完了の絶対時間(1970(昭和45)年1月1日から) (
RFC 6926
)
156 ‐ dhcp-state ‐ IPアドレスの状態 (
RFC 6926
)
157 ‐ data-source ‐ ローカル由来かリモートサーバー由来かの識別情報 (
RFC 6926
)
158 ‐ OPTION_V4_PCP_SERVER ‐ PCPサーバーのIPアドレスリスト (
RFC 7291
)
159-174 ‐ 未割り当て (
RFC 3942
)
175 ‐ Etherboot (暫定的な割り当て - 2005-06-23)
176 ‐ IP電話 (暫定的な割り当て - 2005-06-23)
177
Etherboot (暫定的な割り当て - 2005-06-23)
PacketCable と CableHome (replaced by 122)
178-207 ‐ 未割り当て (
RFC 3942
)
208 ‐ PXELINUX Magic ‐ マジック文字列 = F1:00:74:7E (
RFC 5071][Deprecated
)
209 ‐ Configuration File ‐ 設定ファイル (
RFC 5071
)
210 ‐ Path Prefix ‐ パスプレフィックスオプション (
RFC 5071
)
211 ‐ Reboot Time ‐ 再起動時間 (
RFC 5071
)
212 ‐ OPTION_6RD ‐ N/4 6rd BRアドレスとOPTION_6RD (
RFC 5969
)
213 ‐ OPTION_V4_ACCESS_DOMAIN ‐ アクセスネットワークドメイン名 (
RFC 5986
)
214-219 ‐ 未割り当て
220 ‐ Subnet Allocation Option ‐ サブネット割り当てオプション (
RFC 6656
)
221 ‐ 仮想サブネットの選択(VSS)オプション (
RFC 6607
)
222-223 ‐ 未割り当て (
RFC 3942
)
224-254 ‐ 予約 (私的使用)
255 ‐ End ‐ なし
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サーバーは応答をしない(できない)。
再検索