データ送信時の動作
目次
ネットワークの構成
ここでは、コンピュータがデータを送信するときにどのような判断、動作を行っているかについて見ていきたいと思います。
簡単のため、図のようなイーサネットネットワークを考えます。1台のルータによって、192.168.1.0/24 と 192.168.2.0/24 の2つのネットワークを接続しています。192.168.1.0/24 のネットワークにはA、B2台のPCが 192.168.2.0/24 のネットワークにはCの1台がつながっています。ルータの各インタフェース、PCのIPアドレス、MACアドレス、デフォルトゲートウェイは次の通りとします。
IPアドレス | MACアドレス | デフォルトGW | |
ルータ | 192.168.1.254/24 | R1 | - |
192.168.2.254/24 | R2 | - | |
A | 192.168.1.1/24 | A | 192.168.1.254 |
B | 192.168.1.2/24 | B | 192.168.1.254 |
C | 192.168.2.1/24 | C | 192.168.2.254 |
※ルータは各インタフェース(ポート)ごとにMACアドレスをもち、IPアドレスを設定します。また、各PCのデフォルトゲートウェイは通常、自分がつながっているルータのインタフェースのIPアドレスを設定します。
/24はサブネットマスクが先頭から24ビット「1」ということを示します。10進数では、255.255.255.0
同じネットワーク内の通信(直接ルーティング)
このようなネットワーク構成で同じネットワーク内の通信、つまりA→Bの通信を考えてみましょう。
まず、Aは何をするかというと自分のIPアドレスと通信相手のIPアドレスが同じネットワークにあるかどうかということを判断します。そのために、IPアドレスとサブネットマスクの論理積(AND)をとって比較します。
A | B | |
192. 168. 1. 1 | ⇒ | 192. 168. 1. 2 |
11000000.10101000.00000001.00000001 | 11000000.10101000.00000001.00000010 | |
11111111.11111111.11111111.00000000 | 11111111.11111111.11111111.00000000 | |
論理積 | 論理積 | |
11000000.10101000.00000001.00000000 | = | 11000000.10101000.00000001.00000000 |
同じネットワークであれば「直接通信」することができます。ネットワーク機器の解説のときにまた詳しく説明しますが、この直接通信ができる範囲のことを「ブロードキャストドメイン」と呼びます。これをそのまま日本語に直せばだいたい意味がわかるのですが、ブロードキャストが届く範囲でのみ直接通信を行うことができます。
これはなぜかというと、MACアドレスをもとめるためにARP(Address ResolutionProtocol)を使うのですが、このARPはブロードキャストを用いるからです。ARPについて詳しいことは今回は省略します。IPアドレスからMACアドレスを求めるためのものです。ルータはブロードキャストを通しませんので、ブロードキャストを分割するネットワーク機器です。
なぜMACアドレスが必要になるか?これはイーサネットのフレームを作るためあて先のMACアドレスを指定する必要があるからです。この例で通信相手が同じネットワークであると判断したコンピュータAは、ARPを行い、コンピュータBのIPアドレスからMACアドレスを求めます。そして、次のようなイーサネットフレームを作成し送信します。
あて先にコンピュータBのMACアドレス、送信元に自分(A)のMACアドレス、そしてタイプ部にはIPをしめす 0800(16進数) が入り、そのあとのIPヘッダには 192.168.1.1 から 192.168.1.2 へのデータという情報が入ります。IPヘッダには他にもさまざまな情報が入りますが、ここでは詳しく触れません。
このフレームを受け取ったBはあて先をみると、自分のMACアドレスが指定されているので、「これは自分あてのデータなんだな」と思って受信をするわけですね。もし、このネットワークにDというほかのコンピュータが接続されている場合でも、フレームは届くのですがあて先のMACアドレスが違うので破棄するわけです。
またこのような同じネットワーク内での通信を「直接ルーティング」と呼ぶ場合もあります。
異なるネットワークへの通信(間接ルーティング)
次に、異なるネットワークへの通信、つまりコンピュータAからコンピュータCへの通信を考えてみます。
最初は同じです。自分のIPアドレス、通信相手のIPアドレス、そしてサブネットマスクを使って同じネットワークに通信相手がいるかどうかをまず判断します。IPアドレスとサブネットマスクの論理積(AND)をとるわけですね。
A | C | |
192. 168. 1. 1 | ⇒ | 192. 168. 2. 1 |
11000000.10101000.00000001.00000001 | 11000000.10101000.00000010.00000001 | |
11111111.11111111.11111111.00000000 | 11111111.11111111.11111111.00000000 | |
論理積 | 論理積 | |
11000000.10101000.00000001.00000000 | ≠ | 11000000.10101000.00000010.00000000 |
違うネットワーク、つまり違うブロードキャストドメインへの通信ということがわかります。ブロードキャストドメインが異なると、直接の通信は行うことができません。これは、イーサネットフレームのあて先MACアドレスを求めるためのARPが届かなくなってしまうからです。
じゃ、どうすればいいか?
誰かにあて先のネットワークに対するデータを中継してもらえばいいわけですね。この中継を行うものがデフォルトゲートウェイ(ルータ)になるわけです。そうすると、自分と相手のIPアドレス、サブネットマスクから違うネットワークへの通信と判断したコンピュータAは、デフォルトゲートウェイにデータを送ってデータの中継をお願いするんですね。このとき、イーサネットのフレームは次のようになります。
あて先MACアドレスにルータのMACアドレスR1が入ります。ここがポイントですね。あとは送信元MACアドレスには自分のMACアドレスが入ります。そして、IPヘッダには 192.168.1.1 → 192.168.2.1 へのデータですよという情報が入ってきます。
デフォルトゲートウェイ(ルータ)は、この送られたフレームのIPヘッダの情報を見て、どこのネットワークにデータを中継すればいいのかということを選択していきます。これがルーティングと呼ばれている、ルータの大事な役割りです。
ルーティングについては、またあらためて詳しく説明をしていきます。ここでは、IPヘッダを見てるんだなぁぐらいに思っていてください。ルータがOSI第3層のネットワークの層で動作するネットワーク機器というのは、こういうことを指します。
IPヘッダの情報を見て、経路がわかりました。そうすると、今度はルータから目的のコンピュータに対するデータが送られるわけです。このときのイーサネットフレームを見てみると、あて先MACアドレスにコンピュータCのMACアドレス、そして送信元MACアドレスにルータのMACアドレスR2が入ってきます。MACアドレスの付け替えが起こっています。しかし、IPヘッダの情報は変わりません。 192.168.1.1 → 192.168.2.1 へのデータですよとなってます。
このMACアドレスの付け替えは、電車の乗り換えのようなものだと考えてください。イーサネットフレームは、IP以上の各階層のデータを運ぶための入れ物のようなものです。つまり、電車だと考えてください。
ぼくは東京の京王沿線に住んでいるのですが、東京駅に行くとき直接行くことができません。京王線は東京駅まで届いていませんので。そこで、いったん新宿に出ます。それからJRで東京駅に向かいます。新宿駅がデフォルトゲートウェイになるわけですね。新宿で目的の駅に行くための路線(ネットワーク)を選択して、電車を乗り換えます。これと同じようなイメージでMACアドレスの付け替えを考えてみるとわかりやすくなるかな?と思います。
このように、異なるネットワークへの通信が行われています。今の例ではルータが1台だけですが、何台かルータを経由するときも同じです。また、このようにルータを介してあて先のネットアークへ通信を行うことを「間接ルーティング」と呼びます。
データ送信時の動作まとめ
コンピュータが何かのデータを送信するときの動作は、次のようなフローチャートになります。
まず同じネットワークかどうか判断します。IPアドレスとサブネットマスクを使うんでしたね。
通信相手が同じネットワーク、つまり下のフローを先に見ていきましょう。イーサネットのフレームを作るために、通信相手のMACアドレスが必要になります。送信元のコンピュータがこれを知っているかどうかということになります。
知らなければ、それを知るためにARPを行います。このARPは、通信相手のIPアドレスからMACアドレスを求めるためのものでしたね。無事に通信相手のMACアドレスがわかれば、イーサネットのフレームを作成しデータの送信を行うわけです。
次に通信相手が違うネットワーク、右側のフローを見ていきます。通信相手が違うネットワークにいるときは、直接データを送信することができません。デフォルトゲートウェイ(ルータ)にデータの中継をお願いしなくてはいけません。これは、ルータによってブロードキャストが遮断されるためARPを使って通信相手のMACアドレスを求めることができないからです。
そこで、次にデフォルトゲートウェイ(ルータ)のMACアドレスをしっているかどうかです。もし知らなければ、ルータに対してARPを行いMACアドレスを求めていきます。ルータのMACアドレスがわかれば、それをもとにしてイーサネットのフレームを作成しデータの送信を行うわけですね。
送信するコンピュータがやるのはこれだけです。あとはルータが適切なネットワークにデータを中継してくれます。ただ、ルータの設定などが間違っていればデータは届かないですけどね。
※ここまででお話してきた内容は、LAN環境の話です。一般の家庭でダイアルアップをしてインターネットに接続するときはこのようなことはしていません。ダイアルアップ接続でのときの詳しいことについては、また機会を見て説明していきますね。