2014年6月18日水曜日

Tips:Windowsのネットワークあたりのトピックス

Windowsネットワーク周りの備忘録

・ネットワークパケットを取得する

 Microsoft標準だと、NetworkMonitor3.4などがある。GUIでもCUI (nmcap.exe)でも取得可能。
 コマンドラインは以下のような感じ。

 >nmcap /network * /capture /StartWhen /Time 00:00 6/1/2014 /StopWhen /Time 18:00 6/1/2014 /file .\test1.cap:100M /CaptureProcesses

 
 詳しくはnmcap /helpや/examleで見れる。開始(/StartWhen)・終了(/StopWhen)の時間が指定できたり、
 取得しているOS上のプロセスとの紐づけ(/CaptureProcesses)ができるので、ちょっと便利そう。

 wiresharkを使って取得することもできる。GUIでもCUI でも。コマンドラインは以下のような感じ。


 >tshark -b filesize:5000 -b files:1000 -w C:\temp\test


 今のところパケット取得自体であれば、MS純正との差異は思いつかない。プロセスとの紐付けなどができる点

 では、NetworkMonitorなのかな?

・WindowsのTCPポートの上限数の変更

 Windows2003までは、ポートはデフォルトだと、1025~5000となっている。Windows2008以降では49152~65535が
 既定の動的割り当てポートの範囲となっている。

 >netsh int <ipv4|ipv6> show dynamicport <tcp|udp>


 これで現在のポート範囲を表示することができる。変更もコマンドラインできる。

 >netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=数値 num=範囲

・Windows2008 R2の複数IP割当時のPrimaryIP(OutBoundの時のデフォルトのソースIP)

 Windows2008(R2なし)までは、複数IPがあった場合でも、割り当て欄の一番上のIPがPrimaryIPとなった。


 Windows2008 R2では1枚のNICに複数IPをアサインした場合、IPの中で一番小さいIPアドレスがPrimaryIPとなる。

 そのためFirewallのなど通信時にソースIP制限をかけている環境では、あとつけでIPを追加する場合、IP次第では
 ソースIPが変わってしまうため注意が必要(仕様らしいが、メリットがあるのかな?改悪な気がする。)

・TCP Ack Frequency

  
 TCP遅延ACKの頻度を指定する。

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Interface GUID}*

  値の名前:TcpAckFrequency
  値:(DWORD) デフォルト2。変更する際は1。
  ※デフォルトでは、セグメントを2個受信したらACKを返す。1にするとセグメント毎にACKを返す(つまり
    TCP遅延ACKを無効化)。

・TimeWaitの時間変更
 セッションをたくさん張るようなサーバーの場合、TCPセッションがたくさん残ってしまい、ポートを消費してしまう
 ことがあるので、その時のチューニングの1つとして、TimeWaitを短くする。レジストリを変更する。

  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  値の名前:TcpTimedWaitDelay
  値:DWORDで秒単位で記載(Windows2008のデフォルトは120秒)。
 
  参考)http://technet.microsoft.com/en-us/library/cc938217.aspx

 本来Time Waitは、通信相手に正常に終了のパケットが届いたと思われる十分な時間が経過するまでの間、同じ
 プロトコル、発信元 IP アドレス、ポート、宛先 IP アドレス、ポートが接続に使用されないようにするための時間。
 あるいは再利用のための待ち時間。
 RFC 793 では、ソケット ペアの再使用禁止時間の長さを 2 MSL (セグメントの最大有効期間の 2 倍) または 
 4 分と規定している。時間を短くする場合は、このあたりは認識しておかないと。


 ※ちなみにPort数(49152~65535)÷TcpTimedWaitDelayが1秒あたりの最大セッション数になりますね。

・IPv6の無効化

 ネットワークのアダプタでIPv6を無効化するだけ。

・SNP(Scalable Networking Pack)の無効化

 ネットワーク性能が出ないことがある時に、無効化してみる。設定の確認は

 >netsh int tcp show global




 赤枠のところがenabledに。これを無効化するには以下を実施


 >netsh int tcp set global chimney=disabled

 >netsh int tcp set global rss=disabled
 >netsh int tcp set global netdma=disabled

 再度確認してみる。

 >netsh int tcp show global
 


 ・共有フォルダのアクセスが遅い、できない場合はLanManagerの認証レベルを変更してみるといいらしい。設定は、


 「ローカルセキュリティポリシー」-「ローカルポリシー」-「セキュリティオプション」-「ネットワークセキュリティ:LAN Manager認証レベル」の値を、「NTLM応答のみ送信する」に変更。


・ネットワークスロットルを無効にする


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Multimedia\SystemProfile\

NetworkThrottlingIndex
この値をFFFFFFFFにする

・オフロードの無効化


オフロードは、ネットワーク処理の一部をCPUではなく、NICなどに任せ(オフロード)、効率を上げる仕組み。ただしこれがうまく動作しないケースもあるみたいで、ネットワークが遅い時は、オフロード機能の無効化を試す。


NICアダプタ単位で設定を変えるには、NICアダプタの構成情報から変更する








上記のOffloadとなっている項目が対象。


またHyper-V環境上の仮想OSでも、かなり性能劣化を及ぼすことがあるみたいで、オフロードの無効化が有効になるかもしれない。



・共有フォルダのアクセスでキャッシュの無効化

共有フォルダのプロトコルSMB(ServerMessageBlock)の仕様で、キャッシュに関する仕様が問題になることがある(主にサーバー環境で)。



・自動チューニング

Windows7,windows2008からの機能で、ネットワークの自動チューニング機能がある。ネットワークの性能を改善したい場合、この設定を変更することも検討する。


>netsh interface tcp set global autotuninglevel=xxx


xxの取りうる値は以下の通り。

normal:デフォルト
disabled:自動チューニング無効
highlyrestricted:デフォルトより大きく(チョッと?)
restricted:デフォルトより拡大(一部で制限あり)
experimental:restrictedの制限対応

disabled: uses a fixed value for the tcp receive window. Limits it to 64KB (limited at 65535).

highlyrestricted: allows the receive window to grow beyond its default value, very conservatively
restricted: somewhat restricted growth of the tcp receive window beyond its default value
normal: default value, allows the receive window to grow to accommodate most conditions
experimental: allows the receive window to grow to accommodate extreme scenarios (not recommended as it can degrade performance in common scenarios; only intended for research purposes. It enables RWIN values of over 16 MB)

・受信ウィンドウサイズの変更


RWIN(Recieve WINdow)の変更 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters」にある「TcpWindowSize」の値を修正することで、設定を変更できた。

・MTUの変更


>netsh interface ipv4 set interface "インターフェース名" mtu=xxxx store=persistent

MTUを変更して、有効にかどうかを確認するには


>ping [ホスト] -f -l [サイズ]


で返ってくるかどうか?で確認する。


0 件のコメント:

コメントを投稿