SDN中的LLDP和Openflow协议[通俗易懂]

SDN中的LLDP和Openflow协议[通俗易懂]OpenFlow交换机把传统网络中,完全由交换机/路由器控制的报文转换为由交换机和控制器来共同完成数据的转发操作,从而实现数据的转发与路由控制的分离。控制器则通过事先规定好的接口操作OpenFlow交换机中的流表,从而达到数据转发的目的。SDN链路发现和拓扑管理主要是控制其利用南向接口的上行通道对底层交换设备上报信息进行统一监控和统计;而策略制定和表项下发则是控制器利用南向接口的下行通道…

大家好,又见面了,我是你们的朋友全栈君。

 

OpenFlow交换机把传统网络中,完全由交换机/路由器控制的报文转换为由交换机和控制器来共同完成数据的转发操作,从而实现数据的转发与路由控制的分离。控制器则通过事先规定好的接口操作OpenFlow交换机中的流表,从而达到数据转发的目的。

SDN链路发现和拓扑管理主要是控制其利用南向接口的上行通道对底层交换设备上报信息进行统一监控和统计;而策略制定和表项下发则是控制器利用南向接口的下行通道对网络设备进行统一控制。

SDN控制器通过LLDP(Link Layer Discovery Protocol,链路发现协议)协议进行链路发现,然后根据发现协议搜集的信息来识别和管理网络拓扑结构。

LLDP协议格式:

SDN中的LLDP和Openflow协议[通俗易懂]

OpenFlow协议的思路,即使网络设备维护一个FlowTable,并且只通过FlowTable对报文进行处理,FlowTable本身的生成、维护和下发完全由外置的控制器Controller来实现,从而实现Controller的全局控制。

OPENFLOW协议

在OpenFlow交换机中,包含安全通道,多级流表和组表。通过安全通道,OpenFlow交换机可以和控制器建立基于OpenFlow协议的连接;而流表则用来匹配OpenFlow交换机收到的报文;组表用来定义流表需要执行的动作。

SDN中的LLDP和Openflow协议[通俗易懂]

                                                                      SDN控制器与Openflow交换机通信

1、流表:

      流表包括包头域(header fileds,匹配包头多个域)、活动计数器(counters)、0 个或多个执行行动(actions)。对每一个包进行查找,如果匹配则执行相关策略,否则通过安全通道将包转发到控制器,控制器来决策相关行为。流表项可以将包转发一个或者多个接口。

SDN中的LLDP和Openflow协议[通俗易懂]

                                                                      OpenFlow协议所支持的三种消息类型

openflow协议格式

(1)匹配域:

  • 一层:交换机入端口(Ingress Port)
  • 二层:源MAC地址(Ether src)、目的MAC地址(Ether dst)、以太网类型(EtherType)、VLAN标签(VLAN id)、VLAN优先级(VLAN priority)
  • 三层:源IP(IP src)、目的IP(IP dst)、IP协议字段(IP proto)、IP服务类型(IP ToS bits)
  • 四层:TCP/UDP源端口号(TCP/UDP src port)、TCP/UDP目的端口号(TCP/UDPdst port)OpenFlow协议所支持的三种消息类型
  • (2)计数器(counter)

  •          计数器可以针对每张表、每个流、每个端口、每个队列来维护。用来统计流量的一些信息,例如活动表项、查找次数、发送包数等。

  • (3)行动(actions)

            Openflow1.0提供两种数据包的处理方法:
               • 转发(Forward)
               • 修改包头(Modify field)

                其中修改包头包括:
             SET_VLAN_VID      //修改VLAN标签
             SET_VLAN_PCP     //修改VLAN优先级
             STRIP_VLAN          //弹出VLAN标签
             SET_DL_SRC          //修改源MAC地址
             SET_DL_DST          // 修改目的MAC地址
             SET_NW_SRC          // 修改源IP地址
             SET_NW_DST            //  修改目的IP地址
             SET_NW_TOS           //修改IP服务类型字段
             SET_TP_SRC             //修改源端口号
             SET_TP_DST          // 修改目的端口号

  •  以上每一种操作称为一个动作(Action),流表中的数据包处理方法是一个动作列表(Action List),动作列表由以上各种动作组合合成。

  在Actions头,包括Type和len字段:(数据结构如下)

 由output类型的数据结构可以看出Port选项:

           ALL:将数据包从除入端口以 外其他所有端口发出
           CONTROLLER:将数据包发送给控制器
           LOCAL:将数据包发送给交换机本地端口
           TABLE:将数据包按照流表匹配条目处理
           IN_PORT:将数据包从入端口发出
           NORMAL:按照普通二层交换机流程处理数据包
           FLOOD:将数据包从最小生成树使能端口转发(不包括入端口)

OpenFlow的建立:

  • OpenFlow连接建立后,控制器最需要获得交换机的特性信息,交换机的特性信息包括交换机的ID(DPID),交换机缓冲区数量,交换机端口及端口属性等等。控制器向交换机发送Features Request消息查询交换机特性,Features Request消息只包OpenFlow Header。交换机在收到Features Request消息后返回Features Reply消息, Features Reply消息包括Openflow Header 和Features Reply Message。

  • 以下为Request和Reply报文:

  • SDN中的LLDP和Openflow协议[通俗易懂]

  • SDN中的LLDP和Openflow协议[通俗易懂]

  • Packet‐in事件(交换机接收数据包)
             Packet‐in消息触发情况1:
            当交换机收到一个数据包后,会查找流表,找出与数据包包头相匹配的条目。如果流表中有匹配条目,则交换机按照流表所指示的action列表处理数据包。如果流表中没有匹配条目,则交换机会将数据包封装在Packet‐in消息中发送给控制器处理。此时数据包会被缓存在交换机中等待处理。

  •   Packet‐in消息触发情况2:
            交换机流表所指示的action列表中包含转发给控制器的动作(Output=CONTROLLER)。此时数据包不会被缓存在交换机中。

  • SDN中的LLDP和Openflow协议[通俗易懂]

  • Reason为packet‐in事件产生的原因

  • 以下为Packet-in报文:

  •  

  • SDN中的LLDP和Openflow协议[通俗易懂]

  • 以下为packet-out报文:

  • 并不是所有的数据包都需要向交换机中添加一条流表项来匹配处理,网络中还存在多种数据包,它出现的数量很少(如ARP、IGMP等),以至于没有必要通过流表项来指定这一类数据包的处理方法。此时,控制器可以使用PacketOut消息,告诉交换机某一个数据包如何处理。

  • SDN中的LLDP和Openflow协议[通俗易懂]

  • SDN中的LLDP和Openflow协议[通俗易懂]

  • 控制器配置流表(Flow‐Mod消息)

  • 当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项时,交换机将此数据包封装到Packet‐in消息中发送给控制器,并且交换机会将该数据包缓存。
    控制器收到Packet‐in消息后,可以发送flow‐mod消向交换机写一个流表项。并且将flow‐mod消息中的buffer_id字段设置为packet‐in消息中的buffer_id值。从而控制器向交换机写入了一条与数据包相关的流表项,并且指定该数据包按照此流表项的aciton列表处理。

  •  

  • SDN中的LLDP和Openflow协议[通俗易懂]

  •  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144007.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 全部覆盖棋盘7×7_acwing题库

    全部覆盖棋盘7×7_acwing题库给定一个 N 行 N 列的棋盘,已知某些格子禁止放置。求最多能往棋盘上放多少块的长度为 2、宽度为 1 的骨牌,骨牌的边界与格线重合(骨牌占用两个格子),并且任意两张骨牌都不重叠。输入格式第一行包含两个整数 N 和 t,其中 t 为禁止放置的格子的数量。接下来 t 行每行包含两个整数 x 和 y,表示位于第 x 行第 y 列的格子禁止放置,行列数从 1 开始。输出格式输出一个整数,表示结果。数据范围1≤N≤100,0≤t≤100输出样例:8 0输出样例:32#include&l

  • 《王道》数据结构笔记整理2022级_数据结构笔记整理

    《王道》数据结构笔记整理2022级_数据结构笔记整理数据结构第一章绪论1.1数据结构的基本概念1.2数据结构的三要素1.3算法的基本概念1.4算法的时间复杂度1.5算法的空间复杂度第一章绪论1.1数据结构的基本概念1.数据:数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别和处理的符号的集合。2.数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。3.数据对象:数

  • 徐州优译翻译宗旨:凭借优异的翻译质量,做最专业的外贸助手!

    徐州优译翻译宗旨:凭借优异的翻译质量,做最专业的外贸助手!

  • QTreeWidget讲解及节点操作

    QTreeWidget讲解及节点操作关于Qt的节点操作,也就是QTreeWidget类的操作。先看我的效果图!   具体实现如下!构造函数中写事件!connect(ui->treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),      this,SLOT(showSelecteddataba

  • Linux开机启动nginx「建议收藏」

    Linux开机启动nginx「建议收藏」在/etc/init.d下创建文件nginxvim/etc/init.d/nginxnginx官方脚本修改配置nginx=”/usr/local/nginx/sbin/nginx”#修改成nginx执行程序的路径NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf”#修改成nginx.conf文件的路径设置文件的执行权限chmoda+x/etc/init.d/nginx可以通过下面指令控制启动停止/etc/init..

  • C++面试「建议收藏」

    C++面试「建议收藏」C++面试

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号