自分メモのようなものです。
Windows Server には Hyper-V というものがあり、NICを仮想化して動作させています。
Hyper-V はレガシィNICも利用できますが、多くの方は仮想化NICにてゲストOSをインストールしているかと思います。
Windows 2000 から、NICに通信の一部をまかせ、CPU の負担をかけず通信をする機能 TaskOffload という機能が実装されています。
この機能を「ハードウエアオフロード」と呼び、機能的には「TCP/IP と IPSec のハードウエア・アクセラレータ」と呼んでいます。
ですが、時にこれが正常な通信の邪魔をする事があります。
たとえば Windows Update で通信ができないとか、Windows のライセンス認証とか、エラーコードが 0x80072EE2 と出る場合があります。
私の勝手な想像ですが、この現象は Windows Server 2008 R2 で発生することが多く、原因は TCP Chimney Offload にあるのではないかと思います。
TCP Chimney Offload は TaskOffload の完全版で、従来の機能に加え、TCP ACK番号など新たな機能を NIC で行うようになっています。
この機能は Windows 2008 R2 からデフォルトで「自動」になっており、マルチコアCPU で Hyper-V の仮想化 NIC を利用する場合に邪魔になっているような気がします。
この機能を無効にするには、コマンドプロンプトから、
netsh int ip set chimney disabled
と打ち込めばよいのですが、上記エラーがこれによって解決できるかは確認しておりません。
実装されている NIC がそれらをサポートしているかどうかなどのステータス情報は以下のコマンドで確認することができます。
netsh int tcp show chimneystats
とりあえず私は Windows 2000 から実装されているレジストリキーを操作する事により、IPSec のアクセラレータも含めて機能を停止し、問題を解決しています。
以下にその方法を記述します。
TCP/IP と IPSec のハードウェア アクセラレータを無効にする。
レジストリを変更して TCP/IP と IPSec の両方のハードウェア アクセラレータを無効にするには、次の操作を行います。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DisableTaskOffload の DWORD レジストリ設定を "1" に設定します。
IPSec のハードウェア アクセラレータのみを無効にする。
レジストリを変更して TCP/IP のハードウェア アクセラレータのみを無効にするには、次の操作を行います。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\IPSEC\EnableOffload の DWORD レジストリ設定を "0" に設定します。
設定が終了したら「再起動」してください。
また、レジストリ等の修正に関しては「自己責任」で行ってください。
以上です。