根据http://support.microsoft.com/kb/944884 的说法,“当一个或多个大型响应通过慢速网络连接发送到客户端时,time-taken 字段的值可能会超过预期”。
我遇到过这样的情况,客户会说,“我在 10:03:24 向您的 Web 服务器发送了一个请求,花了 20 秒,为什么?”。我也可以在 IIS 日志中看到这一点,但是服务器的 ASP.NET 模块将其记录为耗时 100 毫秒,并且 CPU 和磁盘计数器很低。
我怀疑这是由于网络连接速度慢。我怎样才能证明这一点?
更新:
1) 这些是 SOAP Web 服务请求,因此没有嵌入图形,只是带有单个 XML 结果页面的 HTTP POST。
2)另外,我已经通过在客户端限制网络速度来重现这一点,并且症状完全相同。
3) 问题是间歇性的,这意味着客户端的相同请求通常很快,但偶尔会很慢。除了限制网络之外,我自己无法重现这一点。服务器的 ASP.NET 日志显示它总是很快,但是当客户端说它很慢时,IIS 日志显示它很慢。
4)我只能访问服务器,并且需要向客户端提供尽可能多的信息,以便他们接受问题不在服务器上并知道在客户端上运行哪些日志记录/工具以查找根本原因。
我正在查看wireshark中的一些随机流量并遇到了这个(使用相对seq/ack号):
1. myIP -> 74.125.227.96 [SYN] seq=0
2. 74.125.227.96 -> myIP [SYN/ACK] seq=0 ack=1
3. myIP -> 74.125.227.96 [ACK] seq=1 ack=1
4. myIP -> 74.125.227.96 [ACK] seq=1 ack=1 len=14600
5. 74.125.227.96 -> myIP [ACK] seq=1 ack=2921
6. 74.125.227.96 -> myIP [ACK] seq=1 ack=5841
7. myIP -> 74.125.227.96 [ACK] seq=14601 ack=1 len=8760
8. 74.125.227.96 -> myIP [ACK] seq=1 ack=8761
9. myIP -> 74.125.227.96 [ACK] seq=23361 ack=1 len=4380
etc...
Run Code Online (Sandbox Code Playgroud)
我正在使用http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers 作为资源,看起来像 seq=previous ack 和 ack+=previous seq+len/flags(请如果我错了纠正我)。但是第 4-7 行发生了什么?数据包是碎片还是什么?seq/ack 数字对我来说似乎没有加起来那么我哪里出错了?