はじめに
ネットワークの基礎を理解するうえで欠かせないのが、ホストから宛先までパケットがどのように流れるか というプロセスです。
一見単純に見える流れにも、L2(データリンク層)とL3(ネットワーク層)の重要な処理が関係しています。
本記事では、OSI参照モデルの観点から通信の流れを順を追って詳しく解説します。
※後で確認できるように自分自身の学習の備忘録として残しています。
1. 宛先IPの判定
ホストは送信先のIPが同じネットワークに属するかをサブネットマスクを用いて判定します。
サブネットマスクによる判定方法
- 送信元IPおよび宛先IPにサブネットマスクを適用し、ネットワークアドレスを計算。
- 両者のネットワークアドレスが一致すれば同一ネットワーク、異なれば別ネットワークと判断します。
判定結果に応じた処理
-
同一ネットワーク
宛先ホストのMACアドレスをARPで取得し、イーサネットフレームに宛先MACアドレスを付与して直接送信します。 -
異なるネットワーク
デフォルトゲートウェイにパケットを転送します。
この場合、フレームの宛先MACアドレスにはゲートウェイのMACアドレスが使用されます。
2. ARPでMACアドレス解決(ホスト視点)
ホストが宛先MACアドレスを知らないときは、以下の流れでARPを使用します。
-
ARPリクエスト送信
「このIPを持っている機器は誰ですか?」というブロードキャストを送信。 -
ARPリプライ受信
宛先ホストまたはゲートウェイが自分のMACアドレスを返答。 -
ARPテーブルにキャッシュ登録
解決したMACアドレスを保存し、以後の再利用が可能になります。
この仕組みにより、ホストは正しい宛先MACアドレスをフレームに設定して送信できます。
3. ルータでの処理(ARP処理を含む)
ルータが受信したパケットを処理する手順は次のとおりです。
1. フレーム受信とL2ヘッダ剥離
自分宛のMACアドレスが付与されたイーサネットフレームを受信し、L2ヘッダを剥がします。
2. 宛先IPの確認
IPヘッダの宛先アドレスを参照し、ルーティングテーブルから次ホップを決定します。
3. 次ホップMACアドレスの解決
ルータは 直接接続されているネットワーク内のIPアドレス に対してのみARPを行います。
-
ARPテーブルを確認
次ホップIPに対応するMACアドレスが登録済みであれば、そのMACアドレスを使用。 -
未登録の場合はARPを実行
- ARPリクエスト送信:「次ホップIPのMACアドレスを教えてください」
- ARPリプライ受信:次ホップとなる機器(別ルータやホスト)が応答し、MACアドレスを返答
- キャッシュ登録:取得したMACアドレスをARPテーブルに保存し、後続転送に再利用
※ルータは宛先ホストのMACアドレスを直接解決するのではなく、
ルーティングテーブルで決定した「次ホップIP」のMACアドレスを解決します。
4. 新しいL2ヘッダを付与して送信
宛先MACアドレスに次ホップのMACアドレス、送信元MACアドレスに自インタフェースのMACアドレスを設定して、新しいフレームを送出します。
4. 最終ルータから宛先ホストへ
最終ルータでも基本的な処理は同一です。
- フレーム受信とL2ヘッダ剥離
- 宛先IP確認(宛先ホストが直接接続ネットワークと判断)
- 宛先MACアドレス解決
- ARPテーブル登録済みならそのMACアドレスを使用
- 未登録ならARPリクエストを実行してMACアドレスを取得
- L2ヘッダを付与して送信(宛先MACアドレス=ホスト、送信元MACアドレス=ルータ)
- 宛先ホストにより受信後、L2ヘッダを剥がしL3データを処理
まとめ
通信の流れは以下のように整理できます。
- ホストがサブネットマスクで宛先のネットワークを判定
- 宛先またはゲートウェイのMACアドレスをARPで解決し、フレーム送信
- ルータがL2ヘッダ剥離、宛先IPをチェックし、次ホップを選定
- 次ホップMACアドレスが未解決ならルータもARPを実行
- ※ただしARPは直接接続されたネットワーク内でのみ利用可能
- 新しいL2ヘッダを付与して転送
- 最終ルータが宛先ホストのMACアドレスを解決
- 宛先ホストがフレームを受信し、L3データを処理