移転中~(ネットワーク)TCPのスループットとRTTの関係まず、RTT(往復遅延時間)というのはパケットを送信して受信した側が送信側にACKパケットを送り、送信側でそれを受取るまでの時間です。TTL=54さて、これとは別にTCPプロトコルにはウィンドウサイズというものがあります。TCPは確実にパケットが届いたかどうかを確認するため、受信側が送信側にACKパケットを返すわけですが、毎回のパケット一つずつにACKを返すと非常に効率が悪いため、送信側が複数のパケットを送信し、その複数パケットに対してまとめて1回のACKを返すという仕組みをとってます。この"複数のパケットの単位"がウィンドウサイズになるわけですね。(TCPウィンドウサイズはWindowsとかだとRWINと呼ばれており、一時期ブロードバンド回線ならこの値を大きくすることでネットの高速化につながるというような情報もちらほら見られました。)このウィンドウサイズですが、基本的はOSで決まっています。WindowsXPだと64KB(65535Byte)です。サイズ変更についてが参考になります。スタックのパフォーマンスの拡張機能によるとVista以降だと最大16MBまで増やすようです。(WindowsのウィンドウサイズはOSが徐々に大きくしてくれるようですね。品質の悪い回線は小さく、いい回線は大きくしてくれるようです。最大値は上述の通りバージョンによって異なりますが。)さて、ここからが本題ですが、ウィンドウサイズとRTTからTCPのスループットを求めることができます。TCPのACKはウィンドウサイズ毎に送信側に返ってくる(この時間がRTT)ので、TCPの理論最大スループットは下記の計算式で求めることができるわけです。RTT(S)仮にウィンドウサイズ64KBで、RTTが10msだとすると、1秒間に64KBを100回送ることができるということになるので、下記のようになります。52,428,000bpsこれらの計算方法については下記サイトが参考になります。ブロードバンドスピードテストネットワ-クの速度を調べる方法ということで、実際にテストをしてみました。RTTですが、Pingで計ってみます。11msRTTは11ms=0.011sとなってますね。OSはXPなので、pingのパケット長はXPのウィンドウ最大サイズと同じ64KBにしています。後は、計算式に当てはめてみると下記のようになります。LANなので、こんなに遅いことはないはずです。実際に、Iperfで下記の設定で測定してみたところ、94Mbpsはでる結果になりました。上記で求めた理論値(47Mbps)の倍になっています。応答に当たるICMPエコーは、送信元が送ったデータパケットをそっくりそのまま消すようです。(先頭のタイプフィールドにエコー応答(0)とするようですが。)つまり、Pingで64KBのパケットを送った場合、RTTの値は64KBの往復値つまり128KBの時間となるわけですね。@ITが参考になります。いうことで、Pingで求めたRTTから論理スループットを計算するには下記のようにしないといけないようです。RTT(S)この式で上記の値を計算すると下記のようになり、実測とほぼ近い値が出ます。95,272,727bpsPingは最大65500バイトまでしか送れないので、それを超えたバイトをおくって純粋なRTT(ウィンドウサイズ先頭の送信開始から、ACKパケットが返ってくる時間)を測定できるようなフリーのツールがあればいいのですが、なかなかみあたりません。pingで65,535byteを送信できれば以下の式でスループットを計算できます。RTT(S)しばらくの間にすっかりネットワークの詳しい動作について忘れてしまっている3流PGです。ウィンドウサイズとRTTによるスループットの関係図が参考になります。ウィンドウサイズとRTTによるスループットの関係図が参考になります。情シスで何でも屋の三流プログラマのコーディング、サーバ管理、PC生活関係のメモ書き。このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。29検索カテゴリ全体Linuxサーバがらみ.Net開発PHP開発C/C++開発JavaSQLツール思ったこととかニュースとか。メッセージを入力してください。