2011-03-11 323 views
18

HOST_A嘗試通過TCP發送一些數據HOST_B。 Host_B正在偵聽端口8181.Host_A & Host_B是Linux機箱(紅帽企業版)。 TCP層是使用Java NIO API實現的。TCP:服務器發送[RST,ACK]從客戶機接收[SYN]後立即

無論HOST_A發送,HOST_B無法接收。嗅探使用Wireshark的導線​​中的數據導致以下日誌:

1)HOST_A(33253)> HOST_B(8181):SYN] SEQ = 0贏= 5840長度= 0 MSS = 1460 TSV = 513413781 TSER = 0 WS = 7
2)HOST_B(8181)> HOST_A(33253):RST,ACK] SEQ = 1 ACK = 1運= 0長度= 0

該日誌顯示了HOST_A發送[ SYN]標記到Host_B以建立連接。但是代替[SYN,ACK],Host_B使用重置/關閉連接的[RST,ACK]進行響應。這種行爲總是被觀察到。

我在什麼情況下不知道TCP監聽發[RST,ACK]響應[SYN]

回答

29

RST, ACK表示端口被關閉。你確定Host_B正在監聽正確的IP /接口?

另請檢查您的防火牆的-j REJECT --reject-with tcp-reset

+4

謝謝Erik。其實這個港口並沒有關閉。但發現端口8181綁定到Host_B上的127.0.0.1,而不是實際的IP。看起來像/ etc/hosts的配置錯誤。 Java的InetAddress.getByName()是否更喜歡DNS上的主機文件? – Riyaz 2011-03-15 06:34:39

+2

如果端口沒有綁定到您關心的IP,那麼它將被關閉。打開的端口由元組(dst_ip,port)表示,並且您嘗試連接到未綁定的端口。另外,地址解析的各種實現應該按照'/etc/nsswitch.conf'中指定的順序運行。 – 2013-10-11 20:51:51

+0

我有同樣的問題。我正在使用seagull工具,我在配置中給了正確的ip,但始終綁定在127.0.0.1上,我該怎麼辦? – Subbu 2015-01-29 07:32:24

相關問題