赞
踩
之前有一篇在雪球的时候遇见TCP的:
目录
这次接着进行汇总:
在进行部署服务时候,线上日志有报错:
NETWORK_ERROR:
Connect to xxx.xxx.com:443 failed: Connection refused
发现是安全拦截导致,因为在安全的IP封禁里面的规则对于别人是不可见的,部分出口防火墙的公网被安全封禁,在开发人员你那边是不清楚底层网络通信被转了几手,中间通过了哪些个节点,所以可以询问下网络同事
如在申请完网络权限之后发现业务仍不能正常访问,请按照如下步骤进行测试。
1、进行ping的联通性测试,如果ping不通可联系网络查看,ping正常可进行第2步测试。(有些第三方机构有可能禁ping,ping不通的情况下可进行第二步测试)
2、进行nc -zv 端口的测试,返回succeeded则表示网络权限已开通;如果返回connection refused则表示链接被server端拒绝,可检查server应用端口是否启用或是否有iptables限制;nc测试返回connect timeout一般是网络权限的限制,联系网络开通。
Connection to 172.23.58.4 80 port [tcp/http] succeeded! 权限无问题,请检查应用。
nc: connect to 172.23.58.4 port 81 (tcp) failed: Connection refused 检查server应用端口是否启用或是否有iptables限制。
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通,可能是服务器(防火墙等)丢弃了该请求报文包,也可能是服务器应答太慢,又或者存在间歇性的问题(这种情况很难从日志文件中排查问题)。
访问慢大概率可能的原因:
排查:
以客户端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,无参数或者其他参数时的访问时延。
如果访问无参数或者其他参数时的时间非常快,证明网络没问题,需要排查服务端延时较大应用的状态(逻辑和性能负荷)。
命令: tcpkill -i any -9 host 192.168.56.101 port 53054
表现: 进程退出
操作: 使用tc工具模拟源端网络延迟与丢包
|
命令:kill -15
表现: kill -15 普通连接(SrcConn) 数据同步正常,无提示
kill -15 xxx ,进程退出,报错为收到用户请求关闭连接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。