首页 > 其他分享 >connection reset by peer 发生了什么?

connection reset by peer 发生了什么?

时间:2023-05-27 16:57:29浏览次数:44  
标签:reset ESTABLISHED 报文 6666 tcp connection peer

一. 概述

在后台应用开发过程中,许多组件会打出日志,connection timeout, connection reset by peer,让人一头雾水。timeout 通常比较好理解,可能是网络不通。那么connection reset by peer 呢?

二. 预备知识

为了理解这个问题,我们需要一些tcp连接的基础知识,一个典型的tcp连接如下。

tcp 的握手挥手过程不再赘述,我们需要注意的是tcp是双向连接的,即我们常说的客户端和服务端

1.都有自己的监听端口

在linux中执行netstat命令,可以查看本机端口和另一端的端口

➜  / netstat
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.102.59451    111.6.87.16.47798      ESTABLISHED
tcp4       0      0  localhost.cplscrambler localhost.59450        ESTABLISHED
tcp4       0      0  localhost.59450        localhost.cplscrambler ESTABLISHED
tcp4       0      0  192.168.0.102.59441    111.6.87.16.47798      ESTABLISHED
tcp4       0      0  localhost.cplscrambler localhost.59440        ESTABLISHED
tcp4       0      0  localhost.59440        localhost.cplscrambler ESTABLISHED
tcp4       0      0  192.168.0.102.59413    49.7.21.45.http        ESTABLISHED

如果是服务器,监听的端口范围更广泛,如果有客户端连接,会单独创建一条tcp连接

tcp46      0      0  *.6666                 *.*                    LISTEN

2.都可以主动发起连接,发送数据和返回ack,断开连接。

3.都有自己的发送窗口和接受窗口,用来缓存数据报文

三. 常见原因

一般connection reset by peer 对应tcp RST 报文。

1. 针对不存在端口的连接请求,比如服务器端口为localhost:8080,访问的却是 localhost:8081

2.主机终止一条连接,客户端或者服务端在tcp连接的过程中主动发送RST报文段,断开连接

3.半开连接(half-open),通常出现在某一段的异常关机(比如电源切断),正常工作的一端将不会检测出另一端已经崩溃,发送数据报文会得到RST 报文。

4.时间等待错误,在TIME_WAIT 期间收到的消息也会返回RST 报文。

四.模拟

我们这里来模拟第三种情况

1.机器准备

客户端使用时我的mac机器,服务端使用的云服务器

云服务器上安装sock程序 (http://www.icir.org/christian/sock.html),该程序需要进行编译

2.在云服务器上启动sock 服务

服务端口号为6666

[root@iZbp1hh62zkt10csxrr34uZ ~]# sock -i -s -v 6666

3.在本机使用telnet连接

➜  / telnet 120.26.97.171 6666
Trying 120.26.97.171...
Connected to 120.26.97.171.
Escape character is '^]'.
aaa
bbb

发送一些数据后,在服务端能看到变化

[root@iZbp1hh62zkt10csxrr34uZ ~]# sock -i -s -v 6666
connection on 172.24.249.245.6666 from 171.113.24.170.8810
TCP_MAXSEG = 1400
received 5 bytes
received 5 bytes

4.然后强制关闭mac上的进程, 云服务器会提示 connection reset by peer

[root@iZbp1hh62zkt10csxrr34uZ ~]# sock -i -s -v 6666
connection on 172.24.249.245.6666 from 171.113.24.170.5287
TCP_MAXSEG = 1400
received 5 bytes
received 5 bytes
received 1 bytes
received 63 bytes
connection closed by peer
[root@iZbp1hh62zkt10csxrr34uZ ~]# 

客户端使用wireshark抓包如下

前三条报文用于建立tcp连接,后四条报文用于发送数据

五.参考

《tcp/ip详解》卷一

标签:reset,ESTABLISHED,报文,6666,tcp,connection,peer
From: https://www.cnblogs.com/darcy-yuan/p/17436442.html

相关文章

  • vue3中 TypeError: track(...) is not a function
    我这边遇到的是在使用到element-plus的一个<el-input>标签时就开始出现(TypeError:track(...)isnotafunction),我怀疑这是element-plus与vue的版本问题,查看element-plusgithub的Releases 发现支持的版本比我当前使用的版本3.3.3低很多,应该element-plus不支持了,那怎么办,只能......
  • 1192. Critical Connections in a Network刷题笔记
    参考这个题解,用的dfsimportcollectionsclassSolution:defcriticalConnections(self,n:int,connections:List[List[int]])->List[List[int]]:defmakeGraph(coonections):graph=collections.defaultdict(list)forconnincon......
  • jmeter之JDBC Connection Configuration 请求
    1、下载mysqljdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连接失败报错)我这里下载的是mysql-connector-j-8.0.33.jar下载完后,将jira包放在D:\jmeter\apache-jmeter-5.2.1\lib目录下,这样就jmeter中就有驱动了,重启jmeter  2.线程......
  • error: RPC failed; curl 55 OpenSSL SSL_write: Connection was aborted, errno 1005
    git初始化上传本地代码到远程出现异常造成的可能原因:1.网络原因2.无效的代理3.一次性推送的代码量过大 解决方法:1.网络原因可以等一段时间网络良好的情况上传2.无效代理的情况如下设置gitconfighttp.sslVerify"false"3.一次性推送代码量过大的情况如下设置,更改推......
  • Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connectio
    现象:今天在启动项目时,本项目使用了Elasticsearch服务,发现后台报这个错误:Causedby:io.netty.channel.AbstractChannel$AnnotatedConnectException:Connectionrefused:nofurtherinformation:/127.0.0.1:9300错误信息提示如下图:原因:本项目使用了Elasticsearch搜索服务,而报错信......
  • sshpass报错 Permission denied, please try again.和 connect to host localhost po
    最近在做自动化时,自动化脚本用sshpass给远程机器发送命令(sshpass-p"123456"ssh-p10022root@localhost-oStrictHostKeyChecking=no"poweroff")报错:Permissiondenied,pleasetryagain.和 ssh:connecttohostlocalhostport10022:Connectionrefused   1.......
  • git指令连接库失败:OpenSSL SSL_read: Connection was reset, errno 10054
    一、问题描述无论是gitclone还是gitpush之类的需要连接库的指令都会出现`fatal:unabletoaccess'http://github.com/我的库/':OpenSSLSSL_read:Connectionwasreset,errno10054`报错原因:字面意思:服务器的SSL证书灭有经过第三方机构的签署。网上信息也有的说可能......
  • 报错:TypeError: Found non-callable @@iterator
    代码://自动导入插件constautpImport=require('unplugin-auto-import/webpack')(...autoImportConfig)报错 TypeError:Foundnon-callable@@iterator原因:使用...扩展符的时候该对象是不可迭代对象。这里  autoImportConfig是一个对象,该函数参数需要传入......
  • How to find the TLS used for the SQL Server connection
    本文是HowtofindtheTLSusedfortheSQLServerconnection这篇英语文章的翻译,此文出处请见于文章底部链接:原文出处[1]对于客户,我做了一些研究,如何找出SQLServer数据库会话连接使用了哪一种TLS协议。唯一的方式就是创建一个扩展事件,这个扩展事件有一个很大的限制就是只有......
  • flask_SQLAlchemy 出现了 Lost connection to MySQL server during query Mysql主机连
    使用pythonflask框架 flask_sqlalchemy时出现了LostconnectiontoMySQLserverduringqueryMysql主机连接超时的问题由于Mysql会定时处理长时间未连接使用的连接池具体时长可通过查看showvariableslike'%timeout%' wait_timeout为超时时长,这里的时间时120秒......