ゼミ中 〜 BOOTP(DHCP)

過去にはBOOTPと呼ばれていたDHCPのお話。現状でもキャプチャツールWireshark(ethereal)でフィルタを行う場合には、DHCPではなくBOOTPと入力しないとフィルタリングできない。

DHCPとは新しくネットワークに接続したホストに対してIPアドレスを貸し出す仕組みである。

新しくネットワークに接続したホストがネットワークに対してDHCP Discoverのリミテッド・ブロードキャストを行う。リミテッド・ブロードキャストはルータを超えないので、同一のネットワークセグメントにしか有効にならない。

そのネットワーク内にDHCPサーバが存在する場合、DHCP Offerによってクライアントに割り当てる予定のIPアドレスの打診を行う。実はこのサーバの応答では、ユニキャストとブロードキャストのどちらかをRFCに従って返さなければならない。

If the ‘giaddr’
field is zero and the ‘ciaddr’ field is nonzero, then the server
unicasts DHCPOFFER and DHCPACK messages to the address in ‘ciaddr’.
If ‘giaddr’ is zero and ‘ciaddr’ is zero, and the broadcast bit is
set, then the server broadcasts DHCPOFFER and DHCPACK messages to
0xffffffff. If the broadcast bit is not set and ‘giaddr’ is zero and
‘ciaddr’ is zero, then the server unicasts DHCPOFFER and DHCPACK
messages to the client’s hardware address and ‘yiaddr’ address. In
all cases, when ‘giaddr’ is zero, the server broadcasts any DHCPNAK
messages to 0xffffffff.

用語については

ciaddr 4 Client IP address; only filled in if client is in
BOUND, RENEW or REBINDING state and can respond
to ARP requests.
yiaddr 4 ‘your’ (client) IP address.
siaddr 4 IP address of next server to use in bootstrap;
returned in DHCPOFFER, DHCPACK by server.
giaddr 4 Relay agent IP address, used in booting via a
relay agent.

をRFC 2131 より引用する。

リレーエージェントのIPアドレス(giaddr)が0で、クライアントIPアドレス(ciaddr)が非0であった場合にはサーバからのDHCP OfferとDHCP ACKはユニキャストで行い、リレーエージェントもクライアントアドレスも0で、かつブロードキャストビットが設定してある場合はブロードキャストで返信する。もし、ブロードキャストビットが0で、リレーエージェントもクライアントアドレスも0だった場合はユニキャストで返信するが、’your’IPアドレス(yiaddr)を宛先アドレスとする。

ということで、DHCP Offerの際には、”まだクライアントホストではIPアドレスが割り当てられていない”のにも関わらず、IPアドレスを指定して送信を行う。その際にはサーバでは静的にクライアントのIPアドレスとMACアドレスを割り当ててから送信を行うことによって、UDPのSocketの仕組みそのままで送信することが可能になる。

受信端末ではIPアドレスフィルタリングを行うため、通常のUDP SocketではDHCP Offerを受信できない。そのため生ソケット(raw socket)を利用してMACアドレスが正しいIPデータグラムの受信を全て行う。この場合プロミスキャスモード(MACアドレスが何であろうと受信するモード)に入る必要はない。受信フレームの宛先MACアドレスには正しい値が入っているからである。

DHCP Offerでは貸し出したいIPアドレスに加えてリース期間やサブネット、ネームサーバ(DNSのため)やデフォルトゲートウェイのアドレスが入っている。もちろん、DHCPの仕組みを用いなくてもこれらのアドレスは取得可能だが、DHCPで取得したほうが楽だ。

DHCP Offerの内容に納得できたらDHCP Requestによってクライントが希望するIPアドレスの要求を行う。このDHCP Offerに関しては、DHCPサーバが2台存在する場合には、2つのDHCP Offerが返ってくることがありうる。そのうち、クライアントは使いたい要求を選び、選んだほうのDHCPサーバに対してDHCP Requestを返信することを行う。

その要求が受け入れられれば、ユニキャストかブロードキャストでDHCP Ackが返信され、IPアドレスの利用にかかる。IPアドレスを利用する前に、見せArpを行い、IPアドレスの重複確認にて重複していないようであれば、IPアドレスの割り当てを行ってからARPキャッシュの更新を行う。

そうすることでホストはIPアドレスを取得することができる。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>