2011-03-11 656 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

相关问题