0

TCPに関するいくつかの質問。

パケットがMTUの低いネットワークデバイスなどに到達すると、パケットが「分割」または断片化されることはわかっています。しかし、私が抱えている問題は、アプリケーションでペイロードを「再構築」する方法を理解することです。(私は今2〜3時間試していますが、うまくいかないようです)

まず最初に。パケットを送信するとき、次の2つのオプションの長所/短所は何ですか。

NetworkStream ns = client.GetStream();
ns.Write(BitConverter.GetBytes(100));
ns.Write(BitConverter.GetBytes("Test"));

また

NetworkStream ns = client.GetStream();
byte[] payload = BitConverter.GetBytes(100).Concat(BitConverter.GetBytes("Test"));
ns.Write(payload); //, 0, payload.Length);

そして、どうすれば受信時にペイロードを再構築できますか。分割されている場合は一部ですか?私は現在のアプリケーションのいくつかの非常に重要な、しかしそれほど明白ではない部分を見逃しているように見えるので、これをスプーンで与えるのが大好きです。

4

1 に答える 1

5

MTU や断片化はまったく気にしません。断片化されたパケットを再構成するのは、OS の TCP/IP スタックの役割です。

これは TCP の「ストリーム」であるため、どのように読み書きするかは問題ではありません。それは単なる継続的なデータの流れです。そのストリームを介して渡されるデータ構造を提供するのは、パケットの定義次第です。

多くの構造化されたプロトコルでは、ユーザー定義のヘッダーがあり、最初のフィールドはパケットの長さを指定します。したがって、最初に X バイトを読み取ります。ここで、X はヘッダーのサイズです。そのヘッダーを解釈して、残りのパケットの大きさを把握します。次に、適切なバイト数を読み取って、残りのパケットを取得します。

したがって、あなたの2つの例のうち、それは実際には問題ではありません. 最も簡単なものを使用します (この場合は最初のもの)。

于 2012-11-04T20:14:21.307 に答える