web-dev-qa-db-ja.com

TCPセグメントのデータ部分の最小サイズ

私の質問には2つの部分があります。

  1. イーサネットフレームの「データ」部分は46〜1500バイトになる可能性があることを私は知っています。 20バイトのIPヘッダー+ TCP 20バイトのヘッダーを考慮すると、TCPセグメントの最小「データ」サイズは(46-20-20) = 6 bytesである必要があります。 8バイトのUDPヘッダーを考慮すると、UDPセグメントの最小「データ」サイズは(46-8-20) = 18 bytesである必要があります。したがって、アプリケーションデータサイズの下限が6バイトや18バイトなどの高い値になる理由を誰かが説明できます。 1バイトのような小さな値ではありませんか?何かが足りないと思います。

  2. 私はいくつかの説明を見つけました[1][2] IPパケットの最小サイズは64バイトである必要があります。上記のリンクの説明は正しいと思います。その場合、イーサネットフレームの最小「データ」サイズが(64-20-20) = 24 bytesではないのはなぜですか?

誰かがこれをより明確に説明できますか?

3
Adrian

イーサネットの最小フレームサイズは64バイトで指定されています(参考文献にも記載されています)。

DMAC + SMAC + EtherType + Payload + CRC  
 6   +  6   +     2     +    46   +  4  = 64

レイヤー4(TCPまたはUDP)では、「長さ」はレイヤー4ヘッダーをカバーし、IPヘッダーで追跡されます。
これは、UDPの場合、予想される最小値が8バイト(ヘッダーの場合)であることを意味します。また、TCPの場合は20バイトです(最小TCPヘッダー))。

あなたが欠けているように見える部分が始まります
イーサネットデータの長さは46バイト以上である必要がありますが、IPの長さは46-20バイトである必要はありません。それよりはるかに少ない可能性があります。

したがって、データがまったくない8バイトのUDPパケットがある場合、そのIPの長さは20+8になりますが、イーサネットのペイロードの長さは46バイトのままになります。 18バイトホールはどうなりますか?イーサネットフレームをワイヤ64バイトにするためにパディングされます(すでに知っている理由により)。

[Eth: DMAC + SMAC + EtherType + [IP: Hdr + [UDP: Hdr + 0data ]] + PAD + CRC ]

結論:あなたがapplication data sizeと呼ぶものには、この64バイトのイーサネット要件に基づく最小の期待はありません。 PADは、違いを補正します。

6
nik

短い答え:
TCPセグメントのデータ部分の最小長はゼロです。UDPデータグラムのデータ部分の最小長はゼロです。

IPスタックが46バイト未満のデータグラムをイーサネットに渡す必要がある場合、イーサネットはパディングバイトを追加して46バイトにパディングします。 IPヘッダーには独自の長さフィールドがあるため(TCPおよびUDPヘッダーと同様))、これらのプロトコルが混乱することはなく、リンク層のパディングを独自のペイロードの一部として解釈しようとします。

追加情報:
イーサネットは、IPを実行できる多くのデータリンク層プロトコルの1つにすぎません。イーサネットの最小パケット長は、従来の技術的な理由から64バイトです(イーサネットネットワークがCSMA/CDであり、衝突が発生する可能性があったときに、最大直径のイーサネットネットワークで「衝突」を確実に検出できるようにするためです。最近のイーサネットネットワークは、あらゆる場所でスイッチを使用しています。すべてのセグメントで全二重であるため、CSMA/CDと衝突はほとんど過去のものです)。

IP over Ethernetを頻繁に使用するため、イーサネットとIPは、2つの別個の機関によって作成された2つの別個のネットワークテクノロジーであることを忘れがちです。 IEEE(Institute of Electrical and Electronics Engineers)によって標準化されたイーサネットは、IP以外の未知の数のネットワーク(レイヤー3)プロトコルを処理するように設計され、IETF(Internet Engineering Task Force)によって作成されたIPは、イーサネット以外の不明な数のデータリンク(レイヤー2)プロトコル。 IPは、1つの一般的なリンク層プロトコルのために、最小または最大のデータグラムサイズを変更しません。リンク層プロトコルが取得する小さなデータグラムが気に入らない場合は、それを埋める必要があります。逆の場合、IPが現在のデータリンクが提供するMTUを気に入らない場合は、フラグメント化する必要があります。

4
Spiff