「同一セグメント内の通信」では ARP とスイッチングが連動して同一ネットワーク内の通信が成立する流れを整理しました。
今回はいよいよ、これまで学んできたすべての知識(IPアドレス、ルーティング、MACアドレス、スイッチング、ARP)を統合し、異なるネットワークに属する2台の通信 がどのように成立するのかを見ていきます。
以下のようなシンプルな構成を例に通信の流れを追っていきます。
また、通信に必要な設定(IP アドレスやルーティング)は全て完了している前提とします。

今回は通信の流れを確認するため、RT1 で ping command を実行します。
宛先の IPアドレスを指定して実行すると、ICMP Echo というデータが生成されます。

ICMP はネットワーク層で動くプロトコルであるため、 TCP や UDP header が付与されず、IP header から付与されます。
今回は ping command で宛先 IP アドレスを 192.168.1.2 に指定しているため、IP header にこの情報を書き込みます。
※sIP (source IP) は送信元 IP アドレス、dIP (destination IP) は宛先 IP アドレスを示します。

IP header に宛先 IP アドレスを含めることが出来たので、次に送信元 IP アドレスを決定します。
ルータや PC などのルーティングテーブルを持つ機器は宛先 IP アドレスをルーティングテーブル内で検索することで、一致するエントリがあるか確認します。
その結果 next-hop と出力インターフェースが決定し、出力インターフェースに設定されている IP アドレスが送信元 IP アドレスとなります。
今回は RT1 がルーティングテーブルを確認し、一致するエントリは Static (手動登録した経路)でした。
そのため
next-hop は 192.168.1.2
出力インターフェースは Eth0/0 のため、送信元 IP アドレスは 192.168.1.1
となります。

ログインすると、進捗を保存できます。
← ロードマップ に戻るIP header が正常に付与できたため、次は Ethernet header を付与します。
Ethernet header を付与する際、送信元 MAC アドレスと宛先 MAC アドレスの情報が必要です。
送信元 MAC アドレスは出力インターフェースの値が使われるため、今回は Eth0/0 が持つ aabb.cc00.0100 となります。
宛先 MAC アドレスは next-hop (今回は 192.168.1.2) の値を使用するため、ARP table を参照します。
すると、ARP table に 192.168.1.2 に紐づく MAC アドレスが登録されていません。
そのため、このままでは Ethernet header が付与できないため、ICMP の送信処理は一度ストップし、ARP で 192.168.1.2 の MACアドレスを調べる処理に移ります。

RT1 は 192.168.1.2 の MAC アドレスを調べるため、ARP を実行します。
ARP を実行すると ARP request が生成され、以下の情報が含まれています。
tMAC (target MAC) : 0000.0000.0000
tIP (target IP) : 192.168.1.2
これは ARP request を受信した機器が 192.168.1.2 の IP を持っていたら、それに対応する MAC アドレスを教えてくださいといった意味合いです。

生成した ARP request を送信するため、Ethernet header を付与します。
ARP request はブロードキャストで送信されるため、送信元/宛先 MAC アドレスは以下の通りです。
送信元 MAC アドレス:出力インターフェースの MAC アドレス
宛先 MAC アドレス:ブロードキャストアドレス(ffff.ffff.ffff)

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

SW1 は Eth0/0 で電気信号を受信すると、これを復号します。

SW1 は復号した後に Ethernet header を確認します。
そして、受信したポートと送信元 MAC アドレスの情報を MAC アドレステーブルに登録します。

続いて宛先 MAC アドレスを参照し、どのポートに転送すればよいか決定します。
宛先 MAC アドレスはブロードキャストアドレスのため、受信したポート以外の同一ブロードキャストドメイン(同一VLAN)のポートから転送すればよいことがわかります。
※今回は Eth0/0 と Eth0/1 しか繋がっていないので、Eth0/1 にのみ転送されます。

SW1 は出力インターフェースが決定したため、データを電気信号に変換し、対象のポートから送信します。
※スイッチはフレームを転送する際、ルータと異なり既存のヘッダーに何も変更を加えません。

RT2 は Eth0/0 で電気信号を受信すると、これを復号します。

RT2 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスがブロードキャストアドレスであったため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと ARP request が出てきたので、内容を確認します。すると、tIP (target IP) が自身の持つ IP address と一致していることがわかりました。
そのため、RT2 はこの ARP request に応答しなければいけないことを認識します。
これに加えて ARP request に記載されている sIP と sMAC の情報を自身の ARP table に登録します。

RT2 は ARP request で要求した情報(192.168.1.2 に紐づく MAC アドレス)を回答するため、ARP reply を生成します。

生成した ARP reply を送信するため、Ethernet header を付与します。
ARP reply はユニキャストで送信されるため、送信元/宛先 MAC アドレスは以下の通りです。
送信元 MAC アドレス:出力インターフェースの MAC アドレス
宛先 MAC アドレス:ARP request の sMAC

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

SW1 は Eth0/1 で電気信号を受信すると、これを復号します。

SW1 は復号した後に Ethernet header を確認します。
そして、受信したポートと送信元 MAC アドレスの情報を MAC アドレステーブルに登録します。

続いて宛先 MAC アドレスを参照し、どのポートに転送すればよいか決定します。
宛先 MAC アドレス aabb.cc00.0100 は Eth0/0 の先に存在すると MAC アドレステーブルに登録されているため、Eth0/0 から転送すればよいことがわかります。

SW1 は出力インターフェースが決定したため、データを電気信号に変換し、対象のポートから送信します。

RT1 は Eth0/0 で電気信号を受信すると、これを復号します。

RT1 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスが Eth0/0 の MAC アドレスと一致するため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと ARP reply が出てきたので、sIP と sMAC の情報を自身の ARP table に登録します。
ここまでの処理で、RT1 は ICMP Echo の送信に必要な 192.168.1.2 に紐づく MAC アドレスを知ることが出来ました。
そのため、ここから ICMP の処理に戻ります。

ICMP の処理に戻ったので、ARP table を参照し 192.168.1.2 に紐づく MAC アドレスを宛先 MAC アドレスとして指定します。

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

SW1 は Eth0/0 で電気信号を受信すると、これを復号します。

SW1 は復号した後に Ethernet header を確認します。
そして、受信したポートと送信元 MAC アドレスの情報を MAC アドレステーブルに登録します。
今回はすでに登録済みのため、情報が上書きされ Aging tame が更新されます。(もし通信がない場合、Cisco IOS-XE のスイッチはデフォルトで300秒経過するとそのエントリを削除します。)

続いて宛先 MAC アドレスを参照し、どのポートに転送すればよいか決定します。
宛先 MAC アドレス aabb.cc00.0400 は Eth0/1 の先に存在すると MAC アドレステーブルに登録されているため、Eth0/1 から転送すればよいことがわかります。

SW1 は出力インターフェースが決定したため、データを電気信号に変換し、対象のポートから送信します。

RT2 は Eth0/0 で電気信号を受信すると、これを復号します。

RT2 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスが Eth0/0 の MAC アドレスと一致するため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと IP header が出てきたので、内容を確認します。すると、宛先IPアドレスが自身の持つ IP address と異なります。
そのため、RT2 はルーティングテーブルを確認し、このパケットをどこに転送すればよいか判断する必要があります。

RT2 が Routing table を検索すると、dIP である 192.168.2.3 は Eth0/1 に直接接続されているネットワーク (192.168.2.0/24) に含まれていました。
そのため、RT2 はこのパケットを Eth0/1 から転送すればよいことがわかります。

ここで重要なのが、異なるネットワークに転送する際は Ethernet header は付け替えられます。
送信元 MAC アドレスは出力インターフェースの値が使われるため、今回は Eth0/1 が持つ aabb.cc00.0410 となります。
宛先 MAC アドレスは next-hop (今回は同じネットワークなので宛先) の値を使用するため、ARP table を参照します。
すると、ARP table に 192.168.2.3 に紐づく MAC アドレスが登録されていません。
そのため、このままでは Ethernet header が付与できないため、ICMP の送信処理は一度ストップし、ARP で 192.168.2.3 の MACアドレスを調べる処理に移ります。

RT2 は 192.168.2.3 の MAC アドレスを調べるため、ARP を実行します。
ARP を実行すると ARP request が生成されます。

生成した ARP request を送信するため、Ethernet header を付与します。

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/1 から送信されます。

RT3 は Eth0/0 で電気信号を受信すると、これを復号します。

RT3 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスがブロードキャストアドレスであったため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと ARP request が出てきたので、内容を確認します。すると、tIP (target IP) が自身の持つ IP address と一致していることがわかりました。
そのため、RT3 はこの ARP request に応答しなければいけないことを認識します。
これに加えて ARP request に記載されている sIP と sMAC の情報を自身の ARP table に登録します。

RT3 は ARP request で要求した情報(192.168.2.3 に紐づく MAC アドレス)を回答するため、ARP reply を生成します。

生成した ARP reply を送信するため、Ethernet header を付与します。
ARP reply はユニキャストで送信されます。

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

RT2 は Eth0/1 で電気信号を受信すると、これを復号します。

RT2 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスが Eth0/1 の MAC アドレスと一致するため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと ARP reply が出てきたので、sIP と sMAC の情報を自身の ARP table に登録します。
ここまでの処理で、RT2 は ICMP Echo の送信に必要な 192.168.2.3 に紐づく MAC アドレスを知ることが出来ました。
そのため、ここから ICMP の処理に戻ります。

ICMP の処理に戻ったので、ARP table を参照し 192.168.2.3 に紐づく MAC アドレスを宛先 MAC アドレスとして指定します。

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

RT3 は Eth0/0 で電気信号を受信すると、これを復号します。

RT3 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスが Eth0/0 の MAC アドレスと一致するため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと IP header が出てきたので、内容を確認します。すると、宛先IPアドレスが自身の持つ IP address と一致していることがわかりました。
そのため、RT3 は処理を継続してよいと判断し、非カプセル化(IP header を外す)します。

IP header を外すと Echo request が出てきました。
これを受信したことで、RT3 は Echo reply で応答しなければいけないことを認識します。
そして、ここまでの処理で RT1 から送信された Echo request を RT3 が無事受信することができました。

RT3 は受信した Echo request への応答として、Echo reply を生成します。

RT3 は受信した ICMP Echo の送信元 IP アドレスに対して Echo reply を送信する必要があるため、宛先 IP アドレスに 192.168.1.1 を指定します。

IP header に宛先 IP アドレスを含めることが出来たので、ルーティングテーブル内で宛先IPアドレスを検索し、送信元 IP アドレスと出力インターフェースを決定します。
今回一致するエントリは Static (手動で登録した経路情報)でした。
そのため
next-hop は 192.168.2.2
出力インターフェースは Eth0/0 のため、送信元 IP アドレスは 192.168.2.3
となります。

IP header が正常に付与できたため、次は Ethernet header を付与します。
送信元 MAC アドレスは出力インターフェースの値が使われるため、今回は Eth0/0 が持つ aabb.cc00.0500 となります。
宛先 MAC アドレスは next-hop の値を使用するため、ARP table を参照します。
すると、ARP table に 192.168.2.2 に紐づく MAC アドレスが登録されているため、この値を使用します。

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

RT2 は Eth0/1 で電気信号を受信すると、これを復号します。

RT2 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスが Eth0/1 の MAC アドレスと一致するため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと IP header が出てきたので、内容を確認します。すると、宛先IPアドレスが自身の持つ IP address と異なります。
そのため、RT2 はルーティングテーブルを確認し、このパケットをどこに転送すればよいか判断する必要があります。

RT2 が Routing table を検索すると、dIP である 192.168.1.1 は Eth0/0 に直接接続されているネットワーク (192.168.1.0/24) に含まれていました。
そのため、RT2 はこのパケットを Eth0/0 から転送すればよいことがわかります。

転送先のインターフェースが決定したため、次は Ethernet header を付与します。
送信元 MAC アドレスは出力インターフェースの値が使われるため、今回は Eth0/0 が持つ aabb.cc00.0400 となります。
宛先 MAC アドレスは next-hop の値を使用するため、ARP table を参照します。
すると、ARP table に 192.168.1.1 に紐づく MAC アドレスが登録されているため、この値を使用します。

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

SW1 は Eth0/1 で電気信号を受信すると、これを復号します。

SW1 は復号した後に Ethernet header を確認します。
そして、受信したポートと送信元 MAC アドレスの情報を MAC アドレステーブルに登録します。
今回はすでに登録済みのため、情報が上書きされ Aging tame が更新されます。

続いて宛先 MAC アドレスを参照し、どのポートに転送すればよいか決定します。
宛先 MAC アドレス aabb.cc00.0100 は Eth0/0 の先に存在すると MAC アドレステーブルに登録されているため、Eth0/0 から転送すればよいことがわかります。

TCP/IP モデルに従い Ethernet header まで付与されたため、フレームは電気信号に変換され、出力インターフェースである Eth0/0 から送信されます。

RT1 は Eth0/0 で電気信号を受信すると、これを復号します。

RT1 は受信したフレームの宛先 MAC アドレスを確認します。
すると、宛先 MAC アドレスが Eth0/0 の MAC アドレスと一致するため、これは処理を継続してよいと判断し、非カプセル化(Ethernet header を外す)します。

Ethernet header を外すと IP header が出てきたので、内容を確認します。すると、宛先IPアドレスが自身の持つ IP address と一致していることがわかりました。
そのため、RT1 は処理を継続してよいと判断し、非カプセル化(IP header を外す)します。

IP header を外すと Echo reply が出てきました。これを受信したことで、RT1 は ICMP の処理が完了したことを認識します。
そして、Cisco IOS-XE では ping command を実行すると ICMP Echo を5つ送信します。
1回目は ARP の処理により中断されたため、失敗を示す「.」が表示され、残りの4回は成功を示す「!」が表示されます。

これにてネットワークにおける通信の超基礎は完了です。
改めて超概要ですが、ネットワークでの通信は TCP/IP モデルに従い実現しています。

今後は CCNA ハンズオンに進み、様々な技術を学びます。しかし、それらの技術は基本的にこの通信をより便利に実現するためのものがほとんどです。
ネットワークを学ぶ上ではこの TCP/IP モデルで考えることが非常に重要であるため、この通信の流れは何も見ずに自身の言葉で説明できるよう、理解を深めていってください。