我通过使用mininet
,ONOS
,Iperf
做了一个小实验。
我想查看根据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
答案 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数据报正常工作。