基本的なTCP/IP通信の仕組み(別セグメント間の通信)

基本的なTCP/IP通信の仕組み(別セグメント間の通信)

TCP/IPの基礎となる通信の仕組みを説明します。
『ARP(Address Resolution Protocol)によるアドレス解決』と『ARPテーブル/MACアドレステーブルをもとにした転送処理』は全ての通信の基本となります。

目次

ネットワーク構成

下記の構成を例に別セグメント間の通信がどのように行われるのかを説明します。

ネットワーク構成

別セグメント間通信の流れ

通信開始前の状態

ubuntu-1(192.168.1.1)からubuntu-2(192.168.2.1)へPingによる疎通確認(ICMP通信)を例として、どのような流れで通信が行われるのかを見ていきましょう。
CMLを利用して、実機のステータスやログを確認しながら検証していきます。

通信開始前の状態では、サーバー(ubuntu-1/2)やL2SWのARPテーブルには何も登録されていません。

通信開始前の状態

サーバー(ubuntu-1/2)のIPアドレス、ルーティングテーブルは、下記のコマンドで確認できます。

ip address show dev ens2
ip route

ARPテーブルは、下記のコマンドで確認できます。

ip neigh
ubuntu-1のIPアドレスとARPテーブル確認
ubuntu-2のIPアドレスとARPテーブル確認

Routerのインターフェースに設定されているIPアドレスは、下記のコマンドで確認できます。

show ip int brief

ARPテーブルは、下記のコマンドで確認できます。
Ciscoルーターでは、IPアドレスが設定されているインターフェースの自身のIPアドレスとMACアドレスも表示されます。

show arp
RouterのIPアドレスとARPテーブル確認

ARPリクエスト送信(ubuntu-1 〜 Router Gi0/0)

ubuntu-1(192.168.1.1)とubuntu-2(192.168.2.1)は別セグメントのため、ubuntu-1はルーティングテーブルを参照し、デフォルトゲートウェイ(192.168.1.254)へパケットを送信します。
ARPテーブルに該当IPアドレス(192.168.1.254)の登録がないため、ARPリクエストをブロードキャスト送信します。

ubuntu-1からARPリクエスト送信

ARPとは、そのIPアドレスを持っている機器のMACアドレスを取得するためのプロトコルです。
ARPリクエストの中身は、送信元のIPアドレスとMACアドレス(Sender-IP/Sender-MAC)とMACアドレスの情報を知りたいIPアドレス(Target-IP)が含まれています。
※Target-MACは、これから知りたい情報のため、0000.0000.0000が入ります。

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りARPリクエストのパケットの中身が見えます。

ubuntu-1からのARPリクエストのパケットキャプチャ確認

Routerは、ARPリクエストを受信すると、ubuntu-1のIPアドレスとMACアドレスの紐付けをARPテーブルに登録します。

Routerがubuntu-1からARPリクエストを受信しARPテーブルに登録

ARPリプライ送信(Router Gi0/0 〜 ubuntu-1)

RouterがARPリプライをユニキャスト送信します。

Routerからubuntu-1へARPリプライ送信

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りARPリプライのパケットの中身が見えます。

RouterからのARPリプライのパケットキャプチャ確認

ubuntu-1は、ARPリプライを受信すると、送信元IPアドレスと送信元MACアドレスの紐付けをARPテーブルに登録します。

ubuntu-1がRouterからARPリプライを受信しARPテーブルに登録

これでubuntu-1は、実際のICMP通信を行う準備ができました。

ICMPエコーリクエスト送信(ubuntu-1 〜 Router Gi0/0)

ubuntu-1がARPテーブルを参照し、RouterのGi0/0のMACアドレスを指定して、ICMPエコーリクエストをユニキャスト送信します。

ubuntu-1からICMPエコーリクエストを送信

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りICMPエコーリクエストのパケットの中身が見えます。

ubuntu-1からのICMPエコーリクエストのパケットキャプチャ確認

ARPリクエスト送信(Router Gi0/1 〜 ubuntu-2)

RouterはICMPエコーリクエストを受信すると、宛先の192.168.2.1はGi0/1と同じセグメントと認識します。しかし、ARPテーブルに該当IPアドレスの登録がないため、ARPリクエストをGi0/1からブロードキャスト送信します。

RouterからARPリクエスト送信

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りARPリクエストのパケットの中身が見えます。

RouterからのARPリクエストのパケットキャプチャ確認

ubuntu-2は、ARPリクエストを受信すると、送信元IPアドレスと送信元MACアドレスの紐付けをARPテーブルに登録します。

ubuntu-2がRouterからARPリクエストを受信しARPテーブルに登録

ARPリプライ送信(ubuntu-2 〜 Router Gi0/1)

ubuntu-2がARPリプライをユニキャスト送信します。

ubuntu-2からRouterへARPリプライ送信

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りARPリプライのパケットの中身が見えます。

ubuntu-2からのARPリプライのパケットキャプチャ確認

Routerは、ARPリプライを受信すると、ubuntu-2のIPアドレスとMACアドレスの紐付けをARPテーブルに登録します。

Routerがubuntu-2からARPリプライを受信しARPテーブルに登録

これでRouterは、ICMPエコーリクエストを転送する準備ができました。

ICMPエコーリクエスト転送(Router Gi0/1 〜 ubuntu-2)

RouterがARPテーブルを参照し、ubuntu-1から受信したICMPエコーリクエストをubuntu-2へ転送します。
この時、RouterはICMPパケット内の送信元/先のMACアドレスを書き換えます。(送信元:RouterのGi0/1のMACアドレス、送信先:ubuntu-2のMACアドレス)

Routerがubuntu-2へICMPエコーリクエストを転送

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りICMPエコーリクエストのパケットの中身が見えます。

RouterからのICMPエコーリクエストのパケットキャプチャ確認

ubuntu-2がICMPエコーリクエストを受信します。

ubuntu-2がICMPエコーリクエストを受信

ICMPエコーリプライ送信(ubuntu-2 〜 Router Gi0/1)

ubuntu-2がICMPエコーリプライを送信します。

ubuntu-2がRouterへICMPエコーリプライを送信

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りICMPエコーリプライのパケットの中身が見えます。

ubuntu-2からのICMPエコーリプライのパケットキャプチャ確認

ICMPエコーリプライ転送(Router Gi0/0 〜 ubuntu-1)

RouterがARPテーブルを参照し、ubuntu-2から受信したICMPエコーリプライをubuntu-1へ転送します。
この時、RouterはICMPパケット内の送信元/先のMACアドレスを書き換えます。(送信元:RouterのGi0/0のMACアドレス、送信先:ubuntu-1のMACアドレス)

Routerがubuntu-1へICMPエコーリプライを転送

CML上でキャプチャしたファイルをWiresharkで見ると、下記の通りICMPエコーリプライのパケットの中身が見えます。

RouterからのICMPエコーリプライのパケットキャプチャ確認

ubuntu-1がICMPエコーリプライを受信し、ICMPによる通信が正常に完了しました。

ubuntu-1がICMPエコーリプライを受信

実機のステータス、ログの確認

CML上の実機のステータス、ログを確認します。

ubuntu-1(192.168.1.1)

ubuntu-1からPingを1回だけ実施するコマンドは下記となります。

ping -c 1 192.168.2.1

PIngが成功した後、ARPテーブルを確認すると、RouterのGi0/0のIPアドレスとMACアドレスが登録されているのが分かります。

ip neigh
ubuntu-1のARPテーブル確認

ubuntu-2(192.168.2.1)

ubuntu-2でもARPテーブルを確認すると、RouterのGi0/1のIPアドレスとMACアドレスが登録されているのが分かります。

ip neigh
ubuntu-2のARPテーブル確認

Router

Routerでは、下記のデバッグコマンドを設定することで、ARPパケットのやりとりやARPテーブル登録時のログが出力されるようになります。

debug arp
Routerのdebugコマンドとdebugログの確認

ARPテーブルを確認すると、ubuntu-1/ubuntu-2のIPアドレスとMACアドレスの情報が登録されていることが分かります。

show arp
RouterのARPテーブル確認

これで、基本的なTCP/IP通信の仕組み(別セグメント間の通信)の説明は完了です!

  • URLをコピーしました!
  • URLをコピーしました!
目次