流程在OVS处未按OpenFlow流程表

时间:2019-09-11 02:19:47

标签: sdn openflow openvswitch onos

我通过使用mininetONOSIperf做了一个小实验。

我想查看根据srcIP,dstIP,UDP,dstPort进行的流路由。

因此,我生成了UDP流(srcIP = 10.0.0.3,dstIP = 10.0.0.2,dstPORT = 50000)

然后我使用ONOS REST api将流规则添加到每个mininet交换机。

您可以在原始流程规则下面看到两个流程规则。

1)  cookie=0x4c0000ef7faa8a, duration=332.717s, table=0, n_packets=8974, 
n_bytes=557090858, idle_age=153, priority=65050,ip,nw_dst=10.0.0.2 
actions=output:4

2) cookie=0x4c0000951b3b33, duration=332.636s, table=0, n_packets=10, 
n_bytes=460,idle_age=168,priority=65111,udp,nw_src=10.0.0.3,nw_dst=10.0.0.2,
tp_dst=50000 actions=output:3

尽管2)流规则具有更高优先级的更多匹配字段,但流中的大多数数据包都符合1)流规则。

我用Wireshark检查流量是否正确生成。但是没有问题。(srcIP = 10.0.0.3,dstIP = 10.0.0.2,dstPORT = 50000)

怎么会发生?你能给我一些提示来解决问题吗?

感谢阅读!


nimdrak@nimdrak-VirtualBox:~$ sudo ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):
 cookie=0x4c0000ef7faa8a, duration=332.717s, table=0, n_packets=8974, n_bytes=557090858, idle_age=153, priority=65050,ip,nw_dst=10.0.0.2 actions=output:4
 cookie=0x4c0000ef7fb20c, duration=332.679s, table=0, n_packets=127, n_bytes=36814, idle_age=305, priority=65050,ip,nw_dst=10.0.0.4 actions=output:3
 cookie=0x4c0000ef7f9b86, duration=332.736s, table=0, n_packets=518, n_bytes=102960, idle_age=138, priority=65050,ip,nw_dst=10.0.0.254 actions=output:5
 cookie=0x4c0000ef7fae4b, duration=332.698s, table=0, n_packets=270, n_bytes=49059, idle_age=138, priority=65050,ip,nw_dst=10.0.0.3 actions=output:2
 cookie=0x4c0000ef7fa6c9, duration=332.751s, table=0, n_packets=125, n_bytes=36646, idle_age=305, priority=65050,ip,nw_dst=10.0.0.1 actions=output:1
 cookie=0x10000487f5557, duration=348.362s, table=0, n_packets=285, n_bytes=23085, idle_age=66, priority=40000,dl_type=0x88cc actions=CONTROLLER:65535
 cookie=0x10000487f63a1, duration=348.362s, table=0, n_packets=285, n_bytes=23085, idle_age=66, priority=40000,dl_type=0x8942 actions=CONTROLLER:65535
 cookie=0x10000488ebd5d, duration=348.362s, table=0, n_packets=12, n_bytes=504, idle_age=148, priority=40000,arp actions=CONTROLLER:65535
 cookie=0x10000464443e2, duration=348.362s, table=0, n_packets=0, n_bytes=0, idle_age=348, priority=5,arp actions=CONTROLLER:65535
 cookie=0x4c0000951a5275, duration=332.671s, table=0, n_packets=0, n_bytes=0, idle_age=332, priority=65050,udp,nw_src=10.0.0.3,nw_dst=10.0.0.1,tp_dst=50000 actions=output:1
 cookie=0x4c0000951b3b33, duration=332.636s, table=0, n_packets=10, n_bytes=460, idle_age=168, priority=65111,udp,nw_src=10.0.0.3,nw_dst=10.0.0.2,tp_dst=50000 actions=output:3

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

在我写评论时,我发现只有小的UDP数据报正确地命中了流表。

换句话说,这是因为UDP数据报太大。

我设置了UDP数据报63k。然后在IP层进行分段。

然后只有第一个数据包具有UDP标头信息,并且只有该数据包可以正确地命中流表。

为解决此问题,我使用了巨型帧,这意味着OVS可以处理具有较大MSS的数据包。

我们还应该设置NIC MSS。 (http://docs.openvswitch.org/en/latest/topics/dpdk/jumbo-frames/

我们更新了2.6.0以上的OVS版本 (最好使用http://docs.openvswitch.org/en/latest/intro/install/general/比我们可以谷歌搜索的其他网站)

设置巨型帧后,我们可以看到流表对较大的UDP数据报正常工作。