如何配置流表使数据包返回发送来的节点
2019-01-14 本文已影响1人
顽强的猫尾草
假设有如图所示的拓扑,由 Mininet 创建,链路都是双向的,交换机通过控制器下发的流表控制数据包流向。
若需要配置这样一条路径:s1→s2→s4→s2→s3。s1→s2 与 s2→s3 的流表无需赘述,关键是 s2→s4→s2 这一段,怎么才能让 s4 发回到 s2 呢?
试过的不可行方法
单纯地给 s4 配置这样一条流表是行不通的:
cookie=0x0, duration=22.849s, table=0, n_packets=0, n_bytes=0, idle_age=22,
priority=3,udp,in_port=1,nw_src=10.0.0.18,nw_dst=10.0.0.26 actions=output:1
出端口等于入端口,交换机能接收到数据包,并不会保存这份数据包然后将它从入端口转发出去。
同理设置流表中的动作为 OFPP_IN_PORT 也不行(所以这个选项到底是用在哪的)。
可行的方法
把需要折返的链路看作单向链路,在 s2 与 s4 之间建立两条连线,如图所示。
给 s4 配置流表:
cookie=0x0, duration=22.849s, table=0, n_packets=0, n_bytes=0, idle_age=22,
priority=3,udp,in_port=2,nw_src=10.0.0.18,nw_dst=10.0.0.26 actions=output:1
给 s2 配置流表:
cookie=0x0, duration=22.849s, table=0, n_packets=0, n_bytes=0, idle_age=22,
priority=3,udp,in_port=1,nw_src=10.0.0.18,nw_dst=10.0.0.26 actions=output:3
cookie=0x0, duration=22.849s, table=0, n_packets=0, n_bytes=0, idle_age=22,
priority=3,udp,in_port=2,nw_src=10.0.0.18,nw_dst=10.0.0.26 actions=output:4
这样才可以实现数据流的折返。