イーサネットCRC FCSエラートラブルシューティング

Posted by fmadio | 100G Ethernet

10GbE、20GbE、40GbE、100GbEパケットキャプチャの素晴らしい点のひとつはネットワーク破損を含めてすべてをキャプチャする事です!エラーは全体のパケットのペイロード全体で計算された32ビットのCRCであるイーサネットフレームチェックシーケンス(FCS)の形態をとります。この投稿ではWANリンクに良く見られるネットワークをどのようにキャプチャし、エラーをデバッグするツールをご紹介します。


  • cost effective packet capture

イーサネットフレームチェックシーケンス

イーサネットの構造の簡単なおさらいです。基礎はOSIレイヤー1で、水を流れる配管のようにパケットやエラーの修正をせずに、常にビットの流れを変える電気/光学的仕様です。レイヤー2はこれをビットの流れを明確に定義されたペイロードデータとCRCで個別パケットに分割します。配管を流れる水(レイヤー1)が水車に注がれ、固有のパケットを持つ水のバケツ(レイヤー2)に分割されるのをイメージしてください。

10g explained packet

セグメントの構造は上図になります。皆様は一部または全てのコンポーネントを見たことがあると思います。通常、ネットワークカードは「イーサネットプリアンブル(Ethernet Preamble)」、「フレームチェックシーケンス(Frame Check Sequence)」、「イーサネットエピログ (Packet Payload)」、「内部フレームギャップ(Inter Frame Gap)」を処理して隠し、「パケットペイロード」部分のデータをLinux / Systemの後続の処理のために渡します。NICはもしフレームチェックシーケンス(CRC)が良好で、つまりデータの完全性 が有効である場合のみ、データをシステムに渡します。

ネットワークFCS/CRCとは何でしょうか?簡単に言うと、パケットがスイッチまたはNICから送信されると、送信元はパケットデータの32bit CRC値を計算しネットワーク上のパケットの最後に添付します。これにより送信先は受け取ったデータから全く同じCRCを計算し、送信元がパケットの最後に添付したのと比較することでデータの完全性を保証します。もし数値が一致しない場合はどこかで/何かの原因でパケットが破損していることになるため、NICは通常パケットを破棄します。

イーサネットFCSをキャプチャ

100Gパケットキャプチャデバイスの主要な用途のひとつは100G LR4 WANリンクをデバッグすることです。データセンターで100Gイーサネットを使用するのは一般的ではない(2015年)ですが、データセンター間に100Gを使用するのはすごい勢いで広がっています!そのため弊社のツールで10G、40G、100GイーサネットFCSを正確で精密にキャプチャし処理するのが重要になります。しかし、自分で組み立てるパケットキャプチャプロジェクトの場合は、わずかなNICだけがFCSをホストシステムに渡し、本物の完全なパケットキャプチャデバイスには専用のネットワークカードが必要になります。

しかしWireshark内蔵のFCSチェックロジックは使えませんか?もちろん大丈夫です、ですがワイヤー上のオリジナルのFCS値がNICから比較するために必要になります。Wiresharkはすばらしいツールで私達も強く勧めます。しかし全てのパケットのFCSがあり、1TB PCAPをWireSharkにロードするのには大変長い時間がかかります...

弊社のPacketScopeマイクロバースト解析は無効なFCSをフィルターして処理することができ、通常は数十億の中に少ししかない無効なFCSパケットのみを抽出することができます。またワイヤーの破損レベルに応じて特定の期間、MACアドレス、プロトコルをも活用して抽出条件を絞ることができます。

弊社のFCS破損testsuite

弊社は無効なFCSがあるパケットをキャプチャしダウンロードするための回帰テストがあります。故意に通常のNIC上にあるイーサネットFCSを破損させることができないためFMADIO FPGSベースのパケットジェネレーターを利用します。特定のテストではフル10GbEラインレートで64Bペイロードを使用し、1/10パケットまたは1,000,000,000のパケット合計の内10%を破損させます。パケットを作成し、Wiresharkにキャプチャをダウンロードした結果が以下のスクリーンショットのようになります。

10g explained packet

Wiresharkに黒くマークされている一定期間ごと(10パケットにつき1つ)のFCSエラーをはっきりと見ることができます。これは良いテストですが、実際にこのようなエラーは合計パケットの0.0000001%です。つまり100GBキャプチャで100程度の破損パケットです。100GBキャプチャはWiresharkでは問題ですが、弊社内蔵のFMADIO PacketScope解析ならば100GBを扱うのは簡単です。

PacketScope無効なFCS抽出

以下のスクリーンショットでは、キャプチャはパケットスコープにロードされ、次の条件で無効なFCSパケット(緑色箇所)を全て選択するフィルタールールを適用しています。
ether.fcs == fail
10g invalid fcs filter

PCAPはそして青色箇所(上図)のボタンを利用してダウンロードされます。システムはSSD帯域幅の10Gbps、20Gbps、100Gbpsの完全なIOスループットを活用し不要なFCSパケットのみを抽出することができます。それはWireSharkとは比較にならないほどの速さです。ダウンロードが完了したら、そのPCAPをWireSharkにロードして問題のあるパケットだけを分析することができます。(下図参照)

10g invalid fcs filter

Summary

あなたのパケットスニファーデバイスがワイヤー上の良いパケットそして悪い/破損したネットワークパケットの両方をキャプチャするのがとても重要です。両方の結果無しで全体を把握するのは難しいです。弊社のFMADIOパケットスニファーは良い、悪い、汚いパケットをキャプチャし、無効なFCSパケットのみを簡単に速く抽出することで、問題の原因をすぐに見つけ出す事ができます。

もし詳細または悪い(または良い)パケットの質問がある場合は、いつでも私達にご連絡ください。