异常记录 Connection reset
连接重置Connection reset
异常java.net.SocketException: Connection reset
详细信息
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at com.senthink.www.oc.http.HttpRequester.execute(HttpRequester.java:170)
场景回溯
- 首次请求 首次向电信物联网平台API发送Https请求时报错
- 未得到响应
- 只有Soctet异常:Connection Reset
出现原因
Connection Reset——其中一端主动断开连接
Connection Reset是在建立TCP连接之后,其中一方的TCP标志位使用了Reset标志主动重置了连接
客户端Or服务器端
而我这里既然是客户端报的错误信息,那势必是服务器主动断开了连接
为什么它要断开连接
服务器主动断开连接的原因:
服务器异常
服务器和客户端长短连接不匹配
Https连接,服务器和客户端的TLS版本不一致
原因排查
- 服务器异常 电信作为三大运营商,它的服务器出现异常的可能性不大
- 长短连接不匹配 如果是长短连接不匹配,那么也是第一次响应之后短连接方断开连接,而我跟本没有收到响应,因此可以排除长短连接不一致的情况
- Https连接,TLS版本不一致
用排除法分析出:此时连接重置的原因是TLS版本不一致
解决方法
查服务器端支持的TLS版本,然后切换请求客户端的TLS版本
试出来服务器端支持的TLS版本
打开Http客户端的配置(我用的是HttpClient,它的TLS配置在SSL连接工厂中的String数组参数)
public CloseableHttpClient closeableHttpClient() throws Exception {
// Trust own CA and all self-signed certs
String userDir = System.getProperty("user.dir");
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(
new File(userDir + ocSetting.getCertPathCA()),
ocSetting.getCertPasswordCA().toCharArray(),
new TrustSelfSignedStrategy())
.loadKeyMaterial(
new File(userDir + ocSetting.getCertPathOutGoing()),
ocSetting.getCertPasswordOutGoing().toCharArray(),
ocSetting.getCertPasswordOutGoing().toCharArray())
.build();
// Allow TLSv1 protocol only
//这里的问题,这里配置只允许TLSv1版本
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1"},
//new String[] {"TLSv1","TLSv1.1","TLSv1.2",疯狂往里加}
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier()); return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
以此切换TLS版本,直到不再出现Connection Reset
TLS版本有哪些?,这个在sun.security.ssl.ProtocolVersion中可以看到
static final ProtocolVersion NONE = new ProtocolVersion(-1, "NONE");
static final ProtocolVersion SSL20Hello = new ProtocolVersion(2, "SSLv2Hello");
static final ProtocolVersion SSL30 = new ProtocolVersion(768, "SSLv3");
static final ProtocolVersion TLS10 = new ProtocolVersion(769, "TLSv1");
static final ProtocolVersion TLS11 = new ProtocolVersion(770, "TLSv1.1");
static final ProtocolVersion TLS12 = new ProtocolVersion(771, "TLSv1.2");
换上服务器支持的TLS版本,问题解决
异常记录 Connection reset的更多相关文章
- 解决Jedis链接报超时异常和connection reset异常的方法
一.链接池配置 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" ...
- 一次SocketException:Connection reset 异常排查
问题描述 上一期的需求上线之后,线上多了一个异常:Connection reset.如下: [2017-03-22 00:45:00 ERROR] [creativeAuditTaskSchedule ...
- Connection reset by peer问题分析
extremetable导出excel,弹出一个下载窗口,这时不点下载而点取消,则报下面的异常: ClientAbortException Caused by: java.net.SocketExce ...
- 困扰我多年的Connection reset问题
第一次出现:是thrift的python client去请求server,发现偶尔出现这个问题 第二次:接入第三方的api,去请求数据时,发现一个接入方的api第一次总是报这个错,当时又没有做处理,导 ...
- 从tcp原理角度理解Broken pipe和Connection reset by peer的区别
从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...
- Java socket 说明 以及web 出现java.net.SocketException:(Connection reset或者Connectreset by peer:Socket write error)的解释
另外http://www.cnblogs.com/fengmk2/archive/2007/01/15/using-Socket.html可供参考 一Java socket 说明 所谓socket ...
- java.net.SocketException: Connection reset 解决方法
java.net.SocketException: Connection reset 解决方法 最近纠结致死的一个java报错java.net.SocketException: Connection ...
- 最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决
自从SEOTcs系统11月份24日更新了一下SEO得分算法以来,一直困扰我的一个问题出现了,java的数据job任务,在执行过程中会经常报以下的错误: “2011-12-03 18:00:32 Def ...
- Connection reset by peer的常见原因
1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer). Socket默认连接60秒 ...
随机推荐
- 【转载】字符编码笔记:ASCII,Unicode和UTF-8
字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直 ...
- 即插即用,基于阿里云Ganos快速构建云上开源GIS方案
对于轻量级GIS应用,选择具备时空能力的云上数据库再搭配开源GIS软件,能够快速构建稳定.廉价.实用的GIS解决方案.Ganos是阿里云自研时空基础设施(PaaS层)的核心引擎,该引擎整合了云上异构计 ...
- top 9 Cloud Computing Failures
top 9 Cloud Computing Failures Outages, hacks, bad weather, human error and other factors have led t ...
- 洛谷P3313 [SDOI2014]旅行 题解 树链剖分+线段树动态开点
题目链接:https://www.luogu.org/problem/P3313 这道题目就是树链剖分+线段树动态开点. 然后做这道题目之前我们先来看一道不考虑树链剖分之后完全相同的线段树动态开点的题 ...
- 微信小程序弹框wx.showModal如何修改样式
由于官方API提供的显示模态弹窗,只能简单地显示文字内容,不能对对话框内容进行自定义,欠缺灵活性,所以自己从模态弹窗的原理角度来实现了自定义的模态对话框. wx.showModal修改样式后的效果,如 ...
- Python--day65--模板语言之tags
Tags for循环 普通for循环 <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% en ...
- Python--day44--navicat使用(知道怎么用就好,要用终端操作,用这个会被人鄙视)
- H5 FileReader读取文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- H3C RIP基本配置
- P1004 奶牛与牧场
题目描述 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供 \(a\) 头牛吃 \(b\) 天,或可供 \(c\) 头牛吃 \(d\) 天,那么,这片牧场每天新生的草量最多可供几头牛吃1天? 输 ...