我有一個非常奇怪的網絡問題。實際的網絡配置非常複雜,因爲我使用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