【実務・中級編】 トランクポートの定義と tagged フレームによる複数VLAN多重化 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

物理の制約を論理でねじ伏せる:802.1Qトランクポートの深淵

ネットワークエンジニアとして現場に立っていると、物理的なケーブルの数に頭を悩ませることは一度や二度ではないはずだ。サーバーラックの配線がスパゲッティ状態になり、物理ポートが枯渇して拡張性が失われる……。そんな悪夢を回避するための「魔法」が、今回解説する IEEE 802.1Q、いわゆる「トランクポート」だ。

Web APIの設計やクラウドのインフラ構築に携わる君たちにとって、L2スイッチは「ただ繋がっている箱」に見えるかもしれない。しかし、その内部でパケットに何が起きているかを知ることは、本番環境で発生する不可解な通信断を切り分ける際の、最強の武器になる。

—

1. なぜタグ付け(Tagging)が必要なのか?

通常、イーサネットフレームは宛先MACアドレスや発信元MACアドレスといった「L2ヘッダー」を背負って旅をする。しかし、これだけでは「このフレームはどのVLANに所属しているか」という情報が欠落している。

スイッチの内部では、VLANごとに論理的に切り離されたネットワークが存在する。異なるスイッチ間でVLAN情報を維持したまま通信させるには、「このフレームはVLAN 10のデータですよ」という名札をフレームのヘッダーに直接貼り付ける必要がある。これがIEEE 802.1Qの核心だ。

具体的には、元のイーサネットヘッダーの「送信元MACアドレス」の直後に、4バイトのタグを挿入する。

  • TPID (Tag Protocol Identifier): 0x8100。これが来ると「お、タグ付きだぞ」とスイッチが認識する。
  • TCI (Tag Control Information): ここに12ビットのVLAN ID(VID)が含まれる。つまり、理論上4096個のVLANを識別できるわけだ。

—

2. トランクポートの通信フロー:現場の視点

トランクポートを通る通信は、以下の「タグの付け外し」というダンスを繰り返している。

1. Ingress(アクセスポート): PCから送られてきたタグなしフレームが、スイッチのアクセスポートに到達する。スイッチはポート設定に基づき、内部でそのフレームに「VLAN 10」という識別子を紐付ける。
2. Trunk Port(送信側): スイッチ間を繋ぐトランクポートへ送出される際、フレームに「802.1Qタグ」が挿入(Push)される。
3. Trunk Port(受信側): 対向のスイッチがタグ付きフレームを受け取る。「あ、VLAN 10だね」と識別し、内部の論理テーブルを検索する。
4. Egress(アクセスポート): 目的のポートから送り出す直前に、タグを剥がして(Pop)送り出す。PC側はタグの存在なんて知る由もない。

これが「透過的」な通信の正体だ。

—

3. 実践:Ciscoスイッチでの設定例

現場で最も一般的なCisco IOSでの設定を見てみよう。ここでのポイントは、インターフェースを明示的に「トランク」として定義し、許可するVLANを絞ることだ。

! インターフェースをトランクモードに固定する
interface GigabitEthernet0/1
 switchport trunk encapsulation dot1q  ! プロトコルを802.1Qに指定
 switchport mode trunk                 ! トランクポートとして振る舞わせる
 switchport trunk allowed vlan 10,20   ! 通過させるVLANを限定して不要なブロードキャストを遮断
 switchport trunk native vlan 99       ! タグなしで送受信するVLAN(ネイティブVLAN)を指定
 description "Uplink to Core Switch"

Tips: ここで登場する native vlan は非常に重要だ。タグなしで届いたパケットをどのVLANとして扱うかを決めるものだが、セキュリティ上の理由から、「ネイティブVLANには通信させない(未使用のVLANを割り当てる)」のが業界のベストプラクティスだ。

—

4. Webエンジニアが知っておくべき「MTU」の落とし穴

API開発者が意外とハマるのが MTU (Maximum Transmission Unit) の問題だ。

802.1Qタグは4バイトのオーバーヘッドを生む。標準的なイーサネットのMTUは1500バイトだが、タグが付くと1504バイトになる。もしネットワーク機器のMTU設定が厳密に1500で制限されている場合、この「たった4バイトの増量」でパケットがドロップされる。

Pythonでパケットを投げたり、curlで大きなペイロードを送信する際、特定のVLAN越しだと通信が極端に遅くなる、あるいは接続がタイムアウトするなら、この「ジャンボフレーム」や「MTU不整合」を疑うべきだ。

# curlでMTUを確認しつつ通信テストを行う例
# --max-timeでタイムアウトを設定し、パケットロスを検知しやすくする
curl -v -X POST http://10.0.10.5/api/v1/data \
     -H "Content-Type: application/json" \
     -d '{"large_payload": "..."}' \
     --max-time 5

—

5. 最後に:トラブルシューティングの極意

「通信が通らない」というトラブルに直面したとき、まずは以下のコマンドでトランクのステータスを確認してほしい。

# トランクポートの状態を確認
show interfaces trunk

ここを見て、Vlans allowed on trunk に必要なVLANが含まれているか、あるいは Vlans in spanning tree forwarding state が正しくアクティブになっているかを確認する。多くの障害は、設定のタイポや、対向スイッチとのネイティブVLANの不一致(VLANミスマッチ)に起因する。

ネットワークは、物理的な線と論理的なタグが綺麗に噛み合ったときに初めて、その真価を発揮する。コードを書くときと同じように、パケットの「通り道」を脳内で可視化できるようになれば、君も立派なネットワークエンジニアだ。

次は、このトランクポートの上で動く Spanning Tree Protocol の悪夢について語ろうか。あれこそが、L2ネットワークの深淵の入り口だからね。

コメント

タイトルとURLをコピーしました