1

我是网络编程的初学者。我阅读了一些可以在 Internet 上找到的资源,在那里我遇到了 TCP Window Scaling。据我了解,缩放因子是在首次建立连接时在 SYN 数据包中协商的。那么这是否意味着我们为套接字编程编写的代码不能设置 TCP 窗口缩放?是操作系统执行此操作吗?比如说,在 Windows 环境中,这是如何发生的,有没有办法让我们手动/动态地改变它?

4

3 回答 3

4

如果您将套接字接收缓冲区大小设置为大于 64k,则会自动启用窗口缩放,通过setsockopt().

由于窗口缩放协商发生在连接握手期间,因此您必须在连接套接字之前执行此操作。在服务器通过侦听套接字接受套接字的情况下,这显然是不可能的,因此您必须执行在侦听套接字上设置套接字接收缓冲区大小的明显奇怪的操作,所有接受的套接字都从那里继承它从中。

于 2012-09-12T23:11:08.077 回答
1

不,我相信这只能在全球范围内设置。键下有一个注册表设置HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

它被称为GlobalMaxTcpWindowSize。见这里:http ://technet.microsoft.com/en-us/library/cc957546.aspx

如果您的实际意思是更改套接字接收和传输缓冲区的大小,那么可以使用 Winsock 更改这些缓冲区。见SO_RCVBUFSO_SNDBUF

于 2012-09-12T12:02:47.410 回答
0

TCP 包的窗口大小由操作系统管理。到目前为止,您无法动态更改它。有关更改整个系统的窗口大小的静态方法,请参见Nicks的回答。

只有一个非常困难的方法:你可以在 WinCap 那里写出你想要的每个 TCP 包。但这是一个真正的痛苦。

于 2012-09-12T12:02:59.160 回答