FC2ブログ
--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2008-11-16(Sun)

TCPにおけるNagleのアルゴリズムと遅延ACK

何か話題なので。TCPの基本は適当にぐぐってください。

Nagleのアルゴリズム
送信側において、小さなパケットが多量に送信されるのを防ぐため、小さなデータを送信しようとした場合に、即送信せず後続のデータと合わせた大きなパケットにまとめる。すなわち、以下の条件のいずれかが満たされるまでパケットを送信しない:
  • (1.1)送信バッファにMSS以上のデータが存在する
  • (1.2)最後に送信したパケットに対するACKを受信した
遅延ACK
受信側がACKを送る頻度を減らす。次の場合のみACKを送信する:
  • (2.1)最後にACKを送ってから一定の個数(Windowsのデフォルトは2)パケットを受信した
  • (2.2)最後にACKを送ってから一定の時間T(Windowsでは200ms)が経過した

これらから、送信側がNagleのアルゴリズムを採用し、受信側が遅延ACKを採用している場合に問題が起きることが分かる。問題が起こるのは、送信側が一度に(厳密には次のACKを受信するまでの間に)送信するデータがMSS未満の場合である。このとき、(2.2)のタイムアウトが起こって受信側がACKを送信するまでの間何のパケットも送信されない状態になる(わかれ)。言い換えれば、(2.2)のタイムアウトによるACKを受信した場合のみ、送信側はパケットを送信する。

すなわち、受信側がWindowsの場合、常に200msの余計な遅延が発生する。これはリアルタイム性の要求されるアプリケーション(要するにネトゲとか)の場合に特に問題になる。

私はネットワークの専門家ではないので適当に突っ込んでください。

スポンサーサイト

comment form

管理者にだけメッセージを送る

comment

ブログ内検索
RSSフィード
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。