您的位置:首页 > 理论基础 > 计算机网络

用Tcpdump定位服务器和客户端通信问题

2012-02-17 11:22 204 查看
注意:Tcpdump需要用root帐号登录

一、应用场景1

客户端发送过来的数据包,在服务器解开之后发现数据包不对?

[root@IED_224_42_sles10_64]~>tcpdump -i eth1 port 8029 -X

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes

11:03:06.125337 IP 10.18.124.47.4217 > 10.6.224.42.8029: P 651073194:651073233(39) ack 1685844515 win 64472

0x0000: 4500 004f 056d 4000 3a06 caca 0a12 7c2f E..O.m@.:.....|/

0x0010: 0a06 e02a 1079 1f5d 26ce 96aa 647b f223 ...*.y.]&...d{.#

0x0020: 5018 fbd8 51a5 0000 0027 0001 0000 0000 P...Q....'......

0x0030: 0000 0000 0000 02bd 03ea 2540 0000 0000 ..........%@....

0x0040: 0000 0000 0a40 4553 355a 4961 5969 5a .....@ES5ZIaYiZ

11:03:06.125869 IP 10.6.224.42.8029 > 10.18.124.47.4217: . ack 39 win 1460

0x0000: 4500 0028 b292 4000 4006 17cc 0a06 e02a E..(..@.@......*

0x0010: 0a12 7c2f 1f5d 1079 647b f223 26ce 96d1 ..|/.].yd{.#&...

0x0020: 5010 05b4 f599 0000 P.......

[Msg version="1"]:

[m_stMsgHead]

m_shMsgVersion=1

m_uiTimeStamp_Low=0

m_uiTimeStamp_High=0

m_uiMsgID=ACCOUNT_CREATEROLE_REQUEST

m_uiUin=65676608

m_iFeedback=0

m_uiBodyLength=0

m_ucSKeyLength=0xa

m_szSessionKey[10]=0x40 0x45 0x53 0x35 0x5a 0x49 0x61 0x59 0x69 0x5a

[m_stMsgBody]

[m_stAccountCreateRoleRequest]

可以看出这一行以下为客户端发给服务器的数据包,再根据上面的协议比对,很明显就可以看出客户端发送过来的包是有问题的,没有MsgBody部分内部。

11:03:06.125337 IP 10.18.124.47.4217 > 10.6.224.42.8029: P 651073194:651073233(39) ack 1685844515 win 64472

二、应用场景2

客户端发送登录请求,在服务器端却收到一个没有MsgBody部分内容的包?

命令同场景1,从tcpdump打印看出服务器确实收到了完整的数据包,但在服务器逻辑层收到的是空的MsgBody,很明显问题就在服务器接入层。

再到接入层定位,很快发现由于配置原因,接入层对客户端数据包验证不通过,问题就找到了。

三、应用场景3

在对时延非常高的场景中(ms级),服务器发的包,客户端未能及时收到?

或者客户端发送的包,服务器未能及时收到?

命令同场景1,从日志可以看出服务器确实没有按时发送,在服务器逻辑层打印时间,却是按时发送的,这就奇怪了?

进一步想想发送层,就想到了TCP延迟发送和延迟确认,Nagel算法,设置sock的no delay属性,关闭Nagel算法就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐