【开端】记一次诡异的接口排查过程

2024-08-22 04:52

本文主要是介绍【开端】记一次诡异的接口排查过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、绪论

     最近碰到这么一个情况,接口请求超时。前提是两台服务器间的网络是畅通的,端口也是通,应用代码也是通。意思是在应用上,接口没有任何报错,能正常返回数据。客户端到服务端接口也能通,但是接收不到服务的数据。比较诡异的,如果报文比较短,客户端是可以收到返回数据。

现象:

本地windows系统网络去请求接口可以通

linux服务器网络去请求接口

前提是telnet是可以通

于是就开始抓包分析

linux 抓包命令:  sudo tcpdump -i eth0 port 19999

这个过程展示了两个IP地址(10.22.33.22 和 10.200.33.229)之间通过TCP协议在端口dnp-sec(非标准端口,可能是某个特定应用的自定义端口)上建立连接、交换数据、然后关闭连接的过程。不过,最后出现了RST(重置)包,这通常表示连接被异常终止。下面是对这个过程的详细解释:连接建立(三次握手):
SYN包(16:06:28.412328):10.22.33.22的40778端口向10.200.33.229的dnp-sec端口发送SYN包,请求建立连接。SYN包中包含了序列号(seq)3884995505,窗口大小(win)29200,以及其他TCP选项(如MSS、SACK支持、时间戳等)。
SYN-ACK包(16:06:28.420340):10.200.33.229的dnp-sec端口回应SYN-ACK包,确认收到SYN包,并发送自己的序列号(seq)325552826,同时确认对方的序列号(ack)为3884995506(即SYN包的序列号+1)。SYN-ACK包中也包含了窗口大小、TCP选项等信息。
ACK包(16:06:28.420359):10.22.33.22的40778端口发送ACK包,确认收到SYN-ACK包,完成三次握手,连接建立。
数据传输:
PSH包(16:06:28.420400):10.22.33.22的40778端口发送PSH包(尽管这里也使用了PUSH标志,但通常数据包的类型是通过长度和内容来判断的,而不是仅仅依赖标志位),携带了389字节的数据。
ACK包(16:06:28.428450):10.200.33.229的dnp-sec端口发送ACK包,确认收到数据。
PSH包(16:06:28.453221):10.200.33.229的dnp-sec端口也发送了数据(11字节),尽管这里也使用了PUSH标志,但实际上是普通的数据包。
ACK包(16:06:28.453229):10.22.33.22的40778端口发送ACK包,确认收到数据,并使用SACK选项确认接收到的数据段(尽管这里SACK的范围与确认的序列号不匹配,可能是个错误或特殊情况)。
连接保持:
在数据传输之后,双方继续发送ACK包以保持连接活跃,但没有新的数据传输。这些ACK包中包含了SACK选项,表明接收方已经确认接收到的数据段。
连接关闭:
FIN包(16:07:43.452938):10.200.33.229的dnp-sec端口发送FIN包,表示它已完成数据传输,准备关闭连接。
ACK包(16:07:43.452959):10.22.33.22的40778端口发送ACK包,确认收到FIN包,但此时它可能还在等待应用层完成某些操作,因此没有立即发送自己的FIN包。
连接异常终止:
在一段时间后(1分钟后),10.200.33.229的dnp-sec端口发送RST包(16:08:43.475557),异常终止连接。这可能是因为它认为连接已经超时或不再需要,或者是因为它接收到了无法识别的序列号等。RST包的发送通常会导致TCP连接立即关闭,且不会进行正常的四次挥手过程。
总结:这个过程展示了TCP连接的建立、数据传输、保持和异常终止。尽管在大多数情况下,TCP连接会通过正常的四次挥手过程来关闭,但在这个例子中,连接被RST包异常终止了。

发现tcp 第三次握手发送消息失败

这个过程展示了两个IP地址(10.22.33.22 和 10.200.33.229)之间通过TCP协议在端口dnp-sec(非标准端口,可能是某个特定应用的自定义端口)上建立连接、交换数据、然后关闭连接的过程。不过,最后出现了RST(重置)包,这通常表示连接被异常终止。下面是对这个过程的详细解释:

连接建立(三次握手):
SYN包(16:06:28.412328):10.22.33.22的40778端口向10.200.33.229的dnp-sec端口发送SYN包,请求建立连接。SYN包中包含了序列号(seq)3884995505,窗口大小(win)29200,以及其他TCP选项(如MSS、SACK支持、时间戳等)。
SYN-ACK包(16:06:28.420340):10.200.33.229的dnp-sec端口回应SYN-ACK包,确认收到SYN包,并发送自己的序列号(seq)325552826,同时确认对方的序列号(ack)为3884995506(即SYN包的序列号+1)。SYN-ACK包中也包含了窗口大小、TCP选项等信息。
ACK包(16:06:28.420359):10.22.33.22的40778端口发送ACK包,确认收到SYN-ACK包,完成三次握手,连接建立。
数据传输:
PSH包(16:06:28.420400):10.22.33.22的40778端口发送PSH包(尽管这里也使用了PUSH标志,但通常数据包的类型是通过长度和内容来判断的,而不是仅仅依赖标志位),携带了389字节的数据。
ACK包(16:06:28.428450):10.200.33.229的dnp-sec端口发送ACK包,确认收到数据。
PSH包(16:06:28.453221):10.200.33.229的dnp-sec端口也发送了数据(11字节),尽管这里也使用了PUSH标志,但实际上是普通的数据包。
ACK包(16:06:28.453229):10.22.33.22的40778端口发送ACK包,确认收到数据,并使用SACK选项确认接收到的数据段(尽管这里SACK的范围与确认的序列号不匹配,可能是个错误或特殊情况)。
连接保持:
在数据传输之后,双方继续发送ACK包以保持连接活跃,但没有新的数据传输。这些ACK包中包含了SACK选项,表明接收方已经确认接收到的数据段。
连接关闭:
FIN包(16:07:43.452938):10.200.33.229的dnp-sec端口发送FIN包,表示它已完成数据传输,准备关闭连接。
ACK包(16:07:43.452959):10.22.33.22的40778端口发送ACK包,确认收到FIN包,但此时它可能还在等待应用层完成某些操作,因此没有立即发送自己的FIN包。
连接异常终止:
在一段时间后(1分钟后),10.200.33.229的dnp-sec端口发送RST包(16:08:43.475557),异常终止连接。这可能是因为它认为连接已经超时或不再需要,或者是因为它接收到了无法识别的序列号等。RST包的发送通常会导致TCP连接立即关闭,且不会进行正常的四次挥手过程。
总结:这个过程展示了TCP连接的建立、数据传输、保持和异常终止。尽管在大多数情况下,TCP连接会通过正常的四次挥手过程来关闭,但在这个例子中,连接被RST包异常终止了。

既然是终止了,网上百度一大堆:说什么的都有,但是最终没有解决问题

 比较诡异的 同一个服务器 去请求同一个接口,数据报文短的能返回了

这就很诡异了,所以我猜测,长报文无法返回,需要网络排查哪里限制了第三次握手,服务端终止了客户端发送报文,并终端了链接

这篇关于【开端】记一次诡异的接口排查过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095290

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例