Linux TCP:服务器从客户端接收[SYN]后立即发送[RST,ACK]

Linux TCP:服务器从客户端接收[SYN]后立即发送[RST,ACK],linux,tcp,nio,redhat,Linux,Tcp,Nio,Redhat,主机A尝试通过TCP向主机B发送一些数据。主机B正在侦听端口8181。主机A和主机B都是Linux机器(Red Hat Enterprise)。TCP层是使用JavaNIOAPI实现的 无论主机A发送什么,主机B都无法接收。使用WireShark嗅探wire上的数据会产生以下日志: 1) 主持人A(33253)>主持人B(8181):[SYN]Seq=0 Win=5840 Len=0 MSS=1460 TSV=513413781 TSER=0 WS=7 2) 主持人B(8181)>主持人A(33

主机A尝试通过TCP向主机B发送一些数据。主机B正在侦听端口8181。主机A和主机B都是Linux机器(Red Hat Enterprise)。TCP层是使用JavaNIOAPI实现的

无论主机A发送什么,主机B都无法接收。使用WireShark嗅探wire上的数据会产生以下日志:

1) 主持人A(33253)>主持人B(8181):[SYN]Seq=0 Win=5840 Len=0 MSS=1460 TSV=513413781 TSER=0 WS=7
2) 主持人B(8181)>主持人A(33253):[RST,ACK]顺序=1 ACK=1 Win=0 Len=0

日志显示主机A向主机B发送[SYN]标志以建立连接。但是,主机用重置/关闭连接的[RST,ACK]响应,而不是[SYN,ACK]。这种行为总是被观察到的


我想知道TCP侦听器在什么情况下发送[RST,ACK]来响应[SYN]?

RST,ACK
表示端口关闭。您确定主机_B正在正确的IP/接口上侦听吗


也检查你的防火墙是否有一个-J拒绝——拒绝使用TCP重置< /P> < P>这是因为我没有在服务器C++程序中设置<代码> SokAdDrdIn。SuniGuangs <代码> AFYNET。谢谢你,埃里克。实际上这个端口并没有关闭。但是发现端口8181绑定到主机B上的127.0.0.1,而不是实际的IP。看起来是对/etc/hosts的错误配置。Java的InetAddress.getByName()是否更喜欢主机文件而不是DNS?如果端口未绑定到您关心的IP,则它将关闭。打开的端口由元组(dst_ip,port)表示,您试图连接到一个未绑定的端口。此外,地址解析的各种实现应该按照

/etc/nsswitch.conf
中指定的顺序运行。我也遇到了同样的问题。我正在使用seagull工具,我在配置中提供了正确的ip,但总是绑定在127.0.0.1上,我该怎么办?RST意味着端口已打开,没有人在侦听。无响应表示端口已关闭。向关闭的端口发送响应将是对攻击者的信息泄漏。@EJP在套接字编程术语中,
open
表示某个端口正在接受数据包,而
closed
表示数据包被拒绝(aka
RST
)或被完全忽略,通常是由于防火墙。在防火墙或系统管理员术语中,可以使用您的定义。考虑到这是在stackoverflow上提出的,而不是在sysadmin stackexchange上提出的,我的回答使用了编程术语。