2008-11-16

オンラインゲーム向けのTCP/IP設定

情報を見かけたのでとりあえずやってみた

通常、パケットを受け取ると「受け取ったよ」という応答(ACK)を返すのだが、毎回毎回返すわけではない。
Windowsでのデフォルトの動作は
  1. パケットを受信したらタイマー計測開始
  2. 受信したパケットがTcpAckFrequensyで設定された数に達するか、TcpDelAckTickesで設定された時間が経過したら応答を返す
のようだ。これを
  1. パケットを受信したら応答を返す
となるように変えてやれば負荷はかけるが、サーバ側が応答待ちで次のパケットが送れない状況が減るハズって事みたいです。

ツールを使っても出来るようですが余計な物は入れたくないのでregedit.exeを使用して以下の設定を行います。
設定前の状態はちゃんと覚えておきましょうね^^
  • Windows2000の場合
    以下のようにレジストリを設定します。ちなみに設定無しだと2(200ms)と見なされます。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<interface>
    値の名前 : TcpDelAckTicks
    データ型 : REG_DWORD
    値のデータ : 0
  • WindowsXP or Vistaの場合
    以下のようにレジストリを設定します。ちなみに設定無しだと2と見なされます。何故、Windows2000と同じ項目を使わないのかは不明です。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<interface>
    値の名前 : TcpAckFrequency
    データ型 : REG_DWORD
    値のデータ : 1
設定が終わったらキー選択して設定をエクスポートします。
Vistaの場合「ファイル」→「エクスポート」で「選択された部分」を選択して「TCPオンライン用設定.reg」のようなファイル名をつけて保存します。
保存したファイルを右クリックして「編集」をクリックするとメモ帳が開きますので、以下のように今回変更を加えた項目だけにして保存します。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"TcpAckFrequency"=dword:00000001
保存したらファイルをコピーして、「TCPオンライン用設定削除.reg」のようなファイル名に変更します。
変更したら右クリックして「編集」をクリックするとメモ帳が開きますので、変更を加える前の値にして保存します。以下はTcpAckFrequencyがなかった場合です。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"TcpAckFrequency"=-
これでいつでも設定変更が可能です。
ドライバの更新などがあった場合はこの設定ファイルは使えなくなる可能性がありますけどね…
設定を変更したら再起動が必要らしいです。

参考資料
ちなみに小さなデータを送信するように言われた場合、TCPNoDelayで設定された時間待機し、複数のデータをまとめて送ろうとするので、待機時間を0にすれば…
というような事も掲示板等で言われていましたが、これってMicrosoft Message Queuingの設定項目だから違うんじゃないの?って事で行わない事にしました。

参考資料
その他参考になるかもしれない資料

0 件のコメント: