3.3 OpenFlow 流表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.3 OpenFlow 流表相关的知识,希望对你有一定的参考价值。

参考技术A 我们把同一时间,经过同一网络中具有某种共同特征或属性的数据抽象为一个流。比如,我们将访问同一目的地址的数据视为一个流。流一般由网络管理员定义的,可以根据不同的流执行不同的策略。

在 OpenFlow 体系中,数据都是以流为单位,进行处理的。

流表:是针对特定流的策略表项的集合,负责数据包的查找和转发。

一张流标包括了一系列的流表项 flow entries。

由多个匹配项组成,涵盖了链路层,网络层和传输层大部分标识。

包头域,包含 12 个元组,基本涵盖了 OSI 模型的 1-4层。

入端口:为第一层,表示消息从哪个端口进入交换机。
源 MAC 地址,目的 MAC 地址,VLAN 标签,VLAN 优先级:位于第二层。
源 IP,目的 IP,IP 协议字段,IP 服务类型:位于第三层。
TCP/UDP 源端口号,目的端口号:位于第四层。

如果,没有定义转发动作,那么,与流表项包头域匹配的数据包将默认丢弃。

同一流表项中的多个动作,可以具有不同的优先级。但在数据的发送上,并不保证其顺序。

如果,流表项中出现有 OpenFlow 交换机不支持的参数值,交换机向控制器发送相应的出错信息。

流表项的动作分为两类:

可选动作:
转发:交换机可选支持,将数据包转发给如下虚拟端口(NORMAL,FLOOD)
排队:交换机将数据包转发到某个出端口对应的转发序列当中,便于提供 QOS 支持。
修改域:交换机修改包头的具体字段包括:设置VLAN ID,VLAN 优先级,剥离 VLAN 头,修改源 MAC 地址,目的 MAC 地址,修改源 IPv4 地址,目的 IPv4地址, IP ToS 位。

OpenFlow 交换机的端口:
动作的转发与端口直接相关。
端口:传递数据包的网络接口,交换机通过接口与其他交换机建立逻辑连接。

端口的分类:
物理端口:同于传统物理端口。
逻辑端口:同于传统逻辑端口。
保留端口:指定通用的转发动作(ALL,CONTROLLER,TABLE,IN_PORT,ANY,LOCAL,NORMAL,FLOOD)。
ALL:转发给所有的出端口,不包括入端口。
CONTROLLER:封装数据包,并转发给控制器。
TABLE:对 packet_out 数据包,执行流表操作。
IN_PORT:从入端口发出。
ANY:
LOCAL:转发给本地的网络栈。
NORMAL:利用交换机的传统转发机制来处理数据包。
FLOOD:按照最小生成树从设备出端口洪泛出去。

数据包的处理流程:
交换机接收到报文后,进行 STP 处理,然后,进行包头解析,然后,进入匹配阶段,在匹配阶段,每个包按照优先级依次去匹配流表中的表项,最后优先级最高的表项,即为匹配的结果。

如果匹配成功,对应的计数器将更新,并实施相应的动作。如果表项没有相应动作,数据包将会被丢弃。如果没有找到匹配的表项,则封装数据包转发给控制器。

包头解析是为了得到,数据分组的12 元组。

首先,初始化包头(设置输入端口,以太网源地址,目的地址,及其类型、其他值置零)。

OpenFlow 1.2将分组头域改称为匹配域。

为增强协议的可扩展性,从1.3 版本开始,用户可根据需要自定义匹配域字段,同时,在 1.3 版本中增加了优先级,计数器和 Cookie 字段。优先级表示表项在所属表中的优先级,匹配域冲突时,以优先级高的表项为准。

为满足更丰富的处理方法,从 1.1 版本开始,提出了指令集的概念。

1.3 版本出现了组表和计量表

组表为交换机提供了更高级的数据包转发特性,从而实现组播,负载均衡,容灾备份和聚合。

一个组表由多个组表项组成,包括,组表项,组表类型,计数器,动作桶。

通过计量表,OpenFlow 交换机可实现简单的 QoS 功能,如速率限制等。还可以与端口队列结合实现更加复杂的 QoS 框架。

每个计量表由多个计量项组成,包括,计量表号,计量带,计数器。

锐捷77167708抓流表(抓包)

一、流表的含义:
Pr SrcAddr DstAddr SrcPort DstPort Vrf SendBytes RecvBytes St
6 172.18.158.128172.18.157.16 36064 23 0 5467 9301 1

pr:IP协议号,常见的有ICMP(1)、TCP(6)、UDP(17)
SrcAddr:流的源地址
DstAddr:流的目的地址
SrcPort:流的源端口号(TCP/UDP以外的协议是没有端口号的,那么设备使用该协议的其它字段作为端口号识别。如ICMP使用标识位。)
DstPort:流的目的端口号
vrf:流所在的vrf,一般不需要关注此参数
SendBytes:发送字节数,从源地址到目的之发送的字节数
RecvBytes:接收字节送,从目的地址到源地址回来的数据包
St:协议状态

二、RSR系列的路由器分为2类,集中式和分布式
集中式设备包含
1.3,4g设备,如:RSR10-01G-T系列,RSR820-T系列
2.接入层设备,RSR10-02E,RSR20-04E,RSR10-x,RSR20-14E/F,RSR20-x
3.汇聚层设备,RSR30-x spu10
分布式设备有:RSR77,RSR77-x,RSR50E-40,RSR30-x v2

三、集中式设备流表查看命令
show ip fpm flows | include 10.132.82.31

查看包含10.132.82.31的数据流,include地址表示包含,后面的表示字符,可以是任何的数据,不一定全部是地址,具体的含义在下面有讲解

四、在分布式设备上查看流表:
分布式设备查看流表需要进入到线卡中,以77x为例,77x有三种载板,分别为Sip1,Sip2,Sip5-x,
1.如果是Sip1的载板,查看流表需要进入到其子板中,如vtty 1/1,vtty 2/1
2.如果是Sip2和Sip5-x,需要直接进入载板所在的槽位查看流表,如:vtty1/0,vtty 2/0
3.退出线卡的按 Ctrl+X

下面是77x查看流表的命令
1.Show ip fpm flows user 10.132.82.31 //查看源地址是10.132.82.31的所有流信息如下图所示
技术分享图片

红框中的数据的含义为:
源地址为10.132.82.31访问目的地址106.59.135.94的udp数据,源端口是10021,目的端口是27960,源地址转换成为123.151.25.216,源端口转换成为51020,
从10.132.82.31发送到106.59.135.94的字节为:137343,即SendBytes的数据
从106.59.135.94返回到10.132.82.31的字节为:2617,即RecvBytes的数据

2.show ip fpm flows filter Pr Src mask Dst mask
命令中Pr代表协议号,常见的有ICMP(1)、TCP(6)、UDP(17)
Src mask表示源地址和掩码,可以是一个地址,也可以表示一个网段
Dst mask表示目的地址和掩码,也可以是地址或网段,

show ip fpm flows filter 6 10.132.82.21 255.255.255.255 0.0.0.0 0.0.0.0
查看源地址为10.132.82.21,目的地址为any的所有tcp的数据
技术分享图片

show ip fpm flows filter 6 10.132.82.21 255.255.255.255 220.181.132.154 255.255.255.255
查看源地址为10.132.82.21,目的地址为220.181.132.154的tcp的流表
技术分享图片

3.show ip fpm flows filter Pr Src mask Dst mask de
查看数据的进出接口,如下图所示
show ip fpm flows filter 6 10.132.82.21 255.255.255.255 220.181.132.154 255.255.255.255 de
查看源地址为10.132.82.21,目的地址为220.181.132.154的tcp的进出接口,红框中的位置,16进制0031代表入接口,0033代表出接口,
技术分享图片

通过下面的命令查看具体的接口
show ef-interface 0x0031 ---查看入接口(如果是聚合口,不能看到从聚合口的那个接口进入的)
技术分享图片

show ef-interface 0x0033 --查看出接口,0/1/1是在线卡中的显示,线卡编号是1/0,所以主程序下的出口为1/1/1
技术分享图片

以上是关于3.3 OpenFlow 流表的主要内容,如果未能解决你的问题,请参考以下文章

OpenFlow协议简单介绍

OpenFlow协议(OVS)

软件定义网络基础---OpenFlow流表

软件定义网络基础---OpenFlow流表

openflow流表的技术实现难点都有哪些

Neutron 理解 : Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population