OVS 流表轨迹入门及典型场景举例
一、 流表轨迹入门
在数据中心网络中,SDN控制器通过向OVS交换机下发OpenFlow流表,指导报文转发。在OVS中,如何观察某个特定报文在OpenFlow流表pipeline中的处理流程?如何快速定位因流表问题导致的流量不通?
Open vSwitch (OVS)是一种可编程的软件交换机,可以在每个报文级别执行操作。本文档介绍如何使用跟踪工具了解数据包在通过数据平面时发生了哪些处理,及报文在pipeline中的处理流程,及快速定位因流表问题导致的流量问题。
OpenFlow规范中定义了流水线式的处理流程,报文匹配处理流程如下图所示:
ovs-vswitchd(8)手册页描述了ofproto/trace命令,在Open vSwitch中跟踪的基本用法。
二、 典型场景举例
ARP
ovs-appctl ofproto/trace br-int in_port=4,dl_src=[*],dl_dst=[*],arp,arp_spa=[*],arp_tpa=[*],arp_op=1,arp_sha=[*],arp_tha=[*] -generate
DHCP
ovs-appctl ofproto/trace br-int in_port=4,dl_src=[*],dl_dst=[*],ip,nw_src=[*],nw_dst=[*],nw_proto=17,udp_src=68,udp_dst=67 -generate
ICMP
ovs-appctl ofproto/trace br-int in_port=1,dl_src=[*],dl_dst=[*],ip,nw_src=[*],nw_dst=[*],nw_proto=1 -generate
ICMP6
ovs-appctl ofproto/trace br-int in_port=1,dl_src=[*],dl_dst=[*],ipv6,ipv6_src=[*],ipv6_dst=[*],nw_proto=58 -generate
TCP
ovs-appctl ofproto/trace br-int in_port=1,dl_src=[*],dl_dst=[*],ip,nw_src=[*],nw_dst=[*],nw_proto=6,tcp_src=2050,tcp_dst=22 -generate
TCP6
ovs-appctl ofproto/trace br-int in_port=1,dl_src=[*],dl_dst=[*],ipv6,ipv6_src=[*],ipv6_dst=[*],nw_proto=6,tcp_src=2050,tcp_dst=22 -generate
UDP
ovs-appctl ofproto/trace br-int in_port=1,dl_src=[*],dl_dst=[*],ip,nw_src=[*],nw_dst=[*],nw_proto=17,udp_src=2050,udp_dst=22 -generate
UDP6
ovs-appctl ofproto/trace br-int in_port=1,dl_src=[*],dl_dst=[*],ipv6,ipv6_src=[*],ipv6_dst=[*],nw_proto=17,udp_src=2050,udp_dst=22 -generate
三、 小技巧
如果不知道如何构造流表轨迹命令行,则可以结合16进制字节流方式使用
ovs-appctl ofproto/trace br-int in_port=4 ffffffffffffd4d25251a2b1080045000148791000008011c09500000000ffffffff004400430134b31901010600e7bb0c070000000000000000000000000000000000000000d4d25251a2b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501013d0701d4d25251a2b10c0b77616e67686f6e676c61693c084d53465420352e30370e0103060f1f212b2c2e2f7779f9fcff0000000000000000
解析后:
Flow: udp,in_port=4,vlan_tci=0x0000,dl_src=[*],dl_dst=[*],nw_src=[*],nw_dst=[*],nw_tos=0,nw_ecn=0,nw_ttl=128,tp_src=68,tp_dst=67
如有疑问,请留言讨论。