连接拒绝错误的原因可能是什么?


114

我试图使用另一个客户端用C编写服务器程序,例如,当我尝试通过端口2080连接时出现此错误。

connection refused

该错误的原因可能是什么?


我刚收到此错误,是因为托管我的网站的服务器出错。服务器仍然可以被下载pingdownforeveryoneorjustme.com显示不仅是我,而且我仍然可以通过FTP访问它。几分钟后,错误得到解决。
马丁·托马

2
@moose:ping不会告诉您是否可以访问特定端口进行广告侦听,而不能告诉您IP地址是否可以访问。但是connect()取决于要准备使用的特定IP和端口。
雷米·勒博

服务器故障有一个有关连接被拒绝的规范问题。
Raedwald

这是Connection Refused的简要说明。
rbinnun

我在Ubuntu上的连接被拒绝,因为我试图在“本地主机”上接收连接,但是在我的计算机上未正确配置“本地主机”。将'localhost'更改为''(Python)解决了该问题。
user1097111

Answers:


93

可能有很多原因,但最常见的原因是:

  1. 该端口在目标计算机上未打开。

  2. 该端口在目标计算机上处​​于打开状态,但是其待处理连接的积压已满。

  3. 客户端和服务器之间的防火墙阻止了访问(也请检查本地防火墙)。

检查防火墙并确定端口已打开后,使用telnet连接到IP /端口以测试连接性。这样可以从您的应用程序中消除任何潜在的问题。


7
防火墙通常会给出超时错误,因为仅丢弃连接(SYN)数据包。连接被拒绝是因为服务器已接收并拒绝了SYN数据包。
RedPandaCurios 2010年

15
并非总是如此,因为可以将防火墙配置为拒绝而不是丢弃数据包。
2010年

连接()与客户端程序不正确的服务器IP地址和端口号的配置也将导致错误号111
smRaj

另外:当您需要访问https但已指定http:// ...时,也会发生此错误。
Fico

4
@ a'r您如何知道积压的状态?
Naveen Verma,

75

该错误表示侦听套接字的操作系统已识别入站连接请求,但选择有意拒绝该请求。

假设中间防火墙没有阻碍,只有两个原因(我知道)让OS拒绝入站连接请求。已经多次提到一个原因-连接的侦听端口未打开。

还有一个尚未提及的原因-侦听端口实际上是打开的并且正在被积极使用,但是其排队入站连接请求的积压已达到最大值,因此该端口没有空间可供入站连接请求排队时刻。服务器代码尚未足够多次调用accept()来完成清理新队列项目的可用插槽。

请稍等片刻,然后重试连接。不幸的是,无法区分“端口根本没有打开”和“端口已经打开但是现在太忙”。它们都使用相同的通用错误代码。


4
还有一个边缘情况,如此处所述:softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/…。基本上,如果您正在对客户端/服务器应用程序进行压力测试,并且使用的是3.6中提到的幼稚方法,则可能会发生“连接被拒绝”错误,这与上述两种情况不同。
ernesto 2014年

这需要被赞成。一旦解决了显而易见的原因(什么也没听),那么这实际上是最可能的解释,而解决它可能是一件复杂的事情。
Graham Nicholls

如果排队入站请求的积压已达到最大值,我们该如何解决?
ACarter

IP积压了什么?我尝试使用telnet email-smtp.eu-west-1.amazonaws.com 25从EC2实例和我的本地机器,EC2实例的telnet调用给拒绝连接,而从我的本地机器它的工作原理
dresh

“什么也没听”可能是由于计算机启动了,但是服务器(软件)(例如Apache)未运行。
ttulinsky '19

24

如果您尝试打开与另一台主机的TCP连接,并看到错误“连接被拒绝”,则表示

  1. 您已将TCP SYN数据包发送到另一台主机。
  2. 然后您收到一个TCP RST数据包作为答复。

RST是TCP数据包上的一位,指示应重置连接。通常,这意味着其他主机已收到您的连接尝试,并且正在主动拒绝您的TCP连接,但是有时,介入的防火墙可能会阻止您的TCP SYN数据包并将TCP RST发送回给您。

请参阅https://tools.ietf.org/html/rfc793第69页:

同步状态

如果RST位置1

如果此连接是通过被动OPEN(即来自LISTEN状态)启动的,则将此连接返回LISTEN状态并返回。无需通知用户。如果此连接是在活动OPEN(即来自SYN-SENT状态)的情况下启动的,则连接被拒绝,向用户发出“连接被拒绝”的信号。无论哪种情况,都应删除重传队列上的所有段。在活动的OPEN情况下,进入CLOSED状态并删除TCB,然后返回。


11

连接被拒绝意味着您尝试连接的端口实际上并未打开。

因此,要么连接到错误的IP地址,要么连接到错误的端口,或者服务器正在侦听错误的端口,或者实际上未在运行。

一个常见的错误是在以网络字节顺序绑定或连接时未指定端口号...


4
这只是可能导致错误的几种可能情况之一。
雷米·勒博

1
端口可能是打开的,但是仍然可能发生此错误。
IgorGanapolsky '16

6

在服务器端检查它是否正在侦听端口2080。首先尝试通过在该端口上发出telnet来在服务器计算机上进行确认:

telnet本地主机2080

如果正在侦听,则可以响应。


3

1.检查服务器状态。

2.检查端口状态。

例如3306 netstat -nupl|grep 3306

3.检查防火墙。例如添加3306

vim /etc/sysconfig/iptables
# add
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

netstat -a帮助
菲利普(Philip)

1

尽管您的情况似乎并非如此,但有时连接拒绝错误也可能表明您的网络上存在IP地址冲突。您可以通过运行以下命令搜索可能的ip冲突:

 arp-scan -I eth0 -l | grep <ipaddress>

arping <ipaddress>

这个 AskUbuntu问题也有更多信息。


0

从Checkpoint防火墙的角度来看,如果您实际上选择“拒绝作为操作”,从而向潜在的攻击者暴露了服务器前是否存在防火墙,您将看到来自防火墙的消息。防火墙将静默删除所有不符合该策略的连接。连接被拒绝几乎总是来自服务器


0

我的工作计算机遇到相同的问题。问题是,当您输入localhost时,它转到代理地址而不是本地地址,您应该绕过此步骤

Chrome =>设置=>更改代理设置=> LAN设置=>检查绕过代理服务器以获取本地地址。


0

在Ubuntu中,尝试 sudo ufw allow <port_number> 允许防火墙访问您的服务器和数据库。



0

以我为例,当该站点在我的国家/地区被封锁并且我不使用VPN时,就会发生这种情况。例如,当我尝试从被阻止的印度尼西亚访问vimeo.com时。


-1

我有相同的消息,但原因完全不同:wsock32.dll找不到。该::socket(PF_INET, SOCK_STREAM, 0);调用一直返回,INVALID_SOCKET但原因是未加载Winsock dll。

最后,我启动了Sysinternals的进程监视器,并注意到它搜索dll“无处不在”,但没有找到它。

无声的失败是巨大的!


1
INVALID_SOCKET与“连接被拒绝”无关。仅当您的代码缺少必需的错误处理时,才会发生“严重失败”。
罗恩侯爵

1
您的意思是我应该检查一下dll是否已加载?你可能是对的。
xtofl
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.