Windows性能监视器的性能图表显示:
对于仅在我的ISP的速度测试页面之外测试的所有Internet连接,发送的段数(nsend)≈接收的段数(nrecv)用于入站流量(下载)。对于ISP速度测试页面,nsend≈nrecv/ 2用于下载。
对于所有测试的LAN连接,nsend≈nrecv/(在注册表中设置的TcpAckFrequency值)进行下载。
图表: ISP速度测试页面 互联网流量1 互联网流量2 局域网流量1 局域网流量2
这意味着:
从未使用过SACK。
DelAck调整到我的偏好仅用于LAN。
除了该ISP页面之外,每个数据包都被确认用于Internet下载。
我期望的是,对于所有网络连接,无论是Internet还是LAN:
发送≤recv/ TcpAckFrequency进行下载。
理想情况下,当且仅当已填充完整的RWIN时,才应发送一个且仅一个ACK,其中接收方告知发送方已成功接收所有段。
我相信启用SACK和DelAck可以减少TCP开销,从而提高吞吐量,因为只需要发送少量的ACK数据包,并且可以节省处理能力来解析所有这些无关的ACK。
OS配置:
Win7 64位PC,版本6.1.7601
Realtek PCIe网卡
200Mbit / s FTTH订阅,在国际流量中具有周期性和戏剧性(512kbps至20 mbps)连接速度变化
HKLM \ SYSTEM \ CurrentControlSet \ services \ Tcpip \ Parameters \ SackOpts = 1
HKLM \ SYSTEM \ CurrentControlSet \ services \ Tcpip \ Parameters \ Tcp1323Opts = 2
HKLM \ SYSTEM \ CurrentControlSet \ services \ Tcpip \ Parameters \ Interfaces \ GUID \ TcpAckFrequency = 4 //也试过2和6
HKLM \ SYSTEM \ CurrentControlSet \ services \ Tcpip \ Parameters \ Interfaces \ GUID \ TcpDelAckTicks = 3 //对于互联网流量,RTT通常为70到150毫秒,所以我在操作系统默认值上添加了100毫秒,这样延迟的ack可能会更好地工作而不会使初始RWIN过多
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ Tcpip \ Parameters \ Interfaces \ GUID \ TcpNoDelay = 1
使用NETSH实用程序也可以启用接收侧扩展和RWIN自动调整。