HUAWEITECHNOLOGIESCO.,LTD.Page1TCP性能分析技术及其应用HUAWEITECHNOLOGIESCO.,LTD.解决方案设计部最新版本请访问:目录4TCP原理3Socket原理12TCP抓包和分析工具6应用案例背景:为什么要学习TCP性能分析技术?5TCP问题定位思路和方法HUAWEITECHNOLOGIESCO.,LTD.Page32010.08.17:初稿完成。2011.09.02:关于窗口设置略大于BDP增加说明。2011.10.24:修正了超时重传后的慢启动门限错误问题。2012.06.15:增加TCP稳态速率和TCP环回时长分析,增加win7下TCP接收窗口自动调整算法的相关说明。2012.10.25:补充说明windows回复TCPACK的具体行为。2012.12.10:补充快速重传和超时重传时拥塞窗口随时间的变化图;补充总体定位思路和方法。2012.12.31:TCP问题定位思路部分增加socket分析。修订记录HUAWEITECHNOLOGIESCO.,LTD.Page4【问题现象】拉脱维亚DORev.A系统,在DOS窗口中进行FTP上传吞吐量正常,但在IE窗口进行FTP上传时吞吐量低于DOS窗口下FTP吞吐量。拉脱维亚IE窗口FTP上传吞吐量低问题背景TCP原理Socket原理应用案例工具【初步定位】现场和总部的开发人员经过近一个月的定位,也没搞清楚根本原因,只好答复客户:“DOS窗口下进行FTP上传没问题,说明我们系统没问题,IE窗口下进行FTP上传有问题,是操作系统的问题,请找微软解决”,客户对此答复非常不满,扬言“必须尽快解决,否则投诉到公司高层”。1.6Mbps,速率正常400kbps,速率低!HUAWEITECHNOLOGIESCO.,LTD.Page5拉脱维亚IE窗口FTP上传吞吐量低问题背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page6【最终解决】该问题通过对抓包数据的深入分析,最终搞清楚了问题是由于使用IE进行FTP上传时的TCP发送缓冲区大小默认设置太小(8KB)引起,修改为64KB后问题解决。拉脱维亚IE窗口FTP上传吞吐量低问题这个问题提醒我们:对操作系统的TCP/IP实现不了解会影响问题定位速度,而且处理不好的话还会大大影响客户满意度。发送缓冲区大小只有8KB,受限接收窗口没有受限背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page7【问题现象】荷兰项目一期测试时,使用常见的测试软件对我们的系统进行吞吐量测试没问题,但使用第三方的测试设备进行测试时上传和下载的吞吐量都非常低。局方人员一再强调Z公司使用该测试设备测试没问题。荷兰第三方测试FTP上传下载吞吐量低问题【初步定位】现场和总部的开发人员只好排查我们自己的设备问题,花了一周时间无结果。【最终解决】最终通过对抓包数据从TCP角度进行深入分析,以充分的理由说服了局方:是第三方测试软件的问题引起的上传下载吞吐量低。争取到了宝贵的重测机会,为项目的最终成功打下了很好的基础。背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page8荷兰第三方测试FTP上传下载吞吐量低问题这个问题提醒我们:通过对TCP行为的深入分析可以找出应用软件的问题;反之,如果对TCP原理的理解太粗浅,当出现应用软件的问题时会束手无策。客户端应用软件1s取1次数据,造成下载吞吐量低!客户端应用软件0.5s发32KB数据,造成上传吞吐量低!为什么Z公司测试没问题呢?最终局方确认:Z用的测试软件版本和我们不同。背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page9【问题现象】南非WiMAX吞吐量测试时发现FTP下载速率波动大。BS分片重组设计缺陷导致下载吞吐量波动大【初步定位】抓包发现TCP错包,包中内容出错位置恰好和R6口分片位置吻合,怀疑是IP分片重组出了问题。背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page10BS分片重组设计缺陷导致下载吞吐量波动大通过对终端、BS、R6口、Server的抓包数据进行深入分析,最终发现送往BS的IP包是正常的,但BS在进行IP分片重组时出了问题:将同一ID的前一个IP包的第1个分片与后一个IP包的第2个分片重组在一起。背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page11BS分片重组设计缺陷导致下载吞吐量波动大这个问题提醒我们:吞吐量测试仅仅利用DUMeter来观察速率是远远不够的,必须关注TCP/IP的行为,否则原本通过吞吐量测试就可以发现的问题很容易被遗漏到网上。什么情况会触发上述IP分片重组出错呢?丢包!可是从抓包数据来看并没有丢包呀?正确答案是:曾经丢包!R6口1个IP分片的丢失会引发后续的同一ID的所有IP分片重组全部出错!【最终解决】BS修改IP分片重组算法,增加IP分片重组定时器,在一定时间内如果相应的另外1个IP分片没有到达就丢弃该IP分片,保证1个IP分片的丢失只影响这1个IP分片的重组,不影响同一ID的后续IP分片重组。背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page12目录4TCP原理3Socket原理12TCP抓包和分析工具6应用案例背景:为什么要学习TCP性能分析技术?5TCP问题定位思路和方法HUAWEITECHNOLOGIESCO.,LTD.Page13常用抓包工具背景TCP原理Socket原理应用案例工具Windows:Ethereal/Wireshark实质上是同一个软件,安装和使用操作都非常简单,是我们最常用的抓包软件。最初叫Ethereal,2006年起叫Wireshark。当时Ethereal的主要开发者决定离开原来供职的公司,并继续开发这个软件。但由于Ethereal这个名称的使用权已经被原来那个公司注册,Wireshark这个新名字也就应运而生了。Linux:tcpdumptcpdump-ieth2-s0-x-wfile.pcapport1812注:请自行替换eth2为实际的网卡编号Solaris:snoopsnoop-deth2-ofile.pcapport1812注:请自行替换eth2为实际的网卡编号HUAWEITECHNOLOGIESCO.,LTD.Page14TCP序号分析TCP序号分析:statistics-TCPstreamgraph-Time-SequenceGraph1)进行TCP序号分析时,光标要停在数据上,不要停在TCPACK上!2)TCP序号的概念,绝对序号和相对序号设置方法。3)图片的放大/缩小、平移:注意藏在后面的小窗口!4)数据关联:主窗口不见了怎么办?(老版本Ethereal存在该问题)5)TCP序号-时间图的具体含义参见:利用Ethereal进行TCP性能分析背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page15TCP吞吐量分析TCP吞吐量分析:statistics-IOgraphs可以分析总吞吐量和各TCP连接(最多4个连接)的吞吐量。注:我们做的一个二次开发版本可以分析最多9个连接的吞吐量。背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page16TCPRTT分析TCPRTT分析:statistics-TCPstreamgraph-RoundTripTimeGraph对TCP发端数据进行分析,得到RTT(包发出和收到TCPACK的时间差)。背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page17目录4TCP原理3Socket原理12TCP抓包和分析工具6应用案例背景:为什么要学习TCP性能分析技术?5TCP问题定位思路和方法HUAWEITECHNOLOGIESCO.,LTD.Page18TCP连接建立背景TCP原理Socket原理应用案例工具TCP连接建立过程客户端在通过TCP发送或接收数据之前,必须先建立TCP连接。TCP连接建立过程是通过三次握手实现的:[SYN]和[SYN,ACK]中会携带本端的MSS、接收窗口大小及窗口扩大因子,对端收到后,向本端发送数据时:TCP净荷大小会受到MSS的限制,TCP序号会受到接收窗口大小×窗口扩大因子的限制。注:对于FTP,数据连接有可能由服务器发起(主动模式),也可能由客户端发起(被动模式),具体参见:FTP主动模式和被动模式[SYN][SYN,ACK][ACK]客户端服务器HUAWEITECHNOLOGIESCO.,LTD.Page19TCP数据传输过程1、客户端和服务器的操作系统要为每个TCP连接分配对应的接收缓冲区和发送缓冲区。2、TCP负责将数据从发送端的TCP发送缓冲区发往接收端的TCP接收缓冲区。3、发送端的操作系统负责将上层应用的数据写入TCP发送缓冲区,接收端的操作系统负责将TCP接收缓冲区的数据送往上层应用。TCP接收缓冲区TCP发送缓冲区上层应用接收缓冲区上层应用发送缓冲区发送端OSTCP接收端OSTCP数据传输背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page20发端和收端的基本行为发端根据TCPACK发送数据,收端收到数据回复ACK。TCP基本行为背景TCP原理Socket原理应用案例工具收端:收2个报文回1个ACK发端:收到ACK后触发发包,最开始的每收到1个ACK发送3个报文,运行一段时间之后,TCP会进入一种稳定状态:接收端收2个报文回1个ACK,发送端收1个ACK发送2个报文。具体参见:深入解读TCP慢启动阶段的发包速率如果把TCP发端和收端之间的通道看作一个管道,TCP稳态情况下,流入这个管道的数据量和流出的数据量是相同的,换句话说管道中容纳的数据量是恒定的。Buffer带宽瓶颈接收端发送端TCPdataTCPackHUAWEITECHNOLOGIESCO.,LTD.Page21TCP稳态TCP序号-时间图,前面是慢启动阶段,之后进入稳态。后面在分析速率时,除非特别说明,否则指的都是稳态下的速率。TCP稳态速率背景TCP原理Socket原理应用案例工具HUAWEITECHNOLOGIESCO.,LTD.Page22TCP稳态速率TCP稳态下的速率,取决于TCP窗口大小和BDP的关系。TCP窗口BDP时:TCP窗口≥BDP时:TCP稳态速率背景TCP原理Socket原理应用案例工具TCP速率=TCP窗口/RTT0RTT=RTT0TCP速率=瓶颈带宽RTT=TCP窗口/瓶颈带宽HUAWEITECHNOLOGIESCO.,LTD.Page23什么是BDP?BDP:BandwidthDelayProduct,即带宽时延乘积。BDP=带宽×时延带宽:是指瓶颈带宽,无线网络中一般空口是瓶颈,因此对应空口带宽。时延:是指系统的环回时长RTT0,即:TCP发出一个数据包到收到对应ACK的时长,约等于PING环回时长。TCP稳态速率背景TCP原理Socket原理应用案例工具在TCP序号-时间图上,以带宽为斜率画一个直角三角形,其斜边的斜率等于带宽,水平直角边的长度等于时延RTT0,则垂直直角边的长度就等于BDP。HUAWEITECHNOLOGIESCO.,LTD.Page24TCP窗口BDP受限于TCP窗口大小,TCP速率达不到带宽。TCP稳态速率=TCP窗口/RTT0BDP/RTT0=带宽