Tcp异常断开之Connection reset

本文通过实验测试和Wireshark抓包分析,详细记录了一次TCP连接异常现象的排查过程,揭示了连接断开的原因,并最终定位到了MAC地址相关的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

192.168.15.81(linux机器)机器访问192.168.0.139(linux机器)的任意端口,建立的tcp连接成功,但是连接会莫名奇妙的消失,导致Connection reset的错误。

192.168.5.81的mac地址:6C:92:BF:0B:2F:9D(linux)

192.168.0.139的mac地址:未知(linux)

192.168.15.186的mac地址:44-47-C6-37-7D-A6(window)

二、wireshark抓包分析

在linux下执行抓包命令:tcpdump –i eth1 host 192.168.0.139 –w /iflytek/raw.cap,会抓去和0.139上的tcp报文传递,如图所示:

报文分析:15.81和0.139三次握手成功,但是15.81像0.139发送一段Request,Connect(1), Connect的时候,连接莫名奇妙的消失了,导致0.139像15.81发送RST(连接复位)。这个连接到底被谁偷走了呢?答案是:15.81,0.139或者是中间经过的路由均可以断掉连接。

三、问题排查

机器问题排查

   写了一个简单的socket程序进行测试, 加入一台机器192.168.15.186进行测试,15.81~0.139,0.139~15.81,15.81~15.186,15.186~15.81,15.186~0.139,0.139~15.186,程序如下图:

           Reader                                       Writer

1、15.81~0.139发送数据

数据流:15.81-->81网卡-->交换机—>路由1—>交换机—>139网卡—>0.139。

前提条件:将Reader部署到0.139上,Writer部署到15.81上,采用远程debug的方式控制程序的执行进度,远程debg命令:java –Xdebug–Xrunjdwp:transport=dt_scoket,address=8555,server=y,suspend=y –jar   ****.jar

发送数据:11,21,31,检测tcp连接正常,不会被断掉。

发送数据:122,2123,32232,检测tcp连接,消失了,原因不明。

结果解释:说明tcp连接15.81~0.139发送数据不能超过两个字节,这也说明了上文抓包中的过程,因为三次我手发送的是空包,所以握手可以建立,但是当15.81像0.139发送Connect的包时,tcp连接断掉了,所以,0.139回复了RST。

 

2、0.139 ~ 15.81发送数据

数据流:0.139-->139网卡-->交换机—>路由2—>交换机—>81网卡—>15.81。

前提条件:同上。

发送数据:11,21,31,检测tcp连接正常,不会被断掉。

发送数据:122,2123,32232,检测tcp连接,不会被断掉。

结果解释:这个很奇怪,像是单向连通,0.139可以向15.81发送数据,但是15.81不能像0.139发送数据。

 

3、15.186~0.139发送数据

数据流:15.186-->186网卡-->交换机—>路由1—>交换机—>139网卡—>0.139。

前提条件:同上。

发送数据:11,21,31,检测tcp连接正常,不会被断掉。

发送数据:122,2123,32232,检测tcp连接,不会被断掉。

结果解释: 说明15.186可以向0.139发送数据。

 

4、0.139 ~ 15.186发送数据

数据流:0.139-->139的网卡-->交换机—>路由1—>交换机—>186网卡—>15.186。

前提条件:同上。

发送数据:11,21,31,检测tcp连接正常,不会被断掉。

发送数据:122,2123,32232,检测tcp连接,不会被断掉。

结果解释: 说明0.139和15.186是通的。

 

5、15.81~15.186发送数据

数据流:15.81-->81的网卡-->交换机—>186网卡—>15.186。

前提条件:同上。

发送数据:11,21,31,检测tcp连接正常,不会被断掉。

发送数据:122,2123,32232,检测tcp连接,不会被断掉。

结果解释: 说明15.81和15.186是通的。

 

6、15.186~15.81发送数据

数据流:15.186-->186的网卡-->交换机—>81网卡—>15.81。

前提条件:同上。

发送数据:11,21,31,检测tcp连接正常,不会被断掉。

发送数据:122,2123,32232,检测tcp连接,不会被断掉。

结果解释: 说明15.81和15.186相互之间是可以联通的,侧面的反应15.81这台机器是没有问题的。

 

结论:上述测试说明两台机器是没有问题的,肯定是路由的问题。

路由问题排查 

Ip限制:对调15.81和15.186的ip,发现没有效果,可能与ip没有关系。

Mac地址:mac不能对掉,没法排查,最后确实是mac地址的问题。


本文希望给大家一个解决connection reset的问题的思路。


 



### Docker TCP 连接被对端重置的原因分析 当遇到 `TCP connection reset by peer` 错误时,通常意味着客户端尝试建立的连接被服务器主动关闭。这可能是由于多种因素引起的,包括但不限于网络配置不当、防火墙阻止特定端口流量、目标服务未正常运行或资源不可用。 对于Docker环境中的此类错误,具体成因可能涉及以下几个方面: - 容器内部的服务未能正确启动或者监听指定端口。 - 主机到容器之间的网络通信存在问题,比如iptables规则冲突。 - 使用默认官方源拉取镜像速度过慢甚至失败,进而触发了超时机制导致连接中断[^1]。 ### 解决方案概述 针对上述提到的不同情况,可以采取相应的措施来解决问题: #### 更改软件包管理仓库地址 如果是因为从国外站点获取数据而遭遇频繁掉线,则建议切换至国内加速节点。例如,在CentOS系统上可以通过修改yum源指向阿里云提供的稳定版本库来改善状况: ```bash yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` 这样做的好处是可以显著提高下载效率并减少中途断开的风险[^2]。 #### 设置正确的Docker安装命令 为了防止在执行自动化脚本过程中发生意外终止现象,推荐采用带有参数选项的方式完成Docker本身的部署工作。特别是对于中国地区的用户而言,利用Aliyun作为备用镜像站能够有效规避国际链路波动带来的影响: ```bash curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun ``` 这条指令会自动调整为最适合本地用户的分发渠道之一,从而保障整个过程更加顺畅[^3]。 #### 更新或替换基础镜像URL 假如是在做`docker pull`操作期间碰到了读取消息异常的情形,那么很有可能是当前设定的基础镜像链接已经不再适用或者是暂时性的故障所致。此时不妨考虑增加几个可选的位置供选择使用: ```bash echo '{ "registry-mirrors": ["https://hub-mirror.c.163.com","http://reg-mirror.qiniu.com"] }' > /etc/docker/daemon.json && systemctl restart docker ``` 这段Shell语句的作用在于向Docker守护进程中加入额外的注册表反射列表项,并重启服务使更改生效。这样一来即使原定路径出现问题也还有备胎可用[^4]。 #### 配置必要的安全策略和服务状态监控 最后但同样重要的是要确保Linux内核层面的安全防护不会干扰正常的业务流程;同时也要定期检查各个依赖组件的工作健康度。以SELinux为例,默认情况下它可能会限制某些类型的跨域请求行为,因此适当放宽权限或许有助于缓解部分场景下的通讯障碍问题。另外就是通过日志审计工具密切关注后台进程的日志输出变化趋势,以便及时发现潜在隐患所在。 ### 实际案例解析 有实例表明,在处理 CentOS 7 上搭建 Docker Compose 平台的任务里也曾碰到类似的难题——即每当试图调用远程API接口时就会抛出 `[TCP connection reset by peer]` 的提示信息。经过一番排查之后得知原来是缺少了一些关键性的初始化步骤造成的。按照这篇博客文章所描述的方法进行修正后最终得以圆满解决该类事件的发生[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值