TechNet の Networking Blog で、TCP Template の記事を読んで、実は初めて TCP Template について知ったので、少し調べてみました。
TCP Template とは?
Windows OS において、TCP Connection における各種のオプション (DelayedAckTimeout や InitialRto などなど) を、「比較的高速なデータセンタネットワーク」と「比較的低速なインターネットワーク」で切り替えるために利用するもののようです。
Template の種類
- Internet
- Datacenter
インターネット向けと、データセンタネットワーク向けで、それぞれ Template があります。
- InternetCustom
- DatacenterCustom
前の二つの Template について、カスタマイズするための Template が用意されています。
- Compat
レガシーアプリケーションのための Template らしいです。ちなみに、前述の記事では「近年のアプリでは使うのは推奨しない」と書いてあります。
- Automatic
自動で前述の Template を切り替える Template とのこと。ちなみに、既定ではすべてのコネクションがこの Template を使うようになっています。
> Get-NetTransportFilter
SettingName : Automatic
Protocol : TCP
LocalPortStart : 0
LocalPortEnd : 65535
RemotePortStart : 0
RemotePortEnd : 65535
DestinationPrefix : *
Get-NetTCPConnection コマンドレットを利用することで、どの TCP コネクションが、どの Template を適用されているか、確認することができます。
> Get-NetTCPConnection
...
10.0.1.5 49736 52.230.84.217 443 Established Internet 2416
10.0.1.5 49725 52.239.144.132 443 Established Internet 3496
10.0.1.5 49722 168.63.129.16 32526 Established Datacenter 3496
10.0.1.5 49721 168.63.129.16 80 Established Datacenter 5032
10.0.1.5 49720 168.63.129.16 80 Established Datacenter
Automatic っていうけど、どういう条件で切り替えるの?
TechNet Blog の情報によると、RTT が 10ms を超えるかどうかで決まるとのことです。
#ちなみに、このブログ以外には公式でも条件についての記述は見つけられませんでした・・・!
どうやって各種オプションを変更するの?
Set-NetTCPSetting で変えることができます。詳細は、下記のドキュメントを参照してください。
- TechNet Blog
- Windows 8, 10, 2012 Server TCP/IP Tweaks
- MSFT_NetTCPConnection class
- MSFT_NetTCPSetting class
Custom ってどうやって使うの?
既定の状態だと、Automatic で選択されるのは「Internet」と「Datacenter」だけであり、「*Custom」は利用されません。これは、Template の AutomaticUseCustom が影響しています。
> Get-NetTCPSetting
...
AutomaticUseCustom : Disabled
...
せっかく設定した *Custom Template をどうやって使うかというと、Set-NetTCPSetting コマンドレットで、いずれかの AutomaticUseCustom を Enabled にすると、すべての AutomaticUseCustom が Enabled になり、以降で作成される TCP Connection において、*Custom の Template が使われるようになります。ちなみに再起動は必要ありませんでした。
10.0.1.5 49813 168.63.129.16 80 Established DatacenterC... 2456
10.0.1.5 49812 23.211.97.63 80 Established DatacenterC... 2744
10.0.1.5 49811 118.215.189.11 443 Established DatacenterC... 2744
10.0.1.5 49808 204.79.197.200 443 Established DatacenterC... 2744
10.0.1.5 49736 52.230.84.217 443 Established Internet 2416
10.0.1.5 49725 52.239.144.132 443 Established Internet 3496
10.0.1.5 49722 168.63.129.16 32526 Established Datacenter 3496
10.0.1.5 49721 168.63.129.16 80 Established Datacenter 5032
10.0.1.5 49720 168.63.129.16 80 Established Datacenter
※下部の五つのコネクションは、AutomaticUseCustom を Enabled にする前から存在しているコネクションです。
一部は Automatic にしたくないんだけど・・・
New-NetTransportFilter コマンドレットで、IPアドレス範囲やポートなどの条件に応じて、使用する Template を決めておくことができます。
コマンド例などは、上記のリンク先を参照してください。
最後に
以上、Windows の TCP Template について調べた内容のまとめでした。
普段(?)はあまり気にしないポイントですが、特定のコネクションについてゴリゴリチューニングしたい場合はとても便利ですね。
実は、二つテンプレートを持っていて切り替えているなんていうのは今まで知らなかったのが正直なところで、ちゃんと定期的に勉強しないとなぁ・・・と反省です。。