「まだSTPのデフォルト値で消耗してるの?」― ネットワーク収束を支配する3つのタイマーと現場の知恵
ネットワークエンジニアとして現場を渡り歩いていると、いまだに「STP(Spanning Tree Protocol)は遅い」という嘆きを耳にします。確かに、デフォルト設定のまま運用すれば、障害時に30秒から50秒もの通信断が発生するのは事実。現代のWeb APIやマイクロサービスが跋扈する環境において、それは「死」を意味します。
今日は、STPの心臓部であるタイマー設定にメスを入れ、いかにしてこの「レガシーな守護神」を現代のネットワークで適切に飼いならすか、その核心を解説しましょう。
—
収束の現場を支配する「3つのタイマー」の正体
IEEE 802.1Dで定義されたSTPは、ループを回避するために「慎重すぎる」ほど時間をかけて状態遷移を行います。その根拠となるのが以下の3つのパラメーターです。
1. Hello Time (デフォルト: 2秒)
- ルートブリッジがBPDUを送信する間隔です。この間隔でトポロジの健康状態を監視します。
2. Forward Delay (デフォルト: 15秒)
ListeningからLearning、そしてForwardingへ移行する際に「待機」する時間です。ループを防ぐために、MACテーブルが学習されるまでの猶予期間を設けています。
3. Max Age (デフォルト: 20秒)
- BPDUの有効期限です。最後にBPDUを受信してからこの時間が経過すると、その情報を破棄し、トポロジ変更を開始します。
これらが組み合わさり、障害発生から収束まで最大50秒(Max Age + Forward Delay + Forward Delay)かかる計算になります。この挙動は、まさに「石橋を叩いて渡る」という言葉そのものですが、今の時代にはあまりに重厚すぎます。
—
チューニングの鉄則:いじっていい場所、いけない場所
現場でタイマーをいじる際、必ず覚えておいてほしい鉄則があります。それは「タイマーの絶対値を下げるよりも、役割を分ける」ことです。
1. PortFast を活用する(アクセス層の常識)
サーバーやPCが接続されるエッジポートに対し、Forward Delayを待たせる必要はありません。PortFastを有効にすれば、ポートは即座にForwarding状態へ移行します。
# Cisco IOSの設定例
interface GigabitEthernet0/1
description Server_Node_01
switchport mode access
# エッジポートにはPortFastを適用し、遷移時間を短縮する
spanning-tree portfast
# セキュリティのためにBPDUガードもセットで入れるのが鉄則
spanning-tree bpduguard enable
2. RSTP (802.1w) への移行
タイマー設定を微調整して延命するより、根本的にRSTP(Rapid Spanning Tree)へ切り替えるのが現代の最適解です。RSTPは「提案と合意(Proposal/Agreement)」のプロセスにより、理論上ミリ秒単位での収束が可能です。
—
実践:ネットワーク監視とタイマーのズレを検知する
エンジニアとして、スイッチの設定だけでなく、ネットワーク越しに「今、通信がどれだけ安定しているか」を把握しておくことも重要です。例えば、Pythonで簡単な疎通監視コードを書いておくと、スパニングツリーの再計算による揺らぎを可視化できます。
import requests
import time
# ネットワークの収束状況をトレースする簡易スクリプト
TARGET_URL = "http://192.168.1.1/api/health"
def monitor_latency():
while True:
try:
start = time.time()
response = requests.get(TARGET_URL, timeout=2)
latency = (time.time() - start) * 1000
print(f"[OK] Latency: {latency:.2f}ms")
except requests.exceptions.RequestException as e:
# 収束中の通信断が発生するとここで検知できる
print(f"[ALERT] Connection lost: {e}")
# 1秒間隔で監視
time.sleep(1)
if __name__ == "__main__":
monitor_latency()
—
シニアエンジニアからの警告
最後に一つ、現場での痛い失敗から学んだ教訓を伝えます。
「タイマー値の極端な変更は、ネットワークの安定性を崩す」
Hello Timeを短くしすぎると、わずかなCPU負荷やトラフィックバーストでBPDUがドロップし、ネットワーク全体で「偽のトポロジ変更」が頻発するフラッピングを引き起こします。もしどうしてもタイマーを調整する必要があるなら、ルートブリッジでしか設定を変更してはいけません。
- 推奨アクション:
- アクセス層には
PortFastを徹底する。 - コア/ディストリビューション層は RSTP か MSTP へ移行する。
- タイマー値は可能な限りデフォルトを維持し、物理的なトポロジ設計を見直す。
ネットワークは「いかに止めるか」ではなく「いかに復旧を意識させないか」の世界です。パケットがスイッチのASICを通過する瞬間の挙動を想像し、論理的な裏付けを持って設定を行ってください。それが、CCIEが目指す「見えないインフラ」の姿なのですから。
コメント