7

如果我向同一台服务器发出多个 HTTP Get 请求并获得每个 HTTP 200 OK 响应,我如何使用 Wireshark 判断哪个请求映射到哪个响应?

目前它看起来像是发出了一个 http 请求,并且很快收到了下一个 HTTP 200 OK 响应,因此一切都处于正确的顺序。然而,我看到了相反的情况。例如,使用 Google Maps API v2,我已经多次请求位置信息,然后以任意顺序接收信息(非常类似于我请求它的顺序,但不一定完美。)

所以我的直觉是我不能假设我的回复会以特定的顺序被接收,即使它们可能在大多数时间都是有序的。所以我想知道如何从响应中确定这个顺序。

更新:澄清我需要什么。我只需要知道服务器已收到请求。看来我需要通过查看序列号甚至 ACKS 来做到这一点。这种方法背后的原因是我基本上是在观察一个网络应用程序并检查它是否正在发送信息以及正在接收信息。

更新:这与wireshark无关。我相信这会让人们感到困惑,所以我将其从标题中删除。它与 TCP/IP 协议之上的 HTTP 协议以及我们如何将响应映射到请求有关。

谢谢。

4

4 回答 4

15

停止捕获数据包后,请执行以下步骤:

  1. 将光标定位在 GET 请求上

  2. 打开分析菜单

  3. 点击“关注 TCP 流”

您将获得一个新窗口,其中按顺序显示请求和响应。

于 2010-01-29T20:28:09.943 回答
5

当我在谷歌上搜索一个完全不同的问题时,我看到了这个问题,我想我可以提供一个更完整的答案:

HTTP 规定响应必须按照请求的顺序到达,因此,如果您在给定时间查看单个 TCP 连接,您应该会看到:

要求 ; 回复 ; 要求 ; 回复 ...

同样在 HTTP/1.1 中,支持“管道”,客户端无需等待响应到达即可发出下一个请求。在这种情况下可以观察到的是:

要求 ; 回复 ; 要求 ; 要求 ; 回复 ; 回复 ; 要求 ; 回复

在 HTTP 响应本身中,没有对触发它的特定请求的引用。

Fillipo 的建议在调试/观察单个 TCP 连接时是经典的,但是,当观察多个 TCP 连接时,您不能单击跟随 TCP 流,因为您必须为每个连接都这样做。

如果您有很多 TCP 连接,并且有很多请求/响应,您将不得不查看请求数据包中的 TCP 源端口和响应数据包中的 TCP 目标端口,以了解哪个响应与每个 tcp 连接相关,然后应用HTTP 请求/响应顺序规则。

此外,Wireshark 可以解压响应体,如果所有响应体都到达,它会自动解压,但不会在 Follow TCP Stream 中解压。

我总是使用 Wireshark 来调试 HTTP。

于 2014-01-19T14:13:03.767 回答
3

似乎应用层的 HTTP 协议没有提供这种能力,所以我必须下到传输层来确定这一点。在我的例子中,TCP/IP 层使用序列号。

HTTP 只假定可靠的
传输;可以使用任何提供此类保证的协议;HTTP/1.1 请求和响应结构到相关
协议的传输数据单元的映射超出了本规范的范围。

阅读更多: http: //www.faqs.org/rfcs/rfc2616.html#ixzz0e20kxKcz

于 2010-01-29T19:43:01.673 回答
2

不要使用 Wireshark 调试 HTTP,使用Fiddler2等 HTTP 调试器

于 2010-01-29T20:30:44.240 回答