摘要:tcpdump是通过拦截发送和收到的网络连接中的TCP/IP和其他数据包,通过tcpdump工具帮助我们分析三次握手或者四次挥手的数据包情况,就能很容易的帮助我们分析出网络在哪一个步骤出的问题。

tcpdump是通过拦截发送和收到的网络连接中的TCP/IP和其他数据包,通常在我们WEB开发中,我们提供http服务或者调用http服务的过程中经常会遇到read time out/connect reset等网络异常信息,通过tcpdump工具帮助我们分析三次握手或者四次挥手的数据包情况,就能很容易的帮助我们分析出网络在哪一个步骤出的问题。

接下来我们通过分析Mysql的连接请求,来了解网络的请求过程和协议的具体内容。

0x0000: 4500 0039 3881 4000 4006 7fcf c0a8 00d7
0x0010: c0a8 0047 a034 0cea 860b e11e c2fc 7f64
0x0020: 8018 296a 2b0e 0000 0101 080a 2de4 786b
0x0030: 3a4f 5980 0100 0000 0e

这样一份报文通常有3部分组成

1. IP报头

2. TCP协议

3. mysql协议

逐行分析如下

4500 0039 3881 4000 4006 7fcf c0a8 00d7

  • 45 - 4 为Version 5 为Header Length,那么这个协议头的长度就是5字节
  我们读出接下来的5字节 00 0039 3881
  • 00 Type Of Service标识优先级 延迟要求 吞吐量信息等
  • 0039 Total Length 换算十进制结果是 57 与我们获取到的结果的字节数量一致
  • 3881 IP报文头的Identification
  • 4000 - 为IP Flags和Fragment Offset
  • 000 IP Flags
  0 0100 0000 0000 Fragment :相对0原始报文头的偏移量
  • 4006 - 40 为TTL 一个协议访问的生存周期 06 代表TCP协议
  • 7fcf - Header Checksum 首部查错
  • c0a8 00d7 - 源主机IP地址段 c0(192) a8(168) 00(0) d7 (215)

c0a8 0047 a034 0cea 860b e11e c2fc 7f64

  • c0a8 0047 - 代表目标主机的IP地址 (到这里IP协议部分就结束了,恰好是20字节,接下来就要进入TCP部分解析了)
  • a034 - 源端口号 转换十进制 41012
  • 0cea - 目标端口 转换十进制 3306
  • 860b e11e - 序列号 2248925470
  • c2fc 7f64 - 确认号 3271327588

8018 296a 2b0e 0000 0101 080a 2de4 786b

  • 80 - 8表示偏移 Offset 0 为保留位
  • 18 - tcp的传说状态 1 Ack 8表示PUSH 这大概就是第一行 [P.]的由来把
  • 296a - 滑动窗口的大小10602
  • 2b0e - TCP部分的Checksum
  • 0000 - TCP部分的紧急指针

到Options部分

  • 0101 - NOP填错没有实际意义
  • 080a - 代表开启timestamp
  • 2de4 786b - 对应的具体时间戳的值769947755

3a4f 5980 0100 0000 0e

  • 3a4f 5980 - 还是时间戳的一部分 ecr值
  • 0100 00 - 表示具体内容长度1字节
  • 00 - 表示seqid 递增
  • 0e - 通过查询mysql语义,代表 COM_PING 测试联通性

以下列举了所有在客户端请求部分16进制数代表的mysql语义,通过不同的语义需要进行不同的转换才能获得想要的内容,这里就不列举更多例子了

0x00 COM_SLEEP (内部线程状态)
0x01 COM_QUIT 关闭连接
0x02 COM_INIT_DB 切换数据库
0x03 COM_QUERY SQL查询请求
0x04 COM_FIELD_LIST 获取数据表字段信息
0x05 COM_CREATE_DB 创建数据库
0x06 COM_DROP_DB 删除数据库
0x07 COM_REFRESH 清除缓存
0x08 COM_SHUTDOWN 停止服务器
0x09 COM_STATISTICS 获取服务器统计信息
0x0A COM_PROCESS_INFO 获取当前连接的列表
0x0B COM_CONNECT (内部线程状态)
0x0C COM_PROCESS_KILL 中断某个连接
0x0D COM_DEBUG 保存服务器调试信息
0x0E COM_PING 测试连通性
0x0F COM_TIME (内部线程状态)
0x10 COM_DELAYED_INSERT (内部线程状态)
0x11 COM_CHANGE_USER 重新登陆(不断连接)
0x12 COM_BINLOG_DUMP 获取二进制日志信息
0x13 COM_TABLE_DUMP 获取数据表结构信息
0x14 COM_CONNECT_OUT (内部线程状态)
0x15 COM_REGISTER_SLAVE 从服务器向主服务器进行注册
0x16 COM_STMT_PREPARE 预处理SQL语句
0x17 COM_STMT_EXECUTE 执行预处理语句
0x18 COM_STMT_SEND_LONG_DATA 发送BLOB类型的数据
0x19 COM_STMT_CLOSE 销毁预处理语句
0x1A COM_STMT_RESET 清除预处理语句参数缓存
0x1B COM_SET_OPTION 设置语句选项
0x1C COM_STMT_FETCH 获取预处理语句的执行结果

在mysql请求过程中还有产生其他类型协议包数据,故需要我们对mysql请求过程有基本的认识。

mysql 请求过程介绍

1.建立tcp连接三次握手

2.与Mysql服务器建立连接

  • Server --> Client: Handshake(握手)

1字节:协议版本号
NullTerminatedString:数据库版本信息
4字节:连接MySQL Server启动的线程ID
8字节:挑战随机数,用于数据库认证
1字节:填充值(0x00)
2字节:用于与客户端协商通讯方式
1字节:数据库的编码
2字节:服务器状态
13字节:预留字节
12字节:挑战随机数,用于数据库认证
1字节:填充值(0x00)

  • Client --> Server: Authentication (认证)

4字节:用于与客户端协商通讯方式
4字节:客户端发送请求报文时所支持的最大消息长度值
1字节:标识通讯过程中使用的字符编码
23字节:保留字节
NullTerminatedString:用户名
LengthEncodedString:加密后的密码
NullTerminatedString:数据库名称(可选)

  • Server --> Client: 返回认证结果包

3.认证通过以后,服务器端接收客户端命令包,返回对应的响应包

点击关注,第一时间了解华为云新鲜技术~

实战解析丨如何对Mysql连接请求的tcpdump内容进行分析相关推荐

  1. mysql killed进程不结束_php和mysql连接方式(短 长 池)

    一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求 2.短连接: 执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接 实验: ...

  2. 解析redis存储结构丨 redis与mysql存储对比丨redis存储原理分析

    90分钟视频讲解搞懂redis存储原理 1. redis与mysql存储对比 2. redis存储原理分析 3. redis存储与持久化的关系 [后端开发系列]解析redis存储结构丨 redis与m ...

  3. nginx转发mysql请求_nginx转发mysql连接

    场景: 访问UAT环境,只能使用客户电脑访问,太难用了,于是就需要在自己电脑上跑代码,通过客户电脑中转来访问uat环境的数据库. 选用nginx进行转发.配置如下: stream { upstream ...

  4. Python教程:网络爬虫快速入门实战解析

    建议: 请在电脑的陪同下,阅读本文.本文以实战为主,阅读过程如稍有不适,还望多加练习. 网络爬虫简介 网络爬虫,也叫网络蜘蛛(Web Spider).它根据网页地址(URL)爬取网页内容,而网页地址( ...

  5. Python 爬虫---(7) Python3网络爬虫快速入门实战解析

    转载请注明作者和出处: http://blog.csdn.net/c406495762  Github代码获取:https://github.com/Jack-Cherish/python-spide ...

  6. swoole实现Timer定时器、心跳检测及Task进阶实例:mysql连接池

    2019独角兽企业重金招聘Python工程师标准>>> Table of Contents 1.Timer定时器 2.心跳检测 3.Task进阶:MySQL连接池 环境说明: 系统: ...

  7. bind9 dlz mysql_bind9+dlz+mysql连接断开问题

    前言 DLZ(Dynamically Loadable Zones)与传统的BIND9不同,BIND的不足之处: BIND从文本文件中获取数据,这样容易因为编辑错误出现问题. BIND需要将数据加载到 ...

  8. Mysql连接错误:Lost connection to Mysql server at 'waiting for initial communication packet'

    文章目录 ERROR 原因分析: mysql处理客户端解析过程: mysql的DNS反向解析: 解决方案: 方式一: 方式二: 另外: my.cnf配置的几个参数: 本文转载自:https://www ...

  9. MySQL 连接设置

    interactive_timeout = 1800 指的是 mysql 在关闭一个交互的连接之前所要等待的秒数(交互连接如mysql gui tool 中的连接) 全局,会话变量,动态变量,默认值为 ...

最新文章

  1. python演变_简说Python生态系统的14年演变
  2. 如何获取shell脚本中某条语句的执行时间
  3. centos ftp服务器搭建_ftp软件,ftp软件安装使用教程,利用Serv-U如何搭建ftp服务器?...
  4. c语言变量ppt,C语言程序设计-变量.ppt
  5. ad19原理图标注_AD19中原理图的模板如何进行编辑?
  6. C语言 sprintf 函数 - C语言零基础入门教程
  7. 怎么改vue项目的标题_vue修改项目名
  8. ## CSP 201509-2 日期计算(C语言)(100分)
  9. js打印服务器文件,用Electron / Node.js编写的打印服务器
  10. 夜神模拟器安装drozer
  11. Python爬取小猪短租全网数据
  12. 2020年诺贝尔化学奖得主自述:基因编辑技术将把我们带向何方?
  13. 赵小楼《天道》《遥远的救世主》深度解析(140) ‘初恋’就是‘不可思议’的爱情。当你意识到‘它’的时候,它已经只存在‘回忆’里。
  14. 无需代码,1秒搞定QQ和微信多开!
  15. 跨域问题的解决-gateway跨域接解决方案,使用CorsWebFilter
  16. I DID IT 推广二番 | ArcBlock 发布汇款转账应用 Demo
  17. 李理:详解卷积神经网络
  18. FROM_UNIXTIME()函数UNIX_TIMESTAMP()函数
  19. 2020前端知识体系(图谱)
  20. python 神经网络可以输出连续值_dqn 神经网络输出

热门文章

  1. php静态属性和普通属性吗,php中静态属性和普通属性的区别
  2. 类如何调用自己的私有成员_企业如何快速获取自己的私有领域流量?
  3. Luogu P1525 【关押罪犯】
  4. coderfoces D. Gourmet choice
  5. Springboot读取jar包中的MANIFEST.MF文件内容
  6. bzoj2819: Nim(博弈+树剖)
  7. Tomcat发布网站知识集锦
  8. PostreSQL崩溃试验全记录
  9. CCF201803-1 跳一跳
  10. PAT乙级(1013 数素数)