4901
コメント:
|
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 |
|