理論的には、最大 tcp 速度は min{rwnd,cwnd} / RTT です。ここで、cwnd は輻輳ウィンドウ サイズ、rwnd は受信ウィンドウ サイズです。cwnd が十分に大きいと仮定すると、rwnd/RTT になります。ここで、最大ウィンドウ サイズが 65K バイトの場合、次のようになります (一部のサイトからのこれらの計算を使用):
RTT 10 ms => TCP throughput = 52428000 bps = 52Mbps
RTT 20 ms => TCP throughput = 26214000 bps = 26Mbps
RTT 50 ms => TCP throughput = 10485600 bps = 10Mbps
RTT 100 ms => TCP throughput = 5242800 bps = 5.2Mbps
RTT 150 ms => TCP throughput = 3495200 bps = 4.3Mbps
RTT 200 ms => TCP throughput = 2621400 bps = 2.5Mbps
RTT 300 ms => TCP throughput = 1747600 bps = 1.7Mbps
RTT 500 ms => TCP throughput = 1048560 bps = 1Mbps
これはどのくらい正確ですか?RTT が 200 ミリ秒を超えている間、Web サイト (トレント、直接ダウンロードではなく) から 5 Mbps でダウンロードできるため、理論上の最大値を超えていますが、なぜこのようなことが起こるのでしょうか? ブラウザーはダウンロードに複数の TCP 接続を使用しますか?
また、rwnd バイトが 1 つ以上の TCP セグメント サイズになる可能性がある (そして確実にそうなる) ため、rwnd/RTT が実際にどこから来たのかを正確に知りたいと思います。 RTT は、送信されたすべてのセグメントから ACK を送受信するのに十分ではないため、rwnd/RTT は実際のスループットとはかなりかけ離れています。