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

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

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat