SDN实验报告(5).doc

上传人:小** 文档编号:3009707 上传时间:2020-06-21 格式:DOC 页数:35 大小:631.15KB
返回 下载 相关 举报
SDN实验报告(5).doc_第1页
第1页 / 共35页
SDN实验报告(5).doc_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《SDN实验报告(5).doc》由会员分享,可在线阅读,更多相关《SDN实验报告(5).doc(35页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、/* 信息网络基础研讨专题实验(SDN网络部分)姓 名: 单赟吉学 号: 11211105班 级: 通信1109班指导教师: 赵永祥实验时间: 第十周周二(一) openflow交换机的手动配置1、 实验目的1. 数据openflow交换机的手动配置环境2. 配置openflow交换机初始信息3. 手动配置转发表,实现主机之间通信2、 实验原理关于openflow交换机的实验系列由五个实验构成,这前四个实验须按顺序进行,因为后面的实验需要应用前面实验搭建的软件和硬件环境。第一个实验“openflow交换机的手动配置”熟悉交换机的手工配置环境,实现转发表的手工配置,配置交换机控制端口的地址;第二

2、个实验搭建控制器的软件环境,实现控制器和交换机的互联,运行控制器应用程序,把openflow交换机的功能通过程序实现为一个二层交换机;第三个实验编写一个简单的控制器软件,实现一个简单的广播交换机功能;第四个实验编写一个控制器软件,实现流表的下发和删除,通过这个实验测试控制器提供的编程接口。第五个实验研究在仿真软件中测试控制器程序和功能,同学们可以在自己计算机上调试好程序以后,再到真实的物理机器上实验,以提高实验设备的使用效率。分组交换机按照转发表把某一个输入端口的分组搬移到另外一个输出端口上输出。转发表实现分组目的地址和交换机输出端口之间的映射。转发表决定了交换机的行为。传统的交换机根据标准协

3、议形成转发表,这部分代码封装在交换机的操作系统中,交换机的运营者不能对转发表的形成继续修改,这样做的好处是保证了交换机的速率和可靠性。但是,运营者不能根据网络的具体特点和业务特性对交换机的转发行为进行专门的定制和设计,影响新业务的提供和增加网络运营成本。OpenFlow交换机把控制层面和转发层面分离,交换机的转发表可以由运营者手工本地配置,或者通过控制器远程修改和控制。在实际使用环境中,通过控制器远程修改和控制交换机流表。一个控制器就可以控制全网的交换机,控制器可以从全网的角度对每一个交换机的流表进行配置,从而实现全局优化和快速提供新的业务,极大降低了人工运营成本。国家标准化组织已经制定了交换

4、机和控制器之间的消息格式和交互过程,基于OpenFlow交换机的网络又称为软件定义网络,在大的数据中心已经实用。在OpenFlow网络中,所有的转发决策从各个交换机转移到控制器上,由控制器集中管理数据包的转发策略,通过OpenFlow协议负责与所有网络交换机进行交互,配置数据转发路径。OpenFlow网络示意图如上图所示,所有的数据包在网络中的传输路径由控制器(Controller)统一控制决定,OpenFlow交换机只负责转发数据包。控制器通过对交换机下发流(flow)来实现上述控制流程。一个OpenFlow交换机通常包含多个流表,每个流表含有多条流表条目(flow entries),每条条

5、目由匹配域(match fields),计数器(counters)和指令(instructions)组成。匹配域定义待匹配的数据包特征,如数据包到达的交换机入端口、源以太网地址、目的以太网地址、源IP地址、目标IP地址、VLAN标签。计数器用于对匹配流表的流量统计,更新进入OpenFlow与流匹配的数据包个数以及总字节数。指令用于修改匹配报文的动作集合,决定报文的转发操作,通常的操作有输出数据包到某端口、修改数据包首部信息等。控制器和OpenFlow交换机之间通过OpenFlow消息实现信息交互。 当一个数据包到达交换机时,如果与流表中的某一条流相匹配,便顺序执行该条流指令的操作。如果没有匹配

6、的流,则把整个数据包缓存在交换机中,并为该数据包配一个Buffer ID,随数据包一起作为Packet In消息发往控制器,控制器根据数据包的首部定义一条新的流决定该类数据包的处理策略,下发Flow Mod信息给交换机,Flow Mod消息用于在交换机中添加或删除流表条目,同时控制器以Packet Out消息作为载体将数据包返回交换机,Packet Out消息用于控制报文从指定端口发出,交换机依据随包的Buffer ID取出数据包,再根据新定义的流进行交换处理。本实验实现手动配置交换机转发表。为后续的实验准备实验环境和交换机基本配置。3、 实验器材1. 盛科V330 openflow交换机 2

7、. 台式电脑 (一台)3. 普通交换机一台4、 实验内容1. 连接交换机的控制端口和计算机以太网卡。l 交换机的控制端口位于交换机右上角,交换机的控制端口的地址已经初始化为192.168.1.233,一般不允许学生再进行修改。l 配置计算机的以太网卡的地址也要设为192.168.1.0 网段,如192.168.1.230。l 把交换机的控制端口和计算机都连接到一台普通交换机如下图所示2. 登陆交换机并熟悉交换局配置环境l 在计算机上面打开命令行终端,输入telnet 192.168.1.233l 输入?获取交换机配置的帮助。如下图所示,可以获得交换机的各种命令的列表l 在命令的名字后面输入?可

8、以获得这个命令的功能和使用说明。例如congfigure ?, 就会显示这个命令是配置终端所用3. 常用交换机命令l Show命令显示交换机的工作状态。输入以下命令: show interface status; show openflow controller status; show openflow ovsdb。观察结果,并根据帮助对这些命令进行解释l 配置控制器地址1. 输入configure terminal, 进入配置状态。2. 输入: openflow set controller tcp 192.168.1.230 6633。在交换机上面设置控制器的地址。这里假设控制器的地址为

9、192.168.1.230,默认端口6633。后面的实验中,需要按照控制器的实际地址在交换机上设置。3. 输入end,推出配置状态4. 手动配置流表。Ovs-ofctl 指令实现openflow交换机上流表的添加、删除和查询等动作。Ovs-ofctl指令集合的详细介绍见附录l 把测试计算机连接到openflow交换机的端口2,把openflow交换机的端口8连接到内网交换机。openflow交换机的端口号在交换机的面板上有数字标明。内网交换机地址设为192.168.1.1。l telnet登陆交换机,执行如下命令ovs-ofctl add-flow ovs-switch in_port=2,a

10、ctions=output:8 这个命令把openflow 交换机第2个端口接收到的分组转发到第8个端口。ovs-ofctl add-flow ovs-switch in_port=8,actions=output:2 这个命令把openflow 交换机第8个端口接收到的分组转发到第2个端口。5. 验证流表配置输入如下命令观察配置的流表:ovs-ofctl dump-flows br0在测试计算机终端上面运行如下命令: ping 192.168.1.1,观察是否连通。上述命令的实际执行过程如下图所示其中,第一个“ovs-ofctl dump-flows br0”是在配置了流表,但是没有连接测试

11、计算机时候得到的结果。第二个显示流表的命令是在连接了测试计算机以后观察到结果。可见流表确实实现了端口2和端口8之间的分组交换。测试计算机上也能观察到ping确实有反映,如果把测试计算机连接到其它物理端口,这ping没有响应。 (二)Openflow交换机和控制软件的互联及控制软件加载1、 实验目的l Controller控制器的软件安装l 控制器和Openflow交换机的互联l 加载控制软件到Openflow交换机l 验证交换机预期功能2、 实验原理把RYU控制器连接到Openflow交换机,把一个控制器软件加载到Openflow交换机,这个控制器软件的原理是: 交换机接收到一个分组后,把这个

12、分组报告给控制器终端,控制器终端显示;交换机把分组的源地址和接收到分组的物理端口关联起来;交换机查找目的地址对应的端口号,如果找到,把该分组转发到目的端口,否则在交换机的所有端口广播该分组。控制器软件加载到交换机以后,将实现一个普通交换机的功能,通过一个普通计算机终端验证这个功能。. 3、 实验器材1 盛科V330 openflow交换机一台2 普通交换机一台台3 普通计算机2台4、 实验内容和步骤1) 连接网络拓扑网络连接如下图所示。Openflow交换机的控制端口的地址设为192.168.1.233,Openflow交换机控制端口和一个数据端口连接到内网交换机。RYU控制器连接到内网交换机

13、。计算机终端连接到openflow交换机。通过控制器实现对openflow交换机的控制,使openflow交换机实现一个普通交换机功能。数据端口2) 安装控制器软件Ryu控制器由一个普通计算机实现。由于目前多数计算机采用windows操作系统,而Ryu控制器是有一个linux镜像实现,因此采用虚拟机的方法实现linux操作系统。l 安装Vmware软件l 导入Ryu操作系统镜像l 配置虚拟机的网络为桥接模式,实现虚拟机直接访问物理网络l 验证控制器与交换机控制端口的互通性:ping 192.168.1.2333) telnet 登陆交换机,配置模式控制器地址l 在命令行输入 telnet 19

14、2.168.1.233, 登陆交换机控制台l 获取configure 帮助: configure ?l 进入配置终端状态:configure terminall 在交换机控制台输入:openflow set controller tcp 192.168.1.230 6633l 退出配置状态:输入 end 命令4) 验证已经在交换机上面配置好控制器地址5) 加载控制器应用软件,通过控制器实现对交换机的控制。Simple_switch.py 控制器软件采用反向路径学习的方法实现mac地址的学习,在控制器上面实现简单交换机的功能。该软件在ryu/app路径下面l 把交换机的一个数据端口接入到一个内网

15、或者校园网(下面的实验假设交换机数据端口连接到192.168.1.1的交换机l 在控制器的命令行终端执行如下命令:ryu-manager simple_switch.pyl 控制台出现如下结果: 交换机把接收到的分组发送到控制器,在控制台显示出相关信息: 第一个数字是交换机编号,第二个数字是源mac地址,第三个数字是目的mac地址,第四个地址是交换机接收该分组的物理端口。l 改变内网连接到交换机的物理端口,观察最后一个数据域26变为其他数字l 检查流表的学习情况。从控制器远程登陆到交换机: telnet 192.168.1.233执行命令: ovs-ofctl dump-flows br06)

16、 验证交换机功能使用一台普通计算机发送命令: ping 192.168.1.1, 证明该交换机完成转发功能最后另一台交换机确实ping 通了。(三)Openflow交换机控制软件的编写1、 实验目的l 编写一个广播型二层交换机l 加载控制软件到Openflow交换机并验证预期功能2、 实验原理本实验由两个不同的任务构成:编制程序,把openflow交换机接收到的分组广播到所有的端口。3、 实验器材l 盛科V330 openflow交换机一台l 普通交换机一台台l 安装有winshark的普通计算机3台,一台作为控制器,两台作为测试终端。4、 实验内容和步骤1) 连接网络拓扑网络连接如下图所示。

17、Openflow交换机的控制端口的地址设为192.168.1.233,Openflow交换机控制端口和一个数据端口连接到内网交换机。RYU控制器连接到内网交换机。两个安装有winshark的计算机终端连接到openflow交换机。验证winshark能够实现正确的分组侦听。数据端口2) 编写广播程序使用文本编辑器,输入如下程序,把这个文件保存为l2.py。/* 引入控制器提供的功能*/from ryu.base import app_managerfrom ryu.controller import ofp_eventfrom ryu.controller.handler import MAI

18、N_DISPATCHERfrom ryu.controller.handler import set_ev_cls/* 建立一个广播交换机的类 */class L2Switch(app_manager.RyuApp): def _init_(self, *args, *kwargs): super(L2Switch, self)._init_(*args, *kwargs)set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)/* 交换机接收到一个分组的处理函数 */ def packet_in_handler(self, ev): ms

19、g = ev.msg /* 获取接收的分组 */ dp = msg.datapath /* 获取接收的分组的数据通路 */ ofp = dp.ofproto /* 获取接收到的分组的协议 */ ofp_parser = dp.ofproto_parser /* 解析接收的分组的协议 */ actions = ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD) /* 定义接收的分组的处理动作为广播 */ out = ofp_parser.OFPPacketOut( datapath=dp, buffer_id=msg.buffer_id, in_port=msg

20、.in_port, actions=actions)/* 生成发往交换机的openflow消息 */ dp.send_msg(out)/* 把这个消息发往交换机 */3) 加载程序到控制器在控制器的终端,进入到保存l2.py的目录,输入如下命令: ryu-manager l2.py4) 验证交换机功能l 使用一台普通计算机发送命令: ping 192.168.1.1-t, l 另外一台安装有winshark的计算机启动抓包,分析接收到的分组。l 改变端口,抓包分析由于没有第三台具有抓包软件的计算机,所以只能大致的进行分析。 (四)Openflow控制器的接口函数的实验1、 实验目的l 编写程序

21、,验证控制器软件的常见接口函数,体验软件定义网络的消息类型2、 实验原理通过编程,向交换机下发一个流转发表,删除流转发表,验证转发表的生存时间,关闭和启动交换机的物理端口,获取交换机各个颗粒度的统计值。3、 实验器材l 盛科V330 openflow交换机一台l 普通交换机一台台l 安装有winshark的普通计算机3台,一台作为控制器,两台作为测试终端。4、 实验内容和步骤1) 连接网络拓扑,如实验三所示2) 编写接口函数的测试程序完整的测试程序如附录所示,下面的测试步骤需要按照测试的需要对测试程序进行修改,删除不相关的程序。下面介绍程序的框架结构class Tester(app_manag

22、er.RyuApp): def _init_(self, *args, *kwargs): / 初始化函数def stats_reply_handler(self, ev):/统计信息处理函数set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)/注册交换机特征处理消息def switch_features_handler(self, ev):/交换机特征消息的处理函数 set_ev_cls(ofp_event.EventOFPPortStatsReply, MAIN_DISPATCHER)/注册交换机物理端口处理消息de

23、f port_stats_reply_handler(self, ev): self.stats_reply_handler(ev)/交换机物理端口消息的处理函数def run_test(): /测试1:流表的增加和删除代码def test_driver(): /测试程序的主程序 Will be scheduled by gevent print Let go ! global datapath while True: if datapath is None: gevent.sleep(1) else: Tester.run_test() break;3) 流表的下发和删除在上述程序的测试1部

24、分加入如下代码,实现流表的下发和删除l 下面给出了下发一个流表到交换机的程序,这个流表把端口2的分组转发到端口三l 学生自行添加代码,实现把端口三的分组转发到端口2l 把测试计算机连接到openflow交换机的端口2,把openflow交换机的端口3连接到内网交换机192.168.1.1l 从测试计算机上检测到内网交换机的连通性。Ping 192.168.1.1l 采用类似下面的代码,实现交换机流表的删除,并进行验证l 设置转发表的生存时间,并进行验证match = ofproto_v1_3_parser.OFPMatch()/获取一个匹配对象match.set_in_port(1)/规定从端

25、口1输入的分组满足匹配规则oa = ofproto_v1_3_parser.OFPActionOutput(2, ofproto_v1_3.OFPCML_MAX)oas = oas.append(oa)inst = ofproto_v1_3_parser.OFPInstructionActions(ofproto_v1_3.OFPIT_APPLY_ACTIONS, oas)insts = insts.append(inst)定义对满足匹配规则的分组需要执行的动作:转发到输出端口3,动作可以是一个链表,这里只有一个动作。fm = ofproto_v1_3_parser.OFPFlowMod(da

26、tapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts)openflow消息格式化datapath.send_msg(fm)发送这个消息4) 学生自选探索的部分l 获取端口信息l 获取流统计信息l 控制交换机发送分组附录一 OVSOpenvSwitch基本操作命令1. 显示bridge的信息,连接到bridge上的interface,tap和端口号(port)ovs-ofctl show ovs-switc

27、h(注:在本实验环境中,ovs-switch均由br0代替)2. 显示flow entriesovs-ofctl dump-flows ovs-switch。3. 添加flowovs-ofctl add-flow ovs-switch in_port=2,actions=output:8。该命令有很多参数, 一般来说actions之前都是流匹配条件的部分,常用的流匹配条件是 l in_port: switch的端口l dl_src: 源mac地址l dl_dst:目的mac地址l dl_type:以太网协议类型, 0x0806是arp packet, 0x0800是ip packetl nw_

28、src:源IPl nw_dst:目的ipl nw_proto:网络层协议类型 ,注意和dl_type区分,同时也需要和dl_type一起使用,比如dl_type是ip(0x0800),nw_proto=1就表示icmp packetl tp_src: tcp udp源端口l tp_dst: tcp udp目的端口ipSame asdl_type=0x0800.icmpSame asdl_type=0x0800,nw_proto=1.tcpSame asdl_type=0x0800,nw_proto=6.udpSame asdl_type=0x0800,nw_proto=17.arpSame a

29、sdl_type=0x0806.rarpSame asdl_type=0x8035.actions:满足匹配条件的处理方法,有如下三种可能l 转发到某个物理输出端口:output:portl 转发到控制器:controller(key=value)l 丢弃l 还可能包括如下动作:修改目的mac地址、源mac地址、目的ip地址、源ip地址、目的端口号、源端口号等4. 删除所有flowovs-ofctl del-flows ovs-switch附录二 控制器接口函数实验的完整代码(实验四的实验)import loggingimport structimport geventfrom ryu.bas

30、e import app_managerfrom ryu.controller import ofp_eventfrom ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHERfrom ryu.controller.handler import set_ev_clsfrom ryu.ofproto import ofproto_v1_3from ryu.ofproto import ofproto_v1_3_parserfrom ryu.lib import mac#mac.haddr_to_binLOG = loggi

31、ng.getLogger(ryu.app.Tester)datapath = Nonetester = Noneclass Tester(app_manager.RyuApp): def _init_(self, *args, *kwargs): super(Tester, self)._init_(*args, *kwargs) self.waiters = global tester tester = self def stats_reply_handler(self, ev): msg = ev.msg dp = msg.datapath if dp.id not in self.wai

32、ters: print dp id is not in the waiters, maybe the request is timeout return if msg.xid not in self.waitersdp.id: print msg xid is not in the waiters, maybe the request is timeout return lock, msgs = self.waitersdp.idmsg.xid msgs.append(msg) print stats_reply_handler:, msgs if msg.flags & dp.ofproto

33、.OFPSF_REPLY_MORE: print more flag present, wait for the continued reply return del self.waitersdp.idmsg.xid lock.set() set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): msg = ev.msg datapath = msg.datapath ev.msg.datapath.ev_q.set_dispatcher(MAIN

34、_DISPATCHER) set_ev_cls(ofp_event.EventOFPPortStatsReply, MAIN_DISPATCHER) def port_stats_reply_handler(self, ev): self.stats_reply_handler(ev) set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): msg = ev.msg global datapath datapath = msg.datapath

35、staticmethod def run_test(): global datapath print Test begins. print Test0: test switch config. sc = ofproto_v1_3_parser.OFPSetConfig(datapath, ofproto_v1_3.OFPC_FRAG_NORMAL, 1518) datapath.send_msg(sc) gcr = ofproto_v1_3_parser.OFPGetConfigRequest(datapath) datapath.send_msg(gcr) print Test1: test

36、 flow(in_port=1, instructions=apply_actions(actions=output 2) add/delete. match = ofproto_v1_3_parser.OFPMatch() match.set_in_port(1) oa = ofproto_v1_3_parser.OFPActionOutput(2, ofproto_v1_3.OFPCML_MAX) oas = oas.append(oa) inst = ofproto_v1_3_parser.OFPInstructionActions(ofproto_v1_3.OFPIT_APPLY_AC

37、TIONS, oas) insts = insts.append(inst) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts) datapath.send_msg(fm) # delete the just-installed flow. # NB: match can be reused because ryu add s

38、ome class data dynamically. match = ofproto_v1_3_parser.OFPMatch() match.set_in_port(1) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_DELETE, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts) datapath.send_msg(fm) # reinstall the flow with

39、 timeout match = ofproto_v1_3_parser.OFPMatch() match.set_in_port(1) oas = oao = ofproto_v1_3_parser.OFPActionOutput(2, ofproto_v1_3.OFPCML_MAX) oas.append(oao) mted = ofproto_v1_3_parser.MTEthDst(ofproto_v1_3.OXM_OF_ETH_DST, mac.haddr_to_bin(01:00:00:00:D4:8F) oasf = ofproto_v1_3_parser.OFPActionSetField(mted) oas.append(oasf) inst = ofproto_v1_3_parser.OFPInstru

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com