资讯专栏INFORMATION COLUMN

【调试工具】tcpdump

rockswang / 904人阅读

摘要:原文地址抓包工具使用在调试网络通信程序是是必备工具。如,可以看到次握手,数据推送,次挥手,全部细节。表示发送端支持并同意使用选项。

原文地址:tcpdump抓包工具使用
在调试网络通信程序是tcpdump是必备工具。tcpdump很强大,可以看到网络通信的每个细节。如TCP,可以看到3次握手,PUSH/ACK数据推送,close4次挥手,全部细节。包括每一次网络收包的字节数,时间等

最简单的一个使用示例:
sudo tcpdump -i any tcp port 11211

-i 参数制定了网卡,any表示所有网卡

tcp 指定仅监听TCP协议

port 制定监听的端口

tcpdump需要root权限 需要要看通信的数据内容,可以加 -Xnlps0 参数,其他更多参数请参见网上的文章

演示一个memcache的连接,赋值,取值,关闭连接过程

执行命令:

telnet 10.8.34.27 11211

运行结果:

15:14:34.336031 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [S], seq 3049437196, win 14480, options [mss 1460,sackOK,TS val 910488745 ecr 4129152319,nop,wscale 7], length 0
15:14:34.336057 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [S.], seq 3663074357, ack 3049437197, win 14480, options [mss 1460,sackOK,TS val 4129152433 ecr 910488745,nop,wscale 7], length 0
15:14:34.336159 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 1, win 114, options [nop,nop,TS val 910488745 ecr 4129152433], length 0

执行命令:

get userId

运行结果:

15:23:40.025373 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 15:27, ack 6, win 114, options [nop,nop,TS val 911034453 ecr 4129686634], length 12
15:23:40.025571 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [P.], seq 6:35, ack 27, win 114, options [nop,nop,TS val 4129698122 ecr 911034453], length 29
15:23:40.025768 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 35, win 114, options [nop,nop,TS val 911034453 ecr 4129698122], length 0

执行命令:

set username 0 0 4

运行结果:

15:27:45.985897 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 153:173, ack 160, win 114, options [nop,nop,TS val 911280417 ecr 4129926755], length 20
15:27:46.025059 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [.], ack 173, win 114, options [nop,nop,TS val 4129944122 ecr 911280417], length 0

运行命令:

nick

运行结果:

15:28:47.625886 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 173:179, ack 160, win 114, options [nop,nop,TS val 911342058 ecr 4129944122], length 6
15:28:47.625910 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [.], ack 179, win 114, options [nop,nop,TS val 4130005722 ecr 911342058], length 0
15:28:47.626046 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [P.], seq 160:168, ack 179, win 114, options [nop,nop,TS val 4130005723 ecr 911342058], length 8
15:28:47.626204 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 168, win 114, options [nop,nop,TS val 911342058 ecr 4130005723], length 0


执行命令:

get username

运行结果:

15:29:59.978653 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 179:193, ack 168, win 114, options [nop,nop,TS val 911414421 ecr 4130005723], length 14
15:29:59.978743 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [P.], seq 168:199, ack 193, win 114, options [nop,nop,TS val 4130078075 ecr 911414421], length 31
15:29:59.978867 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 199, win 114, options [nop,nop,TS val 911414421 ecr 4130078075], length 0


执行命令:

quit

运行结果:

15:30:52.755257 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 193:199, ack 199, win 114, options [nop,nop,TS val 911467215 ecr 4130078075], length 6
15:30:52.755534 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [F.], seq 199, ack 199, win 114, options [nop,nop,TS val 4130130852 ecr 911467215], length 0
15:30:52.755843 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [F.], seq 199, ack 200, win 114, options [nop,nop,TS val 911467215 ecr 4130130852], length 0
15:30:52.755865 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [.], ack 200, win 114, options [nop,nop,TS val 4130130852 ecr 911467215], length 0

15:30:52.755865 时间带有精确到微妙

10.8.34.13.36686 > 10.8.34.27.memcache 表示通信的流向,36686是客户端,memcache是服务器端

[S] 表示这是一个SYN请求

[.] 表示这是一个ACK确认包,(client)SYN->(server)SYN->(client)ACK 就是3次握手过程

[P] 表示这个是一个数据推送,可以是从服务器端向客户端推送,也可以从客户端向服务器端推

[F] 表示这是一个FIN包,是关闭连接操作,client/server都有可能发起

[R] 表示这是一个RST包,与F包作用相同,但RST表示连接关闭时,仍然有数据未被处理。可以理解为是强制切断连接

win 114是指滑动窗口大小(接收缓存的窗口大小)

length 12指数据包的大小

三次握手部分:

16:01:29.583827 IP 10.8.34.13.45468 > 10.8.34.27.memcache: Flags [S], seq 2309185558, win 14480, options [mss 1460,sackOK,TS val 913304024 ecr 4131967648,nop,wscale 7], length 0

Flags是[S],表明是syn建立连接包(即三次握手的第一次握手)

seq
2309185558序号为2309185558,这个其实就是tcp三次握手的第一次握手10.8.34.13.45468发送syn请求建立连接包

win 14480,表示窗口大小为14480字节

options [mss 1460,sackOK,TS val 913304024 ecr 4131967648,nop,wscale
7]为tcp首部可选字段,

mss
1460表示mss是发送端(client)通告的最大报文长度,发送端将不接收超过这个长度的tcp报文段(这个值和MTU有关)。sackOK表示发送端支持并同意使用SACK选项。wscale

7表示发送端使用的窗口扩大因子为7

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61718.html

相关文章

  • 关于PHP程序员解决问题的能力

    摘要:但执行后没有任何信息输出,这时候通过什么方法能知道程序错在哪里这里可以将解决问题能力分为个等级,越到后面的表示能力越强。这个考验全部通过,表明此程序员已经具备了专业程序员应该有的解决问题能力了。 这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高。解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验。如果解...

    lauren_liuling 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<