この記事シリーズでは、インターネットで用いられている通信プロトコルであるTCP/IPで、通信が送信元から宛先に届くまでに起こっていることをミクロ視点で解説します。
あらゆる技術について言えることですが、コンピュータ内部で起こっているミクロな挙動の理解は、その後の技術の学習や実務で必ず役に立ちます。
- ネットワークエンジニアになりたい人
- サーバ担当でネットワークも知っておきたい人
- IT系の営業で話の幅を広げたい人
- とにかくITの教養を身につけたい人
このような人たちにオススメの記事です。
是非ともご覧ください。
【本シリーズ】
目次
IPヘッダーについて
第1回で解説したIPヘッダーについて再度記載します。
IPヘッダーはL3ヘッダーの一種です。
L3ヘッダーとは(ネットワークを超えた)通信の送信元と宛先を示すヘッダーです。L3ヘッダーの一種であるIPヘッダーも、通信の送信元と宛先を示しています。
コンピュータは送信したいデータを分割し、送信に適した大きさにします。
そして、分割した送信データに、(通信を制御する情報が入っている)TCPヘッダーやUDPヘッダーなどのL4ヘッダーを付与します。
そして、その「L4ヘッダ+送信データ」にIPヘッダーをつけて、パケットにします。
(イメージ図)
パケットに格納されているIPアドレスで、ネットワークを超えた宛先の情報を示しています。
この記事ではパケットが送信され宛先に到達するまでのL3通信を解説します。
前回(L2通信)のおさらい
前回の記事では、
- ブロードキャスト
- ARPリクエストとARPリプライ
- 同一ネットワーク内の通信
を解説しました。
OSは自身のIPアドレスとサブネットマスクを認識していますので、宛先IPアドレスをみて自身と同じネットワーク内の宛先か否かを判断します。
同一ネットワーク内の通信であれば、ネットワーク全体に宛先IPアドレスを尋ねるARPリクエストを送信し、ARPリプライを受信すれば宛先MACアドレスが分かります。
そして該当のMACアドレス宛にフレーム(パケット + イーサネットヘッダ)を送信し、同一ネットワーク内の通信を行います。
別ネットワーク宛の通信
それでは、別ネットワーク宛の通信はどうでしょうか?
まず、別ネットワーク宛の通信をするには、送信元の機器は最初にDGW(デフォルトゲートウェイ)として設定したIPアドレス宛にフレームを送信します。
そして、DGWの役割を持つ機器は、フレームを受信した後にルーティングという処理をします。
以下、詳細を解説します。
DGW(デフォルトゲートウェイ)
DGWを文章で説明すると、
- 各端末(PCやサーバ)に設定する ※NW機器の設定ではない
- あるネットワークから別ネットワーク宛の通信をするときの最初の宛先となる
- 該当ネットワーク内の
- IPアドレス
です。
文章だけで把握するのは大変なので、以下の構成図で説明します。
PC Aが別ネットワークのPC C(192.168.2.1/24)宛に通信をするときには、最初にルーターのI/F 1(192.168.1.254/24、左側のI/F)宛にフレームを送る必要があります。
このPC Aから見たルータのI/F 1のことをDGW(デフォルトゲートウェイ)と言います。
つまり、別ネットワーク宛の通信をするには、
- (最終到達点を示す)宛先IPアドレス
と、
- (同一ネットワーク内のルーターを示す)DGWのIPアドレス
の両方を把握する必要があります。
このDGWのIPアドレスはあらかじめOSに設定します。
Windowsであれば、以下のような設定でIPアドレスとDGWを設定します。
別ネットワーク宛の通信の際には、このDGWのMACアドレスを知る必要があります。
PC Aは最初に192.168.1.254を問い合わせるARPリクエストを送信します。
そして、手に入れたMACアドレス情報を元に、フレームを作成し送信します。
宛先のMACアドレスとIPアドレスは、それぞれ
- 宛先MACアドレス:(DGWである)ルーターのI/F 1のMACアドレス
- 宛先IPアドレス:PC CのIPアドレス
となります。MACアドレスは同一ネットワーク内の宛先を示し、IPアドレスはネットワーク外の最終到達点を示していることに注目しましょう。
ルーティング
ここまでで、PC AのDGWとなるI/Fを持つルーターが、フレームを受け取ったところまでを説明しました。
では、ルーターは受け取ったフレームをどうやってPC Cまで届けているのでしょうか?
ここで出てくるのがルーティングです。
ルーティングを一言でいうと、
- ネットワーク間の橋渡しをし、パケットを転送する処理
です。
ルーターは、受け取ったフレームのイーサネットヘッダーを取り除き、パケットにします。
そして、パケットのIPヘッダを見て、パケットの宛先ネットワークがどこかを判断します。
今回の例では、右側のI/F2と直接接続されているネットワークが、宛先のネットワークとわかります。
ということで、右側のI/FからARPリクエストを送信し192.168.2.1のMACアドレスを把握します。
宛先MACアドレスがわかったら、
- 送信元MACアドレス:自身のI/FのMACアドレス
- 宛先MACアドレス:(ARPリプライで入手した)PC CのMACアドレス
を持つイーサネットヘッダーをパケットに付与して送信します。
これでネットワークをまたがった通信が可能となります。
ご覧の通りに、ネットワーク内の宛先を示すMACアドレスは、ネットワークをまたぐ際に付け替えられます。
そして、ネットワークを超えた最終宛先を示すIPアドレスは、通信が宛先に到達するまで、変更されません。
複数ネットワークをまたがった通信
先ほどの例では、ルーターは送信元のネットワークと宛先のネットワークの両方に直接接続していました。
しかし、実際のネットワークではそのような例はあまりなく、通信経路上でいくつかのネットワークを経由することが普通です。
その際の通信を解説します。
以下のネットワークで、PC E が PC Fと通信する場合を解説します。
まず、PC EはPC F(172.16.1.1)宛のパケットを生成し、ARPによってDGWのMACアドレスを把握し、DGW(ルーター1のI/F 1)宛にフレームを送信します。
フレームを受信したルーター1は、172.16.1.0/24のネットワーク(図の右上)には直接接続されていません。
しかし、172.16.1.0/24のネットワークがどっちの方向にあるか?ということがわかれば、パケットの転送は可能です。
このような「ネットワークがどちらの方向にあるか?」という情報をまとめた表(テーブル)が、ルーティングテーブルです。
ルーティングテーブル
ルーティングテーブルは、それぞれのルーターが持っています。
つまり、上記の4台のルーターはそれぞれ別々のルーティングテーブルを持っています。
ルーター1、2、3、4のルーティングテーブルは以下の通りです。
【凡例】
- ネットワーク:該当機器が把握しているネットワークを表します。(ルーティングテーブルにないネットワークは、「宛先到達不可」として扱われます)
- 宛先:そのネットワークが該当機器からみてどちらの方向にあるか(もしくは直接接続されている)を表します。
- ネクストホップ:宛先に到達するために、次にどのIPアドレス宛にパケットを転送すれば良いかを表します。直接接続されているネットワーク内の宛先であれば、ネクストホップは「なし」として扱います。
まず、フレームを受信したルーター1は、イーサネットヘッダを取り外してIPヘッダを見ます。
IPヘッダの宛先IPアドレスと自身のルーティングテーブルを見比べて、
- 172.16.1.0/24のネットワーク宛の通信は、I/F 2の方向にあり、192.168.4.2 宛に送信すればいい
ということがわかりますので、I/F 2からフレームを送信します。
そして、ルーター2は、受け取ったフレームのイーサネットヘッダを取り外してIPヘッダを見ます。
自身のルーティングテーブルを見て、
- 172.16.1.0/24のネットワーク宛の通信は、I/F 2の方向にあり、172.16.0.2 宛に送信すればいい
ということがわかりますので、I/F 2からフレームを送信します。
最後に、ルーター3は、受け取ったフレームのイーサネットヘッダを取り外し、IPアドレスを見て、
- 宛先IPアドレス172.16.1.1は、自身のI/F 2に直接接続されているネットワーク内のアドレスだ
ということがわかり、ARPでMACアドレスを学習し、PC F宛にフレームを送信します。
このようにルーティングは、ルーティングテーブルを元に行われます。
スタティックルーティングとダイナミックルーティング
それでは、ルーティングテーブルの作成はどのように行われるのでしょうか?
まずは手動で設定するスタティックルーティングを解説します。
先ほどの例で言えば、ルーター2に、
- 192.168.3.0/24 のネットワークは、192.168.4.1 宛
- 172.16.1.0/24 のネットワークは、172.16.0.2 宛
- 172.20.1.0/24 のネットワークは、171.20.0.2 宛
のように手動で設定をするわけです。
しかし、それではルーター2のみではなく、経路上の全てのルーターに手動で設定する必要があります。
例えば、ネットワーク構成の変更などが起こった場合には、全ての機器を手動で変更する必要があるので、とても大変です。
そこで出てくるのが、ダイナミックルーティングです。
ダイナミックルーティングとは、その名の通り動的(ダイナミック)で、別の機器と経路情報を交換することにより遠隔にあるネットワークの情報を把握し、自身のルーティングテーブルを作成・更新することです。
ダイナミックルーティングには、BGP、OSPF、EIGRPなど様々なプロトコルがあります。
それぞれ別々のアルゴリズム(計算方法)で情報をやり取りするので、向き不向きがあります。
ダイナミックルーティングは、1プロトコルの解説だけで膨大な量になりますので、別記事で解説します。
まとめ
今回の記事で、TCP/IP通信が宛先に届くまでを解説しました。
次回は、L4ヘッダーとサービス(アプリケーションなど)などとの関係です。これでTCP/IP通信の概要の把握は完了します。
次回もお楽しみに!
それでは (*゚▽゚)ノ