TRILLはEthernetに何をもたらすのか?

餅は餅屋に、とも思うのですが、今回のエントリーは(も?)自分の学習メモ程度のクオリティということで斜めに読んで下さい(&間違いがあったら是非ご指摘ください。大歓迎。というか、ぜひ教えて下さい…。)。また、現時点で私はTRILLが実装されたスイッチを実際に触ってみたことはありません。完全に机上の情報ベースです…。

IETFのウェブサイトに最新の情報はありますが、まだTRILLはすべてが確定した仕様ではありません。…が、そこは世の常というか、各ベンダーは先行的に対応製品のリリースを開始しています。
http://datatracker.ietf.org/wg/trill/charter/

また、本エントリーの絵は"Brocade IP Primer"資料より使用させて頂いています。また、内容についても本書から学んだ内容が多く盛り込まれています。
「Brocade IP Primer」はネットワークの基礎からTCP/IP、DCBやTRILL、L2スイッチング機能としてLAGやVLAN、STPなど、L3スイッチング/ルーティング機能としてOSPFやMPLS、BGPなど、さらに上位レイヤー機能としてロードバランシングなどまで、非常に幅広い内容を、約400ページにわたってまとめた、無償で入手できる資料としてはとてもよい資料です(もちろん英語ですけど)。Brocadeウェブサイトで特に登録などもすることなく参照およびダウンロードが可能です(PDF版は約20MB)。

TRILLとは "Transparent Interconnection of Lots of Links" *1 の略称です。意訳的には、「多接続構成における透過的相互接続仕様」といった感じでしょうか。メッシュ的に接続されたネットワークにおいて、STPのように「論理的にツリー構造のパス構成とすることによりループのないネットワークにする」というやり方ではなく、「多接続構成をそのまま活用して成立するマルチパスなネットワーク構成にする」というやり方を実現するために策定が進められている仕様です。マイナス思考なSTPとプラス思考なTRILLとかいったらいいすぎでしょうか…(^_^;)。個人的にはベンダーによる独自拡張や様々な種類があることなど色々な理由でSTPは早く消え去って欲しいと願っていますので、そういう意味でもTRILLには期待しております。

TRILLのポイントをまとめると、以下の通りです。

  • 最短パスルーティング方式(Shortest path routing)を用いる
  • L2レベルで機能する
  • マルチホップに対応する
  • 任意の接続形態で使用することができる
  • 既存のリンク状態に基づいたルーティングプロトコル(IS-IS)を使用する
  • STPを用いた既存のEthernetにおいても互換性を確保する

L2レベルの仕様ですので、IPを用いないFCoEであってもTRILLは有効です。…というか、FCoEでも使えることが求められて策定が進められているマルチパス仕様といえるかもしれません。

「Transparent / 透過的」とあるとおり、TRILLは接続ノード側での対応は不要で、ノードはTRILLを一切意識することなく普通のEthernetフレームを送受信することができます。TRILLは「TRILLが構成されたスイッチ間」で機能し、いわば複数スイッチから構成されたFabricを構成します。Fabric内のスイッチ間接続パスがそれぞれコスト判断されてマルチホップが構成されるため、接続ノードは送信元も送信先もFabric内でどの経路を伝ってEthernetフレームが転送されてきたのかを意識することなく通信が成立します。基本的には最もパスの少ない最短経路が使用されますが、パスコストが等価な接続経路が複数あった場合は、それらのパスをどちらも使用する、いわば負荷分散が行われます(もちろん、意図してパスを指定することもできます)。

TRILLはL2レベルのマルチホップルーティングプロトコルです。ルーティングプロトコルといってもIPに依存したL3レベルではなくL2レベルで行われているルーティングであるところがポイントです。このため、IPを使用しないFCoEであってもTRILLの恩恵を得ることができます(もちろん、IPパケットであっても下回りでTRILLを使用することは可能です)。また、お互いのルーティング情報やリンクステート情報を交換しあってTRILL Fabricが自動的に再構成されるため、スイッチ追加の際に、STPのように「事前に設定をした上で接続する」必要がありませんし、STPのようにブロックポートの選定を行う必要はないので再計算中に通信がBlockingされてしまうようなこともありません。


TRILLにおけるマルチホップルーティングは、MACアドレスヘッダとTRILLヘッダをノードから送出されたEthernetフレームに付加する(つまりEthernetフレームをEthernetフレームでカプセル化する)ことによりL2レベルのルーティングを実現しています。元々のEthernetフレームのヘッダとして指定されている送信元MACアドレスおよび送信先MACアドレスには手を加えずに、ヘッダを付加しているという点がポイントです。IPパケットがEthernetフレームにIPヘッダを付加しているのと同じように、EthernetフレームにさらにTRILLヘッダを付加することによりノードで送受信されるEthernetフレームはそのままで、TRILL対応スイッチを経由する毎に書き換えられるヘッダはカプセル化している「外側のMACアドレスヘッダ」とすることにより整合性を維持したままでルーティングが行われます。


TRILLスイッチはノードから受け取ったEthernetフレームに、VLAN Tagにも対応したMACアドレスヘッダを付加してカプセル化します。この部分ではTRILLのルーティングテーブルに基づいてネクストホップとするスイッチが送信先として指定され、ホップしていく度に送信元と送信先MACアドレスが書き換えられていきます。合わせて、EthernetフレームにはTRILLヘッダが付加されており、こちらには最初のスイッチと最終的に到達させるスイッチがそれぞれRBridge (Routing Bridge)として指定されます。RBridgeはTRILLを構成するFabric内でIDとして相互に識別が行われ、いわばL3におけるIPアドレスのように機能します。
TRILLが使用されている場合、Ethernetフレームの転送は「ルーティングテーブルに基づいて」行われるため、物理的なループ構成は問題となりません。TRILLにおけるルーティングは送信先とするRBridgeごとにホップ数と送出元とするEthernetポートがルーティングテーブルに基づいて管理されているため、物理的にループ構成となっていてもEthernetフレームは(複数の経路があるとしても)必ず決まった経路で送受信されることとなるためです。基本的にはFCのFabricでループが発生しない仕組みをEthernetに持ち込む仕様がTRILLであるといえるかもしれません。

すでに各社からTRILLの仕様確定を見越した実装が進んでいますが、(当初はともかく)ぜひ各社には独自仕様などに走らず、最終的にはTRILLを高い互換性・相互利用性のある規格としいって欲しいと思います。そして早くSpanning Treeを駆逐して下さい。スパツリ嫌い(^_^;)。

*1:日経BPにおけるTRILLの解説はこちら