OpenFlow协议分析
【个人总结系列-51】虚拟网络-SDN软件定义网络-OpenFlow-OpenvSwitch-NOX总结
虚拟网络主要根据自己的理解并结合项目采取的技术方案阐述了虚拟网络的基本概念、SDN和OpenFlow思想、OpenFlow网络以及Open vSwitch和NOX等内容。
应用层协议分析则以编程实践为主,主要对协议分析、数据包结构和winpcap的使用进行了总结。
1.1 虚拟网络1.1.1 虚拟网络按照我的理解,虚拟网络是与实体网络和传统网络相对应的一种网络,是以传统网络为基础,通过虚拟技术实现在逻辑上构成和传统网络一样的网络。
传统网络一般是各个主机或服务器(网络节点)通过各种网络设备(如交换机等)互连起来进行通信,而虚拟网络的虚拟性主要表现在节点的虚拟和网络设备的虚拟,因此在虚拟网络中,一个网络节点不一定是一台实体机,而有可能是一台实体机虚拟出来的某一个虚拟机。
一台实体机可以虚拟出几台甚至几十台虚拟机,他们在逻辑上和在网络中会被视为多个网络节点,对应于传统网络中的多台实体机。
虚拟网络的虚拟性还表现在网络设备的虚拟性,如交换机不是真实的硬件交换机,而是通过一台主机虚拟出来的交换机,在这台主机上安装实现了交换机功能的软件,从而实现了与硬件交换机同样的效果,这台虚拟交换机甚至也可能只是某个主机中的某一个虚拟机安装了实现交换机功能的软件而虚拟出来的。
传统网络的转发决策等都是烧录在网络设备中的,网络管理人员几乎无法通过改变转发策略等来控制网络的行为,而虚拟网络对软件定义网络(SDN)具有很强的支持性,从而使得开发人员可以自己定义网络的行为,使得未来网络可以与硬件无关。
1.1.2 SDN和OpenFlow思想过去,网络是以硬件为中心,交换机、路由器设备成为数据包转接唯一用途的设备。
而以硬件为中心的网络存在创新缓慢、将软件烧写到芯片中会增加生产周期,减少系统集成的特性等问题。
更坏的是,一旦烧录完成,硬件无法轻易修改。
SDN 能够高效地把网络数据流处理从控制数据流的逻辑和规则中分离出来。
这让运营商和企业能够控制管理自己的数据,从而实现能够实施不同规则和路由的能力,包括决定哪些类型的数据在本地而哪些类型的数据在远程处理。
OpenFlow消息
OpenFlow消息☞Openflow消息总共分为三⼤类:1、Controller‐to‐Switch控制器⾄交换机消息此类消息由控制器主动发出 Features ⽤来获取交换机特性 Configuration ⽤来配置Openflow交换机 Modify‐State ⽤来修改交换机状态(修改流表) Read‐Stats ⽤来读取交换机状态 Send‐Packet ⽤来发送数据包 Barrier 阻塞消息 2、Asynchronous 异步消息此类消息由交换机主动发出 Packet‐in ⽤来告知控制器交换机接收到数据包 Flow‐Removed ⽤来告知控制器交换机流表被删除 Port‐Status ⽤来告知控制器交换机端⼝状态更新 Error ⽤来告知控制器交换机发⽣错误 3、Symmetric 对称消息,可以由控制器或交换机主动发起 Hello ⽤来建⽴Openflow连接 Echo ⽤来确认交换机与控制器之间的连接状态 Vendor ⼚商⾃定义消息☞Openflow消息格式 Openflow协议数据包由Openflow Header和Openflow Message两部分组成 Openflow header的结构: Openflow Message结构与具体消息类型有关: Openflow消息类型:☞Openflow Channel openFlow Channel是指交换机跟Controller之间的连接通道,可以是外带管理通道(交换机⾯板上跟Console⼝在⼀起的那个单独的Ethernet端⼝,物理上跟业务端⼝分离),也可以是带内管理⼝(复⽤业务端⼝),现在常见的都是带外管理⼝,主要原因是简单,⽤带内⼝需要配置交换芯⽚和协议栈。
openFlow Channel连既可以是TCP连接,也可以是加密的TLS连接,由设备商或者⽤户⾃⾏决定⽤哪种。
使⽤TCP/TLS连接主要是为了保证可靠性。
openflowpacket_out和packet_in分析
openflowpacket_out 和packet_in 分析任务⽬的1、 掌握发送Packet-in 消息过程及其消息格式。
2、 掌握OpenFlow 控制器发送Packet-out 消息过程及其消息格式。
实验原理Packet-In使⽤Packet-In 消息的⽬的是为了将到达OpenFlow 交换机的数据包发送⾄OpenFlow 控制器。
以下2种情况即可发送Packet-In 消息。
不存在与流表项⼀致的项⽬时(Table-miss ),OFPR_NO_MATCH匹配的流表项中记载的⾏动为“发送⾄OpenFlow 控制器”时,OFPR_ACTION发送Packet-In 消息时OpenFlow 交换机分为两种情况,⼀种是缓存数据包,⼀种是不缓存数据包。
如果不通过OpenFlow 交换机缓存数据包,那么Packet-In 消息的buffer_id 字段设置为-1,将整个数据包发送⾄OpenFlow 控制器。
如果通过OpenFlow 交换机缓存数据包,那么以通过SET_CONFIG 消息设置的miss_send_len 为最⼤值的数据包数据将发送⾄OpenFlow 控制器。
miss_send_len 的默认值为128。
未实施SET_CONFIG 消息的交换时,使⽤该默认值。
Packet-Out Packet-Out 消息是从OpenFlow 控制器向OpenFlow 交换机发送的消息,是包含数据包发送命令的消息”。
若OpenFlow 交换机的缓存中已存在数据包,⽽OpenFlow 控制器发出“发送该数据包”的命令时,该消息指定了表⽰相应数据包的buffer_id 。
使⽤Packet-Out 消息还可将OpenFlow 控制器创建的数据包发送⾄OpenFlow 交换机。
此时,buffer_id 置为-1,在Packet-Out消息的最后添加数据包数据。
制器与OpenFlow 交换机在连接建⽴过程中会存在拓扑发现的环节,该环节会密集出现Packe-in/out 消息,其交互流程如下:字段⽐特数内容buffer_id32表⽰OpenFlow 交换机中保存的数据包的缓存id Total_len16帧的长度in_port16接受帧的端⼝reason8发送Packet-in 消息的原因pad8⽤于调整对齐的填充data任意包含以太⽹帧的数据时使⽤的字段。
OpenFlow 流表
流表详解
流表由很多个流表项组成,每个流表项就是 一个转发规则。 进入交换机的数据包通过查询流表来获得转 发的目的端口。
流表项的组成
流表项由头域、计数器和操作组成;其中头域是 个十元组,是流表项的标识;计数器用来计数流 表项的统计数据;操作标明了与该流表项匹配的 数据包应该执行的操作。
OpenFlow的flow table中每一个entry支持 3个部分:规则,操作跟状态。 1.规则用来定义flow; 2.操作就是转发、丢弃等行为; 3.状态部分则是主要用来做流量的统计数据。
流表下发模式
主动模式下,Controller将自己收集的流表信 息主动下发给网络设备,随后网络设备可以直接 根据流表进行转发; 被动模式是指网络设备收到一个报文没有匹配的 FlowTable记录时,将该报文转发给 Controller,由后者进行决策该如何转发,并 下发相应的流表。 被动模式的好处是网络设备无需维护全部的流表, 只有当实际的流量产生时才向Controller获取 流表记录并存储,当老化定时器超时后可以删除 相应的流表,故可以大大节省TCAM空间。
LOGO
OpenFlow
openflow流表匹配规则
openflow流表匹配规则OpenFlow是一种用于网络交换机和路由器的开放式协议,可以实现智能化的网络控制和管理。
在OpenFlow架构中,流表是一种关键的组件,用于指定数据包的处理方式。
下面让我们来学习一下OpenFlow流表匹配规则。
OpenFlow流表由若干条规则(rule)组成,每条规则由多种字段(field)组成。
匹配规则按照优先级(priority)排序,最终匹配的规则将决定当前数据包的处理方式。
匹配规则包含以下字段:1. 交换机入端口:交换机收到数据包的物理接口编号。
2. 数据包源MAC地址(源MAC):数据包的源物理地址。
3. 数据包目的MAC地址(目的MAC):数据包的目标物理地址。
4. 数据包源IP地址(源IP):数据包的源IP地址。
5. 数据包目的IP地址(目的IP):数据包的目标IP地址。
6. IP协议类型(IP Type):数据包所使用的IP协议,如TCP、UDP 等。
7. TCP/UDP源端口(TCP/UDP src):数据包的源端口号。
8. TCP/UDP目的端口(TCP/UDP dst):数据包的目的端口号。
9. VLAN ID:标识数据包所属的VLAN。
10. IPv6源地址(IPv6 src):数据包的IPv6来源地址。
11. IPv6目的地址(IPv6 dst):数据包的IPv6目的地址。
12. IPv6流标签(IPv6 Flow Label):IPv6数据包中流标签字段的数值部分。
OpenFlow的流表匹配规则还包括比较运算符,如等于(EQUALS)、大于(GREATER_THAN)和小于(LESS_THAN)等。
例如,某一规则的匹配条件为:TCP源端口等于80,目的IP等于192.168.0.1,优先级为300。
那么当OpenFlow交换机收到一个TCP数据包,其源端口为80,目标IP为192.168.0.1时,该规则将优先匹配处理。
OpenFlow流表匹配规则能够为网络管理员提供更为灵活的网络管理方式,有效降低网络拥塞,提高网络的稳定性和可靠性。
能完整描述openflow功能的P4
能完整描述openflow功能的P4一、P4与SDN的关系SDN是网络的未来,P4是SDN的未来,基于openflow的传统SDN专注于可编程的控制平面,数据平面仍然是由固定功能的ASIC组成,也就是说openflow的实现仍然需要配套的芯片支持,openflow是与目标硬件相关的。
而P4专注于可编程的数据平面,可以自定义芯片对于数据包的处理方式,添加自己的新功能,新协议,或者对原有协议栈进行优化,更合理的分配片上资源。
openflow利用匹配域可抽象整个TCP/IP协议栈的绝大部分功能,而P4可以完整描述openflow的功能。
二、可编程数据平面programmable data-plane(PDP)的主要特点:1、快速开发和验证新协议为了支持网络的快速演进,标准化组织不断推出新的封装和传输协议,GENEVE,NSH,VXLAN,GEP等等都是最近推出的,与此同时,数据中心也已经开始推出自己的协议用来隔离各个租户,使其业务互相不受影响。
每一种自定义的协议都有其独特的优势,基于在大型网络中多年的运行经验。
2、移除一些无用的协议,简化和精简网络网络世界里有数百种协议,然而一个数据中心网络中往往只需要三到四种,问题在于,不同的数据中心会使用不同的协议组合,因此固定功能的交换机会内置这些协议组合的超集,导致一些珍贵的交换机资源被用到了一些不需要的协议上。
比如我们可以减少L2转发表的大小然后重新分配内存空间到L3路由表。
在tofino中,我们可以将L3 IP路由表从300k增加到1.2M 支持更大的网络和地址空间。
移除不用的协议也意味着减少出错的机会,网络由于根本不用但是却写入到交换机ASIC中的协议错误而引起的中断。
由于并不使用这些协议,所以很难做出判断来debug,使用P4 你只需要添加那些你需要的协议,专注于那些你所需要的表项,简化交换机结构,减少出错的机会。
3、INT实现整个网络的完全可视化,可追溯每一个数据包的转发过程网络监控是可编程网络的一个典型应用,首先我们可以在几个小时内添加更好的监控特。
OpenFlow无线
OpenFlow无线目录1 OPenRoads架构2 设置和安装2.1 物理设备2.2 网络切片2.3 控制器| API3 工具4 示范应用程序5 人6 刊物OpenRoads(或OpenFlow无线)是一个创新和现实部署服务的平台。
建立在OpenFlow 上,OpenRoads可以被分析为以下方面。
1.OpenFlow提供了一个软件定义的网络机制。
但是,在一个拥有创新平台的机制上会出现障碍,OpenRoads通过为他人提供一个完整的平台去部署和创新降低了这种障碍。
2.虽然通过移动通信服务的大量调查,但是很难核查。
无线信道是难以仿真的,并且现实用户的流量/运动对于可靠地确认一个想法的可行性是很重要的, 但是现实的用户流量却是很难被效仿。
通过允许在我们创造的网络中进行研究,OpenRoads可以使上述亮点在网络中完成。
3.不同无线技术之间的切换在今天来说还是很难完成的,这是由于它们每一个都是围绕一个单一的无线技术建立的,因此他们拥有不同的回程网络。
通过将这些网络“扁平化”,我们表明,不同的无线网络之间的切换可以用一个简单的方法在OpenRoads上实现。
OpenRoads架构OpenRoads的体系结构包括了很多层,即物理层,网络虚拟化/切片层和控制器层。
虽然对底层的理解是很重要的,但是许多的研究可以被一个建立在控制器(controller)上的单一程序完成。
这一点可以由下图看出。
更多有关此平台的描述可以从其他出版物中了解到。
我们主要关注提供指导和不同组件间相互关联的信息。
设置和安装物理设备下述的设备已经被用于OpenRoads1.来自NEC和惠普的OpenFlow以太交换机2.带有PC引擎的OpenFlow无线网络接入点(AP)硬件:大部分部件是从Mini-box和/或Netgate购买的,主要如下:∙Motherboard (PCEngine Alix3d2) : netgate minibox∙Outdoor Enclosure : netgate minibox∙Mini PCI WiFi card (802.11b/g): netgate miniboxo At the time of our purchase, linux 802.11n driver was not ready. This card uses the same chip as ours but has higher transmission power.∙Power Adaptor : netgate minibox∙Passive POE injector : netgate minibox∙Antenna : I-com∙Pigtail : streakwave∙Serial DB9(F) to RJ45 Adapter : sfcable∙CF card (We used 2GB CF card)设置和安装1)我们提供了磁盘影像(disk image)。
《图解OpenFlow》第一章:OpenFlow概要
《图解OpenFlow》第⼀章:OpenFlow概要1.1 OpenFlow的历史ONF:Open Networking Foundation(ONF,开放⽹络基⾦会),继承OpenFlow交换机论坛活动的形式,制定OpenFlow规范。
OpenFlow1.2之后的规范由ONF制定。
1.2 有效运⽤现有硬件,实现⾼效设计OpenFlow的初期设计思想是:⽆需设计新的硬件,⽀队现有硬件更新其软件。
因此,OpenFlow是以⽹络设备中内置了TCAM(Ternary Content-Addressable Memory)存储器为前提来实现的。
TCAM是对每个位(bit)实施0、1和don’t care三种匹配的三态电⼦器件,搭载该存储器的⽬的是在⽹络中通过硬件⾼速处理⼦⽹掩码和访问控制列表(ACL)。
1.3 所谓OpenFlow,具体是指什么传统⼆层交换机采⽤以太⽹地址和VLAN标签进⾏交换处理,⽽OpenFlow作为构建⽹络的标准规范,将各数据包(或帧)持有的以太⽹地址、VLAN标签、IP地址、TCP/UDP端⼝号等特征作为“流”来处理,在此基础上进⾏交换,并可以灵活设置路由的路径。
在构建OpenFlow⽹络时,原则上需要将控制⾯和数据⾯作为不同的⽹络,这并⾮必须要构建另外的物理⽹络。
还可以采⽤覆盖(Overlay)⽅式、使⽤VLAN等对同⼀物理⽹络进⾏逻辑分割、或者利⽤能同时⽤于数据⾯和控制⾯的“In-band控制通道”技术。
分别构建物理⽹络的优势是便于区分发⽣故障的部分。
数据⾯的构建⽅法有3种,即直接连接OpenFlow交换机的“Hop-by-Hop⽅式”、通过覆盖⽹络连接OpenFlow交换机的“覆盖⽅式”、组合以上两种⽅案的“混合⽅式”。
Hop-by-Hop⽅式就是OpenFlow交换机直接物理直连,覆盖⽅式则采⽤IP通道等技术构建⽤于数据⾯的覆盖⽹络。
覆盖⽅式具有同时使⽤现有⽹络和OpenFlow⽹络的优点,但处理性能不如Hop-by-Hop,存在MTU变⼩的缺点。
OpenFlow技术及应用模式发展分析
OpenFlow技术及应用模式发展分析4月10日至15日,第30届IEEE计算机通信国际大会(INFOCOM 2011)在上海国际会议中心隆重举行。
本次会议吸引了国内外1000多名计算机和通信领域的专家、学者和企业的科研人员到场,重点围绕云计算、网络安全、数据中心网络、移动互联网、物联网等一系列研究领域的前沿问题进行了深入的探讨。
在备受关注的现场展示环节中(Live Demo),来自清华大学信息技术研究院网络安全实验室的师生们展示了基于OpenFlow的网络安全管理系统LiveSec,引起了与会者的普遍关注。
该系统的成功运行,是国内通信领域的研发团队对前沿技术跟踪、创新工作的完美诠释,在科研成果转化为可用产品的道路上占据了先机。
OpenFlow扬帆起航OpenFlow技术最早由斯坦福大学提出,旨在基于现有TCP/IP技术条件,以创新的网络互联理念解决当前网络面对新业务产生的种种瓶颈,已被享有声望的《麻省理工科技评论》杂志评为十大未来技术。
它的核心思想很简单,就是将原本完全由交换机/路由器控制的数据包转发过程,转化为由OpenFlow交换机(OpenFlow Switch)和控制服务器(Controller)分别完成的独立过程。
转变背后进行的实际上是控制权的更迭:传统网络中数据包的流向是人为指定的,虽然交换机、路由器拥有控制权,却没有数据流的概念,只进行数据包级别的交换;而在OpenFlow网络中,统一的控制服务器取代的路由,决定了所有数据包在网络中传输路径。
OpenFlow交换机会在本地维护一个与转发表不同的流表(Flow Table),如果要转发的数据包在流表中有对应项,则直接进行快速转发;若流表中没有此项,数据包就会被发送到控制服务器进行传输路径的确认,再根据下发结果进行转发。
OpenFlow网络的这个处理流程,有点类似于状态检测防火墙中的快速路径与慢速路径的处理,只不过转发与控制层面在物理上完全分离。
RYU系列2 openFlow13简单交换机源码解读
RYU系列2 openFlow13简单交换机源码解读SDN架构o penFlo w RYU所有可能有⽤的⽹址:f low mod消息f low packet-In/out消息RYUBook教程API地址实现的功能⼀个正常的⼆层交换机具有的功能:1.解析⼊⼝数据包的mac地址,然后查找mac转发表进⾏数据转发2.若mac转发表中没有相应条⽬,则f lood数据包到所有端⼝(除了数据包的进⼊端⼝之外)3.根据应答数据包,学习端⼝与mac的对应关系,更新mac转发表基础openFlow13 ActionopenFlowv1.0将流表项与数据包匹配后对其进⾏的操作称为动作,⽽在openFlowv1.1及其后续版本中都将其改称为指令Action。
流表项形式真正存储的流表mac地址表项形式真正存储的mac地址表这是使⽤h1 ping -c1 h2后的流表。
控制器已经学习到了如何将⽬的地址为h1和h2的包正确转发。
源码解读类定义及初始化mac 地址表由mac_to_port (字典)定义。
初始化mac_to_port 为⼀个空字典。
mac_to_port 的键是IP 地址,值为源地址为键对应的IP 的数据包进⼊交换机的端⼝,同时也是⽬的地址是这个IP 的数据包转发的端⼝。
event_handler当接收到⼀个openFlow 消息时,对应的事件就会产⽣。
事件处理器以事件对象为参数,并调⽤装饰器ryu.controller.handler.set_ev_clsset_ev_cls()装饰函数的两个参数,⼀个是⽀持收到的协议的事件类,如of p_event.EventOFPPacketIn ,另⼀个是openFlow 交换机的状态。
交换机的状态有以下⼏种:switch_features_handler添加table-miss 流表项:交换机接收到控制器的f eatures 消息时的动作。
⼀旦交换机接收到switch f eatures 消息,就会添加table-miss 流表项。
