4901
コメント:
|
← 2019-05-26 01:00:43時点のリビジョン15 ⇥
8061
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 8: | 行 8: |
最初期のTCPには輻輳制御(Congestion Control - cc を見たら Congestion Control の略と思え!)が無かったため、 混雑は加速度的に悪化することが判明していた(そうだ)。 |
最初期(1980年台初頭)のTCPには輻輳制御(`Congestion Control`)が無かったため、 混雑は加速度的に悪化することが判明していた(らしい)。 |
行 15: | 行 15: |
FreeBSDでは伝統的に4.4BSD由来の!NewReno輻輳制御を採用しており、デフォルトとなっている。 FreeBSD9からは輻輳制御アルゴリズムの整理、モジュール化が実施されており、開発および設定が簡略化されている。 |
|
行 18: | 行 21: |
=== /boot/loader.conf === {{{ |
=== 恒久的設定 === * `/boot/loader.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable |
行 21: | 行 25: |
}}} * `/etc/sysctl.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable net.inet.tcp.cc.algorithm=dctcp |
|
行 24: | 行 31: |
=== /etc/sysctl.conf === {{{ net.inet.tcp.cc.algorithm=dctcp |
※ただし、設定しただけなので、再起動するまで範囲されない。 |
行 28: | 行 33: |
=== 手動で切り替え === {{{#!highlight console numbers=disable # kldload cc_dctcp # sysctl net.inet.tcp.cc.algorithm=dctcp net.inet.tcp.cc.algorithm: newreno -> dctcp |
|
行 30: | 行 40: |
=== 手動で切り替え === {{{ kldload cc_dctcp sysctl net.inet.tcp.cc.algorithm=dctcp |
※アルゴリズムの入れ替えなのでオンザフライで変更可能である。この時再起動は不要。再起動するとデフォルトに戻る。 |
行 35: | 行 42: |
== コメント == * 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 |
|
行 36: | 行 49: |
※アルゴリズムの入れ替えなのでオンザフライで変更可能である。再起動は不要。 | * この設定は以下の通りである。 * 0:ECN機能の無効化 * 1:ECN機能の送受信時有効(クライアントおよびサーバーユース) * 2:ECN機能の受信時有効(サーバーユース) * 積極的にECN機能を利用するなら、`/etc/sysctl.conf`に{{{net.inet.tcp.ecn.enable=1}}}を追加設定しよう。 {{{#!highlight shell numbers=disable net.inet.tcp.ecn.enable=1 }}} |
行 43: | 行 64: |
=== /boot/loader.conf === {{{ |
=== 恒久的設定 === * `/boot/loader.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable |
行 46: | 行 68: |
}}} * `/etc/sysctl.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable net.inet.tcp.cc.algorithm=vegas |
|
行 49: | 行 74: |
=== /etc/sysctl.conf === {{{ net.inet.tcp.cc.algorithm=vegas |
※ただし、設定しただけなので、再起動するまで範囲されない。 |
行 53: | 行 76: |
=== 手動で切り替え === {{{#!highlight console numbers=disable # kldload cc_vegas # sysctl net.inet.tcp.cc.algorithm=vegas net.inet.tcp.cc.algorithm: newreno -> vegas |
|
行 55: | 行 83: |
=== 手動で切り替え === {{{ kldload cc_vegas sysctl net.inet.tcp.cc.algorithm=vegas }}} ※アルゴリズムの入れ替えなのでオンザフライで変更可能である。再起動は不要。 |
※アルゴリズムの入れ替えなのでオンザフライで変更可能である。この時再起動は不要。再起動するとデフォルトに戻る。 |
行 64: | 行 86: |
||<#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 || || |
||<#FFFF00> OS ||<#FFFF00> バージョン ||<#FFFF00> デフォルトアルゴリズム ||<#FFFF00> オプションアルゴリズム || || `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` || |
行 83: | 行 108: |
* [[http://www.net.c.dendai.ac.jp/~yutaro/|TCP各バージョンの輻輳制御の比較]] | * [[http://www.net.c.dendai.ac.jp/~yutaro/|TCP各バージョンの輻輳制御の比較]] (`Tahoe`、`Reno`、`NewReno`、`Vegas`の比較) * [[https://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: | 行 114: |
* [[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)]] * [[https://www.publickey1.jp/blog/17/googletcptcp_bbrgoogle_cloud.html|Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始]] * [[https://itpro.nikkeibp.co.jp/atcl/column/17/040400119/040400003/|TCPの輻輳制御アルゴリズム、どれが一番速い?]] |
|
行 87: | 行 119: |
* [[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)が無かったため、 混雑は加速度的に悪化することが判明していた(らしい)。
この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機能を利用するなら、/etc/sysctl.confにnet.inet.tcp.ecn.enable=1を追加設定しよう。
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 |
参考文献
TCP各バージョンの輻輳制御の比較 (Tahoe、Reno、NewReno、Vegasの比較)
Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始