Openflow 消息处理流程笔记

合集下载

OpenFlow消息

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连接主要是为了保证可靠性。

基于openflow的sdn工作流程

基于openflow的sdn工作流程

基于openflow的sdn工作流程
基于的工作流程
(软件定义网络)是通过将控制平面和数据平面分离来实现网络的软件化的一种新的网络架构。

作为的重要组成部分,实现了控制平面和数据平面之间的交互。

基于的的工作流程如下:
1. 控制器与交换机建立连接。

控制器是的大脑,负责集中控制整个网络。

交换机替代了传统的交换机,提供了由控制器编程的流表。

2. 交换机将新到达的流量封装成-消息发送给控制器。

对于流表中没有匹配的流量,交换机会主动询问控制器应该如何处理。

3. 控制器收到-后,根据自身的控制逻辑计算出该流量的转发路径,然后下发-消息给交换机。

-消息将包含流表的匹配规则和动作。

4. 交换机根据-消息更新自己的流表,对后续匹配该规则的流量进行快速转发,无需再次与控制器交互。

5. 如果流表发生变更,交换机还会主动发送-消息给控制器。

6. 控制器可以通过发送-消息直接对交换机进行流量注入。

通过控制器和交换机之间的互动,实现了对网络的集中式控制和编程。

这种工作模式极大地提升了网络的灵活性和可编程性。

【个人总结系列-11】Openflow协议的理解-学习及总结

【个人总结系列-11】Openflow协议的理解-学习及总结

Openflow协议的理解-学习及总结Openflow协议概述OpenFlow协议是斯坦福大学的Nick McKeown提出的,随着OpenFlow协议的提出,SDN(Software Defined Network)也逐渐得到人们以及网络设备运营商的关注。

OpenFlow协议的主要思想就是将传统网络交换机数据包转发的过程分离开来,原来由交换机一步完成的转发动作现由2种设备协作完成,分别是支持openflow协议的交换机(假设为OVS)和控制器(以下称controller)。

OVS 里面维护了一个叫做流表(flow table)的东西,用来指定转发的策略,流表是在controller的控制下生成的,并且controller随时可以维护流表(删除、添加、修改流表项)。

所以网络管理人员可以很容易自己定义网络的行为,这也是SDN的原因。

在OpenFlow网络中数据包的转发流程是这样的:OVS接收到数据以后,通过和流表项进行匹配决定这个包的走向(转发、丢弃还是传给controller等),所以流表就相当于控制的策略,定义网络的行为只要在controller端对流表进行操作即可。

这就涉及到controller和OVS之间通信和交流的问题,而Controller和OVS之间通信的消息格式、内容及种类就是OpenFlow协议的主要内容。

OVS通过secure channel和controller进行通信,而且通信内容是通过TLS加密的,从secure channel发出和接收到的信息是和交换机接收到的数据包(到达的数据包)是不一样的,他们不经过流表的处理,OVS和controller的关系如下图所示[1]:图2-1-1 OVS和控制器的关系所以OpenFlow网络中最重要的就是流表(流表的结构和匹配的过程)和controller与OVS之间的通信。

下面主要介绍一下自己理解的这两块的内容。

流表每个交换机包括许多流表和一个组表,流表从0开始进行编号。

openflow控制器和openflow交换机之间建立信道连接的基本过程

openflow控制器和openflow交换机之间建立信道连接的基本过程

openflow控制器和openflow交换机之间建立信道连接的基本
过程
1. OpenFlow控制器通过TCP/IP协议向OpenFlow交换机发送一个特殊的HELLO消息。

2. OpenFlow交换机接收到HELLO消息后,会发送一个特殊的HELLO消息作为响应。

3. 控制器收到交换机发送的HELLO消息后,会发送FEATURES_REQUEST消息给交换机,请求交换机的基本信息,如支持的OpenFlow版本号、流表容量等。

4. 交换机接收到FEATURES_REQUEST消息后,会发送FEATURES_REPLY消息给控制器,包含交换机的基本信息。

5. 控制器接收到交换机的FEATURES_REPLY消息后,会发送一个配置消息,如设置交换机的流表规则、端口配置等。

6. 交换机根据控制器发送的配置消息,进行相应的配置操作,并确认操作完成。

7. 控制器和交换机建立了信道连接后,可以进行OpenFlow协议定义的各种控制和管理操作,如下发流表规则、查询交换机状态等。

openflow协议的工作原理与流程

openflow协议的工作原理与流程

openflow协议的工作原理与流程OpenFlow协议是一种应用在软件定义网络技术上的标准化协议,它将传统的网络管理任务行分配给网络控制器,允许网络控制器以更灵活、更自动化的方式来操作网络设备和流量,开发出更加灵活的网络环境。

OpenFlow协议的工作原理与流程可以分为四个步骤:1、网络控制器发起一个消息,将它的流表更新消息发给OpenFlow 交换机;2、OpenFlow交换机将收到的消息存入其内部的流表中;3、OpenFlow交换机检测网络中的流量,并根据存储的流表信息对其进行分析;4、OpenFlow交换机根据流量分析结果,执行相应的动作,将流量转发给相应的设备或端口。

OpenFlow协议的工作原理相对比较简单,但要全面地理解它,仍需了解其实现过程中的详细信息。

首先,OpenFlow协议使用一个专有消息格式,即OpenFlow消息。

这个消息封装了从网络控制器发给OpenFlow交换机的所有信息。

这个消息包括网络控制器中定义的规则,以及所有其他消息,如更新和请求。

其次,OpenFlow协议中的流表也是非常重要的组成部分,它是由网络控制器设置的一组规则,它定义了OpenFlow交换机如何根据流量分析结果执行相应的动作。

在流表中,每个表项包括源IP地址、目的IP地址、协议类型,以及网络控制器中定义的要求行为,如转发流量到特定端口、限制流量速度等。

在这里,需要注意的是,每个OpenFlow交换机的流表可以由多个控制器定义,即同一个交换机可以有多个不同的控制器对其进行控制。

Finally, OpenFlow网络可以使用一种叫做“Groups”的机制,来实现多个端口间的流量聚合,以及“Action Set”功能,来实现多个不同动作的应用,从而更加智能和灵活地管理网络流量。

通过以上介绍,我们可以得出结论:OpenFlow协议的工作原理与流程是,网络控制器将流表更新信息发给OpenFlow交换机,OpenFlow交换机将收到的信息存入流表中,进而检测网络中的流量,并根据流表中的信息进行分析,最终根据流量分析结果执行相应的动作,将流量转发给相应的设备或端口。

OpenFlow系统操作手册

OpenFlow系统操作手册

目录第一节登录系统 (3)第二节按键、图标说明 (6)第三节系统操作 (7)3.1、新增 (7)3.2、插入 (7)3.3、重制 (8)3.4、删除 (8)3.5、恢复删除 (8)3.6、保存 (8)3.7、剪切 (8)3.8、复制 (9)3.9、粘贴 (9)3.10、样式 (9)3.11、分组 (9)3.12、排序 (10)3.13、查询 (10)3.14、刷新记录 (12)3.15、查找 (12)3.16、替换 (13)3.17、窗口风格 (13)3.18、最小化所有窗口与撤销 (14)3.19、添加工具 (14)3.20、自定义校验 (15)第四节系统功能 (16)4.1、切换用户 (16)4.2、修改口令 (16)4.3、刷新 (17)4.4、目录 (17)4.5、文件柜 (18)4.6、工作流 (24)4.7、装饰图 (26)4.8、批注 (27)4.9、注册 (27)4.10、添加工具 (27)4.11、F4查询 (29)4.13、继承 (42)4.14、打印格式 (42)4.15、打印预览 (43)4.16、自定义显示格式 (45)4.17、注销在线用户 (47)4.18、抛单参数 (48)第五节表单的建立 (49)第一节登录系统1、双击桌面上的“傲鹏协同管理平台”图标或“开始 / 程序 / opensoft / 傲鹏协同管理平台”启动系统(见图1),在图1中输入以下信息后,点击“Y”进入系统(见图3)第一次使用系统时,点击“Y”会出现注册窗口(见图2),在图2中正确填写本公司提供的序列号,点击“注册”后才能使用系统栏位说明(图1)帐套:在第一节中建立的套帐,本案例为“开发套帐”语言:本系统支持多种语言,各公司可根据情况选择适合自己公司的语言。

其中“中文伪繁”是指在简体操作系统中显示繁体字库openflow系统;“中文伪简”是指在繁体操作系统中显示简体字库openflow系统;“公司字体”指按公司自定义的字体显示openflow系统。

openflow协议的工作原理与流程

openflow协议的工作原理与流程

openflow协议的工作原理与流程OpenFlow协议是由Stanford大学交换机项目研发的一种可以实现交换机和控制器之间的通信方式,具有很好的灵活性和可扩展性。

它是一种基于TCP/IP协议来处理设备间传输控制报文的北向协议,可用于控制交换机把数据包从一个端口转发到另一个端口的过程,它的出现彻底改变了传统网络中的网络拓扑控制,使得网络管理者可以通过简单的控制,实现网络的更加高效的运行。

OpenFlow协议的工作原理和流程可以分为三部分,即控制器、交换机和用户。

控制器是OpenFlow协议的核心,它负责接收用户请求,根据用户的要求构建流表,并将流表发送给交换机;交换机是OpenFlow协议的基础平台,它负责接收控制器发送的流表,并将流表应用于数据包的转发;最后,用户是OpenFlow协议的最终使用者,它负责发送控制命令给控制器,以便控制器能够构建流表,此外,用户也可以接收到交换机的转发结果。

OpenFlow协议的工作流程如下:1. 用户发出控制命令:用户发出对交换机的控制命令,以便在控制器上构建流表,以便控制数据包的转发。

2. 控制器构建流表:控制器根据用户的控制命令,构建流表,并将流表发送给交换机。

3. 交换机应用流表:交换机接收到控制器发送的流表,然后根据流表中的指令对数据包进行转发。

4. 用户接收结果:用户接收到交换机的转发结果,以便确定网络的转发情况。

OpenFlow协议的优点:1. 灵活性:OpenFlow协议可以让网络管理者更加灵活的控制网络的拓扑,而不受传统网络限制。

2. 可扩展性:OpenFlow协议可以实现网络的无缝扩展,可以更加高效的扩展网络。

3. 安全性:OpenFlow协议可以避免ddos攻击,保护网络的安全性。

OpenFlow协议的缺点:1. 复杂性:OpenFlow协议比较复杂,需要具备一定的技术能力才能正确的控制网络拓扑。

2. 成本:OpenFlow协议需要使用支持OpenFlow协议的硬件设备,因此成本比较高。

OpenFlow网络技术原理介绍

OpenFlow网络技术原理介绍
代表OpenFlow控制器的控制信道 代表OpenFlow管道的起点 代表报文的进入端口 用于某些命令的特殊值, 出入端口不能设为any 代表交换机本地网络的堆栈和管理堆栈
TABLE IN_PORT ANY LOCAL
NORMAL
FLOOD
代表传统的非OpenFlow交换机管道
代表传统的非OpenFlow交换机泛洪
14
15
OpenFlow Processing Pipeline

OpenFlow管道处理流程
Packet in
Ingress port
Action OpenFlow管道 Action set Set=0
Table 0
Packet+ Ingress port+ metadata
Table 1
Table Action n set
Discovery 仅仅是理论和功能建模 Data
2
5
Ethane架构
Ethane 中央控制器 Ethane交换机
中央控制器 ?
Ethane交换机
奠定OpenFlow 技术基础
2
6
SDN架构
SDN 应用层 控制层 基础设施层 应用层
API
应用程序
API API
控制层
SDN 控制软件
提取报文的 特征信息 (mac、ip等)
下发Flow-mode 消息到交换机, 添加流表项
yes 按照匹配的 流表项转发
下发packet out 报文,动作为 out到table
25
25
报文上送控制器的处理过程
25
26
单播报文流表转发
报文从 表0开始 yes
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

何腾飞2017.04.25更新Openflow 消息处理源码:sptn_code中ofp/dpa/tne模块。

简介:ofp模块接收sck的flow_mod消息,处理后发送给DPA, DPA处理后在发送给TNE。

以下消息处理过程均以flow_mod消息为例,*部分为group_mod消息的处理。

*、Sck处理流程sck_create_proc()sck_receive_proc()一、Ofp处理流程简介:接收SCK消息,发送给DPA。

File:ofpmain.c1.ofp_create_proc()File:ofprecv.c一系列初始化操作;设置接收函数ofp_receive_proc() ;...2.ofp_receive_proc()in: ips消息,queue_id队列id判断queue_id:Sck : 调用ofp_rcv_sck_ips();...3.ofp_rcv_sck_ips()In: ips消息判断ips_type消息类型:Sck_register;Sck_unregister;Sck_rsp;Sck_error;Sck_data;Openflow协议数据:ofp_message_reassemble() ;ofp_check_of_msg_list();Netconf协议数据:...Sck_close;4.ofp_message_reassemble()收到ofp消息后,首先需要存入ofp消息队列,此时先要判断是否需要新建一个ofp消息块节点or使用现有的LQE队列对应的ofp消息块节点,Ofp消息队列如下:1---2---3---4---5---...---N该消息队列为一个双向循环链表;N为全局变量v_ofp_shared->ofp_msgs始终不变;初始化时N.next和N.prev均指向N自身,N自身是没有数据域的(N.self==null);有数据节点时,N.next始终指向第1个结点,N.prev始终指向最后1个结点;故只有满足以下条件才不需要新建LQE节点:1.队列为空(N.next == N时);2.队列不为空但尾结点为NULL代码实现如下,解释:A --- B---N(N为当前的全局ofp消息的LQE )ofp_alloc_sck_mssage_cb()申请分配并初始化一个OFP_SCK_MSG_CB结构类型的ofp_message,然后插入ofp消息队列(LQE类型的ofp_msgs)的前面;NBB_INSERT_BEFORE()说明:N为目前的全局ofp消息LQE;E为新分配的ofp消息的LQE;ASSERT宏只有DEBUG模式下有效,用于验证入参E的指针为null,N的指针不为null;5.ofp_check_of_msg_list()File:ofpsck2.c依次处理ofp_msg,对符合条件的msg执行以下处理:ofp_save_of_data();ofp_rcv_of_data(ofp_message);ofp_free_ofp_message(ofp_message);6.ofp_rcv_of_data()File:ofpdpa1.c提取ofp_header(openflow头);关闭Timer()定时器,其他一些处理;判断header_type类型:Hello;Echo_request;...Flow_mod:Ofp_rcv_flow_mod();Group_mod:ofp_rcv_group_mod();...Mulyipart_request;...其他自定义类型;5.1 ofp_rcv_flow_mod()赋值flow_mod header;赋值flow_mod body(行动);赋值match ,判断处理;(只有type,length ?)判断指令类型:Goto_table;...Write_actions;Ofp_fill_action_list();...构造ips;将flow_mod ,match拷贝到ips;判断各类偏移:...ofp_snd_dpa_ips(); //发送ips消息给dpa5.2 ofp_fill_action_list()一系列初始化;判断action_type(组帧action_array): Output;TTL_out;...PUSH_VLAN;...sptn_exp_action_type;...用action_array 组帧instruction_entry;*. ofp_rcv_group_mod()赋值group_mod header;赋值group_mod body(行动);ofp_fill_bucket_action();构造ips;将group_mod 拷贝到ips;ofp_snd_dpa_ips();*. ofp_fill_bucket_action()File: ofpdpa2.c一系列初始化;判断action_type(组帧action_array):Output;TTL_out;...PUSH_VLAN;...sptn_exp_action_type;...用action_array 组帧bucket_entry;7.ofp_snd_dpa_ips()File:ofpdpa.c调用N-base接口函数NBB_SEND_IPS();NBB_SEND_IPS(haf_mj_cb->partner_data_pid, USER_TO_DPA_Q, ips);二、Dpa处理流程简介:接收OFP消息,发送给TNE。

前期处理流程均类似,参考上面的ofp处理流程。

dpa_create_proc();dpa_receive_proc();Case USER_TO_DPA_Q: dpa_rcv_dpa_ips();1.dpa_rcv_dpa_ips()File: dparecv.c判断ips消息类型:Dpa_register;...Flow_mod:dpa_rcv_flow_mod();Group_mod;dpa_rcv_group_mod();...2.dpa_rcv_flow_mod()File: dpa_flow_mod_recv.cdpa_save_match();判断flow_mand 指令类型:ADD(添加新的流表项):flow_entry_cb非空判断,dpa_send_tne_flow_mod();DELETE:flow_entry_cb中command修改为del,dpa_send_tne_flow_mod();MODIFY:flow_entry_cb非空判断,dpa_send_tne_flow_mod();3. dpa_send_tne_flow_mod()通过flow_entry_cb组帧flow_mod_array[];组帧flow_mod_ips;判断send_data_ind_type 类型;发送消息dpa_snd_dpa_ips();*. dpa_rcv_group_mod()File: dpa_flow_mod_recv.c判断group_mand 指令类型:ADD(添加新的流表项):group_entry_cb非空判断,dpa_send_tne_group_mod();DELETE:group_entry_cb中command修改为del,dpa_send_tne_group_mod();MODIFY:group_entry_cb非空判断,dpa_send_tne_group_mod();*. dpa_send_tne_group_mod()通过group_entry_cb组帧group_mod_array[];组帧group_mod_ips;判断send_data_ind_type 类型;发送消息dpa_snd_dpa_ips();4. dpa_snd_dpa_ips()File: dparecv.c调用N-base接口函数NBB_SEND_IPS();三、TNE处理流程简介:接收DPA消息,发送给?。

前期处理流程均类似,参考上面的ofp处理流程。

Tne_create_proc();tne_receive_proc();判断queue_id类型:...Case DPA_TO_USER_Q : tne_rcv_dpa_ips();...Case SCK_TO_APPL_Q : tne_rcv_sck_ips();...Case USER_TO_DCI_Q : tne_rcv_dci_ips();1.tne_rcv_dpa_ips()判断ips消息类型:Dpa_register;...Flow_mod:tne_rcv_dpa_flow_mod();Group_mod:tne_rcv_dpa_group_mod();...2.tne_rcv_dpa_flow_mod()file: tnedpa1.cParms : ips判断table_id类型:9 : tne_assemble_injected_flow_table()10 (V ALN_FLOW_TABLE):tne_assemble_vlan_flow_table();//流表编码13 : tne_assemble_mpls_l2_port_flow_table()...tne_save_config();//?tne_send_set_rq();//?3. tne_assemble_vlan_flow_table()流表编码函数。

...tne_code_key_vlan_table();//Match field编码判断flow_mand指令类型:ADD / MODIFY :tne_code_goto_table();// 流表动作goto编码。

tne_code_apply_action();// 流表动作apply编码。

...3.1 tne_code_apply_action()判断actiontype行动类型:Output;Group;Pop_VLAN;...*. tne_rcv_dpa_group_mod() file: tnedpa1.cParms : ipsFunc: 对group按类型编码。

判断group_id类型:9 :Interface: tne_assemble_mpls_interface_group()L2 VPN : tne_assemble_mpls_l2_vpn_label_group()Tunnel ;SWAP;10 :L2 Tag: tne_assemble_mpls_l2_tag_group()Fast : tne_assemble_mpls_fast_failover_group()11: tne_assemble_l2_unfiltered_group()0: tne_assemble_l2_interface_group()tne_save_config();//?tne_send_set_rq(..., TNE_SET_SDN_CFG,...);//?*. tne_assemble_mpls_interface_group()File: tnegroup.cFunc: group编码...判断group_mand指令类型,设置Pcur;判断group_mand指令类型:ADD / MODIFY :基本配置pcur;bucket配置;tne_code_bucket_action(); //group动作bucket编码。

相关文档
最新文档