专栏首页自学测试之道再次记录使用tcpdump+wireshark分析TCP握手连接与断开

再次记录使用tcpdump+wireshark分析TCP握手连接与断开

前言

刚好公司有个项目出现客户端访问服务器提示连接超时的情况,具体log信息显示如下:

[21:29:48(1518)]*[TestService]*[getDeviceInfoFromCloud->onFailure: java.net.SocketTimeoutException: failed to connect to mapi.yunovo.cn/47.98.17.161 (port 80) after 10000ms] [21:29:51(1518)]*[TestService]*[getDeviceInfoFromCloud->onFailure: java.net.SocketTimeoutException: failed to connect to mapi.yunovo.cn/47.98.17.161 (port 80) after 10000ms] [21:30:09(1518)]*[TestService]*[getDeviceInfoFromCloud->onFailure: java.net.SocketTimeoutException: failed to connect to mapi.yunovo.cn/47.98.17.161 (port 80) after 10000ms]

一、思路分析

出现以上异常信息无非就以下几种可能:

1、设备发送消息给服务器,服务器有接收到信息但没有反馈给设备??

2、设备发送消息给服务器,服务器没有接收到信息??

3、设备没有把信息发送到服务器??

4、设备与服务器通讯期间数据有丢失??

解决方案:

1、通过tcpdump进行对设备抓包,抓取TCP的全部信息

2、结合wireshark工具进行分析TCP的连接过程

3、通过分析抓取的包信息来总结问题所在

二、抓包过程

1、把tcpdump脚本通过如下指令发送到设备端的/data/local/,进入设备的/data/local/路径下修改文件权限

adb push tcpdump /data/local/ #传到指定路径

chmod 777 tcpdump #修改权限

2、执行抓包指令

tcpdump -p -vv -s 0 -C 100 -w /sdcard/xxx.pcap #相关参数请自行查找

3、当抓取的文件过多时,可以进入wireshark安装目录执行如下指令进行合并多个文件(比如有3个文件名为test.pcap\test_1.pcap\test_2.pcap)

mergecap.exe -w test.pcap test_*.pcap #第一个为你要保持的路径和文件名,后缀必须以.pcap结尾,第二个为需要合并的文件

三、TCP握手和断开过程

完成的交互过程就是一个典型的HTTP协议的应用过程。

HTTP是基于T CP的连接,因此,建立HTTP连接必须经过TCP的过程,TCP的建立过程是3次握手的过程。然后就是HTTP过程,HTTP只有两种报文,请求和应答报文。完成http过程后,3次断开tcp连接。

第一次握手连接

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图

TCP第一次握手连接

第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图

TCP第二次握手连接

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:

TCP第三次握手连接

结束请求

tcp三次握手结束之后就是HTTP请求

结束请求

四、针对抓取的包进行分析

1、通过打印的日志找到服务器IP地址

2、把抓取的数据包用wireshark工具打开,输入过滤条件,如下图

分析数据包

3、分别核对查看TCP的三次握手请求是否正常,如下图

TCP第一次连接

TCP第三次连接

4、结论

1、从TCP握手连接过程来看,第二次握手连接不成功(即服务器可能存在没有接收到消息或者接收到消息后没有返回给客服端),接下来就得分析服务器端的日志信息了

2、从服务端分析的原因为:服务器刚好在释放资源时,客户端发来请求,导致服务器没有及时做处理导致出现超时等异常。

本文分享自微信公众号 - 自学测试之道(zxceshi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 性能监控平台搭建 - Grafana安装与简易使用指南

    Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:

    上帝De助手
  • Prometheus安装

    安装环境: Linux centos7 minimal 虚拟机; 宿主主机 MacOS; 软件: virtualBox 6.0.10 r132072

    suveng
  • 人生苦短,我用PyCharm

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载。

    zhangqibot
  • 开源虚拟化ProxmoxVE和XenServer的分析比较

    基于近期调研使用Proxmox VE的经验以及之前使用XenServer的经验,在本文中,我将讨论Proxmox VE和XenServer并将这两个最受欢迎的开...

    时间之外沉浮事
  • centos7-gitlab平台搭建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • 性能监控平台搭建 -- 集成Locust性能数据

    这是之前介绍过的性能监控平台的整体架构图,想要了解其它部分的搭建,可以查看相关文章《Telegraf安装与简易使用指南》、《InfluxDB安装与简易使用指南》...

    上帝De助手
  • kali 配置 MongoDB

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • ssh技巧之主机别名

    一般我们在用ssh登录服务器时,都是用 ssh user@host 这种命令形式,但当我们管理的机器一多,很容易忘记user或host部分,特别是当host还是...

    wangyuntao
  • 10分钟快速掌握Docker必备基础知识

    Docker是时下热门的容器技术,相信作为一名开发人员,你一定听说过或者使用过,很多人会把Docker理解为一个轻量级虚拟机,但其实Docker与虚拟机(VM)...

    macrozheng
  • Linux环境变量总结

    个人博客:https://suveng.github.io/blog/​​​​​​​

    suveng

扫码关注云+社区

领取腾讯云代金券