私はネットワークプログラミングの初心者です。インターネットで見つけたいくつかのリソースを読んだところ、TCP Window Scaling に出会いました。私が理解しているように、スケーリング係数は、SYN パケットで接続が最初に確立されたときにネゴシエートされます。これは、ソケット プログラミング用に記述したコードでは TCP ウィンドウ スケーリングを設定できないということでしょうか? これを行うのはオペレーティングシステムですか?たとえば、Windows 環境では、これはどのように発生し、手動/動的に変更する方法はありますか?
3 に答える
ソケット受信バッファサイズを64kを超える値に設定すると、ウィンドウスケーリングが自動的に有効になります。setsockopt().
ウィンドウスケーリングネゴシエーションは接続ハンドシェイク中に発生するため、ソケットを接続する前にそれを行う必要があります。サーバーがリスニングソケットを介して受け入れたソケットの場合、これは明らかに不可能であるため、代わりに、受け入れられたすべてのソケットに継承される、リスニングソケットでソケット受信バッファサイズを設定するという明らかに奇妙な操作を行う必要があります。それから。
いいえ、これはグローバル レベルでのみ設定できると思います。キーの下に、このためのレジストリ設定がありHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
ます。
と呼ばれていGlobalMaxTcpWindowSize
ます。ここを参照してください: http://technet.microsoft.com/en-us/library/cc957546.aspx
実際にソケットの受信バッファと送信バッファのサイズを変更することを意味している場合、これらは Winsock を使用して変更できます。SO_RCVBUF
およびを参照してくださいSO_SNDBUF
。
TCP パッケージのウィンドウ サイズは、オペレーティング システムによって管理されます。これまでのところ、それを動的に変更することはできません。システム全体のウィンドウ サイズを静的に変更する方法については、Nicks answer を参照してください。
非常に難しい方法が 1 つだけあります。WinCap を使用すると、必要なすべての TCP パッケージを書き出すことができます。しかし、それは本当の痛みです。