tcp连接断开分析,判断tcp断开原因是客户端还是服务端?

          当与使用TCP协议对接的硬件设备进行通信时,往往会遇到一些问题,导致一些人难以找到tcp断开的根源,因些无法判定是充电桩设备客户端还是服务器端。我曾经在十多年前对接银行接口的POS机时遇到过类似的情况,现在在对接充电桩时又遇到了相似的问题。经过分析,我总结如下:

一 问题

       1 定位问题

       先查说明一下日记是 这台充电设备桩设备 的连接日记,长连接并且记录该桩重新连接时变更IP和端口。

tcp连接断开分析,判断tcp断开原因是客户端还是服务端?_第1张图片

我们抽取一个时间作为本次分析 ,就抽11:00:49是重连接上来的时间点

二 分析结果

获取原始tcp报文分析,tcp服务器这里用的是linux centos, 需要安装获取报文的工具

  1 安装获取tcp报文工具

sudo yum install tcpdump

  2 使用工具获取报文

tcpdump -i eth0 port 9013  -w 1030.pcap

  由于充电桩设备连接的是9013接口,所以这里我们只需要获取指定服务器 9013的报文即可。

 3 分析报文

用Wireshark软件打开1030.pcap报文如下图:

tcp连接断开分析,判断tcp断开原因是客户端还是服务端?_第2张图片

这里ip192是服务端,充电设备的IP是117开头的,从此图的报文数据看,并没有发现有fin标识,也就是非正常断开,但纯从协议上无法判断时只能结合报文本身的业务再分析,查看最后那条断开的数据:3976, 如下图:

tcp连接断开分析,判断tcp断开原因是客户端还是服务端?_第3张图片

再查看充电桩协议文档:

tcp连接断开分析,判断tcp断开原因是客户端还是服务端?_第4张图片

  4 总结

        最后那条报文是由服务器ip正常发出给客户端充电设备,需要客户桩充电设备收到马上回复,但这条报文客户端充电桩设备收到后没有下文了,直到后面客户主动重新连接,也说明了客户端充电设备存在网络问题。

 

另外一种tcp断开分析判断

16:25分又发现设备中断,报文如下图:

tcp连接断开分析,判断tcp断开原因是客户端还是服务端?_第5张图片

这个报文ip119开头的是客户端充电桩设备的IP,主动发送了fin标识,客户端主动请求断开。服务端正常。

四 扩展知识点

 1 tcp标识 

  1. FIN标志(Finish): 主动关闭连接。

  2. RST标志(Reset): RST标志通常表示连接被强制重置,可能是由于网络问题、应用程序崩溃或其他异常情况导致的。

  3. ACK标志(Acknowledgment): ACK标志表示收到了对方的数据,可以是用于确认连接的建立、数据的接收等。在连接断开的时候,ACK标志可能用于确认接收到关闭请求。

  4. SYN标志(Synchronize): SYN标志用于建立连接。

  5. PSH标志(Push): PSH标志表示发送方希望立即将数据推送给接收方。在连接关闭时,这可能意味着发送方还有数据要发送。

  6. URG标志(Urgent):URG标志表示TCP包中包含紧急指针字段。在连接断开时,URG标志可能用于指示某些特殊情况。

 2 tcpdump 常用示例

  • 捕获所有数据包
tcpdump

此命令将捕获所有通过指定接口的数据包,包括 IP、TCP、UDP、ICMP 等协议的数据包。

  • 捕获特定协议的数据包
tcpdump tcp

此命令将捕获通过指定接口的所有 TCP 数据包。

  • 捕获特定端口的数据包
tcpdump port 80

此命令将捕获通过指定接口的所有 TCP 端口 80 的数据包。

  • 捕获特定 IP 地址的数据包
tcpdump host 192.168.1.1

此命令将捕获来自或发送到 IP 地址 192.168.1.1 的数据包。

  • 捕获特定网段的数据包
tcpdump net 192.168.1.0/24

此命令将捕获来自或发送到网段 192.168.1.0/24 的数据包。

  • 捕获特定时间段内的数据包
tcpdump -c 1000 -w /tmp/tcpdump.pcap -i eth0 2023-12-20 12:00:00 2023-12-20 12:01:00

此命令将捕获指定接口 eth0 在 2023-12-20 12:00:00 到 2023-12-20 12:01:00 之间的 1000 个数据包,并将捕获的数据包保存到文件 /tmp/tcpdump.pcap。

  • 捕获包含特定字符串的数据包
tcpdump -s 0 -i eth0 'host 192.168.1.1 and contains "GET /index.html"'

此命令将捕获来自或发送到 IP 地址 192.168.1.1 的数据包,且包含字符串 "GET /index.html"。

tcpdump 还提供了许多其他功能,可以通过查看 man 手册或 tcpdump 的官方文档来了解。

以下是一些 tcpdump 的常用技巧:

  • 使用 -c 选项来限制捕获的数据包数量
  • 使用 -w 选项将捕获的数据包保存到文件中
  • 使用 -s 选项来指定捕获的数据包长度
  • 使用 -v 或 -vv 选项来显示更多的详细信息

你可能感兴趣的:(tcp/ip,网络,服务器)