是什么原因导致“拒绝连接”消息?


110

这是有关拒绝连接规范问题

我们看到很多问题

当我尝试连接到系统时,我收到一条消息

拒绝连接

为什么是这样 ?


2
我们在Apache Hadoop中得到了很多,这通常是由客户端中的配置错误引起的:要与之对话的主机,将它们的DNS或/ etc / host表设置为什么,或者由一个主机使用的端口之间的不匹配。客户认为应该使用的服务。因此,我们对此主题有一个专用的Wiki条目。许多问题可能会出现在其他地方,尽管(希望如此)规模较小。在1000个节点的群集中调试连接问题并不有趣。
史蒂夫·拉夫兰

您专用的Wiki入口链接指向此问题;)
user9517

1
接得好。这是官方链接:wiki.apache.org/hadoop/ConnectionRefused。我将在此处为整个循环添加一个交叉引用。
史蒂夫·拉夫兰

@SteveLoughran很酷的文章-评论-回到链接说堆栈溢出,我们是服务器故障;)
user9517

完成。FWIW,该Wiki链接被添加到Hadoop堆栈中传递的ConnectionRefused异常中,以及确定出问题所在所需的额外信息(主机,端口)。我们仍然得到很多的bug报告的人谁看到堆栈跟踪,不跟随链接到维基
史蒂夫劳伦

Answers:


118

注意:此消息是您要解决的问题的症状。了解消息的原因最终将引导您解决问题。

消息“连接被拒绝”有两个主要原因:

  1. 您尝试连接的IP:Port上没有监听。
  2. 该端口已被防火墙阻止。

没有进程在监听。

到目前为止,这是发出此消息的最常见原因。首先,请确保您尝试连接到正确的系统。如果然后要确定这是否是问题,请在远程系统上运行netstatss 1,例如,如果您希望某个进程在端口22222上进行侦听

sudo netstat -tnlp | grep :22222

要么

ss -tnlp | grep :22222

对于OSX,合适的命令是

sudo netstat -tnlp tcp | grep '\.80 '

如果什么也没听,那么上面将不会产生任何输出。如果看到一些输出,请确认它是您期望的,然后请参阅下面的防火墙部分。

如果您无权访问远程系统,并且想在将问题报告给相关管理员之前确认问题,则可以使用tcpdump(wireshark或类似工具)。

当尝试连接到没有监听任何内容的IP:port时,从远程系统到初始SYN数据包的响应是带有标志RST,ACK的数据包。这将关闭连接并导致“连接被拒绝”消息,例如

$ sudo tcpdump -n主机192.0.2.1和端口22222
tcpdump:禁止详细输出,使用-v或-vv进行完整协议解码,
监听enp14s0,链接类型EN10MB(以太网),捕获大小262144字节

12:31:27.013976 IP 192.0.2.2.34390> 192.0.2.1.22222:标志[S],seq 1207858804,win 29200,选项[mss 1460,sackOK,TS val 15306344 ecr 0,nop,wscale 7],长度0

12:31:27.020162 IP 192.0.2.1.22222> 192.0.2.2.34390:标志[R.],seq 0,ack 1207858805,获胜0,长度0

请注意,tcpdump使用表示ACK标志。

端口被防火墙阻止

如果端口被防火墙阻止,并且防火墙已配置为对此做出响应,icmp-port-unreachable也会导致连接被拒绝的消息。再次,您可以使用tcpdump(或类似工具)看到此内容

$ sudo tcpdump -n icmp
tcpdump:禁止详细输出,使用-v或-vv

在enp14s0上侦听完整协议,链接类型EN10MB(以太网),捕获大小262144字节13:03:24.149897 IP 192.0.2.1> 192.0。 2.2:ICMP 192.0.2.1 TCP端口22222无法访问,长度68

请注意,这还告诉我们阻止防火墙的位置。


因此,现在您知道导致连接拒绝消息的原因是什么,您应该采取适当的措施,例如,与防火墙管理员联系或调查该进程未侦听的原因。

1其他工具也可能可用。


2
ELI5版本:这意味着连接请求已到达另一台计算机,而另一台计算机不知道您在说什么。
immibis

“没有过程在倾听。” 主要原因..!
Samitha Chathuranga

以我为例,某人正在监听……但是在我尝试连接的那个节点上的另一个节点上。哎呀。
ijoseph

1
@ijoseph因此,当时没有人在听。
user9517

5

对我来说,在Debian 6上进行压缩就像检查SSH服务一样简单:

sudo service ssh status

并没有发现任何东西(带有消息ssh: unrecognized service),只是安装了该服务

sudo apt-get install openssh-server

如果没有建立SFTP连接,这也可以工作,因为SFTP是SSH的子集(而FTPS是FTP的子集)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.