我是网络编程的初学者。我读了一些我可以在互联网上找到的资源,在那里我遇到了TCP窗口缩放。据我所知,在SYN数据包中首次建立连接时协商缩放因子。那么这是否意味着我们为套接字编程编写的代码无法设置TCP窗口缩放?这是操作系统吗?比如说,在Windows环境中,这是如何发生的,我们有办法手动/动态地改变它吗?
答案 0 :(得分:4)
如果您通过setsockopt().
在连接握手期间发生窗口缩放协商时,必须在连接套接字之前执行此操作。在服务器通过监听套接字接受套接字的情况下,这显然是不可能的,所以你必须在监听套接字上设置套接字接收缓冲区大小的明显奇怪的操作,从接受的所有套接字继承它从它。
答案 1 :(得分:1)
不,我相信这只能在全球范围内设定。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
键下有一个注册表设置。
它被称为GlobalMaxTcpWindowSize
。见这里:http://technet.microsoft.com/en-us/library/cc957546.aspx
如果您实际意味着要更改套接字接收和发送缓冲区的大小,那么可以使用Winsock更改这些内容。请参阅SO_RCVBUF
和SO_SNDBUF
。
答案 2 :(得分:0)
TCP包的窗口大小由操作系统管理。到目前为止,您无法动态更改它。有关更改整个系统窗口大小的静态方法,请参阅Nicks answer。
只有一种非常困难的方法:你可以在WinCap中写出你想要的每个TCP包。但这真是一种痛苦。