精华内容
下载资源
问答
  • OpenFlow组表(group table)的理解

    千次阅读 2020-03-24 16:40:07
    OpenFlow是根据stage的流水线定义的,每个stage都是一个流(Flow table)。 流:当数据包到达一个stage的时候,会执行“match-and-act”,检查该flow table中是否含有特定的flow entry与数据包header的相应字段...

    OpenFlow是根据stage的流水线定义的,每个stage都是一个流表(Flow table)。

    流表:当数据包到达一个stage的时候,会执行“match-and-act”,检查该flow table中是否含有特定的flow entry与数据包header的相应字段匹配。如果找到匹配项,则将该条flow entry对应的instructions在数据包上执行(或者加入数据包的action set中,最后一起执行)。

    为什么需要组表呢?

    举两个例子:

    1. 发送数据包副本

            假如你想发送两份数据包的副本(copy),一个副本发送到目标地址,另一个副本发送到网络分析器,这个时候需要对这两个副本做不同的封装--一个副本需要添加VLAN header,另一个不需要(或者需要添加不同的VLAN ID)。如果在组表中做这个,你需要在所有的流表中创建不同的表项用于不同的封装;当你添加或者删除网络分析器时,需要找到所有的相应流表项并且进行修改。

            如果用组表呢?创建一个ALL的组将所有的目标地址和网络分析器包含进去,group table中的每一个表项都有对于其特定的副本所要执行的actions:添加VLAN,设置不同的VLAN ID等等。当flow table查找到这条表项时,将packet转发至这个组表中,如果中途添加或者删除网络分析器,只需要在组表中进行修改而不需要动流表。

    2. 容错能力-备用端口/路径

            想象这么一个场景,如果一个数据包应该在端口1离开交换机,但是这个端口down掉了,你想要将数据包通过端口2发送出去。如果用流表的话,当端口1down掉,需要找到所有含有“发往端口1”的流表项,全部修改成端口2,这个操作是很复杂的。这个时候,需要定义一个“1st live” group来表示这种容错行为,然后将所有的流表项的规则指向该组表。只要端口1正常,group会把所有的数据包发往端口1,如果端口1 down掉,将所有数据包发往端口2,流表没有任何变化。

    OpenFlow支持的组表类型

    Indirect:执行该group中一个已定义的bucket, 该组仅支持一个bucket。 允许多个流表项或组表项指向一个公共的组(例如IP转发的下一跳)。 这是最简单的group类型,交换机通常比较支持这种类型的group。

    All:执行该group中所有的bucket。这种类型的group用来进行multicast和broadcast。为每个bucket克隆一份数据包,然后分别执行每个bucket中的actions。

    Select:执行该group中的一个bucket。基于一种选择算法(用户定义的哈希算法或者轮询算法)选择group中的一个bucket对数据包执行actions。这种选择算法应该尽量支持负载均衡并且为每个bucket提供一个权重用于分配。当一个bucket指定的端口down掉,交换机应该将选择限制在剩下的正常的bucket中而不是丢掉,这是为了减少链路中断。

    Fast failover:执行第一个活动的bucket。 每个action bucket都与控制其活动性的特定端口和/或组相关联。 按照group定义的顺序评估bucket,并选择与活动端口/组关联的第一个bucket。 这个group类型使交换机可以更改转发行为而无需往返于控制器。 如果没有bucket,则丢弃数据包。

    展开全文
  • openflow标准中的概念介绍比较模糊,此论文撰写了在安全方面的应用
  • Openflow学习

    2019-06-13 14:29:00
    Openflow流表学习 OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准...OpenFlow1.3在1.0版的基础上进一步优化及升级,其中添加了很多新的特性及消息,如支持多个流表(flow table)、组表(group tab...

    Openflow流表学习

    OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准协议。自2009年底发布1.0版本后,OpenFlow协议又经历了1.1、1.2、1.3及1.4版本的演进过程,目前使用和支持最多的是1.0和1.3版本。
    OpenFlow1.3在1.0版的基础上进一步优化及升级,其中添加了很多新的特性及消息,如支持多个流表(flow table)、组表(group table),支持多控制器等。一个流表中包含多个流表项。
    OpenFlow v1.3中流表项主要由7部分组成,分别是匹配域(用来识别该条表项对应的flow)、优先级(定义流表项的优先顺序)、计数器(用于保存与条目相关统计信息),指令(匹配表项后需要对数据分组执行的动作)、Timeouts、Cookie、Flags,如下图所示。
    在这里插入图片描述

    在这里插入图片描述
    首先交换机解析进入设备的数据分组,然后从table 0开始匹配,按照优先级高低依次匹配该流表中的流表项,一个数据分组在一个流表中只会匹配上一条流表项。通常根据数据分组的类型,分组头的字段例如源MAC地址、目的MAC地址、源IP地址、目的IP地址等进行匹配。也可以通过数据分组的入端口或元数据信息来进行数据分组的匹配,一个流表项中可以同时存在多个匹配项,一个数据分组需要同时匹配流表项中所有匹配项才能匹配该流表项。数据分组匹配按照现有的数据分组字段进行,比如前一个流表通过apply actions改变了该数据分组的某个字段,则下一个表项按修改后的字段进行匹配。如果匹配成功,则按照指令集里的动作更新动作集,或更新数据分组/匹配集字段,或更新元数据和计数器。根据指令是否继续前往下一个流表,不继续则终止匹配流程执行动作集,如果指令要求继续前往下一个流表则继续匹配,下一个流表的ID需要比当前流表ID大。当数据分组匹配失败了,如果存在无匹配流表项(table miss)就按照该表项执行指令。一般是将数据分组转发给控制器、丢弃或转发给其他流表。如果没有table miss表项则默认丢弃该数据分组。

    展开全文
  • openvswitch--OpenFlow设置

    万次阅读 2017-02-09 11:35:59
    基本字段包括生效时间duration_sec、所属项table_id、优先级priority、处理的数据包数n_packets,空闲超时时间idle_timeout等,空闲超时时间idle_timeout以秒为单位,超过设置的空闲超时时间后该流规则将被自动...

    流规则组成

    每条流规则由一系列字段组成,分为基本字段条件字段动作字段三部分:

    • 基本字段包括生效时间duration_sec、所属表项table_id、优先级priority、处理的数据包数n_packets,空闲超时时间idle_timeout等,空闲超时时间idle_timeout以秒为单位,超过设置的空闲超时时间后该流规则将被自动删除,空闲超时时间设置为0表示该流规则永不过期,idle_timeout将不包含于ovs-ofctl dump-flows brname的输出中。

    • 条件字段包括输入端口号in_port、源目的mac地址dl_src/dl_dst、源目的ip地址nw_src/nw_dst、数据包类型dl_type、网络层协议类型nw_proto等,可以为这些字段的任意组合,但在网络分层结构中底层的字段未给出确定值时上层的字段不允许给确定值,即一条流规则中允许底层协议字段指定为确定值,高层协议字段指定为通配符(不指定即为匹配任何值),而不允许高层协议字段指定为确定值,而底层协议字段却为通配符(不指定即为匹配任何值),否则,ovs-vswitchd 中的流规则将全部丢失,网络无法连接。

    • 动作字段包括正常转发normal、定向到某交换机端口output:port、丢弃drop、更改源目的mac地址mod_dl_src/mod_dl_dst等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。

    条件字段介绍

    in_port=port
    Matches OpenFlow port port
    dl_vlan=vlan
    Matches IEEE 802.1q Virtual LAN tag vlan.
    dl_vlan_pcp=priority
    Matches IEEE 802.1q Priority Code Point (PCP) priority, which is specified as a value between 0 and 7, inclusive. A higher value indicates a higher frame priority level.
    dl_src=xx:xx:xx:xx:xx:xx
    dl_dst=xx:xx:xx:xx:xx:xx
    Matches an Ethernet source (or destination) address specified as 6 pairs of hexadecimal digits delimited by colons (e.g. 00:0A:E4:25:6B:B0).
    dl_src=xx:xx:xx:xx:xx:xx/xx:xx:xx:xx:xx:xx
    dl_dst=xx:xx:xx:xx:xx:xx/xx:xx:xx:xx:xx:xx
    Matches an Ethernet destination address specified as 6 pairs of hexadecimal digits delimited by colons (e.g. 00:0A:E4:25:6B:B0), with a wildcard mask following the slash.
    01:00:00:00:00:00 Match only the multicast bit. Thus, dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 matches all multicast (including broadcast) Ethernet packets, and dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 matches all unicast Ethernet packets.
    ff:ff:ff:ff:ff:ff Exact match (equivalent to omitting the mask).
    00:00:00:00:00:00 Wildcard all bits (equivalent to dl_dst=*.)
    dl_type=ethertype
    Matches Ethernet protocol type ethertype, which is specified as an integer between 0 and 65535
    nw_src=ip[/netmask]
    nw_dst=ip[/netmask]
    When dl_type is 0x0800 (possibly via shorthand, e.g. ip or tcp), matches IPv4 source (or destination) address ip, which may be specified as an IP address or host name
    When dl_type=0x0806 or arp is specified, matches the ar_spa or ar_tpa field, respectively, in
    ARP packets for IPv4 and Ethernet.
    When dl_type=0x8035 or rarp is specified, matches the ar_spa or ar_tpa field, respectively, in
    RARP packets for IPv4 and Ethernet.
    nw_proto=proto
    When ip or dl_type=0x0800 is specified, matches IP protocol type proto, which is specified as a decimal number between 0 and 255, inclusive (e.g. 1 to match ICMP packets or 6 to match TCP packets).
    When ipv6 or dl_type=0x86dd is specified, matches IPv6 header type proto, which is specified as a decimal number between 0 and 255, inclusive (e.g. 58 to match ICMPv6 packets or 6 to match TCP).
    When arp or dl_type=0x0806 is specified, matches the lower 8 bits of the ARP opcode.
    When rarp or dl_type=0x8035 is specified, matches the lower 8 bits of the ARP opcode.
    nw_tos=tos
    Matches IP ToS/DSCP or IPv6 traffic class field tos, which is specified as a decimal number between 0 and 255, inclusive.
    nw_ecn=ecn
    Matches ecn bits in IP ToS or IPv6 traffic class fields, which is specified as a decimal number between 0 and 3, inclusive.
    nw_ttl=ttl
    Matches IP TTL or IPv6 hop limit value ttl, which is specified as a decimal number between 0 and 255, inclusive.
    tp_src=port
    tp_dst=port
    When dl_type and nw_proto specify TCP or UDP, tp_src and tp_dst match the UDP or TCP source or destination port port
    icmp_type=type
    icmp_code=code
    When dl_type and nw_proto specify ICMP or ICMPv6, type matches the ICMP type and code matches the ICMP code.
    table=number
    If specified, limits the flow manipulation and flow dump commands to only apply to the table with the given number between 0 and 254.
    vlan_tci=tci[/mask]
    Matches modified VLAN TCI tci. If mask is omitted, tci is the exact VLAN TCI to match; if mask is specified, then a 1-bit in mask indicates that the corresponding bit in tci must match exactly, and a 0-bit wildcards that bit.
    ip_frag=frag_type
    When dl_type specifies IP or IPv6, frag_type specifies what kind of IP fragments or non-fragments to match.
    The following values of frag_type are supported:
    no Matches only non-fragmented packets.
    yes Matches all fragments.
    first Matches only fragments with offset 0.
    later Matches only fragments with nonzero offset.
    not_later Matches non-fragmented packets and fragments with zero offset.
    arp_sha=xx:xx:xx:xx:xx:xx
    arp_tha=xx:xx:xx:xx:xx:xx
    When dl_type specifies either ARP or RARP, arp_sha and arp_tha match the source and target hardware address, respectively.
    tun_id=tunnel-id[/mask]
    Matches tunnel identifier tunnel-id. Only packets that arrive over a tunnel that carries a key (e.g. GRE with the RFC 2890 key extension and a nonzero key value) will have a nonzero tunnel ID.

    动作字段介绍

    output:port
    Outputs the packet to port
    output:src[start..end]
    Outputs the packet to the OpenFlow port number read from src, which must be an NXM field as described above. For example, output:NXM_NX_REG0[16..31] outputs to the OpenFlow port number written in the upper half of register 0.
    enqueue:port:queue
    Enqueues the packet on the specified queue within port port
    normal
    Subjects the packet to the device’s normal L2/L3 processing.
    flood
    Outputs the packet on all switch physical ports other than the port on which it was received and any ports on which flooding is disabled
    all
    Outputs the packet on all switch physical ports other than the port on which it was received.
    controller(key=value…)
    Sends the packet to the OpenFlow controller as a ‘‘packet in’’ message. The supported key-value pairs are:
    max_len=nbytes : Limit to nbytes the number of bytes of the packet to send to the controller. By default the entire packet is sent.
    reason=reason: Specify reason as the reason for sending the message in the ‘‘packet in’’ message. The supported reasons are action (the default), no_match, and invalid_ttl.
    id=controller-id : Specify controller-id
    in_port
    Outputs the packet on the port from which it was received.
    drop
    Discards the packet, so no further processing or forwarding takes place.
    mod_vlan_vid:vlan_vid
    Modifies the VLAN id on a packet.
    mod_vlan_pcp:vlan_pcp
    Modifies the VLAN priority on a packet.
    strip_vlan
    Strips the VLAN tag from a packet if it is present.
    push_vlan:ethertype
    Push a new VLAN tag onto the packet.
    push_mpls:ethertype
    If the packet does not already contain any MPLS labels, changes the packet’s Ethertype to ethertype, which must be either the MPLS unicast Ethertype 0x8847 or the MPLS multicast Ethertype 0x8848, and then pushes an initial label stack entry.
    pop_mpls:ethertype
    Strips the outermost MPLS label stack entry.
    mod_dl_src:mac
    Sets the source Ethernet address to mac.
    mod_dl_dst:mac
    Sets the destination Ethernet address to mac.
    mod_nw_src:ip
    Sets the IPv4 source address to ip.
    mod_nw_dst:ip
    Sets the IPv4 destination address to ip.
    mod_tp_src:port
    Sets the TCP or UDP source port to port.
    mod_tp_dst:port
    Sets the TCP or UDP destination port to port.
    mod_nw_tos:tos
    Sets the IPv4 ToS/DSCP field to tos, which must be a multiple of 4 between 0 and 255.
    resubmit([port],[table])
    Re-searches this OpenFlow flow table (or the table whose number is specified by table) with the in_port field replaced by port (if port is specified)
    set_tunnel:id
    set_tunnel64:id
    If outputting to a port that encapsulates the packet in a tunnel and supports an identifier (such as GRE), sets the identifier to id.
    set_queue:queue
    Sets the queue that should be used to queue when packets are output.
    pop_queue
    Restores the queue to the value it was before any set_queue actions were applied.
    dec_ttl
    dec_ttl[(id1,id2)]
    Decrement TTL of IPv4 packet or hop limit of IPv6 packet.
    set_mpls_ttl:ttl
    Set the TTL of the outer MPLS label stack entry of a packet. ttl should be in the range 0 to 255 inclusive.
    dec_mpls_ttl
    Decrement TTL of the outer MPLS label stack entry of a packet.
    move:src[start..end]−>dst[start..end]
    Copies the named bits from field src to field dst. src and dst must be NXM field names as defined in nicira−ext.h, e.g. NXM_OF_UDP_SRC or NXM_NX_REG0.
    Examples: move:NXM_NX_REG0[0..5]−>NXM_NX_REG1[26..31] copies the six bits numbered 0 through 5, inclusive, in register 0 into bits 26 through 31, inclusive; move:NXM_NX_REG0[0..15]−>NXM_OF_VLAN_TCI[] copies the least significant 16 bits of register 0 into the VLAN TCI field.
    load:value−>dst[start..end]
    Writes value to bits start through end, inclusive, in field dst.
    Example: load:55−>NXM_NX_REG2[0..5] loads value 55 (bit pattern 110111) into bits 0 through 5, inclusive, in register 2.
    push:src[start..end]
    Pushes start to end bits inclusive, in fields on top of the stack.
    Example: push:NXM_NX_REG2[0..5] push the value stored in register 2 bits 0 through 5, inclusive, on to the internal stack.
    pop:dst[start..end]
    Pops from the top of the stack, retrieves the start to end bits inclusive, from the value popped and store them into the corresponding bits in dst.
    Example: pop:NXM_NX_REG2[0..5] pops the value from top of the stack. Set register 2 bits 0 through 5, inclusive, based on bits 0 through 5 from the value just popped.
    set_field:value−>dst
    Writes the literal value into the field dst, which should be specified as a name used for matching.
    Example: set_field:fe80:0123:4567:890a:a6ba:dbff:fefe:59fa−>ipv6_src
    learn(argument[,argument]…)
    This action adds or modifies a flow in an OpenFlow table, similar to ovs−ofctl −−strict mod−flows. The arguments specify the flow’s match fields, actions, and other properties, as follows
    idle_timeout=seconds
    hard_timeout=seconds
    priority=value
    These key-value pairs have the same meaning as in the usual ovs−ofctl flow syntax.
    fin_idle_timeout=seconds
    fin_hard_timeout=seconds
    Adds a fin_timeout action with the specified arguments to the new flow.
    table=number
    The table in which the new flow should be inserted. Specify a decimal number between 0 and 254. The default, if table is unspecified, is table 1.
    field=value
    field[start..end]=src[start..end]
    field[start..end]
    Adds a match criterion to the new flow.
    load:value−>dst[start..end]
    load:src[start..end]−>dst[start..end]
    Adds a load action to the new flow.
    output:field[start..end]
    Add an output action to the new flow’s actions, that outputs to the OpenFlow port taken from field[start..end], which must be an NXM field as described above.

    展开全文
  • 这部分介绍OpenFlow流表与组表的元素以及处理匹配和动作的方法。 5.1流水线处理 OpenFlow交换机有两种类型:仅支持OpenFlow,混合OpenFLow。在仅支持OpenFlow 的交换机上只能由OpenFlow流水线来处理封包。 ...

    5.OpenFlow表

    这部分介绍OpenFlow流表与组表的元素以及处理匹配和动作的方法。


    5.1流水线处理

    OpenFlow交换机有两种类型:仅支持OpenFlow,混合OpenFLow。在仅支持OpenFlow 的交换机上只能由OpenFlow流水线来处理封包。

    混合OpenFlow交换机同事支持OF操作与普通以太网交换机操作,即传统二层以太网交换机,VLAN独立,三层路由(IPv4,IPv6),ACL,QoS。这些交换机在OF操作方法之外还提供了分类方法将封包流量导向OF流水线或普通流水线。例如,一个交换机可能会根据VLAN标签或是输入端口来决定使用哪条流水线。同样地,混合OF交换机也会使用普通与泛洪预定端口(见4.5)将封包从OF流水线导向普通流水线。

    OF流水线包含一个或多个流表,每个流表有多个流表项。OF流水线定义了封包与流表交互的方式,见图2。一个OF交换机至少要有一个入口流表,只有一个流表得交换机并非没有意义,在这种情况下,流水线处理得到极大的简化。

    流表从0开始按序编号,处理过程分为两个阶段,入口处理与出口处理。两个阶段由第一个出口流表分开(见7.3.2)。编号小于第一个出口流表的的流表作为入口流寇,编号比它大的不能作为入口流表使用。

    流水线处理总是从第一个流表的入口处理,封包首先与0号流表的流表项匹配,是否使用其他入口流表取决于匹配的结果。如果结果是将封包转发到输出端口,交换机会在输出端口执行出口处理。出口处理不是必备的,交换机可能不支持任何出口处理或者是没有配置为可使用出口处理。如果没有有效的出口流表被配置为第一个出口表(见7.3.2),封包将会由输出端口处理。大多数情况下封包会被送出交换机。如果存在有效的出口表,封包会与它的流表项进行匹配,是否使用其他出口流表同样取决于匹配的结果。

    5.1流水线一致性

    5.2流表与流表项

    5.3匹配

    5.4匹配缺失

    5.5指令

    5.6动作集

    5.7动作列表

    5.8动作

    5.8.1 推操作的默认属性值

    5.9计数器

    5.10组表

    5.10.1组类型

    5.11 meter表

    5.11.1 meter带

    5.12入口处理与出口处理的不同

    展开全文
  • OpenFlow交换机由一个或多个流表和一个组表组成,组表执行数据包查找和转发,以及一个通向外部控制器的OpenFlow通道(如下图)。交换机与控制器通信,控制器通过OpenFlow协议管理交换机。 使用OpenFlow协议,控制器...
  • 学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)NeutronOpenvSwitch + ...(4)Neutron OVS OpenFlow 和 L2 Population (5)Neutron DHCP Agent ...
  • Openflow

    千次阅读 2021-03-21 14:33:09
    1.Openflow是啥 OpenFlow是第一个开放的南向接口协议,也是目前最流行的南向协议。 它提出了控制与转发分离的架构,规定了SDN...OpenFlow表项:存放流项,控制器可以给交换机下发流项来指导交换机处理匹配流
  • 一、LACP: 1、概念 链路聚合控制协议LACP(Link Aggregation Control Protocol),是基于IEEE802.3ad标准的一种实现链路动态聚合与解聚合的协议,以供设备根据自身配置自动形成聚合链路并启动聚合链路收发数据,...
  • 1.1 OpenFlow 结构、流和数据包处理 下面一图是 Open vSwitch 中流的结构。二图这个流程图详细描述了数据包流通过一个 OpenFlow 交换机的过程。 图一 图二 更详细的描述请参见 这里 。 1.2 ARP Proxy Proxy ARP ...
  • OpenFlow

    2021-01-29 10:29:22
    OpenFlow概述 Ethane项目:OpenFlow的前身(集中式,主动式,基于Flow的控制) OpenFlow的定义: 是开放的南向接口、通用转发抽象模型、网络x86指令集
  • openflow

    2016-04-03 21:29:00
     OpenFlow交换机由流、安全通道和OpenFlow协议三部分组成: 图2 OpenFlow交换机组成 OpenFlow交换机是整个OpenFlow网络的核心部件,主要管理数据层的转发。OpenFlow交换机接收到数据包后,首先在本地的...
  • 2.Neutron 中的流是怎样实现的? OVS bridge 有两种模式:“normal” 和 “flow”。“normal” 模式的 bridge 同普通的 Linux 桥,而 “flow” 模式的 bridge 是根据其流(flow tables) 来进行转发的。Neutron...
  • 摘要:OpenFlow多级流是当前的热点话题,但缺少实际应用案例,本文中盛科张卫峰分享了OpenFlow多级流在实际网络方案中的运用。该方案是基于SDN的性能优化方案,将影响网络性能的工作从服务器Offload到TOR交换机...
  • OpenFlow:简述对流项Flow的了解

    千次阅读 2019-10-08 15:51:14
    OpenFlow:简述对流项Flow的了解 一、流项Flow规则 每条流项Flow(流规则)由一系列字段组成,分为基本字段、条件字段和动作字段三部分: 基本字段 基本字段包括生效时间duration_sec、所属项table_id、...
  • OpenFlow协议

    2021-09-01 21:55:48
    OpenFlow引入了“流”的概念,转发器通过流来指导数据包的转发。控制器正是通过OpenFlow提供的接口在转发器上部署相应的流,从而实现对转发平面的控制。 OpenFlow的起源与发展 OpenFlow起源于斯坦福大学的Clea
  • openflow简介

    2019-11-19 15:33:03
    1 openflow组件 ...openflow组建包括openflow交换机,控制器,用于连接设备控制器的安全通道(secure channel)以及openflow构成。 1.1 openflow交换机         o...
  • 多级流将数据包的处理逻辑划分为多个子逻辑,并由多张流分别来匹配和处理,从而使得数据包的处理变成了 一条流水线。多级流的设计使得流项聚合成为可能,节省了流空间,也提高了编程处理逻辑的灵活性。 ...
  • OpenFlow概述

    2019-11-28 13:51:24
    OpenFlow的思路很简单,网络设备维护一个FlowTable并且只按照FlowTable进行转发,FlowTable本身的生成、维护、下发完全由外置的Controller来实现,注意这里的FlowTable并非是指IP五元,事实上OpenFlow 1.0定义了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,784
精华内容 1,113
关键字:

openflow组表