Ethernet TSN(10)プリエンプション機能追加と各フラグメント

プリエンプションは、分割した最初のフレームを「開始フラグメント」、その後に幾つかの「継続フラグメント」が続き、最後に「最終フラグメント」になる構造だ。開始/複数の継続/最終フラグメントを順序を含め識別するコードを埋め込み、誤った再構成が起きないように工夫している。しかし、最も厄介な問題はフレーム消失やビット反転などのエラーだ。

開始フラグメント/継続フラグメント/最終フラグメントについて説明する。標準イーサネットのフレーム構造とフラグメントフレーム構造の全体図は、図1 をご覧いただきたい。緑色は標準イーサネットに変更を加えていない部分、茶色部はプリエンプション(フラグメント)で追加された部分で、青色のMACアドレスから白のデータ部は一切手を加えていない。

図1 標準イーサネットフレームとフラグメントフレーム
図1 標準イーサネットフレームとフラグメントフレーム

開始フラグメント

開始フラグメントは、標準イーサネットフレームを分割した最初のフラグメントだ。図2 「開始フラグメント」の様に、フレーム間ギャップとプリアンブルは標準イーサネットと同じだ。プリアンブルと宛先 MAC アドレス以降のデータ部を区切るデータパターンは、従来の SFD (Start Frame Delimiter)から SMD(Start mPacket Delimiter)と名前を変えた。開始フラグメントを示す、SMD(SMD-Sx の値は 0xE6、0x4C、0x7F または 0xB3 だ。どの値を選択するかは後ほど説明する。

次に来るデータ部は、標準イーサネットの先頭から少なくとも60バイト以上の長さで、最後に4バイトの CRC 演算部(FCS)が付く。CRC 演算部は名前を mCRC と変え、演算式は同じだが下位2バイト(16ビット)がビット反転している。演算の範囲は標準イーサネットと同様、データ部の先頭(宛先 MAC アドレス)から最終データまでだ。

標準イーサネット機器は、プリアンブルとデータ部の境界パターン(SMD)が変わったことで、データ部の先頭を認識でないため、開始フラグメントを「ノイズ」と判断し、内部に取り込まない。仮にフレームとして認識できたとしても、最後の mCRC は標準の FCS とは異なるため、エラーとして廃棄する。つまり、開始フラグメントを誤って標準イーサネット機器に送信しても、廃棄されるため影響はない。

図2 標準イーサネットフレームと開始フラグメント
図2 標準イーサネットフレームと開始フラグメント

継続フラグメント

継続フラグメントは、2番目以降のフラグメントだ。図3 「継続フラグメント」のように、フレーム間ギャップは変わらないが、プリアンブルは1バイト短く6バイトになった。長さは変わったが、データパターンは従来と変わらず 0x55(01010101)だ。次に SMD と新たにフラグメントカウンタが1バイト追加された。標準イーサネットでは、プリアンブルと SFD を合わせた先頭部の長さは8バイトだ。継続フラグメントは、フラグメントカウンタを1バイト追加し、プリアンブルを1バイト短縮することで、先頭部の長さを同じ8バイトに調整した。

40年以上に渡り、クロック同期をとるプリアンブルは7バイトだった。IEEE はついにプリアンブルの短縮に踏み切った。Ethernet TSN で追加されたフラグメントフレームは、既設の標準イーサネット機器では物理層でフレームとして認識できないかエラーとして廃棄されることを狙っているため、クロック同期に失敗してもフレームは廃棄され問題は起きない。

継続フラグメントを示す SMD(SMD-Cx の値は 0x61、0x52、0x9E または 0x2A だ。開始フラグメントの SMD-Sx と値が異なる。どの値を選択するかは後ほど説明する。

SMD の次がフラグメントカウンタだ。受信デバイスが正しい順番で再構成するために、フラグメントカウンタは 0/1/2/3 の4つの状態を繰り返すようになっている。例えば、S(開始)→0 →1 →2 →3 →0 →1 →2 →3 →0 →1 ・・・だ。しかし、1バイトのフラグメントカウンタの値が、0x00/0x01/0x02/0x03 と変わるのではなく、0xE6/0x4C/0x7F/0xB3 と8ビットを使った値になる。

SMD-Sx、SMD-Cx と同様に、フラグメントカウンタも単純な 0/1/2/3 ではなく不思議な値だ。図3 を見ていただきたい。フラグメントフレームの先頭部のデリミターとフラグメントカウンタは、エラー検出を行う CRC 演算の対象外だ。CRC 演算の対象はデータ部に限られている。デリミタとフラグメントカウンタに 0x00/0x01/0x02/0x03 を使用すると、たった1ビットの反転で、開始/継続/最終フラグメントの識別や、継続フラグメントの順序が識別できなくなる。伝送路上のエラーに非常に弱い構造になってしまう。この弱点をカバーするために、比較的ビット反転などのエラーに強く、エラー検出できるコードが割り当てられている。これは「ハミングの距離」と呼ばれる数学の論理を使っているが、これは後ほど概要を説明する。

次に来るデータ部は、標準イーサネットの先頭から少なくとも60バイト以上の長さで、最後に4バイトの CRC 演算部が付く。開始フラグメントと同じように、CRC 演算部(FCS)は名前を mCRC と変え、演算式は同じだが下位2バイト(16ビット)がビット反転している。演算の範囲は標準イーサネットと同様、データ部の先頭(宛先 MAC アドレス)から最終データまでだ。

図3 開始フラグメントと継続フラグメント
図3 開始フラグメントと継続フラグメント

最終フラグメント

図4 の様に、「継続フラグメント」と「最終フラグメント」のフレーム間ギャップからフラグメントカウンタまでは全く同じ作りだ。唯一の違いは、最後の CRC 演算部だ。継続フラグメントは mCRC で下位2バイトが反転しているが、最終フラグメントは分割前イーサネットフレームの CRC 演算部(FCS)がコピーされ、下位2バイトは反転していない。最終フラグメントの判断は、フラグメント単位の mCRC 演算とフレーム全体の CRC 演算(FCS)の両方の演算を行い、FCS と一致すれば「最終フラグメント」と判断することになる。

フラグメント総数を、フラグメントのヘッダ情報に追加すれば、継続フラグメントの順序と最終フラグメントの識別は容易にできる。しかし、新たな領域を追加することになる。IEEE は領域を増やさず、 CRC 演算部で代用する道を選んだ。

イーサネット機器が登場してから既に40年以上が経過し、100Mbps の登場からも30年以上が経過している。フラグメント総数を付加するために、「プリアンブル+SFD 」を拡張した場合、既設機器との互換性確認は極めて困難だったのではないだろうか。

図4 継続フラグメントと最終フラグメント
図4 継続フラグメントと最終フラグメント

Ethernet TSN

この記事を書いた人

岩崎 有平

早稲田大学 理工学部 電子通信学科にて通信工学を専攻。
安立電気(現 アンリツ)に入社後、コンピュータ周辺機器の開発を経てネットワーク機器の開発やプロモーションに従事する。
おもにEthernetを利用したリアルタイム監視映像配信サービスの実現や、重要データの優先配信、映像ストリームの安定配信に向けた機器の開発行い、Video On Demandや金融機関のネットワークシステム安定化に注力した。
現在は、Ethernetにおけるリアルタイム機能の強化・開発と普及に向けて、Ethernet TSNの普及活動を行っている。