最近生产上出现一个性能问题,表现为:行情延时5s左右。从log一路追查下去,发现是我们自己写的一个行情网关(部署在xx.xx.xx.132)<->第三方的中转网关(部署在xx.xx.xx.133)之间的通信产生的。

Who to blame? 这是个问题,是我们的行情网关、网络、还是第三方的中转网关。所以想到用WireShark抓包进行分析。抓到的包在这里:CaptureData-20160905.pcapng,用WireShark打开后,在统计里有很多有用的信息,有用的是这几个:

  • 捕获文件属性:能看到基本信息,抓包起始时间、跨度(01:04,共64秒)、大小(7624KB)、分组(28068个包)等
  • 协议分级:能看到各级协议的包的占比
  • IO图表:能看到每秒的包数量,还可以自定义过滤器,对Y轴加一些sum、count、avg等统计方法
  • TCP-时间序列:很能反映通信特征,任何一方的seq不变表示不再发数据,只发长度为0的应答包
  • TCP-吞吐量:反映每秒吞吐的包长度
  • TCP-往返时间:rtt round trip time, 这个图很能说明132处理的快,133发的慢
  • TCP-窗口尺寸:表示一方接收数据的能力,132一直在5万以上,而133到过0

首先要设置合适的过滤器,过滤出我们感兴趣的包,试下来最有用的是:ip.addr == xx.xx.xx.132 && ip.addr == xx.xx.xx.133。通过分析,整个60秒的通信过程分为3个部分:

  1. 132:50012端口与133:7777端口的3次握手,syn->syn ack->ack。建立连接后,状态变为established
  2. 132:50013端口向133:7777端口发送数据,主要是发送要订阅的标的。在最下面的data窗口能看到ascii码里会显示标的的代码,比如au1609等
  3. 132:50013端口接收133:7777端口发来的数据,主要是期货行情。

分析的一些小结论如下:

  1. 数据的逻辑关系:发送端seq + data bytes = 接收端ack 以及 发送端seq + data bytes = 发送端next seq
  2. 接收端有时会将若干个ack确认包合并成1个。
  3. 包15281到15673,注意到133的windowSize一直在不断减少,突然变大就是window update。包16073开始各种window full、zero window,因为133的winSize=0满了,132开始发送0窗口探测报文。订阅完成后133的win就不再减少了,没压力了。换成133给132发送行情数据了。
  4. Frame在网线级别,Ethernet在mac级别,IP在IP地址(v4、v6)级别,tcp在端口port级别。
  5. 注意前两次握手syn和syn ack里有关于Selective Ack、Maximum Segment Size和Windows Scale(比如:8,表示位移8位,即乘数为256)等选项的协商
  6. 吞吐量(bytes/sec) = Window Size(bytes) / RTT(round trip time, sec) = 64KB/0.000128s = 500MB/s
  7. 右键Follow this stream,会产生一个过滤器:tcp.stream eq 604,其实对应于每个ip+port对都会产生一个stream index,不论方向。这个index应该是wireshark在抓取过程中顺序产生的,类似于Frame Number。这个过滤器的效果类似于:ip.addr == xx.xx.xx.132 && ip.addr == xx.xx.xx.133 && tcp.port == 7777 && tcp.port == 50012,还是蛮方便实用的。
  8. 性能分析:syn、ack在tcp协议级别,不包括任何数据,与应用层无关,握手不卡说明网络没问题。发送行情的过程中,双方的win=65535,表示窗口这块都有富余,双方的网络都不卡。132收到行情处理再回复ack只用了<0.1ms,说明接收端的速度也很快。所以只能有一个解释,133发送端发的慢。其实从133的日志里也能看出来,“客户端发送队列已满,将丢弃xx报文”。
  9. 由于中转网关是第三方的程序,我们没法控制,因此只能我们减少订阅的标的数,发送的压力小了,自然就不慢了。

WireShark网络性能分析的更多相关文章

  1. x86服务器中网络性能分析与调优 转

    x86服务器中网络性能分析与调优 2017-04-05 巨枫 英特尔精英汇 [OpenStack 易经]是 EasyStack 官微在2017年新推出的技术品牌,将原创技术干货分享给您,本期我们讨论 ...

  2. iperf/netperf网络性能测试工具、Wireshark网络包分析工具

    iperf   http://www.linuxidc.com/Linux/2014-05/101160.htm netperf  http://www.linuxidc.com/Linux/2013 ...

  3. 【转】一文掌握 Linux 性能分析之网络篇

    [转]一文掌握 Linux 性能分析之网络篇 比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看.监控,又包括网络链路上的包转发时延.吞吐量.带宽等指标分析.包括但不限于以下分析工具: pin ...

  4. 一文掌握 Linux 性能分析之网络篇

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...

  5. 一站式学习Wireshark(四):网络性能排查之TCP重传与重复ACK

    作为网络管理员,很多时间必然会耗费在修复慢速服务器和其他终端.但用户感到网络运行缓慢并不意味着就是网络问题. 解决网络性能问题,首先从TCP错误恢复功能(TCP重传与重复ACK)和流控功能说起.之后阐 ...

  6. Wireshark(四):网络性能排查之TCP重传与重复ACK

    原文出处: EMC中文支持论坛 作为网络管理员,很多时间必然会耗费在修复慢速服务器和其他终端.但用户感到网络运行缓慢并不意味着就是网络问题. 解决网络性能问题,首先从TCP错误恢复功能(TCP重传与重 ...

  7. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  8. NS2仿真:两个移动节点网络连接及协议性能分析

    NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图 ...

  9. Linux系统网络性能实例分析

    由于TCP/IP是使用最普遍的Internet协议,下面只集中讨论TCP/IP 栈和以太网(Ethernet).术语 LinuxTCP/IP栈和 Linux网络栈可互换使用,因为 TCP/IP栈是 L ...

随机推荐

  1. boost学习笔记(七)---date_time库

    date_time库的日期基于格里高利历,支持从1400-01-01到9999-12-31之间的日期计算 #define BOOST_DATE_TIME_SOURCE #include <boo ...

  2. MS SQL-Server快捷键

    快捷键                    功能 Ctrl+Shift+B          生成解决方案 Ctrl+F7                  生成编译 Ctrl+O          ...

  3. Linux 常见问题解决办法

    1.用户切换后显示 -bash-4.1 $ 表示该用户下的配置文件缺失,切换到该用户下(-bash-4.1),使用命令查(pwd)看用户所在位置.如 /home/gpadmin. 使用 cp -a / ...

  4. ${param.xxx}获取url中的参数

    在项目中看到了一个很奇怪的EL表达式...${param.catid}...一直找不到param在哪里定义的...(主要是水平太屎...) 然后从网上查了一下才知道是啥... EL表达式${param ...

  5. sublime 3 安装go环境

    安装go环境是在go已经安装的情况下, 1 首先安装 Package Control ctrl + · 打开sublime 命令行模式 复制粘贴以下代码 import urllib.request,o ...

  6. BWT压缩算法(Burrows-Wheeler Transform)

    参考: BWT (Burrows–Wheeler_transform)数据转换算法 压缩技术主要的工作方式就是找到重复的模式,进行紧密的编码. BWT(Burrows–Wheeler_transfor ...

  7. jq异步上传文件(转载)

    最近在使用ajaxForm,随便把使用方法记下下来,以便以后回顾. 1 ,引入依赖脚本 <script type="text/JavaScript" src="/j ...

  8. VMware8.0虚拟机中安装Ubuntu12.04使用NAT设置连接网络

    之前一直尝试使用“桥接”的方法,但是一打开虚拟机,本机windows就断网.最后不得不换种方法,还好尝试了很多遍终于使用NAT设置成功的联网了. 说明:本机windows连接的是无线网. 1.检查自己 ...

  9. [HTML/HTML5]1 HTML文档设置

    1.1  创建HTML文件 本质上,HTML文件就是具有下列两个特征的简单文本文件: HTML文件的扩展名为.html或者.htm.文件扩展名是一个缩写,它可将文件正确地关联到需要访问它的程序或工具. ...

  10. [转]CSS hack大全&详解

    转自:CSS hack大全&详解 1.什么是CSS hack? CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的, ...