0


Connection refused问题总结

之前有一篇在雪球的时候遇见TCP的:

TCP的CLOSE_WAIT和TIME_WAIT问题汇总

TCP连接问题排查

这次接着进行汇总:

case1

在进行部署服务时候,线上日志有报错:

NETWORK_ERROR:

Connect to xxx.xxx.com:443 failed: Connection refused

发现是安全拦截导致,因为在安全的IP封禁里面的规则对于别人是不可见的,部分出口防火墙的公网被安全封禁,在开发人员你那边是不清楚底层网络通信被转了几手,中间通过了哪些个节点,所以可以询问下网络同事

case2

如在申请完网络权限之后发现业务仍不能正常访问,请按照如下步骤进行测试。

1、进行ping的联通性测试,如果ping不通可联系网络查看,ping正常可进行第2步测试。(有些第三方机构有可能禁ping,ping不通的情况下可进行第二步测试)

2、进行nc -zv 端口的测试,返回succeeded则表示网络权限已开通;如果返回connection refused则表示链接被server端拒绝,可检查server应用端口是否启用或是否有iptables限制;nc测试返回connect timeout一般是网络权限的限制,联系网络开通。

  • [supdev@JXQ-23-58-2 ~]$ nc -zv x.x.x.x 80

Connection to 172.23.58.4 80 port [tcp/http] succeeded! 权限无问题,请检查应用。

  • [supdev@JXQ-23-58-2 ~]$ nc -zv x.x.x.x 81

nc: connect to 172.23.58.4 port 81 (tcp) failed: Connection refused 检查server应用端口是否启用或是否有iptables限制。

  • [supdev@JXQ-23-58-2 ~]$ nc -zv x.x.x.x 80

nc: connect to 172.23.254.125 port 80 (tcp) failed: Connection timed out 一般是网络权限限制,联系网络开通。

注:

有关connection refused和connection timeout的问题解释请参考如下链接:

Linux TCP连接Connection Refused和Connection timed out的问题 - TypeCodes

3 问题的总结

到这里问题已经解决了,但是自己对于tcp出现

Connection timed out

的错误认识不足,只想到是自己服务端

close_wait

引起的问题。下面是自己对tcp握手过程中出现

Connection refused

Connection timed out

的总结。

3.1 Connection refused

使用telnet来检查tcp链路时,如果遇到"Connection refused"的错误,那么表示从本地客户端到目标IP地址的路由是正常的,但是该目标端口没有进程在监听,然后服务端拒绝掉了连接。

一个成功的tcp链接将会看到

Syn

Syn-Ack

Ack

,这也就是我们预期的TCP三次握手。当使用

tcpdump

wireshark

抓包工具来探测发送过来的请求报文包时,

Connection refused

将会看到

Syn

,

Rst

3.2 Connection timed out

如果telnet的时候,TCP路由不正常,那么会得到一个

Connection timed out

的错误。"Couldn't connect"原因有很多,可能是服务器无法ping通,可能是服务器(防火墙等)丢弃了该请求报文包,也可能是服务器应答太慢,又或者存在间歇性的问题(这种情况很难从日志文件中排查问题)。

case3

访问慢大概率可能的原因:

  • 网络丢包
  • 服务端慢

排查:

以客户端x.x.x.1访问服务端x.x.x.2:80/aaa/bbb/adsdf 为例。

步骤1、在x.x.x.1上:ping x.x.x.2,查看是否有丢包(packet loss),1%以上确认中间网络的链路就有丢包故障。

步骤2:在x.x.x.1上:telnet x.x.x.2 80,查看response速度,正常应该是瞬间返回,人为几乎感知不到延迟。

                                             如果出现“refused”字样,说明服务端应用端口未开启;

                                             如果出现“timeout”字样,但能ping通,说明端口不可达,中间控制(网络或服务端系统)未放开;

步骤3:在x.x.x.1上:time curl x.x.x.2 80,无参数或者其他参数时的访问时延。

                                            如果访问无参数或者其他参数时的时间非常快,证明网络没问题,需要排查服务端延时较大应用的状态(逻辑和性能负荷)。

case4 tcpkill 断开源端连接

命令: tcpkill -i any -9 host 192.168.56.101 port 53054

表现: 进程退出

case5 模拟网络波动

操作: 使用tc工具模拟源端网络延迟与丢包

#延迟1s
tc qdisc add dev enp0s8 root netem delay 1000ms
#
8
%丢包
tc qdisc add dev enp0s8 root netem loss 
8
%
#删除延迟与丢包规则
tc qdisc del dev enp0s8 root

case6 断开源端连接

命令:kill -15

表现: kill -15 普通连接(SrcConn) 数据同步正常,无提示

        kill -15 xxx ,进程退出,报错为收到用户请求关闭连接
标签: 服务器 tcp/ip 运维

本文转载自: https://blog.csdn.net/singgel/article/details/129795046
版权归原作者 阿拉斯加大闸蟹 所有, 如有侵权,请联系我们删除。

“Connection refused问题总结”的评论:

还没有评论