1と12のリビジョン間の差分 (その間の編集: 11回)
2017-08-06 23:19:04時点のリビジョン1
サイズ: 4901
コメント:
2019-05-25 14:42:06時点のリビジョン12
サイズ: 7408
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 8: 行 8:
最初期のTCPには輻輳制御(Congestion Control - cc を見たら Congestion Control の略と思え!)が無かったため、
混雑は加速度的に悪化することが判明していた(そうだ)。
最初期(1980年台初頭)のTCPには輻輳制御(Congestion Control - cc を見たら Congestion Control の略と思え!)が無かったため、
混雑は加速度的に悪化することが判明していた(らしい)。
行 14: 行 14:

FreeBSDでは伝統的に4.4BSD由来の!NewReno輻輳制御を採用しており、デフォルトとなっている。
FreeBSD9からは輻輳制御アルゴリズムの整理、モジュール化が実施されており、開発および設定が簡略化されている。
行 21: 行 24:
行 24: 行 26:
=== /etc/sysctl.conf ===  === /etc/sysctl.conf ===
行 27: 行 29:
行 31: 行 32:
{{{
kldload cc_dctcp
sysctl net.inet.tcp.cc.algorithm=dctcp
{{{#!highlight console numbers=disable
# kldload cc_dctcp
# sysctl net.inet.tcp.cc.algorithm=dctcp
net.inet.tcp.cc.algorithm: newreno -> dctcp
行 37: 行 38:

== コメント ==
 * DC-TCPアルゴリズム使用にあたってECN(Explicit Congestion Notification - 明示的輻輳通知)の設定が必要であるが、11.0-Rからはデフォルトで有効となっている。
 * 下記コマンドでの設定値を確認しておくこと(デフォルトで2である)。

{{{#!highlight console numbers=disable
# sysctl net.inet.tcp.ecn.enable
net.inet.tcp.ecn.enable: 2
}}}

 * この設定は以下の通りである。
   * 0:ECN機能の無効化
   * 1:ECN機能の有効化(送受信時/クライアントおよびサーバーユース)
   * 2:ECN機能の有効化(受信時/サーバーユース)
 * 積極的にECN機能を利用するなら、1に設定しよう。

=== /etc/sysctl.conf ===
{{{
net.inet.tcp.ecn.enable=1
}}}
行 46: 行 67:
行 49: 行 69:
=== /etc/sysctl.conf ===  === /etc/sysctl.conf ===
行 52: 行 72:
行 56: 行 75:
{{{
kldload cc_vegas
sysctl net.inet.tcp.cc.algorithm=vegas
{{{#!highlight console numbers=disable
# kldload cc_vegas
# sysctl net.inet.tcp.cc.algorithm=vegas
net.inet.tcp.cc.algorithm: newreno -> vegas
行 64: 行 83:
||<#FF0000> OS ||<#FF0000> バージョン ||<#FF0000> デフォルトアルゴリズム ||<#FF0000> オプションアルゴリズム ||<#FF0000> 備考 ||
|| FreeBSD || 全バージョン || NewReno  || なし || ||
|| FreeBSD || 8.3(9.0) 以降 || NewReno  || HD, CHD, Cubic, H-TCP, Vegas || ||
|| FreeBSD || 9.2 以降 || NewReno  || HD, CHD, Cubic, H-TCP, Vegas, CDG || ||
|| FreeBSD || 11.0 以降 || NewReno  || HD, CHD, Cubic, H-TCP, Vegas, CDG, DC-TCP || ||
|| Windows || Vista 以降 || C-TCP                          || NewReno || ||
|| Windows Server || 2008 以降 || C-TCP || NewReno  || ||
||<#FF0000> OS ||<#FF0000> バージョン  ||<#FF0000> デフォルトアルゴリズム ||<#FF0000> オプションアルゴリズム ||<#FF0000> 備考 ||
|| FreeBSD || 全バージョン  || !NewReno || なし || ||
|| FreeBSD || 8.3(9.0) 以降  || !NewReno || HD, CHD, Cubic, H-TCP, Vegas || ||
|| FreeBSD || 9.2 以降  || !NewReno || HD, CHD, Cubic, H-TCP, Vegas, CDG || ||
|| FreeBSD || 11.0 以降  || !NewReno || HD, CHD, Cubic, H-TCP, Vegas, CDG, DC-TCP || ||
|| Linux || 2.6.19 以降 || Cubic || 未調査
|| ||
|| Windows || Vista 以降  || !NewReno || C-TCP || ||
|| Windows        || 8 以降 || C-TCP || !NewReno || ||
|| Windows
Server || 2008 以降  || C-TCP || !NewReno || ||
|| Windows Server || 2012 以降 || DC-TCP || !NewReno, C-TCP || ||
行 84: 行 106:
 * [[http://blog.yuuk.io/entry/cubictcp|"CUBIC: A new TCP-friendly high-speed TCP variant"を読んだ]]
 * [[http://nothingcosmos.blog52.fc2.com/blog-entry-187.html|BBR (Bottleneck Bandwidth and RTT) congestion control]]
 * [[https://msdn.microsoft.com/ja-jp/library/hh997028(v=ws.11).aspx|データ センター伝送制御プロトコル (DCTCP)]]
行 86: 行 111:
 * [[https://technet.microsoft.com/ja-jp/library/bb726965.aspx|Windows Server 2008 と Windows Vista の新しいネットワーク機能]]
 * [[https://docs.oracle.com/cd/E26924_01/html/E25872/gkkfr.html|ネットワークの輻輳と輻輳制御(OpenSolaris)]]
 * [[http://www.publickey1.jp/blog/17/googletcptcp_bbrgoogle_cloud.html|Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始]]
 * [[http://itpro.nikkeibp.co.jp/atcl/column/17/040400119/040400003/|TCPの輻輳制御アルゴリズム、どれが一番速い?]]
行 87: 行 116:
 * [[http://www.publickey1.jp/blog/17/googletcptcp_bbrgoogle_cloud.html|Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始]]
 * [[https://technet.microsoft.com/ja-jp/library/bb726965.aspx|Windows Server 2008 と Windows Vista の新しいネットワーク機能]]

TCP輻輳制御(FreeBSD版)

目次

TCP輻輳制御とは

TCPに限る話では無いが通常、通信を行い、一方(主にサービスプロバイダ側)に通信が集中するようになると混雑が起きる。 最初期(1980年台初頭)のTCPには輻輳制御(Congestion Control - cc を見たら Congestion Control の略と思え!)が無かったため、 混雑は加速度的に悪化することが判明していた(らしい)。

このTCPに「輻輳制御アルゴリズム」による通信(頻度等)制御を行うことで、混雑を押さえる仕組みができあがった。 とはいえ、時代に合わせた輻輳制御アルゴリズムが提案されていて、理想的で決定的なアルゴリズムが存在しないこともあり、 度々新しいアルゴリズムが提案されているのが現実である。

FreeBSDでは伝統的に4.4BSD由来のNewReno輻輳制御を採用しており、デフォルトとなっている。 FreeBSD9からは輻輳制御アルゴリズムの整理、モジュール化が実施されており、開発および設定が簡略化されている。

FreeBSD11以降ならとりあえず設定しておけ

FreeBSD11.0のリリースは2016年10月10日。

/boot/loader.conf

cc_dctcp_load="YES"

/etc/sysctl.conf

net.inet.tcp.cc.algorithm=dctcp

手動で切り替え

# kldload cc_dctcp
# sysctl net.inet.tcp.cc.algorithm=dctcp
net.inet.tcp.cc.algorithm: newreno -> dctcp

※アルゴリズムの入れ替えなのでオンザフライで変更可能である。再起動は不要。

コメント

  • DC-TCPアルゴリズム使用にあたってECN(Explicit Congestion Notification - 明示的輻輳通知)の設定が必要であるが、11.0-Rからはデフォルトで有効となっている。
  • 下記コマンドでの設定値を確認しておくこと(デフォルトで2である)。

# sysctl net.inet.tcp.ecn.enable
net.inet.tcp.ecn.enable: 2

  • この設定は以下の通りである。
    • 0:ECN機能の無効化
    • 1:ECN機能の有効化(送受信時/クライアントおよびサーバーユース)
    • 2:ECN機能の有効化(受信時/サーバーユース)
  • 積極的にECN機能を利用するなら、1に設定しよう。

/etc/sysctl.conf

net.inet.tcp.ecn.enable=1

FreeBSD8.3以降ならとりあえず設定しておけ

なお、

  • FreeBSD8.3のリリースは2012年04月18日。
  • FreeBSD9.0のリリースは2012年01月12日。

/boot/loader.conf

cc_vegas_load="YES"

/etc/sysctl.conf

net.inet.tcp.cc.algorithm=vegas

手動で切り替え

# kldload cc_vegas
# sysctl net.inet.tcp.cc.algorithm=vegas
net.inet.tcp.cc.algorithm: newreno -> vegas

※アルゴリズムの入れ替えなのでオンザフライで変更可能である。再起動は不要。

OS事情

OS

バージョン

デフォルトアルゴリズム

オプションアルゴリズム

備考

FreeBSD

全バージョン

NewReno

なし

FreeBSD

8.3(9.0) 以降

NewReno

HD, CHD, Cubic, H-TCP, Vegas

FreeBSD

9.2 以降

NewReno

HD, CHD, Cubic, H-TCP, Vegas, CDG

FreeBSD

11.0 以降

NewReno

HD, CHD, Cubic, H-TCP, Vegas, CDG, DC-TCP

Linux

2.6.19 以降

Cubic

未調査

Windows

Vista 以降

NewReno

C-TCP

Windows

8 以降

C-TCP

NewReno

Windows Server

2008 以降

C-TCP

NewReno

Windows Server

2012 以降

DC-TCP

NewReno, C-TCP

参考文献

FreeBSD/TCP輻輳制御 (最終更新日時 2019-05-26 01:00:43 更新者 NorikatsuShigemura)