欢迎关注:1,欢迎关注本博客,你可点击右手边的【QQ邮件订阅】订阅本博客!2,本博客推出江湖救急计划,主要为工作中遇到疑难杂症的兄弟提供远程技术支持和分析,如有需要,请在江湖救急计划页面给我留言!

F5负载均衡抓包方法

作者:易隐者 发布于:2012-10-17 12:48 Wednesday 分类:参考资料

登录F5

1,超级终端的登录:
通过Console电缆一端连接BIGIP,一端连接PC机的串口,然后打开超级终端,建立一个连接,超级终端中COM的参数设置如图: 

点击查看原图

不论是从Console口登陆,还是用SSH从网络登陆,BIG-IP的缺省登陆帐号与密码如下:
缺省登陆帐号:root
缺省登陆密码:default
输入帐号和密码后,将见到以下界面: 

点击查看原图

缺省的终端类型为vt100,回车后如图: 

点击查看原图

F5下的tcpdump的使用

1,web管理界面下的抓包
Tcpdump 工具在V4.5 之前只能在CLI 下使用,V9 提供了图形界面下的Tcpdump,在 System->support 界面下,我们可以直接使用tcpdump 工具: 

点击查看原图

2,F5命令行下Tcpdump的使用示例:
当业务无法正常工作时,经常需要在BIG-IP上抓包进行分析定位是什么原因导致数据包没有被常转发。BIG-IP上提供了TCPDUMP抓包分析工具。
TCPDUMP是Unix系统常用的报文分析工具,TCPDUMP经常用于故障定位,如会话保持失效、SNAT通信问题等。本文讲述TCPDUMP命令的基本用法,更详细的使用说明请参见“man tcpdump”。
命令语法:
       tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ]
               [ -i interface ] [ -m module ] [ -r file ]
               [ -s snaplen ] [ -T type ] [ -w file ]
               [ -E algo:secret ] [ expression ]
其中:
 -i 报文捕获监听的接口,如果不指定,默认为系统最小编号的接口(不包括loop-back接口),一般对指定Vlan名称进行监控,如-i external 是对external vlan进行监控;也可以对指定端口进行监控如 –i 1.1。注意:当vlan 名称过长时,-i后面直接用vlan名称,tcpdump会出现错误提示,这时需要将vlan名改由vlan加vlan ID代替。如有一vlan名称为bip_external,vlan ID为2022,如要对bip_external vlan进行监听,需采用-i vlan2022的方式。
 -nn 不将IP地址或端口号转化为域名或协议名称
注:与BIG-IP 4.5版本的TCPDUMP命令不一样,在BIG-IP V9里面必须用两个nn才能使IP地址与端口不会被转化为域名或协议名称显示。
 -r 从文件中读取(该文件由-w选项创建)
 -s 确定捕获报文大小
 -w 直接将捕获报文写入文件,而不是对其进行解析并通过屏幕显示(与-r选项对应)
注:如果要将TCPDUMP所抓的包保存到文件,建议采用-s1600 –w /var/tmp/filename的方式,-s1600可以保证抓取完整的数据包,而/var/tmp使抓包文件保存在/var/tmp目录。

 -x 每个报文以十六进制方式显示
 -X 每个报文同时以文本和十六进制显示
 expression 匹配表达式的分组将进行解析。如果不指定表达式,系统对所有分组进行捕获分析。复杂表达式可以使用“and”与、“or”或以及“not”非操作进行组合。表达式有三种:
 type  三种种类:host、net和port。比如:host 10.1.1.1。如果不指定类型,默认为host。
 dir  有src、dst、 src or dst和src and dst四种方向。默认为src or dst,即双向。
 proto 常见协议有:ip、arp、tcp、udp、icmp等。如果不指定协议类型,默认为所有协议。 
举例1:对external接口主机139.212.96.2并且端口为1433的流量进行监控。端口不指定tcp和udp,默认为同时对tcp和udp进行报文捕获。本命令不解析IP地址/端口号为主机名/服务名称,同时显示报文十二进制和文本信息,报文最大为1500字节。
f5-1:~# tcpdump -i external -nn -X -s 1600  port 1433 and host 139.212.96.2     
tcpdump: listening on external                                                 
21:48:41.295546 139.212.96.2.1201 > 10.75.9.44.1433: . 302192826:302192827(1) ac
k 558871968 win 64360 (DF)                                                     
0x0000   012c 0800 4500 0029 38cf 4000 7f06 c3b2        .,..E..)8.@.....       
0x0010   8bd4 6002 0a4b 092c 04b1 0599 1203 18ba        ..`..K.,........       
0x0020   214f b5a0 5010 fb68 a926 0000 00               !O..P..h.&...          
21:48:41.296015 10.75.9.44.1433 > 139.212.96.2.1201: . ack 1 win 64636 (DF)    
0x0000   012c 0800 4500 0028 cb2d 4000 7f06 3155        .,..E..(.-@...1U       
0x0010   0a4b 092c 8bd4 6002 0599 04b1 214f b5a0        .K.,..`.....!O..       
0x0020   1203 18bb 5010 fc7c a812 0000 0000 0000        ....P..|........       
0x0030   0000                                           ..                     
21:48:50.701130 139.212.96.2.1206 > 10.75.9.44.1433: . 304974934:304974935(1) ac
k 565108263 win 64882 (DF)                                                     
0x0000   012c 0800 4500 0029 38f7 4000 7f06 c38a        .,..E..)8.@.....       
0x0010   8bd4 6002 0a4b 092c 04b6 0599 122d 8c56        ..`..K.,.....-.V       
0x0020   21ae de27 5010 fd72 0a6b 0000 00               !..'P..r.k...          
21:48:50.702567 10.75.9.44.1433 > 139.212.96.2.1206: . ack 1 win 65267 (DF)    
0x0000   012c 0800 4500 0028 d3a6 4000 7f06 28dc        .,..E..(..@...(.       
0x0010   0a4b 092c 8bd4 6002 0599 04b6 21ae de27        .K.,..`.....!..'       
0x0020   122d 8c57 5010 fef3 08ea 0000 0000 0000        .-.WP...........       
0x0030   0000                                           ..                     

举例2:对internal接口主机172.31.230.53和172.31.230.51之间端口8080的流量进行分组捕获。本命令不解析IP地址/端口号为主机名/服务名称,报文最大为1600字节,捕获信息以“/var/tmp/intdump”文件保存:
tcpdump -s 1600 -i internal -w /var/tmp/intdump  host 172.31.230.53 and host 172.31.230.51 and port 8080
如果查看该捕获文件,请用tcpdump –r  /var/tmp/intdump命令。也可以将捕获的文件下载下来用Ethereal工具解包分析。
Tcpdump的具体使用语法参见tcpdump使用手册

F5命令行下使用tcpdump的常见问题

1,对某一Virtual Server用TCPDUMP命令无法抓到包如何处理?
可能是该Virtual Server的属性中选用了Performance Layer4类型,导致数据包由四层加层ASIC芯片处理而没有流经CPU引起,碰到这种情况,选取该Virtual Server将type由Performance Layer4临时改为Standard再来用TCPDUMP命令抓包,抓包以后,改回到Performance Layer4。
2,TCPDUMP出现“truncated-ip - 1215 bytes missing!”信息是不是说明网络上有丢包?
在BIG-IP V9里面出现”Truncated-IP xxxx bytes missing”信息,一般来说并不是网络上有丢包引起的,而是在执行TCPDUMP命令时没有加上 –s0或-s1600参数时,而数据包大小超过TCPDUMP缺省的抓包大小(如果不加-s0或-s1600参数,则缺省的每个数据包只抓前面400byes),就会出现truncated-ip的情况。出现这种情况,只需要重新输入tcpdump命令,加上-s0或-s1600即可。
3,TCPDUMP 命令中的-i interface中的interface用VLAN名称(如external或internal)与接口编号(1.1或2.1)有什么区别?
如果采用VLAN名称作为-i的参数,TCPDUMP收集的数据包是经由内部接口到达TMM进程经由中央CPU处理的数据包。
采用VLAN名称作为-i参数的局限性在于,由于PVA四层加速芯片时位于BIG-IP的交换板(Swithboard)上,并不需要经由主机板与交换机板的内部接口到达中央CPU,因此TCPDUMP无法抓取这些四层加速的数据包。
因此采用VLAN名称作为-i的参数一般是用于对采用Standard作为Virtual Server类型的应用抓包时采用。

注:如果Virtual Server是用PVA四层加速芯片作加速处理,则在Virtual Server的属性中PVA Acceleration显示为Full。
(The PVA handles accelerated traffic in the following order:
• The PVA receives accelerated traffic from the switch subsystem
• The PVA transforms the packet in order to redirect the packet to the appropriate pool member
• The PVA sends the packet back to the switch subsystem
Fully accelerated traffic never reaches the internal trunk and is not processed by TMM. )
 如果采用接口编号作为-i的参数,则进出该接口的数据包将先被镜像给SCCP(SCCP是BIG-IP的管理子系统),然后送到主机板上通过TCPDUMP抓包。由于是直接镜像了端口,因此经由四层加速芯处理的数据包也能被TCPDUMP获取。
采用接口编号作为-i的参数的局限性在于,由于数据包是经由SCCP(管理子系统)转发给主机板,数据包的处理速度有限,每秒只能处理200个数据包。因此采用接口编号作为-i的参数一般是用于做基本网络故障诊断时。
(When tcpdump is run on an interface, the packet is copied on switch ingress to the SCCP, which then sends it to the host to be captured by tcpdump.
Limitations
Running tcpdump on a switch interface is rate-limited to 200 packets per second. Therefore, if you run tcpdump on an interface that is processing more than 200 packets per second, the captured tcpdump file will not include all of the packets.
For example, the following command will capture PVA accelerated traffic, but the syntax will result in a rate limit of 200 packets per second。)
注:对于采用了PVA四层加速芯片加速处理的Virtual,而且网络流量又比较大时,如果需要进行抓包分析,建议在上一级交换机作端口镜像,将网络流量输出到外部的抓包主机上处理。

4,TCPDUMP 命令中出现“pcap_loop: Error: Interface packet capture busy”错误信息?
同时执行多个TCPDUMP,出现“pcap_loop: Error: Interface packet capture busy”错误,例如:
[root@bigip1:Active] config # tcpdump: listening on 1.1
[root@bigip1:Active] config # tcpdump -ni 1.3 -s 1600 -X -w/var/tmp/v741-E13.dmp port 22 &
[3] 6813
tcpdump: listening on 1.3
[root@bigip1:Active] config # tcpdump -ni 1.4 -s 1600 -X -w/var/tmp/v742-E14.dmp port 22 &
[4] 6820
tcpdump: listening on 1.4
[root@bigip1:Active] config # tcpdump: pcap_loop: Error: Interface packet capture busy
tcpdump: pcap_loop: Error: Interface packet capture busy
这种情况一般只发生在TCPDUMP -i参数采用接口编号时。原因主要在于当采用接口编号作为-i参数时,是通过BIG-IP的二层芯片将该接口的数据包镜像到中央CPU作处理。而BIG-IP的二层芯片的接口镜像功能不支持多个接口同时镜像,因此如果同时执行多个用接口名称作-i参数的TCPDUMP命令,就会出现Interface packet capture busy的信息。
注:对于采用VLAN名称作为TCPDUMP –i参数,则不存在这个问题,可以支持对多个VLAN同时执行TCPDUMP抓包命令。
(Currently only one tcpdump session is possible at a time on a switch interface (tcpdump on vlan alllows multiple sessons).  This is due to a limitation of the Broadcom SDK, but we may be able to extend the SDK to support multiple sessions.
The root difficulty here is that mirrored packets don't carry a note saying "this is where I came from." In a Broadcom switch fabric we can mirror from multiple ports, and all the packets will funnel to the host -- but we don't know which tcpdump session to route them to. One idea involves a layer 2 lookup on each packet performed by the bcm56xx daemon on the sccp. This would be intense so we continue to have this limitation.)

阅读全文>>

标签: 负载均衡 F5 tcpdump 抓包

评论(0) 引用(0) 浏览(54843)

【转】负载均衡故障诊断:一个MSS值引发的疑案

作者:易隐者 发布于:2012-9-5 22:39 Wednesday 分类:案例讨论

【我的点评】:

1,此案例为服务器端系统异常MSS通告导致的业务应用故障,的确属于疑难故障范畴;

2,关于MSS的知识点,大家可参考本博客《TCP MSS与PMTUD》一文;

3,此案例充分证明,在遇到疑难故障时,站在原始报文交互的角度做深入的解码分析才是分析定位的根本之道;

4,此案例中,使用了正常时与异常时的对比分析法,关于对比分析法,大家可参考本博客《疑难网络故障的分析方法和原理之对比分析法》一文;

5,个人认为,此案例还可以做进一步的分析,如原作者开篇所言“很多东西都在互相影响”,既然经过负载均衡设备访问就出现这种问题,那么是否是负载均衡在发给服务器端的SYN报文跟客户端直接发给服务器端的SYN报文某些地方存在差异导致的呢?

【原文链接】:

http://virtualadc.blog.51cto.com/3027116/692407

【原文全文】:

负载均衡设备位于客户端和真实服务器之间,一旦访问发生问题,在客户经过简单诊断后,负载均衡设备往往会成为首要被怀疑的对象。客户一般这样质疑:为什么我直接访问服务器没有问题,通过你的设备访问就不行了呢? 质疑的确实有道理,但大多数事情往往不是非一即二这样简单,有很多东西都在互相影响,这就使得真相迷雾重重。

某一天接到某客户报障,说是通过负载均衡设备访问某一业务的时候,页面无法打开或者等半天后只打开了部分页面,而客户端如果直接访问服务器,则可以顺利打开页面。

事情很明显,这中间肯定是有问题存在。登录负载均衡设备检查配置和log,并取一些内部诊断信息,没发现什么错误,只剩下唯一的办法:去客户现场抓包分析。

于是开始抓包,同时抓回了出现问题的服务的数据包和其他没有出现问题的服务的数据包。

经过分析,果然有所不同,下面是有问题的抓包内容(抓包1):


10.52.127.108为客户端地址

10.0.1.112VIP

10.0.1.99为真实服务器地址

由于是以旁路方式部署,需要转换源IP, 10.0.1.123为经过负载均衡设备转换的客户端地址(snat地址)

负载均衡的VIP配置为HTTP模式,这表示负载均衡设备是以proxy的方式来处理连接,也就是对每个连接,客户端先跟负载均衡设备完成一个三次握手,然后负载均衡设备再跟真实服务器完成一个三次握手。

访问流程:

1) 10.52.127.108访问10.0.1.112

2) 负载均衡设备与客户端完成三次握手

3)然后负载均衡设备把源IP: 10.52.127.108转换成10.0.1.123向服务器10.0.1.99发起连接

4)服务器10.0.1.99与负载均衡设备完成三次握手。

下图是访问没有问题的服务的抓包内容(抓包2):


10.0.76.2为客户端地址

10.0.1.113VIP

10.0.1.104为真实服务器地址

由于是以旁路方式部署,同样需要把客户端源IP转换为 10.0.1.123

访问流程跟抓包1相同。

仔细比较两个抓包内容,终于发现了差异出现在MSS值的协商上。

首先我们描述一下Client访问Server过程中MSS值的协行过程:

1) 客户端在向服务器发出SYN包的时候,会带上客户端设备可以接受的最大MSS值,意思是服务器发送到客户端的每个包的内容大小都不能大于这个值。

2) 服务器向客户端回复SYN,ACK包的时候,会比较客户端发来的MSS值和自己设定的MSS值,取两者的最小值作为自己可以接受的最大MSS值返回给客户端,意思是告诉客户端发送到服务器的每个包的内容大小都不能大于这个值。

3) 在实际的传输中,双方往往会取二者中的最小值作为双方互相发送的包大小的最大值。

基于以上通信流程我们来分析一下以上的两个抓包内容:

抓包1

客户端发出SYN包,标明自己可接受的最大MSS值为1460,负载均衡设备回应自己可接受的MSS值为1400,协商成功后,双方交互的包大小不会大于1400

负载均衡设备向服务器发出自己的可接受MSS值为1380,服务器回应自己可接受的MSS120,协商成功后,负载均衡设备发给服务器的包就不能大于120了。

问题正是出在最后跟服务器协商出的大小为120MSS值上。

我们看到客户端向负载均衡设备发出的第一个请求包大小为905字节,这个包大小不大于1400,所以负载均衡设备接收到了,接着负载均衡设备要把该请求发给选定的服务器10.0.1.99,由于服务器可接收的包不能大于120,所以负载均衡设备只能把客户端发来的请求包分成八个小包发送给服务器,然后一些不可控制的问题就出现了,客户端发出请求包后,需要等待应答,但由于负载均衡设备把一个包分解成8个包后,使得负载均衡设备跟服务器之间的交互时间变长,这个过程中客户端可能会超时重发请求包,而负载均衡设备跟服务器之间那八个小包的处理还可能出现丢包,重传,重装等问题。最关键是客户端在该连接的所有请求发完后如果是发送一个RST包来关闭连接,那么即使该连接上还有内容没传输完,该条连接也会关闭,由于一个请求包分成太多的小包传输,一旦发生客户端发出RST包的这种情况,基本上都会导致数据不能传输完毕,以上种种原因导致了页面不能打开或者不能完全打开的现象。

我们再分析抓包2

客户端发出SYN包,标明自己可接受的最大MSS值为1460,负载均衡设备回应自己可接受的MSS值为1400,协商成功后,双方交互的包大小不会大于1400。这一点跟抓包1相同。

负载均衡设备向服务器发出自己的可接受最大MSS值为1380,服务器回应自己可接受的MSS1380,协商成功后,所以双方会以1380MSS值互相通信。

无论是客户端跟负载均衡设备还是负载均衡设备跟服务器之间,都是一个请求一个应答就能完成交互,不会发生要把包分割的现象,所以不会出现抓包1所出现的问题。

网络通信中由于MTU的设置不当引发的问题屡见不鲜,比如在存在ADSL设备的情况下,如果把设备的MTU设置成1500, 往往客户端的访问会出现问题,这是因为ADSLPPPoE协议在MTU中占去8个字节,也就是ADSLMTU最大值最多为1492, 如果客户端跟服务器设的很大,传输的数据包恰好大于1492字节,将导致数据包不能通过。  在程序设计中,程序所取MSS值往往是本机的MTU-40TCPIP头各占20个字节,MTU一般设成1500), 所以基本上所有设备所能接受的最大MSS值不可能会大于1500-40=1460, 那么再考虑到网络中可能会存在PPPoEVPN等设备会占用更多MTU字节,所以各家网络设备厂商提供的网络设备会进一步减小MSS值的设置,一般网络设备设定的MSS值大小为1400左右。

显然1400字节左右的MSS值是网络通信中的正常值,所以服务器返回一个120字节的MSS值这是一个不正常的现象,所以问题的根源在于服务器返回的MSS值不合适,那么这个值是谁返回的呢? 是服务器,也就是说该返回哪个值主动权在于服务器,所以我们诊断问题原因出在服务器上。

接下来的处理需要去检查服务器为什么返回这个值,跟负载均衡设备无关了。但仍然有追踪的价值,因为服务器并不是一直返回120这个值,而是有些时候会协商成1380,这时候访问是正常的,有些时候是返回120,这时候就自然访问不正常。

客户的服务器装的是HP操作系统,应用软件是Oracleebs,在我们把问题定位到了服务器后,客户也找了HP的工程师来检查和分析,但无法找出原因。

个人分析问题原因可能出现在如下几个方面:

1) HP操作系统或者网卡驱动程序关于MTU的定义存在可变值,或者

2) Oracle ebs的底层通信程序在MSS值的协商时,会根据一些条件改变MSS

以上仅仅是猜测,因为没有以上两个厂家的资深工程师的深度参与,无法最终定位结果,所以该问题成为了一个疑案。

阅读全文>>

标签: 疑难故障 负载均衡 tcpdump MTU MSS 抓包 A10

评论(0) 引用(0) 浏览(9865)

[转]F5负载均衡环境下某应用故障分析案例

作者:易隐者 发布于:2012-7-18 13:45 Wednesday 分类:案例讨论

       本文来自互联网,非我原创,原文章名为《高级TCP/IP网络排错》,该案例出自其第三节:用OmniPeek解决网络中的难题。

       如该案例作者看到我的转载请跟我联系,可以做个朋友,切磋一下技术问题,如果哪位网友知道该案例的原作者,也烦请留言告知。

【我的点评】:

1,充分运用了中间设备自带的抓包功能(对中间设备自带抓包功能感兴趣的兄弟,请参阅我的文章《常见系统和网关设备自带抓包功能介绍及操作指南》),提高了分析效率;

2,整个过程使用对比分析法(参见我的文章《疑难网络故障的分析方法和原理之对比分析法》),发现进出F5报文的差异,快速界定异常问题产生的原因是F5、客户端还是服务器;

3,在做数据包分析之前,确定了业务报文交互路径,明确可能的故障点,为下一步的排查提供了基础,但是从作者给的拓扑结构上看,出来F5之外,这个数据路径应该还会经过那台旁接的防火墙;

4,“F5日志中报端口无法到达”,此问题不太像是指物理端口不可达,个人感觉是指UDP端口不可达的可能性更大一些;

阅读全文>>

标签: 负载均衡 F5 omnipeek RST 应用故障 端口不可达

评论(3) 引用(0) 浏览(18569)

F5端口镜像设置

作者:易隐者 发布于:2012-5-12 16:45 Saturday 分类:参考资料

       BIG –IP LTM  镜像功能默认是禁用的,我们可以在需要的时候对其进行开启。其开启过程主要如下:

       配置镜像端口 

1、 在主界面选择-NETWORK  展开    点击  INTERFACES 
2、 在菜单栏中,单击  INTERFACE MIRRORING  将镜像端口界面打开 
3、 从INTERFACE MIRRORING STATE  列表中。选择  ENABLED  开启 
4、 显示DESTINATION INTERFACE  列表 
5、 对于  MIRRORED INTERFACES SETTING,点击一个接口 
    选择接口编号  并使用移动按钮移动(<<)  填加多个被镜像端口 重复此步骤 
6、 点击更新   

点击查看原图

点击查看原图

点击查看原图

       设置完后 点 UPDATE 不需要重启。 

阅读全文>>

标签: 端口镜像 负载均衡 F5

评论(0) 引用(0) 浏览(8617)

A10负载均衡抓包方法

作者:易隐者 发布于:2012-3-26 22:53 Monday 分类:参考资料

1,登录方式

(1)Console方式设置说明
COM的参数设置如下图所示:

点击查看原图

AX的默认用户名为:admin,默认密码为:a10。
(2)SSH/Telnet方式登录说明
AX的MGMT接口的默认IP地址为:172.31.31.31/24。将PC的IP地址配置为与AX的MGMT接口同网段的地址(如:172.31.31.33/24)。采用SSH客户端软件(如:PuTTY)等访问AX的MGMT接口地址。

CLI命令行模式说明

AX采用类似Cisco的命令行模式,便于工程师操作和维护。
1) 当通过SSH客户端软件或远程终端软件登录AX时,并输入用户认证信息后,则进入AX的用户模式:
2) 
jjwxc-2>
3) 在用户模式下,AX只允许使用一些基本的命令,查询状态基本信息。具体可使用的命令列表可通过“?”来查询。
jjwxc-2>?
  axdebug     AX Debug Commands
  enable      Turn on privileged commands
  exit        Exit from exec
  help        Description of the Interactive Help System
  no          Negate a command or set its defaults
  ping        Send ICMP echo messages
  show        Show Running System Information
  ssh         Open an ssh connection
  telnet      Open a telnet connection
  traceroute  Trace route to destination

Debug抓包分析命令

抓包命令设置如下:
(1)首先设置过滤条件:
Debug packet [ l3 ip <clientip vip or serverip> ] [ l4 TCP/UDP  port  端口号 ]
(2)启用抓包输入
             Debug monitor
 (3)分析抓包输出结果
 (4)结束抓包输入:
            No debug all

阅读全文>>

标签: 负载均衡 debug 抓包 A10 monitor

评论(0) 引用(0) 浏览(15187)

Powered by 易隐者 基于emlog 皖ICP备12002343号-1