您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > openflow和SDN深入介绍及openflow代码分析、环境搭建
2012.12.20DeepIntrotoSDN/OpenflowOpenflow代码分析Openflow环境搭建与测试ReferenceOpenFlow/SDNIntroduction——2012ONSOpenFlowandSDNintheFinancialIndustry——PeterKrey.2012ONSFlowVisorEngineeringTutorial——RobSherwood.2012ONSTrematutorial——NECTremaTeam2012ONSHowSDNwillshapenetworking——NickMcKeown.2011ONSOpenflowSpecificationv1.1.0Openflow1.0.0reference版本源码openflow.orgWhy&whatisSDN&Openflow?Thenetworktoday——closesystems设备管理独立、协议分散ControllerasnetworkOSOpenAPISDN——(网络功能重构)opensystemWhatSDNlookslike应用层:虚拟网络覆盖、networkslicing(网络分片)、tenant-awarebroadcast、application-awarepathcomputation(路经计算)、集成其他软件包、政策、安全认证、流量工程控制平面层:数据平面资源调度、共享库(如拓扑信息、主机元数据、状态抽象)数据平面层:数据包转发(按照流表项)、数据包操纵(按照流表项)、流量统计Openflowcomponents网络虚拟化TremaisOpenflowprogrammingframeworkforRubyandC•FlowVisor就是位于硬件结构元件和软件之间的网络虚拟层•允许多个控制同时控制一台OpenFlow交换机,但是每个控制器仅仅可以控制经过这个OpenFlow交换机的某一个虚拟网络•通过FlowVisor建立的试验平台可以在不影响商业流的转发速度的情况下,允许多个网络试验在不同的虚拟网络上同时进行Anetworksliceisacollectionofslicedswitches/routers.Slicinglayer(虚拟切片):实现网络切片隔离HowSDNwillshapenetworking(Anindustrychange)使网络运营商和使用者对所运营所使用的网络有更大的权限(用户定制本地所需的网络功能、淘汰不需要的功能模块、创建虚拟网络实现隔离)加快网络创新(以软件更新的速度创新、标准随软件的更新情况而制定、促进技术交流、促进高校技术创新)供应链多样化(很多软件供应商、基本的硬件层抽象后实现多样化的功能延伸)建立更健壮的机制(标准化的数据转发层抽象、对各种网络功能可实现单独测试)SDNdevelopmentOpenflowswitchesOpencontrollersOpenflowDemonstration可以在网络系统中通过移动每个子模块来测试每个模块,并可以决定如何划分设计单元支持无线网络移动性研究的框架Elastictree逻辑上分成三个功能模块——优化、寻址、能量控制。优化器当前流量拓扑能量矩阵每个交换机的能量模型用于能量控制和路由寻址的一组活动组件FlowVisorCreatesVirtualNetworksOpenflow数据包转发代码分析代码的大体结构涉及报文传输与生成的main函数udatapath.c负责datapathcontroller.c负责controllersecchan.c负责安全通道,连接controller和udatapath,controller和switch的数据交互要经过secchandpctl.c负责管理dp•openflow设备上建立的主连接和附属连接•主连接是可靠连接,附属连接不一定是可靠连接/Vconn-provider.hstructvconn_class{•constchar*name;/用户定义的连接名字•int(*open)(constchar*name,char*suffix,structvconn**vconnp);/尝试与openflow设备建立连接,成功则返回0、并将连接指针存入*vconnp;不成功则返回errno的错误类型,如果不能立即建立连接,则返回EAGAIN,转入后台建立连接•void(*close)(structvconn*vconn);/关闭vconn并且释放存储空间•int(*connect)(structvconn*vconn);/试图完成vconn上的连接,成功与否都返回相应的返回值•int(*recv)(structvconn*vconn,structofpbuf**msgp);/试图从vconn上接收openflow消息,成功则返回0并且将消息存至*msgp,回话发起方需要在通信后删除消息,利用ofpbuf_delete(),接收失败则返回errno消息并且*msgp中存入空指针Vconn_class(2/3)•void(*wait)(structvconn*vconn,enumvconn_wait_typetype);/循环等待消息类型指出具体的action}Vconn_class(3/3)•int(*send)(structvconn*vconn,structofpbuf*msg);/试图在vconn上将msg加入队列待传输Datapath代码分析openflow/udatapathdp_run:处理流超时,检查交换机控制器发出的数据包,然后调度数据包给不同的程序处理/datapath.cdp_wait:调用netdev_recv_wait(),在pollloop注册,以在net_dev()要准备接收数据包时时,调用poll_block()来唤醒当前状态,来接收数据包/datapath.cpoll_block:在事件注册后离开阻塞状态,唤醒dp_wait()/poll_block.c数据层面转发从netdev接收数据包存入buffer/lib/netdev.c如果接收无误,则fwd_port_input()被通告处理数据包/udatapath/datapath.c交换机查询流表,试图找到匹配udatapath/datapath.c通过查询活动的流表的链表来搜寻匹配chain.c返回run_flow_through_tables和use_through(switch-flow.c中)来更新最近的流使用时间,输出actionDo_output(),最后一个输出端口记录成prev_port,确保除了最后一个action其他的action都用过buffer了。/dp_act.c如果需要继续转发,则需要dp_output_port,如果输出端口不是特定的虚拟端口,则默认调用output_packet(),函数检查如果端口是可用状态,则发出数据包,并将计数器加一,然后清空buffer/datapath.c控制层面转发remote-_run()调用dp_run(),检查安全通道的连接调用fwd_control_input(),标识消息的类型并且调用合适的句柄(可能在交换机上新建流表,并进行近一步的转发操作)Openflow环境搭建与测试Openflow1.0.0(Referencerelease)Anopenflowswitch(userspacedatapath-basedswitch,不需建立内核模块)1.Ofdatapath(udatapath/ofdatapath)在用户空间实现流表项配置2.Ofprotocol在参考交换机中实现安全通道(securechannel)的程序3.Dpctl配置交换机的工具这个发行版本附带的其他软件1.Controller功能:可以连接任意数量的交换机,使其发挥普通二层交换机的作用2.Vlogconf功能:适配正在运行的of协议或者控制器的系统日志级别3.Ofp-pki功能:创建和管理Openflow交换机的公钥4.一个利用tcpdump来分析openflow消息的补丁5.一个测试openflow功能的递归套件6.一个分析openflow协议的Wireshark解析器controllerpunix:/var/run/controller.sock&Ifconfigeth0192.168.1.2upcontroller-vptcp./configureMakeMakeinstallRmmodbridgeofdatapathpunix:/var/run/dp0.sock-ieth1--local-port=tap:tap0&ifconfigtap0192.168.1.1ofprotocolunix:/var/run/dp0.socktcp:192.168.1.2Openflow1.0.0SwitchOpenflow1.0.0ControllerEth1Eth0192.168.1.1192.168.1.2CONNECTED测试交换机和控制器的连通性Ifconfigtap010.12.1.1dpctladd-flowunix:/var/run/dp0,in_port=eth1,actions=output:eth3dpctladd-flowunix:/var/run/dp0,in_port=eth3,dl_dst=$SW1_ETH1_MAC,action=mod_dl_dst:$HOST2_MAC,output:eth1•Ifconfigtap0192.168.74.1•dpctladd-flowunix:/var/run/dp0,in_port=eth3,actions=output:eth5•dpctladd-flowunix:/var/run/dp0,in_port=eth5,dl_dst=$SW2_ETH3_MAC,action=mod_dl_dst:$HOST1_MAC,output:eth3SW2Eth1Eth3Eth310.12.1.5Eth5192.168.74.10Host110.12.1.2Host2192.168.74.2在交换机上手动添加flow命令测试主机连通性Q&A
本文标题:openflow和SDN深入介绍及openflow代码分析、环境搭建
链接地址:https://www.777doc.com/doc-904931 .html