我正在编写一个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
更重要的问题是,这两个数据包是否有单独的响应?还是只有一个回应?还是同样的反应?反应会是什么样子?
您的浏览器只会说"连接到端口Y上的IP地址X"并"发送这些字节"。内核中的TCP/IP堆栈负责实际创建数据包并确保它们到达目的地。在这种情况下,第一个数据包没有得到目的地的确认,所以内核中的TCP代码再次发送了它。
如果它们具有相同的TCP序列号,则它们是相同的数据:第二个是由于未确认而重试。PUSH标志除了可能在路由器中之外,实际上什么都不做。不同的Wireshark编号只是因为它们是不同的实际接收事件:它不在数据包中。