我们有Mac(在操作系统版本上没有区别,它给出了相同的结果)在局域网上正在经历慢速Mac下载的terminal用户。 当下载开始时,文件的下载时间不断增加,并且在下载完成之前需要很长时间。 有时,下载只是超时。 我们使用Windows的用户不会遇到此问题。 Mac通过以太网连接。 即使Mac连接到Wifi,下载仍然像连接到以太网时一样。 当使用Mac下载完networking时,它可以正常下载而不会出现问题。 这个问题似乎是在我们的networking导致Mac下载问题,但我们似乎无法弄清楚是什么或在哪里寻找解决问题,找出可能造成的。 任何帮助解决这个问题将不胜感激。 什么是一些可能的事情,可以导致缓慢的Mac下载问题在局域网? 我不明白为什么它只影响Mac机器,而不是Windows机器。
最初,我认为这可能是在Mac(山狮子OS X 10.8.5)的主机configuration造成的问题,所以我格式化驱动器和安装埃尔卡皮坦,但下载时间是相同的。 然后,我在Mac和Windows上做了一个数据包捕获,试图比较可能造成的原因,但我不太了解如何分析数据包捕获。 从我所了解的知识来看,我可以看到一些连接重置,我甚至还在networking上的Mac上做了一个数据包捕获,试图了解在下载过程中可能会做什么不同networking。 有没有办法让我可以发布一个截图 – 这样的人可以帮助我分析它,看看networking上可能会产生什么?
CloudShark可能是最接近数据包捕获片段的服务。
重置是有趣的,并且可能是OS X机器感觉缓慢的原因。 为了解释为什么,我们必须详细介绍如何select速度。 这是基于TCP Sliding Windows , 带宽延迟产品的一个次序。
给定networking连接的绝对吞吐量由以下几个因素决定:
跨越美国的1GbE连接在其上具有大约80ms的单向延迟。 由于确认是一个因素,我们必须计算他们的返回时间。 所以,做160ms往返时间。 如果全速传输,1GbE连接在这160ms(1024Gb x .16秒)内可以有20MB的“未完成”数据。
在协商TCP连接时,双方握手的其中一个参数就是TCP窗口的大小。 这是第三个要点:发送方愿意放弃多less数据而不是接收方的缓冲区大小来接收数据。 随着数据的传输,双方都会发布有关他们愿意容忍的窗口大小的更新。 对于快速,干净的networking,这可能会相当大。
但是,如果连接由于某种原因被重置,则该过程将以原始窗口大小重新开始。 如果窗口已满,发送方将停止发送,直到这些ACK返回。 您开始明白为什么获取连接重置会导致性能问题。
我想提到的还有另外一个方面,就像我之前看到的那样,会导致这种问题。 你没有提到你看到它,但如果你看,你可能会看到它们。 重发。
从最初的规范中添加到TCP中的一个是select性确认 ( Selective Acknowledgments) 。 如果有数据包丢失,这不起作用,而不是连接重置。 没有SACK,如果我前面提到的那个1Gb,160ms的RTT连接有一个数据包丢失,那么接收方将坐在那里,在发送方重新发送丢弃的数据包中的所有内容之前,在该层上放下20MB的数据。 这种行为对我们1989年的那种networking来说是很好的,但是现在的这种行为比以前快了很多。 SACK允许接收方说:“我已经看到了时间戳123和125-137”,这允许发送方只重新发送缺less的124段并继续其余的部分。
我已经明确地看到,在连接上缺lessSACK支持的情况下,只会导致可怕的吞吐量。 一旦我们把它们启用了双方,性能达到理论最大值。
这个问题的线索可以在最初的TCP三次握手中find。 您应该在双方的Options标头中看到SACK。 如果OSX机器没有发行它,但是Windows有,那么你就有了一个很好的线索来解决你的问题。