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

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

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

目次

ネットワーク構成

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

ネットワーク構成

同一セグメント内通信の流れ

通信開始前の状態

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

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

通信前の状態

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

ip neigh
通信前のubuntu-1のARPテーブル
通信前のubuntu-2のARPテーブル

L2SWのMACアドレステーブルは、下記のコマンドで確認できます。

show mac address-table
通信前のL2SWのMACアドレステーブル

ARPリクエスト送信

ubuntu-1(192.168.1.1)がubuntu-2(192.168.1.2)への通信を開始すると、ARPテーブルに該当IPアドレスの登録がないため、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リクエストのパケットの中身が見えます。

ARPリクエストのパケットの中身

L2SWは、ARPリクエストを受信すると、ubuntu-1のMACアドレスと受信ポートの紐付けをMACアドレステーブルに登録します。
そして、全ポートにARPリクエストをフラッディングします。

ARPリクエストを受信したL2SWの動作

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

ARPリクエスト受信後のubuntu-2の動作

ARPリプライ送信

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

ubuntu-2がARPリプライを送信

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

ARPリプライのパケットの中身

L2SWは、ARPリプライを受信すると、ubuntu-2のMACアドレスと受信ポートの紐付けをMACアドレステーブルに登録します。
そして、MACアドレステーブルを参照して、Gi0/0に転送します。

APRリプライを受信したL2SWの動作

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

ubuntu-1がARPリプライを受信

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

ICMPエコーリクエスト送信

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

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

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

ICMPエコーリクエストのパケットの中身

L2SWはMACアドレステーブルを参照して、Gi0/1に転送します。

ICMPエコーリクエストを受信したL2SWの動作

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

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

ICMPエコーリプライ送信

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

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

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

ICMPエコーリプライのパケットの中身

L2SWはMACアドレステーブルを参照して、Gi0/0に転送します。

ICMPエコーリプライを受信したL2SWの動作

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

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

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

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

ubuntu-1(192.168.1.1)

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

ping -c 1 192.168.1.2

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

ip neigh
通信後のubuntu-1のARPテーブル

ubuntu-2(192.168.1.2)

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

ip neigh
通信後のubuntu-2のARPテーブル

L2SW

L2SWでは、下記のデバッグコマンドを設定することで、MACアドレステーブルへの追加登録時にログが出力されるようになります。

debug matm add
L2SWのMACアドレステーブル追加確認のためのデバッグ設定

ubuntu-1とubuntu-2のMACアドレスが追加されたログが表示され、MACアドレステーブルにポート番号との紐付きが登録されていることが分かります。

show mac address-table
L2SWの通信時のログと通信後のMACアドレステーブル

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

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