Monthly Archives: 7月 2008

DHCP雑談

なぜ、一般人までもインターネットを簡単に利用することができるのか、という課題をいつも考えている。

パケットネットワークの効率の良さやADSLの普及を原因とする安価さ。TCPによるフロー制御と輻輳制御の絶妙なバランスとアプリケーションに対するインターフェースの簡単さによる開発者が簡単に開発できること。

その理由のうち、自動設定という要因は大きい。

利用者は基本的にインターネット接続に対して恐れを抱いている。この前にもPCにかなり詳しい人間からインターネットを利用したいのだが、どうすればいい?、という相談を受けた。

彼に対して、IPの説明、LANの説明をしたのだがイマイチ反応が良くないので、こう答えることにした。

君の家では既に家族の誰かがインターネットをやっていて、自分用のPCでもインターネットをやりたいわけだ。

それなら家族の誰かが利用しているPCに電話線に良く似た線が刺さっていないか?

その線はどこに繋がっている?

その繋がっている機器には電話線のモジュールのような穴がたくさんあるだろう。

穴が開いているということは、その穴にLANケーブルを挿して、自分の部屋のPCのLAN端子に指せば、とりあえずインターネットはできるだろう。

とりあえず電気屋に行って自分の部屋までの距離を満たすLANケーブルを買ってつなげてみろ。

その会話だけで、彼はインターネットを利用できるようになった。これは、DHCPの仕組みのおかげによるものだ。そして彼はIPの仕組みを知らずにWebアクセスを楽しんでいる。この簡単な説明をする前に実はIPやLANの仕組みについて小1時間の話をしてしまったのだが、その知識が使われることはなかったということになる。

ネットワークの導入を始める際、ネットワークに接続することが最も難しいと考えている。なぜなら、ネットワークに接続しなければ、ネットワークを通じてネットワークの接続方法の良い説明を得ることができないからだ。だからこそ、ネットワークの仕組みは自動設定できることが重要である。IPv6でも、この自動設定は練り上げられ、簡単に行われるようになっている。

DHCP自体は現状では知ることも少ないだろうが、目を向けてもらいたい素晴らしい技術である。

ゼミ中 〜 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アドレスを取得することができる。

ゼミ中 〜 DNS

時間が作れたので、かなり昔のことになってしまったゼミの、内容を書く。

IPアドレスはそのままでは覚えることが困難なので、ドメインを使う。DNSを利用することで、ドメインからIPアドレスを引くということが出来る。

DNSは世界にルートサーバなるものが存在していて、彼らから国別のドメイン、一般向けドメインに分かれている。ルートサーバの直下にあるドメイン群のことをトップレベルドメイン(TLD)と呼び、特に国別トップレベルドメインの方をccTLD(country code)、一般向けトップレベルドメインの方をgTLD(generic)と呼ぶ。

DNSはトップレベルドメインは中央集権的に管理を行うが、それ以下の各組織ごとのドメインに関しては、各組織に管理を任せるため、分散的であるという言い方をすることがある。

基本的にDNSはドメインからIPアドレスを引く行為を中心に行うが、IPアドレスからドメインを引くこともできる。このことを逆引きと呼び、通常のドメインからIPアドレスを引く行為のことは正引きと呼んだりする。

逆引きの方法は、そのままDNSの仕組みを利用する。例えば1.2.3.4というアドレスであれば、4.3.2.1.in-addr.arpa.というドメインのptrを引こうとする。なぜ逆になっているのかについては、IPアドレスにおいてはクラスA、クラスBというネットワークIDの管理分類があるように、若い番号の方が管理団体の方にまとめて割り当てられており、DNSの仕組み上arpa, in-addr, 4, 3, 2, 1…の順にアクセスをしていくためである。よって4.in-addr.arpaというサーバが存在するし、3.4.in-addr.arpaというサーバも存在するはずである。

逆引きについては管理者のためという要素が強い。また、サーバにアクセスする際に、アクセスできる久アイアントをドメインで縛りたい場合、サーバがアクセスしてきたIPアドレスに対して逆引きを行うこともある。

成りすまし防止のために、サーバ側にてアクセスしてきたIPアドレスに対して逆引きしてから正引きをやることがあるらしいが、効果があるのか不明。

過去にヒラリークリントン氏のWebサイトが改ざんされたことがあるらしいが、その原因がDNSだったとか。
DNSに対する攻撃の話題も近年まで行われているようなので、注意するべし。

So-net、アドネットワーク事業に進出

So-net、アドネットワーク事業に進出:マーケティング – CNET Japan

ほんまかいな。

広告ネットワーク目当てだそうで。

やっぱSONYやなー