![]() |
図1 |
では,相手のマシンを特定するための“あて名”とは,具体的にはどのようなものなのだろうか。これが今回のメイン・テーマである。実は,各マシンはネットワーク上の他のマシンと区別するために,3つの識別子をもっている。コンピュータ名,IPアドレス,MACアドレス──である。
前回も説明したが,自分のマシンのコンピュータ名を知りたければ,Windows95 であれば,[コントロールパネル]の[ネットワーク]を選び,[ユーザー情報]タブを選べばよい。また,同じ[ネットワーク]の[ネットワークの設定]タブで[TCP/IP]のプロパティを見ると,[IP アドレス]タブのところで,自分のIPアドレスを発見できる。しかし,DHCP利用時は「IP アドレスを自動的に取得」ボタンがマークされ,IPアドレスは明示的に示されていない。この場合は,マシン立ち上げ時にDHCPサーバーと呼ぶサーバーから,動的にIPアドレスを振ってもらう。振ってもらったIPアドレスを知るには,winipcfgを実行すればよい。
自分のマシンのMACアドレスを知るには,Windows95であれば,winipcfg.exe を起動する。ここでMACアドレスが「アダプタアドレス」と表現されているのは,MACアドレスは各NIC,つまりLAN アダプタが備えているものだからだ。試しにNICを取り替えてwinipcfg を起動してみると,MACアドレスは違うものになる。
ここで,不思議に思わないだろうか。1つのマシンを他のマシンと区別するためなら,識別子は1つあれば十分なはずだ。なぜ3つもあるのだろう。まあ,コンピュータ名の必要性は,理解しやすい。MACアドレスにしてもIPアドレスにしても数字の羅列であるため,覚えにくい。接続したい相手を明示的に表現する場合は,例えば“Soumu_Server”だとか,“Kobara_Win95”といった名前を使ったほうが分かりやすい。
基本は唯一無二のMACアドレス
![]() |
図2 |
MACアドレスは,他のマシンと異なるアドレスを振るといったアドレスの登録や維持を,ユーザーが意識して行う必要がない。実際にアプリケーション開発やシステム設計において,MACアドレスを意識している人はいないだろう。だが,このMACアドレスこそ,LANでのデータ転送の基礎となるものである。図1で示した“Aから”や“Cあて”は,このMACアドレスを用いて表現するからだ。具体的には,Ethernet上を流れるデータは,図2[拡大表示]のような構成をしている。フレームのタイプによって異なる部分はあるが,(1)あて先MACアドレス,(2)送信元MACアドレス,(3)データ,の順番に並んでいるということが分かればよい。
MACアドレスを基に中継するブリッジ
図1は,1本のLANに接続されたマシン間のデータのやり取りのみを取り上げている。ただ,1つのLANは物理的な距離の制限や台数の制限などがあるため,ある程度の規模になると,複数のLANを接続する必要が出てくる。2つのLANをつなぐ機器,つまりLAN間接続装置は,大きく分けて3つある。リピータ,ブリッジ,ルーターである。リピータは電気信号を中継するものであり,データの単位であるフレームは認識しない。単に物理的な距離を延長するためや,ケーブル配線上の自由度を高めるために使用する。リピータで接続したLAN同士は,合わせて図1で示す1本のLANだと考えてよい。“ハブ”はリピータの応用製品,マルチポート・リピータである。つまり,あるマシンから送信されたデータは,ハブの他のポートすべてに送られる。
![]() |
図3 |
しかし,接続するLANの数が増えたり,WANに接続したりすると,ブリッジだけでは問題が起きてくる。極端な例として,インターネットがブリッジだけで構成されている状態を考えてみてほしい。自社とインターネットを接続する部分のブリッジのテーブルは,世の中のすべてのマシンのMACアドレスによって随時更新される。また,世の中のどこかのマシンが出したブロードキャスト・データは,すべて社内に届いてしまう。
そこでIPアドレスの登場だ。一言でいうとIPアドレスは,ネットワークを複数に分け,そのネットワーク間の中継を効率的に行うためのものである。そしてIPアドレスに基づく中継を行うLAN間接続機器がルーターだ。
![]() |
図4 |
ARPでIPアドレスからMACアドレスを調べる
IPを利用しているネットワークでは,基本的には1つのMACアドレスに1つのIPアドレスがマッチングされている。そのため,図1でマシンAがCあてに送ったデータ(Ethernetフレーム)では,あて先MACアドレスにはマシンCのMACアドレスが,そのデータ内のあて先IPアドレスにはマシンCのIPアドレスが入っている。ユーザーはMACアドレスを意識することはほとんどないが,実は,接続したい相手をコンピュータ名で指定すると,最終的にはその相手のMACアドレスを調べ,そこにデータを送る。まずは“名前解決”と呼ぶもので,そのコンピュータ名をもつマシンのIPアドレスを調べ,さらにARPと呼ぶプロトコルで,そのIPアドレスに対応するMACアドレスを調べるのである。名前解決に関しては次回で詳しく解説するので,ここでは省略する。
ARPで,同じネットワークの上にある相手マシンのMACアドレスを取得する仕組みは以下のようになっている。
例えばIPアドレスがccccであるマシンCにデータを送る場合,ccccに対応するMACアドレスを調べる。各マシンは,最近データをやり取りした相手のIPアドレスとMACアドレスの“組”を,ARPテーブルとして保持している。MS-DOSプロンプトで
arp - a
と打ってみてほしい。その時に保持しているARPテーブルの一覧が出るはずだ。もしccccがARPテーブルになければ,「ccccというIPアドレスのMACアドレスを教えてください」というARPリクエストをブロードキャストする。するとマシンC が「IP アドレスがccccである私のMACアドレスはCCCCです」と答えを返す。実験をしてみよう。まず隣のマシンのIPとMACアドレスを調べる。ARPテーブルにそれらのデータがないことを確認してから,そのIPアドレスにpingをかけ,ARPテーブルを確認すると,隣のマシンのIPアドレスとMACアドレスの組が登録されていることがわかる。
![]() |
図5 |
図5bでマシンCがマシンDにデータを送ろうと思ったとき,「ddddというIPアドレスのMACアドレスを教えてください」というARPリクエストをブロードキャストしても,そのリクエストはマシンDまで届かず,誰もARPリクエストに答えてくれないからだ。そこで,マシンCでの動作は,以下のようになる。
(1)マシンDのIPアドレス「dddd 」が自分と同じネットワーク内かどうかを判断する。(2)同じネットワークであれば,ARPリクエストなどで「dddd 」のMACアドレス「DDDD 」を調べ,「DDDD」あてにデータを送信する。(2')(2)で異なるネットワークであれば,そのネットワークにデータを送ってくれるルーターのIPアドレス「gggg」を自分のルーティング・テーブルで知る。(3)「gggg 」のMACアドレス「GGGG」をARPリクエストなどで調べ,「GGGG」をあて先MACアドレス,「dddd」をあて先IPアドレスとしたデータを送信する。
それが図5b の状態である。このデータを受け取ったルーターは,自分のルーティング・テーブルから「dddd 」が右側のLANにあることを知り,ARPリクエストなどで「dddd 」のMACアドレス「DDDD」を調べ,送信する。もちろんマシンDがさらに先のネットワークにある場合は,その中継を行ってくれるルーターに対してデータを送信する。図5bで分かるように,ルーターは中継においてMACアドレスの変換を行う。
次回は,IPアドレスの補足説明と,第1回で解説したpingを使って,実際に名前解決を実感してみよう。
この連載は,日経オープンシステムに連載した「新人SEのためのネットワーク入門」の内容をもとに,Webコンテンツとして再編集したものです。なお,日経オープンシステム別冊「新人SEのためのネットワーク入門」では,本記事の内容を詳しく説明するほか,実践編としてトラフィックの把握やネットワーク設計の実際などの内容もご紹介しております。内容のご確認とご購入は,http://coin.nikkeibp.co.jp/coin/nos/se/でお願いいたします。 |