ルータって何?


ルータは、ネットワーク(例えばAさん宅やBさん宅といった単位)にて、そのデータの出入り口に位置し、データをネットワーク内外へ配送する機能を提供している機器です。同一ネットワーク内の他機器を代表してグローバルIPを名乗り、インターネットの世界に面と向かい合っている機器ということになります。
そういう機器が通信経路を網の目のように伸ばし、つながってインターネットを構築しています。


網の目


さて、話を戻します。Bさん宅のパソコンからAさん宅のパソコンにどうやってデータを送るかでしたね。実は、前もってあることをしてないとデータは送れません。
一つはAさん宅のルータに「○番ポートにデータが着いたら、パソコンAに送る」という設定をするということです。ここで初めて「ポート」という言葉がでてきましたが、ポートはIPアドレスの付いた機器に論理的設けられた通信窓口のことで、0~65535の番号で表します。IPアドレスの補助アドレスと考えるとよいかも知れません。通常、機器上で動作しているアプリケーションに一つないし複数のポートが割り当てられ、その結果、複数のアプリケーションが同時に通信を使うということを可能にしています。ルータの場合、このポートを利用して、自分の配下にある複数の機器の通信を実現しています。前述の通り、「○
番ポートにデータが着いたら、パソコンAに送る」という設定をすることで実現できます。このルータの機能をIPマスカレードまたは、NAPT(Network Address and Port Translation)といいます。

もう一つ事前に必要なことがあります。BさんがAさん宅のグローバルIPアドレスと、Aさん宅のパソコンAに対応するポートを知っておくということです。

では、実際にデータがどのように運ばれていくか見ていきましょう。


まずBさん宅のパソコンから出発したデータは、Bさん宅のルータに到着します。これはBさん宅のパソコンに経路情報(ルーティングテーブル)というものがあり、Aさん宅のIPアドレスを指定してデータを送り出した場合、データをルータへ送るように設定されているためです。では、そのBさん宅パソコンのルーティングテーブルを見てみましょう。


ルーティングテーブル


データを送る際にこの表を行単位でチェックされます。「ネットワーク宛先」を「ネットマスク」でマスクして算出されるアドレスと、送り先IPアドレスを「ネットマスク」でマスクして算出されるIPアドレスが一致した場合、その行の「ゲートウェイ」へデータを送る、という書式になっています。
いきなり”「ネットマスク」でマスク”と言われてもわかりませんね。「ネットマスク」とはその名の通り、何かを覆い隠す「マスク」をイメージしていただければいいです。そして、IPアドレスって何?で書きましたが、IPアドレスは4つの数字1つ1つが8ビット、つまり0か1かの情報が8つ集まってできているということも思い出してください。ここで、Aさん宅のIPアドレスを「255.255.255.0」でマスクしてみましょう。


ネットマスク


「123.45.67.0」というのがマスクした結果のアドレスです。ネットマスクのビットが1の部分はマスクをかける対象アドレスのビットがそのまま見え、ネットマスクのビットが0の部分は強制的に0になるようなイメージです。
このようにアドレスをチェックした結果、テーブル上の一行が選択され、データの送出さきとなる「ゲートウェイ」が決定します。
しかし、計算すればわかりますが、どんなアドレスでも0.0.0.0の行と一致します。実は0.0.0.0は特別で、その他に一致するものがない場合は採用する、という特別ルールがあります。Aさん宅のIPアドレスは0.0.0.0にのみマッチするので、そのルールに当てはまり、0.0.0.0の行が採用されます。結果、Gatewayは192.168.0.1となり、ルータへ送られることになります。(この0.0.0.0に対応するGatewayをデフォルトゲートウェイといいます。)


こうしてルータに到着したデータは、今度はルータに自身に設定されている経路情報に従って、次のところへ送られます。大抵の場合、どこか別のルータになります。このようにどんどん経路を伝わっていき最終的にAさん宅のルータに到着します。


ここでようやく「ポート」の出番です。Aさん宅のルータは到着したデータのポート番号からパソコンAへ送るべきデータと判断し、パソコンAへデータを送ります。これは前述の「○番ポートにデータが着いたら、パソコンAに送る」という事前準備のおかげです。


さて、ここでたとえばAさんからBさんへ返信をしたい場合、どうすればよいでしょうか。大きく二通りの方法があります。

  1. Bさん宅からAさん宅にデータを送った方法とまったく同じ方法でAさん宅からBさん宅へ送る方法。
  2. Bさん宅からAさん宅に送られたデータの経路をそのまま維持し、Aさん宅からBさん宅へ送る方法。

前者の説明は不要ですね。これまで説明してきた内容です。

では後者、経路をそのまま維持し送る方法について説明します。


BさんからAさんに届いたデータには実は送信元情報としてBさん宅ルータのIPアドレスとデータが送られたポート番号が入っています。そこでAさん宅のパソコンは、このIPアドレスとポート番号を送り先にしてデータを送り出します。送り出されたデータはこれまでの説明の通り、どんどん経路を伝わっていき最終的にBさん宅のルータに届くことになります。あとはルータからパソコンへデータを送ればよいのですが、パソコン宛であるという情報はデータにはありません。では、どうやって送られるのでしょうか。


実は、この返信の元となった通信、つまりBさん宅パソコンからAさんへデータを送ったときに、Bさん宅のルータには返信を受けるための準備として、ポートとパソコンを結びつける情報が記憶されます。返信は、この記憶したポートに届くことになり、パソコンに宛てであると判断され、Bさん宅のパソコンに届くことになります。
(記憶された経路は通信終了を明示する、または、タイムアウトによって削除されます。)

ここまでの送信~受信~返信~受信を図にしました。整理してみてください。
まずは送信~受信です。


送信~受信


そして、返信~受信です。


返信~受信


一点、重要なことをいい忘れていました。今回の場合、通信が始まるきっかけは何だったでしょうか。受信でしょうか?送信でしょうか?そう、送信です。受信から始まる通信というのはありえません。
送信はいつでも好きなときにできるということになります。しかし、受信に関してはそうはいきません。いつ受信できるかは分からないからです。ではどうしているかというと、送信側と取り決めたポートにデータが到着するのを「ずっと待つ」、ということをしています。このような取り決めをプロトコルといいます。
次はこのプロトコルについて説明しましょう。>>プロトコルって何?

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>