任务目的
1、掌握YANG UI下发流表的方式,了解YANG UI的功能特点,以及其在OpenDaylight架构中所起的作用。
2、通过下发流表的过程,梳理出数据包处理的简单流程。并且进一步了解单级流表和多级流表的处理过程。
任务环境
设备名称 | 软件环境(镜像) | 硬件环境 |
---|---|---|
控制器 | Ubuntu 14.04桌面版 OpenDaylight Lithium |
CPU:2核 内存:4G 磁盘:20G |
交换机 | Ubuntu 14.04命令行版 Open vSwitch 2.3.1 |
CPU:1核 内存:2G 磁盘:20G |
主机 | Ubuntu14.04命令行版 | CPU:1核 内存:2G 磁盘:20G |
注:系统默认的账户为root/root@openlab,openlab/user@openlab。
任务内容
1、比较使用YANG UI下发流表的方法,与直接在交换机中通过命令下流表的方方法,总结两者的异同点。
2、通过YANG UI下发流表控制主机之间的连通性,并且利用scapy工具进行测试验证。
3、分别基于OpenFlow1.0协议和OpenFlow1.3协议下发流表,经过下流表的过程了解单级流表和多级流表的概念。
实验原理
YANG UI是OpenDaylight中一款基于DLUX的应用,旨在简化、激励应用的开发与测试。YANG UI通过动态封装、调用YANG模型和相关REST APIs,生成并展示一个简单的UI界面。开发人员可以通过API请求获取交换机信息,并且以JSON格式展示。YANG UI主要面向上层应用开发,为应用开发人员提供了很多相关工具,有效的节约了开发人员的时间。
OpenFlow1.0协议处理数据包的流程相对简单,因为1.0版本只支持单流表。交换机接收到数据包后解析数据包,数据包解析后就开始匹配,从table 0 开始匹配,如果匹配成功则对该数据包执行相应的动作,更新相应的计数器。如果没有找到匹配项则将数据包交给控制器。
OpenFlow1.3协议支持多流表匹配,即一个交换机只会有多个流表,因此数据包处理过程相对复杂。首先解析进入设备的报文,然后从table 0开始匹配,按照优先级高低依次匹配该流表中的流表项,一个报文在一个流表中只会匹配上一条流表项。通常根据报文的类型,报文头的字段例如源MAC地址、目的MAC地址、源IP地址、目的IP地址等进行匹配,大部分匹配还支持掩码进行更精确、灵活的匹配。也可以通过报文的入端口或元数据信息来进行报文的匹配,一个流表项中可以同时存在多个匹配项,一个报文需要同时匹配流表项中所有匹配项才能匹配该流表项。报文匹配按照现有的报文字段进行,比如前一个流表通过apply actions改变了该报文的某个字段,则下一个表项按修改后的字段进行匹配。如果匹配成功,则按照指令集里的动作更新动作集,或更新报文/匹配集字段,或更新元数据和计数器。根据指令是否继续前往下一个流表,不继续则终止匹配流程执行动作集,如果指令要求继续前往下一个流表则继续匹配,下一个流表的ID需要比当前流表ID大。当报文匹配失败了,如果存在无匹配流表项(table miss)就按照该表项执行指令,一般是将报文转发给控制器、丢弃或转发给其他流表。如果没有table miss表项则默认丢弃该报文。
在Open vSwitch中,流表项作为ovs-ofctl的参数,采用“字段=值”的格式。如果有多个字段,可以用逗号分开,一些常见字段如下:
字段名称 | 说明 |
---|---|
in_port=port | 传递数据包的端口的OpenFlow端口编号 |
dl_vlan=vlan | 数据包的VLAN Tag值,范围是0-4095,0xffff代表不包含VLAN Tag的数据包 |
dl_src=<MAC> dl_dst= <MAC> | 匹配源或者目标的MAC地址 01:00:00:00:00:00/01:00:00:00:00:00 代表广播地址 00:00:00:00:00:00/01:00:00:00:00:00 代表单播地址 |
dl_type=ethertype | 匹配以太网协议类型,其中: dl_type=0x0800 代表IPv4协议; dl_type=0x086dd 代表IPv6协议; dl_type=0x0806 代表ARP协议; |