ネットワークには、LANとWANという言葉があります。
距離が近いLAN(ロカールエリアネットワーク)ではわからない程度のネットワークの”遅延”が
距離が遠い可能性があるWAN(ワイドエリアネットワーク)では影響をしてしまう事があります。
それが「距離が遠くPing遅延がある回線では帯域があっても転送速度が出来ない」という現象です。
レジュメ
結論、TCPパケット内にはTCPウィンドウサイズがあるため帯域があっても転送速度が出ない
簡単に言うと、
ある一定サイズ(TCPウィンドウサイズ)TCPパケットを送ってしまうと、相手からの応答が無いと次のパケットを送れなくなってしまうので、待ち時間が出来てしまいスループット(転送速度)が出ないのです。
ただし、これは一つのTCP通信(TCPセッション)のみの話なので、
一つのTCPセッションでは転送速度が頭打ちとなり出ませんが、複数のTCPセッションを使用すれば(そういう作りの通信なならば)転送速度を上げる事が出来ます。
TCPプロトコルのパケットの仕組み
TCPパケット送信には上記の関係があります。
TCPはそのプロトコルの作り上、パケット損失に若干強い(UDPと比べて)規格になっている、その理由が
- TCPパケット送信し
- 相手からの応答(ACK返信)
があって、初めてTCPの通信が出来ます。
TCP通信は、この待つという時間(遅延時間)がWANの場合考慮する必要があるわけですね。
TCP遅延時間とPing遅延時間の関係は?
この応答を待つ時間を図で「遅延時間」と表しましたが、この「TCPの遅延時間」というのは実際に測る事は難しいです。
なので、「TCPの遅延時間」を仕組み上同程度の遅延と言える「Pingの応答遅延時間」で代替えして測定するというわけです。
仮に33ms遅延があった場合のTCP転送速度の計算は?
仮に
- Ping遅延が33ms
- TCPウィンドウサイズが64KB
の場合の、TCP転送速度を計算しますと
(64KB × 8bit) ÷ 0.033秒 = 11,636Kbps ≒11Mbps
となります。
仮に、光回線で100Mbps帯域があっても、一つのTCPコネクションでは11Mbps程度しか転送速度が出ないわけです。
TCPウィンドウサイズは64KBなの?
実は通信のコンピューターのOSによります。
例えば、
Windows XPやWindows Server 2003等の古いOSと通信した場合はTCPウィンドウサイズは64KBなのですが
最近の新しいOSではTCPウィンドウサイズの64KBを超えることが出来ます。
そうなれば「距離が遠くPing遅延がある回線では帯域があっても転送速度が出ない」という話は古い話しで、遅延があっても転送速度が出るようになります。
ただし、通信の両方が(TCPウィンドウスケーリングがサポートされる)新しいOSである必要があります。