Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在发送ACK之前,什么决定了数据包的数量。服务器上的网络套接字_.net_Sockets_Tcp - Fatal编程技术网

.net 在发送ACK之前,什么决定了数据包的数量。服务器上的网络套接字

.net 在发送ACK之前,什么决定了数据包的数量。服务器上的网络套接字,.net,sockets,tcp,.net,Sockets,Tcp,在客户端发送ACK之前,什么决定服务器发送/客户端接收多少数据包?有没有办法在服务器端或客户端上配置此选项,以便在确认之前发送更多数据?如果没有收到ACK,服务器持续发送数据包多长时间?这是可配置的吗?服务器是请求ACK还是客户端只是发送ACK 谢谢 Sam通过TCP连接发送的每个字节都需要确认。这就是规则。服务器没有显式地请求ACK,因为它不必这样做——它只是希望您遵守规则,并且当它发送数据时,您将确认它。如果发送ACK的时间不超过一定的字节数,则可能会发生以下三种情况之一:服务器将等待ACK

在客户端发送ACK之前,什么决定服务器发送/客户端接收多少数据包?有没有办法在服务器端或客户端上配置此选项,以便在确认之前发送更多数据?如果没有收到ACK,服务器持续发送数据包多长时间?这是可配置的吗?服务器是请求ACK还是客户端只是发送ACK

谢谢


Sam通过TCP连接发送的每个字节都需要确认。这就是规则。服务器没有显式地请求ACK,因为它不必这样做——它只是希望您遵守规则,并且当它发送数据时,您将确认它。如果发送ACK的时间不超过一定的字节数,则可能会发生以下三种情况之一:服务器将等待ACK(读取:死机),重新发送您尚未确认的所有数据(读取:更多网络流量),或者,如果尝试并失败,则会重置连接(读取:“由对等方重置连接”)

尽管如此,您不必立即确认每个数据包。在需要ACK之前,服务器将发送一定数量的字节,这些字节不会比客户端公布的“接收窗口”多,通常也不会少。如果您愿意,您可以等待并收集几个段,然后立即确认它们……或者将它们与您要发送到服务器的数据一起发送。(带有数据的ACK实际上是免费的。)Windows已经做到了这一点;它在收到一个段后等待大约200毫秒,然后再发送ACK。如果在这段时间内出现另一个段,或者Windows准备好发送数据,则会立即发送覆盖这两个段的ACK。其效果是,在一般情况下(一次传入一组数据),裸ack的数量减少了一半

如果您真的认为您可以做得更好,那么显然,
TcpAckFrequency
有一个注册表设置,即“忽略延迟确认计时器之前未完成的TCP确认数”(读取:在Windows立即发送确认之前)。默认值为2。如果您愿意,您可以增加该值,但如果该值过高,则可能导致延迟

还有一个
TcpDelAckTicks
,它指定延迟的长度(以100毫秒为单位“ticks”)。默认值为2。同样,如果它太高,可能会导致延迟,从而使网络缓慢爬行

如果您坚持要尝试,请查看
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
。在中,有许多具有GUID名称的键;一个对应于您当前的网络连接。(如果你在WiFi上,也会有子键——每个网络一个?)你需要在其中添加值——默认情况下它们不存在


另外,看一看。它告诉您可以设置的各种选项。请注意,许多值名称当前不存在于注册表中!您必须添加它们才能设置它们

谷歌“tcp窗口大小”。别搞砸了。除非你比制造.net和Windows的人更了解它。这一点,如果你在问问题,你就不会问。@cHao,提问和回答建立了知识。@Samuel:一点知识可能是一件危险的事情。你需要了解基本原理以及它们如何应用,或者在你的情况下不需要。你可以完全gimp你的网络连接,通过玩设置,而不了解它们为什么存在,为什么它们被设置成现在的样子,更重要的是你可以如何改进它们。毫无疑问,微软花了相当多的时间调整这些设置以适应普通情况;“你必须对潜在的东西有相当透彻的了解,才能比他们做得更好。”赵,我认为你对一些问题反应过激。您还发现了一个重要的问题,即针对常见情况调整了设置。当一种理论指出数据与确认的比率相关的特定情况下存在特定问题时,该怎么办?(在我的案例中,我想反驳这个理论,因为我不同意)如果客户的网络管理员认为我们发送ACK的频率太高,那么最好说我们已经测试过调整窗口大小,它“破坏”了网络,还是简单地说我们在互联网上听了一些随机的人?知识和测试都很好。