1

Netkit を使用してさまざまな TCP アルゴリズムで遊んでいます。

c1c2の2 台のマシンが、強制的に 200 ミリ秒の遅延を持つルーターによって接続されています。c1上のプログラムは、1ms ごとに 100 バイトのパケットをc2に送信しています(TCP_NODELAY がオンになっています)。Reno は両方のマシンで輻輳制御として使用されます。

tcpdump によると、最初の 2 つのパケットのみがすぐに送信され (200 バイト)、c1は送信を停止して ACK を待ちます。受信者のウィンドウは約 2MSS (MSS=1460) であるため、 c1がさらにパケットを送信するのを防ぐのは CWND だと思います。

Reno の仕様によると、最初の CWND は 1MSS です。私はそこに何かが欠けていますか?.. 1バイトのパケットを送信しても同じ画像が得られ、2つのパケットが送信され、送信者はACKを待ちます。初期の CWND サイズは、MSS ではなく、初期のセグメント サイズによって決定されるのでしょうか?

ip route show cacheのようなものを示しています

cache mtu 1500 rtt 361ms rttvar 360ms cwnd 5 advmss 1460 hoplimit 64

CWND=5MSSということなのかな?

4

3 に答える 3

1

RFC 2581から

cwnd の初期値である IW は、2*SMSS バイト以下でなければならず、2 セグメントを超えてはなりません。

式1 [AFP98]で定義されているように、非標準の実験的なTCP拡張により、TCPがより大きな初期ウィンドウ(IW)を使用できることに注意してください。

  IW = min (4*SMSS, max (2*SMSS, 4380 bytes))           (1)

この拡張により、
セグメントの合計サイズが 4380 バイトを超えない場合、TCP 送信者は 3 または 4 セグメントの初期ウィンドウを使用できます。このドキュメントで定義された標準の一部として、この変更を許可しません。ただし、TCP 輻輳制御の現在の標準に準拠するのではなく、この変更を実験するためのガイドラインとして、このドキュメントの残りの部分に (1) の説明を含めます。

SENDER MAXIMUM SEGMENT SIZE (SMSS): SMSS は、送信者が送信できる最大のセグメントのサイズです。この値は、ネットワークの最大伝送単位、パス MTU 発見 [MD90] アルゴリズム、RMSS (次の項目を参照)、またはその他の要因に基づくことができます。サイズには、TCP/IP ヘッダーとオプションは含まれません。

実装で SMSS がどのように計算されているかを確認することをお勧めします。

于 2010-12-13T15:09:55.223 に答える
0

私の知る限り、この場合、Linuxは「セグメント」でcwndを測定します。つまり、2つのセグメントをフライトに送信するとすぐに、cwndは新しいデータのために閉じられます。

于 2011-02-14T09:39:34.380 に答える