资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2020-09-24,#,2012.12.20,Deep Intro to SDN/Openflow,Openflow,代码分析,Openflow,环境搭建与测试,2012.12.20Deep Intro to,1,Reference,OpenFlow/SDN Introduction 2012ONS,OpenFlow and SDN in the Financial IndustryPeter Krey.2012ONS,Flow Visor Engineering TutorialRob Sherwood.2012ONS,Trema tutorialNEC Trema Team2012ONS,How SDN will shape networking Nick McKeown.2011ONS,Openflow Specification v1.1.0,Openflow1.0.0reference,版本源码,openflow.org,Reference OpenFlow/SDN Introdu,2,Why&what is SDN&Openflow?,Why&what is SDN&Openflow?,3,The network todayclose systems,设备管理独立、协议分散,The network todayclose syst,4,Controller,as network OS,Open API,SDN(,网络功能重构,)open system,Controller as network OSOpen A,5,What SDN looks like,应用层,:,虚拟网络覆盖、,network slicing(,网络分片,),、,tenant-aware broadcast,、,application-aware path computation,(路经计算)、集成其他软件包、政策、安全认证、流量工程,控制平面层,:,数据平面资源调度、共享库,(,如拓扑信息、主机元数据、状态抽象,),数据平面层:,数据包转发(按照流表项)、数据包操纵(按照流表项)、流量统计,What SDN looks like应用层:控制平面层:数,6,Openflow components,网络虚拟化,Trema is Openflow programming framework for Ruby and C,FlowVisor,就是位于硬件结构元件和软件之间的,网络虚拟层,允许,多个控制同时控制一台,OpenFlow,交换机,,但是每个控制器仅仅可以,控制,经过这个,OpenFlow,交换机的,某一个虚拟网络,通过,FlowVisor,建立的试验平台可以在不影响商业流的转发速度的情况下,允许多个网络试验在不同的虚拟网络上同时进行,Openflow components网络虚拟化Trema,7,A network slice is a collection of sliced switches/routers.,Slicing layer(,虚拟切片,):,实现网络切片隔离,A network slice is a collect,8,How SDN will shape networking,(,An industry change,),使网络运营商和使用者对所运营所使用的网络有更大的权限(,用户定制本地所需的网络功能、淘汰不需要的功能模块、创建虚拟网络实现隔离,),加快网络创新(,以软件更新的速度创新、标准随软件的更新情况而制定、促进技术交流、促进高校技术创新,),供应链多样化(,很多软件供应商、基本的硬件层抽象后实现多样化的功能延伸,),建立更健壮的机制(,标准化的数据转发层抽象、对各种网络功能可实现单独测试,),How SDN will shape network,9,SDN development,SDN development,10,openflow和SDN深入介绍及openflow代码分析、环境搭建课件,11,Openflow switches,Openflow switches,12,Open controllers,Open controllers,13,openflow和SDN深入介绍及openflow代码分析、环境搭建课件,14,Openflow Demonstration,可以在网络系统中通过移动每个子模块来测试每个模块,并可以决定如何划分设计单元,支持无线网络移动性研究的框架,Elastic tree,逻辑上分成三个功能模块,优化、寻址、能量控制,。,能量控制模块来切换各端口、线卡和整个交换机的能耗状态。,Openflow Demonstration可以在网络系统中,15,FlowVisor Creates Virtual Networks,FlowVisor Creates Virtual Netw,16,Openflow,数据包转发,代码分析,Openflow数据包转发代码分析,17,代码的大体结构,涉及报文传输与生成的,main,函数,udatapath.c,负责,datapath,controller.c,负责,controller,secchan.c,负责安全通道,,,连接,controller,和,udatapath,,,controller,和,switch,的数据交互要经过,secchan,dpctl.c,负责管理,dp,代码的大体结构,18,openflow,设备上建立的主连接和附属连接,主连接是可靠连接,附属连接不一定是可靠连接,/Vconn-provider.h,struct vconn_class,const char*name;,/,用户定义的连接名字,int(*open)(const char*name,char*suffix,struct vconn*vconnp);,/,尝试与,openflow,设备建立连接,成功则返回,0,、并将连接指针存入,*,vconnp;,不成功则返回,errno,的错误类型,如果不能立即建立连接,则返回,EAGAIN,,转入后台建立连接,openflow设备上建立的主连接和附属连接 struct,19,void(*close)(struct vconn*vconn);,/,关闭,vconn,并且释放存储空间,int(*connect)(struct vconn*vconn);,/,试图完成,vconn,上的连接,成功与否都返回相应的返回值,int(*recv)(struct vconn*vconn,struct ofpbuf*msgp);,/,试图从,vconn,上接收,openflow,消息,成功则返回,0,并且将消息存至*,msgp,,回话发起方需要在通信后删除消息,利用,ofpbuf_delete(),接收失败则返回,errno,消息并且*,msgp,中存入空指针,Vconn_class(2/3),void(*close)(struct vconn*vc,20,void(*wait)(struct vconn*vconn,enum vconn_wait_type type);,/,循环等待消息类型指出具体的,action,Vconn_class(3/3),int(*send)(struct vconn*vconn,struct ofpbuf*msg);,/,试图在,vconn,上将,msg,加入队列待传输,void(*wait)(struct vconn*vco,21,Datapath,代码分析,openflow/udatapath,dp_run,:,处理流超时,检查交换机控制器发出的数据包,然后调度数据包给不同的程序处理,/datapath.c,dp_wait,:,调用,netdev_recv_wait(),,在,poll loop,注册,以在,net_dev(),要准备接收数据包时时,调用,poll_block(),来唤醒当前状态,来接收数据包,/datapath.c,poll_block,:,在事件注册后离开阻塞状态,唤醒,dp_wait(),/poll_block.c,Datapath代码分析openflow/udatapat,22,数据层面转发,从,netdev,接收数据包存入,buffer /lib/netdev.c,如果接收无误,则,fwd_port_input(),被通告处理数据包,/udatapath/datapath.c,数据层面转发从netdev接收数据包存入buffer,23,交换机查询流表,试图找到匹配,udatapath/datapath.c,通过查询活动的流表的链表来搜寻匹配,chain.c,返回,run_flow_through_tables,和,use_through,(,switch-flow.c,中)来更新最近的流使用时间,输出,action,交换机查询流表,试图找到匹配 udatapath/d,24,Do_output,(),最后一个输出端口记录成,prev_port,,确保除了最后一个,action,其他的,action,都用过,buffer,了。,/dp_act.c,如果需要继续转发,则需要,dp_output_port,,,如果输出端口不是特定的虚拟端口,则默认调用,output_packet(),,函数检查如果端口是可用状态,则发出数据包,并将计数器加一,然后清空,buffer /datapath.c,Do_output(),最后一个输出端口记录成prev_po,25,openflow和SDN深入介绍及openflow代码分析、环境搭建课件,26,控制层面转发,remote-_run(),调用,dp_run(),检查安全通道的连接,调用,fwd_control_input(),标识消息的类型并且调用合适的句柄(可能在交换机上新建流表,并进行近一步的转发操作),控制层面转发remote-_run()调用dp_run(),27,Openflow,环境搭建与测试,Openflow 环境搭建与测试,28,Openflow 1.0.0(Reference release),An openflow switch,(,userspace datapath-based switch,不需建立内核模块),1.Ofdatapath,(,udatapath/ofdatapath,),在用户空间实现流表项配置,2.Ofprotocol,在参考交换机中实现安全通道(,secure channel,)的程序,3.Dpctl,配置交换机的工具,Openflow 1.0.0(Reference relea,29,这个发行版本附带的其他软件,1.,Controller,功能:可以连接任意数量的交换机,使其发挥普通二层交换机的作用,2.Vlogconf,功能:适配正在运行的,of,协议或者控制器的系统日志级别,3.Ofp-pki,功能:创建和管理,Openflow,交换机的公钥,4.,一个利用,tcpdump,来分析,openflow,消息 的补丁,5.,一个测试,openflow,功能的递归套件,6.,一个分析,openflow,协议的,Wireshark,解析器,这个发行版本附带的其他软件1.Controller,30,controller punix:/var/run/controller.sock&,Ifconfig eth0 192.168.1.2 up,controller-v ptcp,./configure,Make,Make install,Rmmod bridge,ofdatapath punix:/var/run/dp0.sock-i eth1-local-port=tap:tap0&,ifconfig tap0 192.168.1.1,ofprotocol unix:/var/run/dp0.sock tcp:
展开阅读全文