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协议[通俗易懂]

  •  

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 分布式事务TCC框架-hmily(spring cloud feign)

    分布式事务TCC框架-hmily(spring cloud feign)官网案例:文档(springcloud):https://dromara.org/zh/projects/hmily/user-springcloud/官网示例:https://github.com/dromara/hmily/tree/master/hmily-demo/hmily-demo-springcloud本示例:https://codechina.csdn.net/wwwzhouzy/zhouzy-hmily一、说明hmily是一个高性能异步分布式事务TCC框架,具有以下..

    2022年5月21日
    112
  • 测试15

    测试15无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。HTTP的接口测试工具有很多,

    2022年7月3日
    21
  • python输出如何换行_python不换行输入

    python输出如何换行_python不换行输入在我们常用的print()方法进行输出时,通常输出结果是整行显示出来的,这时候我们需要考虑一下,我们输出的结果需不需要换行?python学习网,大量的免费python视频教程,欢迎在线学习!不需要换行的方法也是嗯容易的的,这里就不多赘述了,来说说如何做到输出换行:常用的转义符方式:\n#-*-coding:utf-8-*-A=”来看看能不能\n换行。”print(A)输出结果来看看能不能换行…

    2025年7月18日
    1
  • python suds_在python3.x上安装suds 并访问webservice「建议收藏」

    python suds_在python3.x上安装suds 并访问webservice「建议收藏」suds。。。py3很乱。。一开始直接使用命令行:pipinstallsuds安装,结果报错ImportError:Nomodulenamedclient,然后就自然的pipinstallclient,然后成功了,pipinstallsuds安装,这下成功安装了。但是在python里虽然能importsuds。。但不能fromsuds.clientimportClien…

    2025年5月31日
    0
  • java目录删除_java删除文件及目录[通俗易懂]

    java目录删除_java删除文件及目录[通俗易懂]java中删除目录事先要删除目录下的文件或子目录。用递归就可以实现。publicvoiddel(Stringfilepath)throwsIOException{Filef=newFile(filepath);//定义文件路径if(f.exists()&&f.isDirectory()){//判断是文件还是目录if(f.listFiles().length==…

    2022年6月5日
    33
  • VS2013序列号_visual studio2010激活码

    VS2013序列号_visual studio2010激活码VS2008序列号/注册码(各种版本都有)2009-08-2123:18   –VS2008.NET简体中文版序列号1.VisualStudio2008ProfessionalEdition:XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT2.VisualStudio2008TeamTestLoadAgent:WPX3J-BXC3W

    2022年8月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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