web-dev-qa-db-ja.com

イーサネットはどのようにしてフレームの長さを知るのですか?

ウィキペディアの Ethernet エントリを見ると、イーサネットフレームの長さがどのように示されているのかわかりません。 EtherType/Lengthヘッダーフィールドは、明らかにフレームタイプまたは明示的な長さのいずれかを示す可能性があり、フレームタイプの場合、パケットの長さを把握するために他のロジックを実行する必要があると思います。たとえば、EtherTypeフィールドが0x0800の場合、これはIPv4ペイロードを示しているため、受信NICは、ペイロードの最初の32ビットを調べてIPパケットの長さを見つける必要があります。したがって、イーサネットフレームの全長を把握し、フレーム終了時のチェックサムとフレーム間ギャップを探すタイミングを把握します。

この音は正しいですか? IEEE 802.3仕様 のイーサネット(パート1)も確認しましたが、これは裏付けのようですが、かなり不透明です。

18
dirtside

物理コーディングサブレイヤーは、フレームを区切って、それらをMACレイヤーに送信します。

たとえば、ギガビットイーサネットでは、8B/10Bエンコーディングスキームは10ビットコードグループを使用して8ビットバイトをエンコードします。余分な2ビットは、バイトが制御情報かデータかを示します。制御情報には、Configuration、Start_of_packet、End_of_packet、IDLE、Carrier_extend、Error_propagationがあります。

これは、NICがフレームの開始位置と終了位置を認識する方法です。これは、CのNULLで終了する文字列と同様に、完全にデコードされるまでフレームの長さがわからないことも意味します。

22
Hroi Sigurdsson

あなたの質問に本当に答えたい記事は http://en.wikipedia.org/wiki/Ethernet_II_framing ;です。それは言う:

この業界で開発された標準が正式なIEEE標準化プロセスを経て、EtherTypeフィールドは新しい802.3標準で(データ)長さフィールドに変更されました。 (元のイーサネットパケットは、明示的な長さのカウントではなく、それを囲むフレーミングで長さを定義します。)パケットの受信者は依然としてパケットの解釈方法を知る必要があるため、規格は長さを追跡して指定するためにIEEE 802.2ヘッダーを必要としましたパケットタイプ。

1
womble