所谓流表,其实可被视作是SDN对网络设备的数据转发功能的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层的IP地址路由表,SDN交换机中使用的流表也是如此,不过在它的表项中整合了网络中各个层次的网络配置信息,从而在进行数据转发时可以使用更丰富的规则。其流表中的每个表项结果如下图所示:
OpenFlow1.3流表的每个表项由6部分组成:
1、匹配域:匹配域即OpenFlow1.0流表中的包头域,用于对交换机接收到的数据包的包头内容进行匹配。在OpenFlow1.0中,流表的包头域中包括了12个元组(Tuple),相关内容如下图所示:
入端口
目的MAC地址
以太网类型
VLAN ID
VLAN 优先级
源IP地址
目的IP地址
IP协议
IP TOS位
TCP/UDP源端口
TCP/UDP目的端口
Ingress Port
Ehter Des
Ether Type
VLAN ID
VLAN Priority
IP Src
IP Dst
IP Proto
IP TOS bits
TCP/UDP Src Port
TCP/UDP Dst Port
如上图所示,匹配域中用于和交换机接收到的数据包进行匹配的元组涵盖了ISO网络模型中的第二至第四层的网络配置信息。每一个元组中的数值可以是一个确定的值或者是“ANY”以支持对任意值的匹配。另外,如果交换机能够在IP地址相关元组上支持子网掩码的话,将有助于实现更精确的匹配。
2、优先级:流表项的匹配次序。
3、计数器:计数器可以针对交换机中每条流表、每个数据流、每个设备端口、每个转发队列进行维护,用于统计数据流表的相关信息。
4、Instructions指令集:每个流表项都包含一组指令,当一个数据包匹配表项时指令会被执行。这些指令可以更改数据包,动作集或者流表处理。
5、超时:最大时间计数或流有效时间
6、cookie:由控制器选择的不透明数据值。控制器用来过滤流统计数据、流改变和流删除。但处理数据包时不能使用。
一、准备工作
- 在使用sudo ./karaf 命令启动ODL控制器以后
3 . 使用ifconfig查看控制器ip地址,此处我的控制器ip地址为192.168.116.130。注意:只有mininet连接ODL用到127.0.0.1,其他都是用另一个地址(192.168.116.130)
- Mininet连接ODL,使用下面的命令
sudo mn --topo=single,2 --controller=remote,ip=192.168.116.130,port=6633 --switch ovsk,protocols=OpenFlow13
查看拓扑结构
二、查看流表
目标:匹配源MAC为62:b9:e9:db:c5:60的流量,目的MAC为76:ae:0d:50:d7:ad,出端口为2,优先级为300
1.启动Postman以后,在地址栏输入http://192.168.116.130:8080/restconf/operational/network-topology:network-topology
为GET请求,填好下面的信息以后,点击Send
会得到以下交换机信息
三、下发流表
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flow xmlns="urn:opendaylight:flow:inventory">
<priority>300</priority>
<flow-name>Foo1</flow-name>
<idle-timeout>0</idle-timeout>
<hard-timeout>0</hard-timeout>
<match>
<ethernet-match>
<ethernet-source>
<address>62:b9:e9:db:c5:60</address>
</ethernet-source>
<ethernet-destination>
<address>56:8f:c6:9e:5f:81</address>
</ethernet-destination>
</ethernet-match>
</match>
<id>107</id>
<table_id>0</table_id>
<instructions>
<instruction>
<order>0</order>
<apply-actions>
<action>
<order>0</order>
<output-action>
<output-node-connector>2</output-node-connector>
</output-action>
</action>
</apply-actions>
</instruction>
</instructions>
</flow>
注意源mac地址要与拓扑图里面的mac地址对应2. 点击Send以后,使用下面命令,在mininet上查看流表是否增加了一条优先级为300的流表
sh ovs-ofctl dump-flows s1 -O openflow13
成功!
参考:OpenDayLight+Mininet+Postman下发流表实验-CSDN博客
Postman下发流表至Opendaylight_使用postman下发流表-CSDN博客
版权归原作者 yi031 所有, 如有侵权,请联系我们删除。