事实(请指出任何虚假陈述):
我在相距 80 毫秒的两个站点之间建立了 100 Mbps 的连接
这是一个长长的胖连接,可以从大 TCP 窗口大小中受益,可能高达 100 Mbps * 0.08 秒 = 1,000,000 字节
两台机器都运行Windows Server 2012。“接收窗口自动调整级别”在两台机器上都是正常的。两者都禁用了“窗口缩放启发式”。
我在一侧运行“iperf -s”,在另一侧运行“iperf -c”。传输速度为 5 Mbps。我在另一个方向得到相同的结果。
双方都在他们的 SYN 中宣传了对 TCP 滑动窗口的支持。
接收器在整个运行期间请求 64,512 字节 (0xFC00) 的 TCP 窗口大小,TCP 窗口缩放值为“无移位”(0x000)。
网络能够处理更大的窗口大小(参见下面的序列图)
接收器保持窗口小于网络支持
此连接发生在 IPSEC VPN 内。隧道接口的 MTU 减少到双向 1400 字节。
题
无答案
网络坏了
运行在同一网络上的 Linux 机器将 TCP 窗口打开到 1.5 兆字节并以 6 倍的带宽传输数据
启用窗口缩放启发式
窗口缩放启发式被禁用(参见下面的“netsh interface tcp show heuristics”的输出)
接收窗口自整定电平不正常
Receive Window Auto-Tuning Level 正常(见下面“netsh interface tcp show global”的输出)
这在 …
卫星连接通常具有大约 500 毫秒的 RTT。尽管有大量带宽,但连接通常会遭受次优传输速度的影响,因为 TCP 确认需要很长时间才能到达。
我的理解是,解决 TCP 连接问题的一个好方法是将 TCP 窗口大小设置为连接速度(以位为单位)乘以 RTT(以秒为单位)。因此,通过卫星的 1mbps 连接应该具有 512kb 的窗口大小。
这其中有哪些陷阱?是否还有其他类似的调整可以优化卫星连接?我知道许多现代操作系统会自动修改窗口大小,但它们是否足够激进,使窗口大小足够大以用于卫星通信?
顺便说一句,我将假设在经常丢弃数据包的网络上不希望使用大窗口大小,因为重传将以窗口大小进行,并且您可能会将大部分带宽用于重传开销。
谢谢,我仍在学习很多关于网络的知识,感谢您的投入。
我已获得访问 Windows Server 2003 SP1 系统 (10.a.bbb.ccc) 上的共享的权限,该系统是一个文件和打印机服务器,并且经常将大文件复制到该共享。但是,有时这样的副本会失败。使用 Robocopy(在 10.xxx.yy.zzz 上)重现此问题时,我得到类似
70.4%
2013/07/31 11:20:21 ERROR 64 (0x00000040) Copying File <<file name removed>>
The specified network name is no longer available.
Waiting 30 seconds... Retrying...
New File 105.2 m <<file name removed>>
0.0%
Run Code Online (Sandbox Code Playgroud)
dumpcap + Wireshark 显示,当发生这种情况时,在复制过程中,服务器突然不再接受 TCP 端口 445 上的任何数据,方法是将窗口大小设置为零:
No. Time Source Destination Protocol Length Info
7303 5.841186000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
7304 6.149715000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP …Run Code Online (Sandbox Code Playgroud) 我是 Windows 网络的新手。当人们谈论 Windows 平台上的 TCP 调优时,他们总是提到 TCP 窗口大小。我想知道 Windows 是否使用“套接字缓冲区大小”的概念?
在 Windows XP 上,TCP 窗口大小是固定的。我们可以使用 TCPWindowSize 注册表值来设置它。套接字缓冲区大小如何?我们如何在 Windows 上设置套接字缓冲区大小?我们可以将其设置为与 TCP 窗口大小不同的值吗?