【发布时间】:2011-01-29 08:48:31
【问题描述】:
在 Mac OS X (10.6) 上,如果我开始下载 YouTube 视频并将以太网电缆拉 5 秒左右,然后重新插入,我会根据浏览器获得不同的结果。使用 Opera 和 Chrome,在我将电缆重新插入后,视频会继续加载。但是对于 Safari 和 Firefox,它永远不会。
使用 Wireshark 查看流量,我发现 Opera 和 Chrome 只是在重新插入电缆后 ACK 来自 YouTube 的第一个数据包,但是 Safari 和 Firefox 在 TCP 标头中设置了 RST 标志(0x4)并且没有更多流量随之而来。
我可以在机器和互联网连接之间放置一个集线器,问题消失了,当电缆重新插入集线器时,所有四个浏览器都继续加载视频。同样,查看 Wireshark 日志,很明显机器没有看到 Mulitcast 连接关闭,只是数据包流过时有延迟。
因此,如果 Safari 和 Firefox 看到多播连接关闭,然后在同一连接上看到数据,它们似乎会发送 RST。
我的问题是为什么?正确的做法是什么,为什么 2/4 的浏览器以一种方式这样做,而另外 2/4 的浏览器则以另一种方式进行?例如,在代码中的某个地方我可以看到在 Firefox 中发生这种情况的地方吗?
非常感谢。
【问题讨论】:
-
这很奇怪,我没想到浏览器会进入 ACK'ing 数据包的级别——这将是网络堆栈的工作,除非它是浏览器处理的方式来自网络堆栈的错误信号不同。
-
这很有趣。我之前没有接触过 Mac,你确定所有浏览器都使用同一个 Flash Player?
标签: macos networking tcp