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

注意: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算法就可以了。

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Servers/zs/

时间: 2024-10-06 08:24:01

用Tcpdump定位服务器和客户端通信的问题的相关文章

用swiften写一个服务器与客户端通信的列子

问题描述 用swiften写一个服务器与客户端通信的列子 用swiften库写一个服务器与客户端通信的列子,有服务器和客户端,能进行简单的通信

详解C# Socket简单例子(服务器与客户端通信)_C#教程

这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消息边界问题.端口号是否被占用.消息命令的解析问题等.. 下面是两个程序的代码,(两个程序均为控制台程序) 先发服务端的(Server)完整代码如下: 引入命名空间: using System.Net.Sockets; using SystemNet; using SystemThreading; 完

asp.net C# Socket 服务器与客户端通信实现代码

先发服务端的(Server)完整代码如下: 引入命名空间:  代码如下 复制代码 using System.Net.Sockets;  using System.Net;  using System.Threading;  完整代码如下:  代码如下 复制代码 namespace SocketServer  {      class Program      {          private static byte[] result = new byte[1024];          pr

安卓手机socket通信(服务器和客户端)_Android

本文实例为大家分享了安卓手机socket通信代码,供大家参考,具体内容如下 1.socket通信首先要定义好服务端的ip地址和端口号:  (1).首先看服务端的代码: package com.example.androidsockettest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import

Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能

Android BLE与终端通信(四)--实现服务器与客户端即时通讯功能 前面几篇一直在讲一些基础,其实说实话,蓝牙主要为多的还是一些概念性的东西,当你把概念都熟悉了之后,你会很简单的就可以实现一些逻辑,主要是Socket和I/O流的操作,今天就来一起做一个聊天的小程序,我们都知道,我们实现蓝牙连接,蓝牙是有主从关系的,所以有客户端和服务端之分,我们新建一个工程--BLE_QQ(hh,毕竟是即时通讯嘛,和QQ挨个边) 参考Google的API:http://developer.android.c

tcp/ip socket-TCP/IP客户端与服务器之间的通信问题。。急求解决方法!!!!!

问题描述 TCP/IP客户端与服务器之间的通信问题..急求解决方法!!!!! 在做一个项目,问题,客户端和服务器端可以都开两个线程.即客户端打开线程1和线程2,服务器端打开线程1和线程2.在通信过程中服务器线程1与客户端线程1通信,服务器线程2与客户端线程2通信,这样子怎么实现呢???急求 解决方案 你先搞懂socket怎么用,然后网上有很多socket的例子,有的很不错,自己研究一下 解决方案二: socket我已经了解过了,实现了多个客户端同时与服务器之间的通信,现在想做客户端开两个线程一个

服务器与客户端用socket通信 第一个页面实现服务器连接,第二个页面实现收发数据

问题描述 服务器与客户端用socket通信 第一个页面实现服务器连接,第二个页面实现收发数据 各位大神,我在制作一个简单的app,服务器与客户端用socket通信的 ,现能在单个页面实现连接服务器和收发数据,现在想分开来做,第一个页面实现服务器连接,第二个页面实现收发数据,有什么好的建议吗? 蟹蟹大家了.

C/S架构,SOCKET连接,服务器和客户端之间通信为什么会丢包?

问题描述 C/S架构,SOCKET连接,服务器和客户端之间通信为什么会丢包? C/S架构,SOCKET连接,服务器和客户端之间通信为什么会丢包 解决方案 iOS用GcdAsyncsocket通信一个8000多字节的包只能收到一千多字节,这是什么原因

服务器-C语言 socket 编写简单服务端客户端通信问题

问题描述 C语言 socket 编写简单服务端客户端通信问题 大家好,感谢你的回复. 我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了. Talk is cheak , show me the code. 服务端代码: #include<stdlib.h> #include<WinSock2.h> #pragma comment(lib,"ws2_32.lib") i