我有一个非常奇怪的网络问题。实际的网络配置非常复杂,因为我使用Openstack和Docker来构建虚拟网络。然而,这个问题并不存在,因为我正在捕获主机的接口,并以正确的方式看到所有数据包......但由于某些原因,我不知道,似乎TCP忽略了它们,尽管它们有已收到:它不会为它们发送ACK,也不会将数据发送给应用程序。TCP接收数据包,但它忽略它们
在我的试验中,我向主机(192.168.4.100)的服务器码头(IP 192.168.4.3)发送了一个HTML页面的HTTP GET请求。
我看到捕捉上192.168.4.100使用Wireshark的是:
192.168.4.100 -> SYN -> 192.168.4.3
192.168.4.3 -> SYN, ACK -> 192.168.4.100
192.168.4.100 -> ACK -> 192.168.4.3
192.168.4.100 -> GET/HTTP/1.1 -> 192.168.4.3
192.168.4.3 -> ACK -> 192.168.4.100
192.168.4.3 -> Fragment 1 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 1 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 1 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 1 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 1 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 1 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 1 of HTTP 200 OK response -> 192.168.4.100
192.168.4.100 -> ACK of Fragment 1 -> 192.168.4.3
192.168.4.3 -> Retransmission of Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 2 of HTTP 200 OK response -> 192.168.4.100
192.168.4.100 -> ACK of Fragment 2 -> 192.168.4.3
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.3 -> Retransmission of Fragment 3 of HTTP 200 OK response (PSH) -> 192.168.4.100
192.168.4.100 -> ACK of Fragment 3 -> 192.168.4.3
这实际上是一个很大的问题,因为有GET请求,并与当下一致的最后一个ACK约40秒应用程序(在这种情况下是telnet)获取数据。
我已经检查所有的校验和,它们是正确的......
所以其实我不知道为什么会这样,做些什么!我尝试过使用不同的操作系统作为主机(Windows 8手机,MAC OSX,Ubuntu 14.04,...),但没有任何变化。 如果我从虚拟网络的另一个泊坞窗发送相同的请求,一切工作正常。
关于问题可能是什么的任何想法?
谢谢!
PS在这里你可以看到捕获的截图:
更新
一两件事,我觉得会很有意思的是,我做了一个类似的拍摄,但是当一个HTTP请求从192.168.4.3发送到192.168.4.100。在192.168.4.100接口上再次捕获捕获,并且似乎192.168.4.100再次忽略它接收到的数据包(例如,查看三次握手)。我发现没有理由再次。
1.您在哪里拍摄?在服务器还是客户端? 2.机器之间的MTU是多少? 3.每个片段的大小是多少? 4.响应的大小是多少? – Malt 2014-11-03 14:57:09
1 - 正如我所说,我捕获主机192.168.4.100的接口; 2 - MTU是1454,因为它们之间有一个GRE隧道;这些片段的长度是1454,但是最后的长度是327字节。 – mgaido 2014-11-03 15:05:42
你可以将整个捕捉发布在某个地方吗?我想看看时间和一些TCP/IP标头......如果它包含任何专有的东西,您可以删除HTTP负载。只是捕获看起来很奇怪,如果它真的被捕获在客户端。 – Malt 2014-11-03 15:11:27