前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >作为DBA,你有必要了解一下tcpdump

作为DBA,你有必要了解一下tcpdump

作者头像
用户1278550
发布2020-08-24 10:15:24
6190
发布2020-08-24 10:15:24
举报
文章被收录于专栏:idbaidba

一 简介

tcpdump 是一款强大的网络抓包工具,dump the traffice on anetwork,对网络上的数据包进行截获的包分析工具。熟练掌握tcpdump 可以方便我们跟踪解决网络丢包,重传,数据库链路调用等问题。

二 使用tcpdump

2.1 语法

tcpdump的语法如下:

代码语言:javascript
复制
Usage: tcpdump [-aAdDefhIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
       [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
       [ -i interface ] [ -j tstamptype ] [ -M secret ]
       [ -Q|-P in|out|inout ]
       [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
       [ -W filecount ] [ -y datalinktype ] [ -z command ]
       [ -Z user ] [ expression ]

我们重点说一下表达式expression,tcpdump通过表达式对不同类型的网络流量进行过滤,以获取到需要的信息。tcpdump主要支持3种类型的表达式:

Type(类型)选项包括 host,net和port,缺省为host
代码语言:javascript
复制
host(缺省类型): 指明一台主机,如:
host 10.215.20.13
net: 指定网络地址,net 10.215.20.0
port: 指明端口号,port 3306
Direction(方向)选项包括 src 和 dst 以及它们的组合
代码语言:javascript
复制
确定方向的关键字
dst or src(缺省值) 指定源或者目标地址是 10.215.20.13的流量包
src: src 10.9.51.13, 指定源地址是10.9.51.13
dst: dst net 172.0.0.0, 指定目标网络地址是172.0.0.0
dst and src  比如: src host 10.9.51.13   and dst host 10.215.20.13
Proto(协议)包括 tcp 、udp 、ICMP 和 ah 等

协议的关键字:缺省值是监听所有协议的信息包

代码语言:javascript
复制
ip
arp
tcp
udp
icmp
其他关键字 gateway broadcast less greater
常用表达式:多条件时可以用括号,但是要用转义
代码语言:javascript
复制
非 : ! 、not
且 : && 、 and
或 : || 、 or
例子: 抓取所有经过 bond0,目的地址是 10.10.1.254 或 10.10.1.200 端口是 80 的 TCP 数据
# tcpdump -i bond0 '((tcp) and (port 80) and ((dst host 10.10.1.254) or (dst host
10.10.1.200)))'
2.2 参数

以一个实际例子说明

tcpdump tcp -i bond0 -tttt -s 0 -c 100 and dst port ! 22 and src net 10.10.1.0/24 -w 20190131.tcpdump

解释

代码语言:javascript
复制
(1)tcp: 协议类型,用来过滤数据报的协议类型。
(2)-i bond0 : 只抓取经过接口bond0的包
(3) -tttt : 使用格式 2019-02-02 10:37:37.120297,便于分析。
(4)-s 0: 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包
(5)-c 100: 只抓取100个数据包
(6)dst port ! 22: 不抓取目标端口是22的数据包
(7)src net 10.10.1.0/24:数据包的源网络地址为10.10.1.0/24
(8)-w 20190131.tcpdump:保存成tcpdump文件中,方便使用wireshark分析抓包结果。

还有其他常用的参数:

代码语言:javascript
复制
-D:列出所有可用的网络接口
-n:禁用域名解析,让tcpdump直接输出IP地址.
-X:以16进制格式输出数据包的内容,不加该参数,会只输出iptcp/udp头部信息。
                            加上该选项会将整个数据包输出。
-vvvv  该参数其实是-v与-vvv的组合。
       -v会输出稍微详细一点的信息包括校验和ttl之类的;
       -vvv会尝试解析应用层协议,输出详细信息。二者组合就能完整的详细信息。
-A:以ASCII值显示抓到的包,比如和MySQL的交互时,可以通过-A查看包的文本内容.   

tcpdump的功能结合参数排列组合非常多,感兴趣的朋友可以自己多动手实践。毕竟,纸上来得终觉浅,绝知此事要躬行。

三 解析包

知道如何使用tcpdump命令,我们接下来分析抓到的报文。抓包命令:

tcpdump -i bond0 -n -s 0 port 3312 -c 10 -tttt

第一列是时间 2019-02-02 10:46:13.447563

第二列 IP是网络协议名称。

10.215.20.13.appman-server > 10.9.51.13.25569表示 数据包发送的源端十进制地址和接收端的ip地址10.9.51.13和端口号25569。 其中 > 表示数据包的流向。

Flags [P.] 包的状态标志,

代码语言:javascript
复制
S=SYN   发起连接标志。
P=PUSH  传送数据标志。
F=FIN, 关闭连接标志。
ack,   表示确认包。
RST=RESET,异常关闭连接。
.,        表示没有任何标志。

seq 3771602051:3771602105 请求同步的序列号,注意3771602105-3771602051=54 表示数据包的大小和后面的length的大小一致。

ack 1872251807 确认已经同步的序列号+1

win 1857 当前可用的窗口大小,

注释:window size:窗口大小,16bits,窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。

length 54 tcp 包体的长度。

一图胜千言,tcp结构了解一下

图片来自 https://www.cnblogs.com/the-tops/p/6587498.html

四 案例分析

利用tcpdump和wireshark分析MySQL交互。利用如下命令收集数据包,

代码语言:javascript
复制
# tcpdump -i bond0  -n -s 0  port 3320   -tttt -A  -w  /tmp/20190202.tcpdump
tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 65535 bytes
32 packets captured
36 packets received by filter
0 packets dropped by kernel

同时在通过其他窗口执行sql,进行抓包。

获取 20190202.tcpdump 使用wrieshark进行分析。忽略三次握手啥的,我们直接分析MySQL交互协议。要查看MySQL协议,要使用右键

设置MySQL协议

确定之后,可以看到协议那部分出现MySQL,info部分有我们比较熟悉的select ,show tables 等语句。

登陆数据库的

执行查询的数据流,其实我们可以通过26 ,27两个包的时间差计算sql的执行时间,用于性能问题分析或者故障排查。

执行退出命令 exit

上面的举例只是利用tcpdump简单分析MySQL的交互,实际生产中可能更复杂,出现问题的场景不一定稳定复现,要抓很多包来分析定位。所以出现问题的时候抓包和分析包是个体力活。

五 推荐阅读

[1] https://www.tcpdump.org/

[2] https://zhuanlan.zhihu.com/p/33580437

[3] Tcpdump在数据库中的使用实践

[4] 通过实例学习 tcpdump 命令 Linux学习

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 简介
  • 二 使用tcpdump
    • 2.1 语法
      • Type(类型)选项包括 host,net和port,缺省为host
      • Direction(方向)选项包括 src 和 dst 以及它们的组合
      • Proto(协议)包括 tcp 、udp 、ICMP 和 ah 等
    • 常用表达式:多条件时可以用括号,但是要用转义
      • 2.2 参数
      • 三 解析包
      • 四 案例分析
      • 五 推荐阅读
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档