TCP の性能を測定する必要があるので, 性能の指標と測定方法について調べてみたまとめです.

特性を表す代表的な数値は以下.

  • 帯域幅 (bandwidth)
  • 遅延時間 (latency/RTT)
  • スループット

帯域幅 (bandwidth)

一定時間に通過できるデータ量.

Windows パフォーマンスモニタでの計測.

Windows 標準でついているツール.

BitMeter OS での計測.

Web 上で結果が見られる.

遅延時間 (latency)

デバイスに対してデータ転送などを要求してから, その結果が返送されるまでの遅延時間のこと.

インターネットにおける往復レイテンシについては ラウンドトリップタイム (Round Trip Time, RTT) とも呼ばれる.

遅延 (レイテンシ) というものは 1 パケットとその ACK (受け取ったという応答) の往復にかかる所要時間 RTT (Round-Trip-Time) で見る.

伝送経路での個々のパケットの時間遅れ. データ経路の長さ (遠さ) と考えると良い. 究極的には “距離÷光速” だけの時間遅れがある.

RTT

パケットを送信して受信した側が送信側に ACK パケットを送り, 送信側でそれを受取るまでの時間.

TCP での通信に関しては, ラウンドトリップタイムはセグメント送信と ACK 受信の間の時間を計測することによる 3 ウェイ・ハンドシェイクで計算される.

パケットを送信して受信した側が送信側に ACK パケットを送り, 送信側でそれを受取るまでの時間.

ping を利用して RTT を計測

C:\Users\tsu-nera>ping www.google.co.jp

www.google.co.jp [173.194.117.183] に ping を送信しています 32 バイトのデータ:
173.194.117.183 からの応答: バイト数 =32 時間 =11ms TTL=55
173.194.117.183 からの応答: バイト数 =32 時間 =20ms TTL=55
173.194.117.183 からの応答: バイト数 =32 時間 =10ms TTL=55
173.194.117.183 からの応答: バイト数 =32 時間 =10ms TTL=55

173.194.117.183 の ping 統計:
    パケット数: 送信 = 4, 受信 = 4, 損失 = 0 (0% の損失),
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 10ms, 最大 = 20ms, 平均 = 12ms

pathping を利用して RTT を計測

Windows のコマンド. ping をよくしたもの.

C:\Users\tsu-nera>pathping www.google.co.jp

www.google.co.jp [173.194.126.216] へのルートをトレースしています
経由するホップ数は最大 30 です:
  0  Lets-Win8 [192.168.11.7]
  1  192.168.11.1
  2  kanagawa12-3.ntt-poi.FreeBit.NET [220.150.74.5]
  3  1.74.150.220.ap.yournet.ne.jp [220.150.74.1]
  4  43.244.2.61
  5  ae0.31.TR1.B9A.FreeBit.NET [219.99.124.178]
  6  ae0.109.TR1.B9A.FreeBit.NET [219.99.88.77]
  7  210.173.176.243
  8  209.85.249.64
  9     *     72.14.232.99
 10  nrt04s07-in-f24.1e100.net [173.194.126.216]

統計を 250 秒間計算しています...
            ソースからここまで   このノード/ リンク
ホップ  RTT    損失/ 送信 = Pct  損失/ 送信 = Pct  アドレス
  0                                           Lets-Win8 [192.168.11.7]
                                0/ 100 =  0%   |
  1    5ms     0/ 100 =  0%     0/ 100 =  0%  192.168.11.1
                                0/ 100 =  0%   |
  2   11ms     0/ 100 =  0%     0/ 100 =  0%  kanagawa12-3.ntt-poi.FreeBit.NET [
220.150.74.5]
                                0/ 100 =  0%   |
  3    8ms     0/ 100 =  0%     0/ 100 =  0%  1.74.150.220.ap.yournet.ne.jp [220
.150.74.1]
                                0/ 100 =  0%   |
  4   14ms     0/ 100 =  0%     0/ 100 =  0%  43.244.2.61
                                0/ 100 =  0%   |
  5   16ms     5/ 100 =  5%     5/ 100 =  5%  ae0.31.TR1.B9A.FreeBit.NET [219.99
.124.178]
                                0/ 100 =  0%   |
  6   15ms     0/ 100 =  0%     0/ 100 =  0%  ae0.109.TR1.B9A.FreeBit.NET [219.9
9.88.77]
                                2/ 100 =  2%   |
  7   18ms     5/ 100 =  5%     3/ 100 =  3%  210.173.176.243
                                0/ 100 =  0%   |
  8   24ms     2/ 100 =  2%     0/ 100 =  0%  209.85.249.64
                                1/ 100 =  1%   |
  9  ---     100/ 100 =100%    97/ 100 = 97%  72.14.232.99
                                0/ 100 =  0%   |
 10   15ms     3/ 100 =  3%     0/ 100 =  0%  nrt04s07-in-f24.1e100.net [173.194
.126.216]

トレースを完了しました.

スループット

理論的に実現可能な TCP の最大転送速度.

スループット (bps) = TCP ウィンドウサイズ (KB) * 8 / RTT (S)

ping で RTT を調べたら, x 2 をすることを忘れない.

ウィンドウサイズが 64K バイトの場合の TCP 最大スループットの理論値は以下のとおり

RTT 1msec のとき 512Mbps
RTT 5msec のとき 102.4Mbps
RTT 10msec のとき 51.2Mbps
RTT 15msec のとき 34.1Mbps
RTT 20msec のとき 25.6Mbps
RTT 50msec のとき 10.24Mbps
RTT 100msec のとき 5.12Mbps
RTT 200msec のとき 2.56Mbps