- - PR -
TCP Window サイズとパフォーマンスについて
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-06-16 14:15
いつも、貴重な情報に感謝しております。
ネットワークの初歩的なことかもしれませんが教えてください。 ネットワークで帯域は余っているのに速度が出ないときに、 よくTCP Windowサイズを大きくしたりするかと思います。 この理由はなんとなく分かります。(ネットで調べても概ね記述がありました) しかし、パケットロストするようなネットワークの場合はどうなるのでしょうか? 今までの経験からTCP Windowサイズを小さくすることによって、 わずかに速度が改善された記憶があります。 今更ながら、このTCP Windowサイズを小さくすることによって 速度が改善される理由が分かりません。 つまり、パケットロストが発生するネットワークで TCP Windowサイズが大きいと速度が落ち、 小さいと速度が上がる原理は何なのでしょうか? よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2008-06-19 05:35
ずばり、再送の対象となるデータ量が減るからです。 パケットロスにより、データそのものが欠落すのは言うまでもなく、 データが相手に到達しても、返りのACKがパケットロスすると、 データが到達していないと判断し、同じデータを再送します。 _________________ _福田太郎_ | ||||||||||||||||
|
投稿日時: 2008-06-19 10:35
たらおさん
回答ありがとうございます。 再送の対象となるデータ量が減る原理がいまいち分かりません。 確かに、テストをすると、Windowサイズを小さくすると再送数が減っています。 しかし、SACKが有効になっているので、落ちてしまったそのフレームだけを 再送するのではないのでしょうか? たとえば、MTUが1500バイトであれば、欠落した分だけの再送になるのではないでしょうか? そうなると、Windowサイズに依存せず、MSSに依存するような気がします。 この考え方が間違っているのでしょうか? よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2008-06-19 22:25
データの送信方向のみがロストしている状態で済んでいるなら、
おっしゃるとおり、MTUの調整だけで済むでしょう。 転送速度の低下は、上り下りのメディアの状態や、エラーの頻度にもよりますが、 両方向で、かなりロストしているなら、WinSizeの調整が効くことになります。 途中に半二重のメディアがあるなら、なおさらです。 WinSizeが大きく、再送が頻発し、下り1500バイトのフレームの存在確率が高くなると、 半二重メディアでは、上りのACK(60バイト)さえ通りにくくなります。 _________________ _福田太郎_ | ||||||||||||||||
|
投稿日時: 2008-06-24 11:03
たらおさん
ありがとうございます。 途中に半二重があるかどうかは分かりませんが、双方向でロストしています。 そうすると、なぜWinSizeの調整で速度が異なるのか? の原理が、やはり分かりません。 テストした結果として、WinSize 64Kの場合5Mbpsぐらいで、 32Kの場合15Mbpsぐらいに上がっています。 また、ロストが減っているので、再送もかなり減っています。 再送が減ったから、パフォーマンスが上がったのは分かります。 では、なぜ、WinSizeを小さくすると再送が少なくなるのでしょう。 ご教授お願いいたします。 | ||||||||||||||||
|
投稿日時: 2008-06-24 13:54
例えば 0.01%のエラーが発生する回線が有ったとします。
(これって、とんでもなく悪い回線だな) 10,000バイト送ると必ず1バイト化けるという簡単な設定で・・・ 1,500バイトフレームのパケットを送ると6つ迄はいいけど7つ目でエラーになり再送。 これを9,000バイトのジャンボフレームにすると・・・2つ目でエラーです。 | ||||||||||||||||
|
投稿日時: 2008-06-26 05:25
ほぼ合っていると思いますが、 パケットロストの確率を考慮していません。
再送が少なくなるのはパケットロストが減るからですよね。 パケットロストが減るのは送信セグメントが 時間的に分散されるからでしょう。 輻輳が起きる確率と単位時間に送るデータ量は正の相関があります。 より正確に言うと、帯域の瞬間占有率と輻輳が起きる確率に正の相関があります。 具体的にいうと、 ・1時間のうち、1秒の間に3600パケット送ってあとは休む ・1時間のうち、毎秒1パケット送る というのだと当然前者の方がロストパケットは多くなりそうですよね? また、輻輳を防ぐために 短時間に大量のパケットが来た場合意図的に落とす場合もあります。 なので、混雑したネットワークではウィンドウサイズを小さくすると 転送速度が上がります。 一方、混雑にかかわらず一定の割合でパケットが死ぬというネットワーク、 たとえばモデムだとか、雷が鳴ってるとか、 そういう場合はMSSが大きく効いてきます。
これは上記の「一定確率でパケットロスト」なネットワークの話です。
半二重があってもなくてもあまり変わらないと思います。 半二重の場合は輻輳がより顕著になりますが。 本質は「帯域の占有率と輻輳が起きる確率に正の相関がある」ことだろうと思います。 #追記。 「帯域の占有率と輻輳が起きる確率に正の相関がある」の理由は、 ネットワークの種類ごとに違います。 そういう性質の無いネットワークもあります。 イーサネットなら、例えばスイッチングハブのバッファなどを 考えればいいかと思います。 あふれた分は捨てられるので、一度にたくさん送ったほうが捨てられ易くなります。 [ メッセージ編集済み 編集者: れい 編集日時 2008-06-26 05:42 ] |
1