事实(请指出任何虚假陈述):
我在相距 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 2008 服务器下载文件(并且仅下载)时,我因过多的“TCP Dup ACK”和“TCP 快速重传”而丢失数据包。上传速度还行。
仅当客户端计算机(Win7)以 100mb/s 连接时才会发生这种情况。在 1GB 时,没有错误,我可以全速运行。如果我将客户端 nic 设置为 100Mb/s,我会收到很多“TCP Dup”错误并且下载速度下降到大约 2-5MB/s。上传速度为 10MB/s 或以上。
这仅发生在 Windows 2008 Server 机器上(戴尔,但硬件不同)。如果我在Win7客户端和Linux服务器之间传输,则不会出现此问题。
这就像 Server 2008 无法正确缩放 TCP 窗口,使交换机过载或其他什么,然后暂停流量。
由于设备较旧,部分网络以 100Mb/s 的速度运行,因此这确实在某些建筑物中造成了问题。
我在这里从客户端上传了一个 pcap 文件。 https://dl.dropboxusercontent.com/u/24907255/slow.pcap.gz
它显示了一个 50MB 的文件正在写入服务器,然后从服务器读回错误。
谢谢你的帮助。我难住了。
2013 年 11 月 28 日更多信息。
我关闭了整个网络,这样网络上只有一台客户端和一台服务器。问题没有变化。
如果我将每个接口、服务器、客户端和 Cisco 2960 交换机都设置为 100Mbs,那么问题就会消失。如果我将服务器和交换机接口设置为 auto 或 1Gbs,问题又回来了。
如果我用 Netgear 10/100 交换机绕过交换机并将客户端和服务器都设置为自动,我就没有问题。
我确实发现了这一点。在正常设置中,服务器以 1Gbs 切换,我在客户端和 Cisco 交换机之间插入 Netgear 10/100 交换机,我的速度问题更严重。速度从 5-7MB/s 到 2-3MB/s,是的,我尝试过固定和自动网络速度。这可以解释为什么某些建筑物与主 Cisco 交换机之间有 2 个交换机跃点的原因更多地存在速度问题。
继续ping。一切都在 1GB/s 时,我可以 ping …
windows-server-2008 network-share broadcom tcp-window-scaling
为了防止 DDOS 攻击,我按照建议将我的 linux 机器中的 /proc/sys/net/ipv4/tcp_syncookies 值设置为 1 以启用 TCP syncookies。
但是,当我查看此网址时:http://ckdake.com/content/2007/disadvantages-of-tcp-syn-cookies.html
它告诉我,如果我启用 tcp_syncookies,那么一半的 tcp 功能(包括大窗口管理)将被禁用,这可能会降低性能。
我在其他地方读到,syn cookie 的部分目的是当更多数据包进入时将 tcp syn 积压缓冲区扩展到其上限(通过 /proc/sys/net/ipv4/tcp_max_syn_backlog),这样数据包就不会丢失。
我希望能够禁用 syn cookie,这样我就可以充分利用 tcp 并使我的服务器运行得更快并且继续不受 DDOS 攻击。我可以轻松地增加同步缓冲区和最大连接数,但我认为如果设置得太高,我会耗尽内存。
有没有人有一个好的替代方法可以在重型服务器上同步 cookie 而不会受到 DDOS 攻击?我想享受 TCP 的功能并非常快速地向用户提供内容。
TCP 窗口大小是发送方在等待 TCP 确认之前将发送的数据量。接收方是否有办法控制这一点(例如,作为 TCP 握手的一部分),还是只有发送方可以控制?
tcp ×2
tcp-window ×2
broadcom ×1
connection ×1
ddos ×1
latency ×1
networking ×1
satellite ×1
syn ×1