レイヤ2で使うプロトコル入門
音声
目次
イーサネットとレイヤ2の役割
イーサネットはレイヤ2の代表的な技術です。
ここで言うレイヤ2はデータリンク層で、フレーム単位で通信を扱います。フレームには宛先と送信元のMACアドレスが含まれます。
MACアドレスは装置を識別するための物理的アドレスです。IPアドレスは上位層の住所ですが、レイヤ2が正しく動いていないとパケットの受け渡し自体ができません。
レイヤ2ではフレームの転送、ブロードキャストの扱い、ループ防止が重要です。ブロードキャストドメインやセグメントの概念を押さえると、VLANを作る理由が見えてきます。
初心者はまず、スイッチがMACテーブルに基づいてフレームを転送する動きを理解するとよいです。実機でスイッチのポートごとの学習と老廃(エイジング)を観察すると理解が早く進みます。
ARP と MAC アドレスの基本
ARP(アープ:アドレス解決プロトコル)は、IP(アイピー)アドレスから対応するMACアドレスを見つける仕組みです。
端末Aが端末BのMACアドレスをまだ知らないとき、ARPリクエストをブロードキャストして対応するMACアドレスを得ます。
ARPテーブルは各機器が持つ対応表で、これが古くなると通信が途切れることがあります。
学ぶポイントは次の通りです。
- ARPはブロードキャストを使うため、ブロードキャストが増えすぎるとスイッチの負荷につながる可能性があります。
- 静的ARP(手作業で登録)を使うとセキュリティは上がりますが、運用負荷が増えます。
- arpコマンドやip neigh(ip(アイピー)コマンドの一部)でテーブルを確認できます。
ARPのトラブルでは「ARPテーブルに期待するエントリがない」や「ARPテーブルの情報が古い」といった現象が多いため、まずはテーブルを確認することが切り分けのポイントです。
ARPスプーフィング(偽装)という攻撃もあるため、重要セグメントでは検出や静的登録を検討するとよいです。
スイッチ制御系プロトコル:STP・VLAN・LACP
STP(エスティーピー:ループ防止プロトコル)は、スイッチ間ループを防ぐために一部ポートをブロッキングし、ツリー構造を維持する仕組みです。
VLAN(ヴィーラン:仮想LAN)は、論理的にネットワークを分割し、同一の物理ネットワーク上に別々のブロードキャストドメインを作る仕組みです。
LACP(ラップ:リンク集約制御プロトコル)は、複数の物理リンクを束ねて1つの論理リンクとして扱うための規格です。
これらのプロトコルは相互に影響し合うため、切り分けでは「どこで想定とズレたか」を順に潰していくことが重要です。よくある失敗例と原因は次の通りです。
- 失敗例として、VLANタグのネイティブ設定ミスにより通信できないことがあります。原因は、トランクポート側でネイティブVLANが異なり、フレームが期待通りに処理されないためです。
- 失敗例として、STPが想定通りに収束せずポートをブロックし続けることがあります。原因は、ケーブルループや冗長設定ミス、優先度の誤設定などです。
判断のポイントは、まず物理接続とポート設定(アクセスかトランクか)を確認し、その後にVLANやSTPの状態を追うことです。
スイッチ間でVLAN設定が不一致になると通信不能につながるため、設定値が一致しているかの要チェックを最優先にすると整理しやすいです。
切り分け手順とちょい自動化(スクリプト例)
トラブル切り分けの基本手順は簡潔に行うと早く終わります。以下は現場で使える簡単な番号付き手順です。
- 物理層を確認します。ケーブルやリンクランプの状態を目視またはコマンドで確認します。
- MACテーブルとARPテーブルを確認します。期待するエントリがあるかを確認します。
- VLANとトランク設定を確認します。ネイティブVLANやタグ付けの不一致を探します。
- STPの状態を確認します。ルートブリッジやブロッキングポートを要チェックします。
- 必要に応じてログやLLDP/CDP情報から隣接機器の状況を取得します。
この手順は順番が重要で、物理→データリンク→論理の順で進めると効率的です。判断のポイントとしては、片側の設定だけを見ずに対向機器と合わせて確認することが挙げられます。
ちょい自動化として、Linuxでスイッチ/サーバーのARP・MAC・LLDP情報をまとめて取るスクリプト例を用意します。実行すると現場調査での初動が早くなります。試すときは管理権限で安全な範囲で実行します。
# !/bin/bash
# collect-l2-info.sh - 簡易収集スクリプト
echo "=== interfaces ==="
ip link show
echo
echo "=== ip neigh (ARP) ==="
ip neigh show
echo
echo "=== bridge fdb (MAC table) ==="
bridge fdb show
echo
echo "=== lldp neighbors ==="
which lldpctl >/dev/null 2>&1 && lldpctl || echo "lldpctl not installed"
このスクリプトは10行程度で、各コマンドが出力する情報を手早く収集できます。ツールがない場合は個別コマンドで同様の情報を集めます。スクリプトを使うとログ保存や比較が容易になり、再発時の切り分けに役立ちます。
注意(ここだけ)
- 直接削除や設定変更を行うコマンドは、試験環境で動作確認した後に、本番環境で実行するようにするとよいです。
要約
- レイヤ2はフレームとMACアドレスで動作するデータリンク層です。
- ARPはIPアドレスからMACアドレスを解決する仕組みであり、テーブル確認が初動の切り分けに役立ちます。
- STPはループ防止、VLANは論理分割、LACPはリンク集約のために利用されます。
- 切り分けは物理→データリンク→論理の順で進め、対向設定が一致しているかを確認するのがポイントです。
- 小さな収集スクリプトでARP/MAC/LLDP情報をまとめると、初動を速くできます。