目 录
OpenFlow是SDN(Software Defined Network,软件界说网络)架构中界说的一个节造器与转发层之间的网络传输和谈。OpenFlow允许节造器直接接见和操作网络设备的转发面,这些设备可能是物理上的,也可能是虚构的。
OpenFlow通过尺度的通讯和谈将设备的节造面和转发面相分离,让网络设备专一于转刊行为,而整网的节造行为集中在一台节造器上。设备与节造器成立OpenFlow衔接,由节造器天生转发规定并通过OpenFlow衔接以流表的大局下发给网络设备,从而实现网络节造面的集中治理,降低守护治理成本。
l 流表
流表是设备进行转发战术节造的主题数据结构,设备凭据流表来决策对进入设备的网络流量采取对应的行为。
一台设备能够蕴含一个或者多个流表,当前设备只支持一个流表。一个流表由多个流表项组成。
在OpenFlow和谈中,流表项由三个部门组成:header、counter、action。
header:界说了流表项的索引,通常由报文的各个字段组成,好比源MAC地址、主张MAC地址、以太网和谈类型域、源IP、主张IP、IP和谈类型域、源端口、主张端口等各个字段,用于匹配报文,报文射中流表项的Header字段,则批注报文匹配到该流表项。
counter:统计计数.用于统计有几多个报文和字节匹配到该流表项。
action:报文匹配后的作为,用于界说对匹配到流表项的报文的转刊行为,如抛弃、广播、转发等。
l 新闻
OpenFlow和谈支持三种新闻类型:controller-to-switch,asynchronous和symmetric,每一类新闻又有多个子新闻类型。各新闻的单一描述如下:
controller-to-switch:由节造器提议,用来治理以及获取网络设备状态。新闻子类型注明见表1-1。
asynchronous:由网络设备提议,用来将网络事务或网络设备状态变动(最常见的是网络接口的link up/down变动)更新到节造器。子新闻类型注明见表1-2。
symmetric:可由设备或节造器任一端提议,重要用于和谈初始的握手以及衔接状态探测。子新闻类型注明见表1-3。
表1-1
controller-to-switch新闻子类型注明表
|
子类型 |
描述 |
|
Features |
用于节造器发送Features要求来相识设备的能力,设备应答 |
|
Configuration |
用于节造器查问设备的配置,设备在收到查问时应答 |
|
Modify-State |
用于治理设备的状态,如流表项和端口状态,该新闻重要用于增长、删除、批改设备内的流表表项、组表表项和设备端口属性 |
|
Multipart |
用于节造器要求设备各方面信息,如当前配置、统计信息 |
|
Packet-Out |
用于节造器向设备发送报文 |
|
Barrier |
用于确认Barrier新闻之前的作为是否成功=谠炱鞣⑺Barrier要求新闻,当设备确认之前的作为都已成功时回应答Brarrier应答新闻 |
|
Role-Request |
用于设备要求节造器的角色 |
|
Asynchronous-Configuration |
节造器使用该新闻设置异步新闻过滤器,用于接管只但愿接管到的异步新闻报文,或向设备查问该过滤器 |
表1-2
asynchronous新闻子类型注明表
|
子类型 |
描述 |
|
Packet-in |
用于设备发送报文到节造器 |
|
Flow-Removed |
公告节造器将某个流表项从流表中移除 |
|
Port-Status |
公告节造器设备端口状态或配置产生扭转 |
|
Error |
公告节造器设备出的问题或谬误 |
表1-3
symmetric新闻子类型注明表
|
子类型 |
描述 |
|
Hello |
成立OpenFlow衔接时设备和节造器发送Hello交互 |
|
Echo |
;钚挛,节造器和设备城市发送Echo request/reply新闻 |
|
Experimenter |
为未来新参与的个性预留的新闻 |
表1-4 节造器角色注明表
角色
|
权限
|
Master
|
该角色的节造器占有节造设备的全数权限,能够下发流表\查问统计信息,接管设备上报的状态信息。在节造器集群部署时,只能有一台节造器是Master
|
Equal
|
该角色节造器同样占有全数权限,相迸宗Master角色,集群时可有多个节造器处于Equal
|
Slave
|
该角色节造器有部门权限,部门权限被限度,如不能下发流表项、group表项、Meter表项。不允许订正设备配置、不允许进行Packet
Out操作
|
OpenFlow实现了网络节造面的集中治理,使得整个网络可能等闲(相对于现有网络情况而言)地实现集中治理,进而简化了守护治理成本。
节造器向网络设备发送流表信息,用于节造网络数据包的转发方式以及一些配置参数。而网络设备会在链路中断或出现未指定转刊行为的数据包时,发送新闻通知节造器。进而形成二者的互动,最终节造整个网络的传输行为。
节造器和网络设备之间起头时必要实现相互发现的过程,其具体的行为如下图1-1所示:

节造器和网络设备相互发送OpenFlow界说的Hello报文进行握手。握手成功后,节造器将要求设备的具体信息例如设备的端口数量、各端口的能力等(如图1-1中的Feature Request/Reply),随后节造器将下发用户配置到具体的网络设备上(如图1-1中的Set Config)。当衔接成立后,节造器界说各个流以及匹配流的处置方式并通过流表下发到设备。每个数据包在进入设备后将依照节造器预先设定的流表规定匹配流表并执行对应的作为(作为蕴含:转发、抛弃、批改报文内容),同时对应的计数器将更新;若是没能找到匹配的表项,则转发给节造器。
网络设备会在本地守护节造器下发的流表,若是要转发的数据包在流表中已有界说,则直接在网络设备上实现转刊行为;若在流表中未能查找到,则数据包就会被发送到节造器进行传输蹊径简直认(能够理解为进行节造面解析,进而天生流表),再凭据节造器下发的流表进行转发。
l OpenFlow Switch SpecicationVersion 1.0.0
l OpenFlow Switch SpecicationVersion 1.3.0
l 流表限度:不支持多个流表,只支持Table 0流表。
l 衔接节造器数量限度:最多只支持衔接3台节造器。
(1)
配置OpenFlow
(2)
(可。配置OpenFlow多节造器模式
(3)
(可。配置OpenFlow送节造器报文的vlan标签
(4)
(可。配置OpenFlow报文处置模式
(5)
(可。配置OpenFlow源IP
OpenFlow是一种网络传输和谈,运行在安全传输层和谈(TLS)或无;TCP衔接之上,界说了节造器与网络设备之间的交互行为。
配置设备为OpenFlow转发模式,当设备开启OpenFlow职能时,对报文的转发节造战术由节造器天生并下发。
l 当要切换节造器的地址时,应先关关OpenFlow职能,再开启OpenFlow职能。
l 开启OpenFlow职能时,必要将设备自身的LLDP职能关关,不然节造器下发的LLDP报文无法发出。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 开启OpenFlow职能。
of controller-ip ipv4-address [ port
port-number ] [ aux ] interface interface-type interface-number
缺省情况下,OpenFlow职能处于关关状态。
配置设备多节造器模式,能够同时衔接多个节造器。
配置设备多节造器模式时,必要先关关OpenFlow职能,再配置为多节造器模式,再开启OpenFlow职能后才生效。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 设置OpenFlow设备衔接节造器模式。
of mode { single | multiple }
缺省情况下,OpenFlow设备处于多节造器模式。
(4) (可。┡渲OpenFlow沉连节造器的功夫距离。
of connect-interval interval
缺省情况下,OpenFlow沉连节造器的功夫距离为6秒。
(5) (可。┡渲OpenFlow发送echo request的功夫距离。
of echo-interval interval
缺省情况下,OpenFlow发送echo request的功夫距离为5秒。
设置设备送节造器的报文是否携带vlan标签。缺省情况下设备送节造器的报文携带vlan标签。
配置实现后立刻生效。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 配置OpenFlow设备送节造器报文是否携带标签。
of packet vlantag
缺省情况下,OpenFlow设备送节造器的报文携带vlan标签。
设置设备收到的报文是否进行查表。缺省情况下,设备收到报文后先进行查表,凭据射中的表项处置报文,若是未射中表项则报文被抛弃。
配置实现后立刻生效。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 设置OpenFlow设备衔接节造器模式。
of packet table-lookup
{ enable | disable }
缺省情况下,设备报文的处置模式为查表模式。
设置设备衔接节造器时的源IP。默认不配置,使用衔接端口的IP。
配置实现后立刻生效,设备和节造器会断开,使用源IP沉新进行衔接。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 配置OpenFlow衔接节造器的源IP
of source-ip ipv4-address
缺省情况下,不配置源IP,默认以衔接接口的IP为源IP衔接节造器。
能够通过show号令行查看职能配置后的运行情况以验证配置成效。
表1-5 OpenFlow监督与守护
|
作用 |
号令 |
|
查看当前OpenFlow设备与节造器衔接情况 |
show of |
|
查看当前OpenFlow设备的端口状态 |
show of port |
|
查看当前OpenFlow设备的流表 |
show of flowtable |
|
查看当前OpenFlow设备的组表 |
show of group |
|
查看当前OpenFlow设备的meter表 |
show of meter |
|
查看当前OpenFlow设备的归并流表项 |
show of mergedflow |
OpenFlow能够实现接入设备认证的集中治理。以图1-2为例,在接入互换设备上部署节造器实现对接入设备的认证节造,使得原先必要运行在接入设备上的认证职能(节造面)移交到节造器上实现。

l 设备开启OpenFlow职能,与节造器成立OpenFlow治理通路。
l 在接入设备上运行OpenFlow Client,实现与节造器互联。
l 节造器要求接入设备将认证报文通过OpenFlow和谈发送到节造器上。
l 由节造器实现认证过程并将认证了局通过OpenFlow和谈下发到具体的接入设备上,实现终端用户的准入节造。
# 配置设备端开启OpenFlow职能,指定节造器的IP地址为172.18.2.36/24,端标语为65535,同时关关设备lldp职能。
Device> enable
Device# configure terminal
Device(config)# no lldp enable
Device(config)# interface mgmt 0
Device(config-if)# ip address 172.18.2.36 255.255.255.0
Device(config-if)# exit
Device(config)# of controller-ip 172.18.2.35 port 65535 interface mgmt 0
# 配置设备为单节造器模式。
Device(config)# of mode single
# 配置送节造器的报文不携带vlan标签。
Device(config)# no of packet vlantag
# 配置设备为查表模式。
Device(config)# ofpacket table-lookup enable
# 配置设备的OpenFlow源IP为192.168.197.25。
Device(config)# of source-ip 192.168.197.25
# 查看OpenFlow的衔接状态信息。
Device# show of
[0] Controller ID=0 Info=tcp:172.18.2.35 port=6653 interface Mgmt 0, Main is Connected, Aux is Disabled
# 查看OpenFlow的端口状态。
Device# show of port
ID IFX INTERFACE SPEED LINK DUPLEX TX_PKT RX_PKT CONFIG
1 1 GigabitEthernet 0/1 Unknown DOWN Unknown 0 0 NA
2 2 GigabitEthernet 0/2 Unknown DOWN Unknown 0 0 NA
# 查看OpenFlow的流表状态。
Device# show of flowtable
/***************** openflow flow table[0]---flow number[2] *******************/
{table="0", duration_sec="5222", priority="0", flags ="0x1",idle_timeout="0", hard_timeout="0", cookie="0x0", packet_count="0", byte_count="0". match=oxm{all match} instructions=[apply{acts=[output{port="controller", max_len="3333"}] }] }
xid=472, sync_flag=0x0, ss_index=0x7b6
{table="0", duration_sec="5222", priority="66", flags ="0x1",idle_timeout="0", hard_timeout="0", cookie="0x0", packet_count="0", byte_count="0". match=oxm{eth_dst="00:25:64:c4:54:e4", eth_type="0x800", ipv4_dst="1.1.0.0", ipv4_dst_mask="255.255.240.0"} instructions=[apply{acts=[output{port="controller", max_len="65535"}] }] }
xid=473, sync_flag=0x0, ss_index=0x7b1
/****************************** openflow flow table end ****************************************/
flow total number = 2
# 配置设备为单节造器模式,只能衔接一个节造器,超过一个时会有谬误提醒。
Device(config)# no of controller-ip
Device(config)# of mode single
Device(config)# of controller-ip 172.18.122.24 interface gigabitEthernet 0/1
Device(config)# of controller-ip 172.18.122.25 interface gigabitEthernet 0/1
Controller Mode is Single, can't connected
# 通过show of号令查看当前模式为查表模式,源IP为192.168.197.25。
Device# show of
version:openflow1.3, controller[0]:tcp:172.18.105.11 port 6653 interface GigabitEthernet 1/0/7, main is connected, aux is disable, role is master.
Current controller mode : multiple.
Current packet process mode : Lookup all flow.
Datapath id = 897516188948
Source IP = 192.168.197.25
hostname Device
alias exec sv show version
!
no lldp enable
!
of source-ip 192.168.197.25
of controller-ip 172.18.2.35 port 65535 interface Mgmt 0
no of packet vlantag
!
interface Mgmt 0
?ip address 172.18.2.36 255.255.255.0
?gateway 172.18.2.1
l 节造器IP地址配置谬误。
l 节造器TCP端标语配置谬误。