2012-07-22 25 views
0

我正在写一个java(jpcap)应用程序来区分哪个响应数据包是哪个请求数据包。突然间,我遇到这两个http数据包,我的浏览器发送的数据完全相同(seq数字,ack数字,...),除了其中一个具有推送标志和不同的识别号码。我想知道为什么浏览器发送这两个?它是Ajax吗?为什么我的浏览器发送两个具有相同属性的数据包,除了推送?

1342824149:911270 /192.168.2.#->/174.143.213.# protocol(6) priority(0) hop(128) offset(0) ident(14123) TCP 11303 > 80 seq(2473817076) win(17040) ack 3940549542 

1342824149:911797 /192.168.2.#->/174.143.213.# protocol(6) priority(0) hop(128) offset(0) ident(14124) TCP 11303 > 80 seq(2473817076) win(17040) ack 3940549542 P 

和更重要的问题,这两个数据包有单独的回应?或者只有一个响应?或相同的回应?以及看起来会有什么回应?

+0

这是您的TCP堆栈发送重复数据包,而不是浏览器。 – Gabe 2012-07-22 02:21:14

+0

为什么和如何? @Gabe – Alireza 2012-07-22 02:47:19

+1

你的浏览器只是说“连接到端口Y上的IP地址X”和“发送这些字节”。它是内核中的TCP/IP堆栈,负责实际创建数据包并确保它们到达目的地。在这种情况下,第一个数据包没有被目的地确认,所以它再次被发送。 – Gabe 2012-07-22 04:55:35

回答

1

您的浏览器只是说“连接到端口Y上的IP地址X”和“发送这些字节”。它是内核中的TCP/IP堆栈,负责实际创建数据包并确保它们到达目的地。在这种情况下,第一个数据包没有被目的地确认,所以内核中的TCP代码再次发送它。

0

如果它们具有相同的TCP序列号,则它们是相同的数据:第二个是由于未确认而导致的重试。 PUSH标志除了可能在路由器中没有做任何事情。不同的Wireshark数字只是因为它们是不同的实际接收事件:它不在数据包中。

+0

好的,所以你说当一个响应回来时它是第二个,而不是第一个。因为第一个由于没有收到确认而被忽略!对? – Alireza 2012-07-22 02:34:28

+1

@Alireza我没有说任何这样的事情。如果响应返回,则是针对它们中的任何一个,哪个都不重要,因为它们都包含相同的数据。而且无法说明。如果第一个到达,第二个将被丢弃;如果第一个没有到达,第二个将被接受。无论哪种情况,接收应用程序的行为都是相同的。 – EJP 2012-07-22 03:44:52

相关问题