若业务出现异常并且怀疑是网络问题导致,则可以通过抓包的方式排查分析具体的原因 。
如果网络业务出现问题,可以使用抓包工具在报文转发路径上的各个端口抓包,查找报文丢弃的具体位置,进而分析问题原因。
在CAS虚拟化环境下,典型组网如下图所示(这里选取虚拟机作为源端的场景为例进行分析说明):
(1) CVK上的虚拟机作为源端发起请求,报文通过虚拟机内部的eth3发送出去。
(2) 虚拟化层将报文转发给vnet0接口,ovs在收到报文后会去匹配流表,并根据流表规则转发报文,此案例中,报文会被转发到物理网口。由于vswitch配置了聚合,报文会根据聚合的hash规则,转发到对应的物理网口上,并最终发送到CVK外部。
(3) 报文通过中间网络(交换机,网关,防火墙等设备),到达目的端设备(目的端可以是CVK,虚拟机或者其他设备,甚至是公网服务器)。
(4) 目的端设备在收到请求报文之后会作出应答,发送应答报文。
(5) 应答报文通过中间网络返回到CVK的物理网卡并进入ovs,ovs收到报文后会匹配流表规则,并根据流表规则进行转发。此案例中,报文会转发到vnet0
(6) 虚拟化层将报文转发到虚拟机内部的eth3,完成这一次的网络通信交互。
1. 虚拟机内部网卡上抓请求包:
虚拟机内部网卡上抓包,查看源端的请求报文是否已经发送出去。
如果请求报文未发送出去,则可能是如下原因:
• 请检查虚拟机内的业务程序运行是否正常。
• 请检查虚拟机内的网络配置是否正确,报文是否从其他网卡设备发送出去了。
• 请检查虚拟机内部是否存在安全策略,比如iptables是否开启并将报文拦截。
• 其他原因。 如果请求报文已经发送出去,则进入下一步;
2. CVK的vnet口上抓请求包:
在CVK上使用tcpdump命令对虚拟机的虚拟网卡对应的vnet端口抓包,查看vnet的转发是否正常,具体操作如下: CVK后台执行命令:/opt/bin/ovs_dbg_listports可以罗列出CVK上当前运行的所有虚拟机与vnet的对应情况,如下:
根据网卡的MAC地址,找到虚拟网卡在CVK上对应的vnet,然后针对vnet进行抓包,查看请求报文是否已经发送出去。
如果请求报文未从vnet发送出去,则可能是如下原因:
• 查看是否有安装杀毒软件
• 查看vnet端口状态是否正常:ovs-vsctl list interface vnetx
• 查看虚拟化层是否存在错误。
• 其他原因 如果请求报文已经发送出去,则进入下一步;
3. CVK的物理口上抓请求包:
在CVK上使用tcpdump命令对虚拟交换机绑定的物理网口抓包,查看物理口的转发是否正常。
虚拟交换机配置了聚合的情况下,抓包有特殊要求。
如果虚拟交换机配置了静态主备负载分担聚合,则需要在主链路上抓包;
如果虚拟交换机配置的是其他类型的聚合,则需要同时在所有的物理口上抓包,且报文从其中的一个网卡发送出去就是正常的。
命令ovs-appctl bond/show可以查看聚合配置信息:
如果请求报文未从eth发送出去,则可能是如下原因:
• 查看是否被ovs流表规则丢弃,需要查看vnet端口是否配置了ACL规则。
• CVK上是否有配置安全策略,比如iptables。
• 其他原因 如果请求报文已经从eth发送出去,也需要注意以下问题:
• 需要确认报文的vlan tag是否正确。
• 虚拟交换机聚合协商是否成功。
• 查看一下syslog中是否存在网卡的驱动报错信息。
如果都没有问题,则报文已经发送出去并进入到中间网络中,抓包分析需要进入下一步排查。
4. CVK的物理口上抓回应包:
抓包过程与上述CVK的物理口上抓请求包相同,对于虚拟交换机配置了聚合的情况:
• 如果虚拟交换机配置了静态主备负载分担聚合,则需要在主链路上抓包;
• 如果虚拟交换机配置的是其他类型的聚合,则需要同时在所有的物理口上抓包,且报文在其中的一个网卡接收到就是正常的。
如果在物理网卡上没有抓到回应报文,说明网络问题发生在CVK外部,大概有如下一些可能:
• 交换机的配置:Vlan,聚合。
• 物理网卡连接的交换机是否正确。
• 中间网络的网关配置是否正确,报文是否正常转发。
• 中间网络是否有安全设备,比如防火墙,是否是安全设备将报文拦截。
• 目的端没有收到或者没有发送回应报文。此时需要在目的端抓包分析。
• 其他原因。 如果在物理网卡上抓到了回应报文,则进入下一步分析。
5. CVK的vnet口上抓回应包:
抓包过程与上述CVK的vnet上抓请求包相同。 如果在vnet口上没有抓到回应报文,可能的原因:
• 报文的vlan tag与vnet的Vlan不符。
• ovs流表丢弃,需要查看vnet上的ACL配置。
• 查看ovs的MAC表: ovs-appctl fdb/show vswitch_name,看是否是虚拟交换机MAC表存在问题。
• 其他原因。
如果在vnet口上抓到了回应报文,则进入下一步分析。
6. 虚拟机内部网卡上抓回应包:
抓包过程与虚拟机内部网卡上抓请求包相同。 如果在虚拟机内部网卡上没有抓到回应报文,可能的原因:
• 查看一下,网卡状态是否正常,虚拟机内部日志是否存在网卡驱动报错信息。
• 使用ifconfig vnet查看对应的vnet上是否存在tx drop统计,并且tx drop的数据是否持续增加。若tx drop持续增加,则可能是虚拟机内部收包不及时导致报文在vnet上积压并丢包。
• 其他问题。
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作