【実務・中級編】 IEEE 802.1Qタグヘッダー内のTCI(Tag Control Information)構造 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

VLANタグの深淵:802.1Q TCIフィールドが語る「パケットの身分証明書」

ネットワークエンジニアとして現場を歩いていると、「VLANなんてスイッチの設定一つでしょ?」という言葉を耳にすることがあります。しかし、トラブルシューティングの最前線、特にMTU超過によるパケットドロップや、QoSが効かないという怪奇現象に直面したとき、最後に我々を救ってくれるのは「パケットが実際にどう流れているか」という物理層に近い知識です。

今回は、IEEE 802.1Qタグの中核、TCI(Tag Control Information)にフォーカスします。このわずか16ビットの領域が、いかにしてレイヤー2の秩序を保っているのか。その構造と、実務での活用法を紐解いていきましょう。

—

1. TCIフィールド:16ビットに込められた「序列と所属」

イーサネットフレームのヘッダに挿入される4バイトの802.1Qタグ。その後半2バイトがTCIです。この16ビットは、大きく3つの役割に分割されています。

TCIのビットレイアウト

  • PCP (Priority Code Point) : 3ビット
  • 0から7の8段階で、フレームの優先度を表します。IEEE 802.1pとも呼ばれ、ネットワークの混雑時にどのパケットを優先して送出するかを決定します。
  • DEI (Drop Eligible Indicator) : 1ビット
  • 以前はCFIと呼ばれていました。「混雑時にドロップしても良いか」を示すフラグです。これが1なら、帯域溢れ時に真っ先に切り捨てられる候補となります。
  • VID (VLAN Identifier) : 12ビット
  • 0から4095までの値を持ちます。0と4095は予約済みのため、実用的なVLAN IDは1から4094まで。これがパケットの「所属先」を示す身分証明書です。

この構造を理解しているだけで、「なぜIP電話の音声パケットが、データ通信の輻輳に巻き込まれてノイズだらけになるのか?」といったQoS設計の甘さが、タグのPCP値を見れば一目瞭然になるわけです。

—

2. 実務の現場:トランクポートの設定と確認

運用現場では、CiscoのIOSを例にとると、トランクポートでのタグ付けは以下のように管理されます。

! インターフェースをトランクモードに設定
interface GigabitEthernet0/1
 switchport trunk encapsulation dot1q
 switchport mode trunk
 ! ネイティブVLANの設定(タグが付かないパケットの扱い)
 switchport trunk native vlan 1
 ! 通過を許可するVLANのリスト化
 switchport trunk allowed vlan 10,20,30

ここで重要なのが、native vlanの扱いです。ネイティブVLANに指定されたパケットにはタグが付与されません。これを忘れてベンダー混合環境(Ciscoと他社スイッチの混在)を構築すると、タグの不一致で通信が遮断される、いわゆる「VLANリーク」や「疎通不能」の温床となります。トラブル時は必ずshow interfaces trunkコマンドで、現在のタグ付け状況を確認する癖をつけてください。

—

3. アプリケーション層からネットワークを見る:Pythonでのパケット解析

インフラエンジニアであっても、PythonでScapyなどのライブラリを使い、流れているパケットをキャプチャしてみることは非常に有効なデバッグ手法です。

以下のコードは、ネットワークインターフェースを流れるパケットをキャプチャし、802.1Qタグが含まれている場合にそのVIDとPCPを抽出する簡単な例です。

from scapy.all import sniff, Dot1Q

def packet_callback(packet):
    # Dot1Qレイヤーが存在するか確認
    if packet.haslayer(Dot1Q):
        vlan_id = packet[Dot1Q].vlan
        priority = packet[Dot1Q].prio
        print(f"[+] VLAN ID: {vlan_id} | Priority: {priority}")

# eth0を監視(root権限が必要)
print("パケット監視を開始します...")
sniff(iface="eth0", filter="vlan", prn=packet_callback, store=0)

Web APIの開発者にとっても、クラウド環境(AWSのVPCやGCPのVPC)でネットワーク負荷が極端に高い際、こうしたパケットレベルの可視化はボトルネック特定の一助となります。

—

4. 最後に:トラブルシューティングの心得

現場で「VLANが繋がらない」と相談を受けた際、私が必ず確認するのは以下の3点です。

1. 対向機器とのMTU整合性: 802.1Qタグはフレームに4バイト追加します。MTUを1500に固定している環境では、タグ付きパケットが1504バイトとなり、MTUオーバーでドロップされるケースが稀にあります。
2. ネイティブVLANの不一致: スイッチ間でネイティブVLANの設定が異なると、セキュリティ上の脆弱性にも繋がります。
3. PCP値の意図せぬ書き換え: L3スイッチやルーターを通過する際、QoSポリシーによってタグのPCP値がリセットされていないか確認してください。

ネットワークは「魔法」ではありません。すべては0と1、そしてこの16ビットのTCIが語るルール通りに動いています。仕様書を読み込み、パケットを観察し、泥臭くコマンドを叩く。この繰り返しこそが、真のネットワークスペシャリストへの近道です。

次の記事では、このタグがどのようにQinQ(802.1ad)へと拡張され、データセンターの仮想化ネットワークを支えているのかを深掘りしたいと思います。それでは、また現場でお会いしましょう。

コメント

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