事实(请说明任何虚假陈述):

>我在两个相隔80毫秒的站点之间有100 Mbps的连接
>这是一个长胖连接,可以从大的TCP窗口大小中受益,可能高达100 Mbps * 0.08秒= 1,000,000字节
>两台计算机都运行Windows Server 2012.“接收窗口自动调整级别”在两者上均正常.两者都禁用“窗口缩放启发式”.
>我一边是“iperf -s”,另一边是“iperf -c”.转移发生在5 Mbps.我从另一个方向得到了相同的结果.
>双方都宣称在其SYN中支持TCP滑动窗口.
>接收方请求TCP窗口大小为64,512字节(0xFC00)
在整个运行过程中,TCP窗口缩放值为“无移位”
(0x000的).
>网络能够处理更大的窗口大小(参见序列
图表)
>接收器使窗口小于网络支持
>此连接发生在IPSEC VPN中.隧道接口的MTU在两个方向上减少到1400字节.

>为什么接收器保持窗口小?

无答案

>网络坏了

在同一网络上运行的Linux机器将TCP窗口打开到1.5兆字节,并以6倍的带宽传输数据
>启用窗口缩放启发式扫描

窗口缩放启发式被禁用(参见下面的“netsh interface tcp show heuristics”的输出)
>接收窗口自动调整级别不正常

接收窗口自动调整级别正常(参见下面的“netsh interface tcp show global”的输出)
>这在ESXi中的虚拟机上运行不正常

在同一主机上运行的虚拟Linux机器上,性能提高了6倍.

2015年6月12日下午4:30更新

我通过将linux放在连接的一端来修改测试.果然,当linux向Windows Server 2012发送数据时,Windows提供了一个太小的TCP接收窗口(64,512字节).

当我将数据从Windows发送到linux时,linux提供了足够大的TCP接收窗口(1,365,120字节).但是,Windows限制发送到飞行中最多约60,000个字节.

更新于2015年6月13日下午3点(太平洋时间)

更接近根本原因的一步.在我的设置中,SO_SNDBUF和SO_RCVBUF都没有设置(通过iperf).这些是有效绑定接收窗口的发送和接收缓冲区.未指定这些值时,Windows Server 2012提供的默认值为64 kB.所以现在的问题是:

>如果未指定一个,为什么Windows Server 2012不会动态增加SO_SNDBUF / SO_RCVBUF以适应MSDN所述的长胖管道?

无答案

>“netsh winsock show autotuning”已禁用

它已启用.

更新于2015年8月24日下午4点(太平洋时间)

netsh显然已被Set-NetTcpsetting和family取代. Get-NetTcpsetting结合Get-NetTCPConnection显示我在“互联网”制度下运行,它为我提供了以下设置:

SettingName                   : Internet
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

发件人TCP设置

PS C:\Users\acs> netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : disabled
NetDMA State                        : disabled
Direct Cache Access (DCA)           : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : enabled
RFC 1323 Timestamps                 : disabled
Initial RTO                         : 3000
Receive Segment Coalescing State    : enabled

PS C:\Users\acs> netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics         : disabled
Qualifying Destination Threshold  : 3
Profile type unkNown              : normal
Profile type public               : normal
Profile type private              : normal
Profile type domain               : normal

PS C:\Users\acs> Get-NetTcpsetting

SettingName                   : Automatic
MinRto(ms)                    : 
InitialCongestionWindow(MSS)  : 
CongestionProvider            : 
CwndRestart                   : 
DelayedAckTimeout(ms)         : 
MemoryPressureProtection      : 
AutoTuningLevelLocal          : 
AutoTuningLevelGroupPolicy    : 
AutoTuningLevelEffective      : 
EcnCapability                 : 
Timestamps                    : 
InitialRto(ms)                : 
ScalingHeuristics             : 
DynamicPortRangeStartPort     : 
DynamicPortRangeNumberOfPorts : 

SettingName                   : Custom
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Compat
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 2
CongestionProvider            : Default
CwndRestart                   : False
DelayedAckTimeout(ms)         : 200
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Datacenter
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Internet
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

发件人SYN

No.     Time           Source                Destination           Protocol Length Delta      Sequence number AckNowledgment number Bytes in flight Calculated window size Info
    814 5.036577000    10.10.0.21            10.11.0.1             TCP      66     0.000000000 0               0                                     64512                  49758→5001 [SYN,ECN,CWR] Seq=0 Win=64512 Len=0 MSS=1460 WS=1 SACK_PERM=1

Frame 814: 66 bytes on wire (528 bits),66 bytes captured (528 bits) on interface 0
Ethernet II,Src: 00:11:22:33:44:55,Dst: aa:bb:cc:dd:ee:ff
Internet Protocol Version 4,Src: 10.10.0.21 (10.10.0.21),Dst: 10.11.0.1 (10.11.0.1)
Transmission Control Protocol,Src Port: 49758 (49758),Dst Port: 5001 (5001),Seq: 0,Len: 0
    Source Port: 49758 (49758)
    Destination Port: 5001 (5001)
    [Stream index: 73]
    [TCP Segment Len: 0]
    Sequence number: 0    (relative sequence number)
    AckNowledgment number: 0
    Header Length: 32 bytes
    .... 0000 1100 0010 = Flags: 0x0c2 (SYN,CWR)
    Window size value: 64512
    [Calculated window size: 64512]
    Checksum: 0x1451 [validation disabled]
    Urgent pointer: 0
    Options: (12 bytes),Maximum segment size,No-Operation (nop),Window scale,SACK permitted
        Maximum segment size: 1460 bytes
        No-Operation (nop)
        Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        No-Operation (nop)
        No-Operation (nop)
        TCP SACK Permitted Option: True

序列图的发送者视角

接收器TCP设置

PS C:\Users\acs> netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : disabled
NetDMA State                        : disabled
Direct Cache Access (DCA)           : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : enabled
RFC 1323 Timestamps                 : disabled
Initial RTO                         : 3000
Receive Segment Coalescing State    : enabled

PS C:\Users\acs> netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics         : disabled
Qualifying Destination Threshold  : 3
Profile type unkNown              : normal
Profile type public               : normal
Profile type private              : normal
Profile type domain               : normal

PS C:\Users\acs> Get-NetTcpsetting

SettingName                   : Automatic
MinRto(ms)                    : 
InitialCongestionWindow(MSS)  : 
CongestionProvider            : 
CwndRestart                   : 
DelayedAckTimeout(ms)         : 
MemoryPressureProtection      : 
AutoTuningLevelLocal          : 
AutoTuningLevelGroupPolicy    : 
AutoTuningLevelEffective      : 
EcnCapability                 : 
Timestamps                    : 
InitialRto(ms)                : 
ScalingHeuristics             : 
DynamicPortRangeStartPort     : 
DynamicPortRangeNumberOfPorts : 

SettingName                   : Custom
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Compat
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 2
CongestionProvider            : Default
CwndRestart                   : False
DelayedAckTimeout(ms)         : 200
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Datacenter
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Internet
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

接收器SYN

No.     Time           Source                Destination           Protocol Length Delta      Sequence number AckNowledgment number Bytes in flight Calculated window size Info
    817 5.110501000    10.11.0.1             10.10.0.21            TCP      70     0.073924000 0               1                                     64512                  5001→49758 [SYN,ACK,ECN] Seq=0 Ack=1 Win=64512 Len=0 MSS=1460 WS=1 SACK_PERM=1 [ETHERNET FRAME CHECK SEQUENCE INCORRECT]

Frame 817: 70 bytes on wire (560 bits),70 bytes captured (560 bits) on interface 0
Ethernet II,Src: aa:bb:cc:dd:ee:ff,Dst: 00:11:22:33:44:55
Internet Protocol Version 4,Src: 10.11.0.1 (10.11.0.1),Dst: 10.10.0.21 (10.10.0.21)
Transmission Control Protocol,Src Port: 5001 (5001),Dst Port: 49758 (49758),Ack: 1,Len: 0
    Source Port: 5001 (5001)
    Destination Port: 49758 (49758)
    [Stream index: 73]
    [TCP Segment Len: 0]
    Sequence number: 0    (relative sequence number)
    AckNowledgment number: 1    (relative ack number)
    Header Length: 32 bytes
    .... 0000 0101 0010 = Flags: 0x052 (SYN,ECN)
    Window size value: 64512
    [Calculated window size: 64512]
    Checksum: 0xb5bb [validation disabled]
    Urgent pointer: 0
    Options: (12 bytes),SACK permitted
        Maximum segment size: 1460 bytes
        No-Operation (nop)
        Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        No-Operation (nop)
        No-Operation (nop)
        TCP SACK Permitted Option: True
    [SEQ/ACK analysis]

序列图的接收器透视图

TCP窗口

我已将此视为特定于驱动程序的问题;在我的情况下,QLogic网络控制器试图使用TCPChimney.此链接描述了Windows 2008中添加的TCPChimney功能 – 但我很确定它仍然适用: https://support.microsoft.com/en-us/kb/951037

我建议按顺序测试以下内容;每次测试后,重新启动并查看接收器是否按预期开始增加TCP RWIN.

1)在接收计算机上加载网络适配器的最新版本的驱动程序.
1)在接收计算机上禁用TCPChimney
2)禁用所有“TCP接收”卸载.这可以在网络适配器属性的高级设置中找到(与Speed& Duplex设置的区域相同)
3)禁用所有“TCP发送”卸载(也在网络适配器的高级属性中)

(与评论相反“超过65k的大TCP窗口大小对服务器不利,因为那时连接的内存需求增加.单独65k也可能不会让你足够开心.– user303507 2015年8月6日11:30”,大TCP接收Windows本身对服务器不利.在高带宽,高延迟链路(如卫星中继)的情况下,需要大的RWIN值,以便我们在“管道”中有更多的TCP数据.想象一下600 Mbps的连接,延迟为3000毫秒;高带宽链路将限制在大约20 KBps;因为一次只有65 KB的未确认TCP数据可能“在管道中”.)

windows-server-2012 – Receiver将TCP窗口大小限制为64,512的更多相关文章

  1. 当iOS应用程序进入后台时,TCP和UDP(与多播)连接会发生什么

    我创建了几个实验:设置1:我创建了一个TCPSender应用程序和一个TCPReceiver应用程序.在本次实验中,我在iOS设备上启动了TCPSender,在另一台iOS设备上启动了TCPReceiver.然后两者都经过验证已建立连接并发送和接收数据.然后我将TCPReceiver应用程序置于后台.TCPSender应用程序指示连接丢失和崩溃(是的,我打算这样).设置2:我创建了一个UDPSen

  2. 在iOS中,如何增加主机的HTTP连接限制?

    使用Xcode网络工具,我分析说,我每次只能建立每个主机的4个TCP连接.似乎iOS的每个主机的默认TCP连接限制为4.我们如何增加这个限制?

  3. Swift开发:GCDAsyncSocket通信之TCP服务器

    overridefuncviewDidLoad(){super.viewDidLoad()clientSockets=NSMutableArray()msgTextView.backgroundColor=UIColor.grayColor()msgTextView.text="接收的客户端消息:\n"}//发送消息按钮@IBActionfuncsendBtnClick{ifclientSockets.count==0{return}letmsg=inputTextInput.text!//1.处理请求,

  4. Swift开发:GCDAsyncSocket通信之TCP 客户端

    varmainQueue=dispatch_get_main_queue()overridefuncviewDidLoad(){super.viewDidLoad()}//连接服务器按钮事件@IBActionfuncconBtnClick{do{clientSocket=GCDAsyncSocket()clientSocket.delegate=selfclientSocket.delegateQueue=dispatch_get_global_queue(0,0)tryclientSocket.conn

  5. Android GCM讯息需要太长时间才能到来

    我在应用程序中使用GCM,我有一个问题.大部分时间我马上收到邮件,但有时邮件会在5分钟后再次出现,就像他们被困在路上.这是正常吗?

  6. Android TCP连接最佳做法

    我正在处理一个需要TCP连接到TCP服务器的Android应用程序我的AndroidTCP客户端正在工作可以来回发送消息.我的奇怪问题是:>在Android中处理与服务器的TCP连接的最佳方式是什么?>如何维护连接正确关闭连接)?

  7. Android实现TCP客户端支持读写操作

    这篇文章主要介绍了Android-实现TCP客户端,支持读写操作,主要是通过socket读写tcp,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  8. nodejs处理tcp连接的核心流程

    这篇文章主要介绍了nodejs处理tcp连接的核心流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. Python TCP全连接攻击中SockStress全连接攻击详解

    Sock Stress 全连接攻击属于TCP全连接攻击,因为需要建立一次完整的TCP三次握手,该攻击的关键点就在于,攻击主机将windows窗口缓冲设置为0,实现的拒绝服务

  10. 详解PHP Swoole与TCP三次握手

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。本文将详细介绍PHP Swoole与TCP三次握手。

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部