【テクニカル・上級編】 DEI(Drop Eligible Indicator)フィールドの機能と輻輳制御 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

パケットの生死を握る1ビットの哲学:DEI(Drop Eligible Indicator)がもたらすQoSの極限と輻輳制御の深淵

ネットワークの現場に身を置くインフラアーキテクトやテックリードであれば、スイッチのバックプレーンが悲鳴を上げる瞬間、あるいはデータセンター間の長距離WAN回線でバッファが溢れ返るスリリングな光景に一度は魅せられたことがあるはずだ。

「なぜ、あのクリティカルなデータベースの同期トラフィックは生き残り、あんなにも平然とベストエフォートのログ転送がパケットロスしていくのか?」

その答えの多くは、L2レイヤーの暗部、すなわちIEEE 802.1Qおよび802.1ad(Q-in-Q)が規定するEthernetフレームのVLANタギング、正確にはTCI(Tag Control Information)の中にひっそりと佇むわずか1ビットのフラグに隠されている。

旧CFI(Canonical Format Indicator)から生まれ変わり、現代のキャリアイーサネットやデータセンターネットワークのQoS(Quality of Service)戦略において極めて重要な役割を担う DEI(Drop Eligible Indicator)。今回は、この1ビットの機能と輻輳制御のメカニズムについて、パケットレベルの内部挙動からLinuxカーネルでの実装、そしてTCPの輻輳ウィンドウやトランスポート層への波及効果に至るまで、徹底的に解き明かしていこう。

—

1. DEIフィールドの解剖:CFIからDEIへの進化とパケット構造

まず、IEEE 802.1Qタグの構造を思い出してほしい。Ethernetヘッダーの直後に挿入される4バイト(32ビット)のタグは、以下のように分解される。

  • TPID (Tag Protocol Identifier): 16ビット(例: 0x8100)
  • TCI (Tag Control Information): 16ビット
  • PCP (Priority Code Point): 3ビット(CoS: Class of Service)
  • DEI (Drop Eligible Indicator): 1ビット
  • VID (VLAN Identifier): 12ビット

かつて、この3ビット目の1ビットは「CFI(Canonical Format Indicator)」と呼ばれていた。Token RingやFDDIといったレガシーなMACアーキテクチャと、Ethernetの間でMACアドレスのビット順序(Canonical / Non-canonical)を指示するための名残に過ぎなかった。しかし、レガシーLANの淘汰とともに、この1ビットは「無駄な空間」と化していた。

IEEE 802.1ad(Provider Bridges / Q-in-Q)およびIEEE 802.1Qの改訂により、この1ビットは再定義され、DEI(Drop Eligible Indicator)へと生まれ変わった。

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        TPID (0x8100)          |P|D|VLAN ID (VID)              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                 ^ ^
                                 | |
                                 | +-- DEI (1 bit): 0 = 破棄不可, 1 = 破棄対象
                                 +---- PCP (3 bits): 優先度 (0〜7)

DEIのバイナリ的意味

  • DEI = 0 : 輻輳発生時であっても、可能な限り保護されるべきフレーム(Drop ineligible)。
  • DEI = 1 : ネットワークが輻輳に陥った際、優先的にドロップ(廃棄)しても構わないフレーム(Drop eligible)。

この単純な1ビットのフラグが存在するおかげで、スイッチやルーターは「同じ優先度(PCP)を持つトラフィック同士であっても、どちらを優先的に切り捨てるべきか」を動的に判断できるようになる。

—

2. パケットレベルの挙動とハードウェア・スイッチのキューイング

では、このDEIがスイッチのASIC(Application-Specific Integrated Circuit)内部でどのように処理されるのか、パケットのライフサイクルを追ってみよう。

1. イングレス(Ingress)処理:
フレームがスイッチのポートに到達すると、パケットパーサーがIEEE 802.1Qタグを読み取り、PCPとDEIの値を抽出する。
2. CoSマッピングとカラーリング(Coloring):
内部的なQoSポリシーに基づき、トラフィックは複数の出力キューに割り振られる。この際、DEIが 1 に設定されているフレームには、内部的に「Yellow(またはRed)」といったドロップ適格性のマーキング(Color)が付与される。
3. エグレス(Egress)と輻輳検知:
バッファメモリ(Output Buffer)の占有率が特定の閾値(Watermark)を超えると、RED(Random Early Detection)やWRED(Weighted Random Early Detection)といったアクティブキュー管理(AQM)アルゴリズムが発動する。
4. 選択的ドロップ:
バッファが限界に近づいた際、WREDは DEI = 1 のフレームを DEI = 0 のフレームよりも遥かに高い確率で、あるいは優先的に破棄(Tail Drop or Early Drop)する。これにより、重要度の低いトラフィックを犠牲にして、重要度の高いトラフィックの遅延(Latency)とパケットロスを最小限に抑える。

—

3. LinuxカーネルにおけるDEI/PCPの制御とトランスポート層への影響

インフラエンジニアとして避けて通れないのが、Linuxホストから送出されるトラフィックのQoSマーク付けだ。Linuxのトラフィックコントロール(tcサブシステム)を用いて、パケットにPCPとDEIを付与し、さらにそれがTCPやTLS層の挙動にどう影響するかを見ていこう。

Linux iproute2 (tc) を用いたVLANパケットのマーキング設定例

以下のスクリプトは、Linuxのネットワークインターフェース(例: eth0)上で、特定のDSCP値を持つパケットをL2のPCP/DEIにマッピングし、輻輳時の挙動を最適化するための設定である。

#!/bin/bash

# 対象のインターフェース
INTERFACE="eth0"

# 1. 既存のqdiscをクリア
tc qdisc del dev $INTERFACE root 2>/dev/null || true

# 2. 根元にPRIO qdiscを作成し、優先度別のバンドを構築
tc qdisc add dev $INTERFACE root handle 1: prio

# 3. ネットワーク内部のDSCPマーキングに基づき、SKB(Socket Buffer)のpriorityをマッピング
# 例: EF (Expedited Forwarding: DSCP 46) は高優先度バンド (1:1) へ
# 例: BE (Best Effort: DSCP 0) は低優先度バンド (1:3) へ
vlan egr-map dev $INTERFACE 0:0 46:1 0:3

# 4. 厳格な帯域制御とWRED的なドロップポリシーの適用(ここではsfqまたはredを使用)
tc qdisc add dev $INTERFACE parent 1:1 handle 10: red limit 1000 min 200 max 800 avpkt 1000 burst 23
tc qdisc add dev $INTERFACE parent 1:3 handle 30: red limit 500 min 50 max 200 avpkt 1000 burst 10

echo "VLAN PCP/DEI and RED QoS policies applied successfully to $INTERFACE"

TCP輻輳ウィンドウ(cwnd)とTLSハンドシェイクへの波及効果

ここで非常に重要な視点がある。「L2のDEIによるパケットロスが、上位レイヤーであるTCPやTLSに何をもたらすか」という点だ。

1. TCPの自律的スロットリング:
DEIによって意図的にドロップされたパケット(例えば、バルク転送やログ転送のTCPセグメント)は、送信側ホストでDUP ACKの受信またはRTO(Retransmission Timeout)を引き起こす。これにより、TCPの輻輳ウィンドウ(cwnd)が縮小し、ネットワーク全体の負荷が自律的に軽減される。
2. TLSハンドシェイクの保護:
一方で、対話的なWebトラフィックやミッションクリティカルなAPI通信、あるいは強固なセキュリティを担保するTLS 1.3のハンドシェイクパケット(Client HelloやFinishedなど)には DEI = 0(破棄不可)を明示、あるいは高PCPを割り当てる。これにより、ネットワークが過負荷状態であっても、セッションの確立や再ネゴシエーションが遅延・切断されるリスクを劇的に低下させることができる。

—

4. セキュリティとパフォーマンスの十字路:DEIの悪用と防御

ネットワークスペシャリストとしてセキュリティの観点を忘れてはならない。QoSやタグ操作は、時として巧妙な攻撃やトラフィックの改ざんのターゲットになる。

1. QoS/CoS信頼境界(Trust Boundary)の欠如

エッジスイッチやルーターが、外部ネットワークから流入するパケットのPCPやDEIを無条件で信頼(Trust)している場合、悪意あるユーザーが自端末からすべてのパケットに PCP = 7(最高優先度)や DEI = 0 を付与して送信する可能性がある。
これにより、ベストエフォート型の正当なトラフィックが完全に飢餓状態(Starvation)に陥る「QoS飢餓攻撃」が成立してしまう。

対策:
キャリアやデータセンターのエッジ(PE: Provider Edge)では、必ずトラフィック・ポリシング(Policing)およびマーキングの再設定(Remarking)を行い、信頼境界の内側に入る手前でユーザー側が設定したPCP/DEIを一旦クリア、あるいは社内ポリシーに従って強制的に再マッピングしなければならない。

Cisco IOS-XEでのトラフィック・クラシフィケーションおよびリマーキング例

ip access-list extended CRITICAL_API
 permit tcp any host 192.168.100.10 eq 443

class-map match-all CM_CRITICAL
 match access-group name CRITICAL_API

policy-map PM_INGRESS_REMARK
 class CM_CRITICAL
  set dscp af41
  set cos 5
 class class-default
  set dscp default
  set cos 0
  # ベストエフォートトラフィックのDEIを有効化して、輻輳時に即座に落とせるようにする
  # (※プラットフォームによりDEI設定コマンドは異なります)

interface GigabitEthernet0/0/1
 service-policy input PM_INGRESS_REMARK

—

5. RTT削減とトランスポート最適化の極み

現代の超低遅延(Ultra-Low Latency)が求められる金融取引(HFT)や大規模AIクラスタの分散学習(Distributed Training)において、バッファブトート(Bufferbloat)の抑制は至上命題である。

巨大なバッファがスイッチに存在すると、パケットがキューに溜まり続け、RTT(Round Trip Time)が数百ミリ秒まで跳ね上がる。これを防ぐために、Explicit Congestion Notification (ECN) や Data Center TCP (DCTCP) といった先端的なトランスポート技術が使われるが、レイヤー2のDEIもまた、このバッファ管理のハードウェア支援として機能する。

  • 早期警告と軽量化: バッファが溢れる前に DEI = 1 のパケットをスマートに間引くことで、TCPのキュー滞留時間を物理層の段階で強制的にリセットする。
  • RTTの安定化: バッファ遅延(Queueing Delay)の増大を防ぐことで、TLS 1.3の0-RTTハンドシェイクやQUICプロトコルのような、遅延に敏感なトランスポート層のパフォーマンスを極限まで引き上げる。

—

結びにかえて

DEI(Drop Eligible Indicator)というたった1ビットのフラグ。それは単なる「おまけのタグ情報」などではない。パケットが数千キロの光ファイバーを駆け抜け、ルーターの巨大なクロスバスイッチを通過するその瞬間、運命の分かれ道を決定づける「賢明な選別者」である。

インフラを構築し、チューニングし、守り抜く我々エンジニアは、L3のルーティングやL4の輻輳制御アルゴリズムだけでなく、こうしたL2の奥深く息づく1ビットの挙動にまで目を配る必要がある。パケットの深淵を愛し、その一挙手一投足にストーリーを見出すことこそが、真にレジリエントで高パフォーマンスなネットワークを創り上げる唯一の道なのだから。

コメント

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