Ryubook Chapter 2 Tutorial

最近开始学习SDN中的Ryu控制器了,在pad上看着Ryubook的pdf过一遍。

第二章有一个有趣的入门小例子,下面我来演示一下。

在ubuntu上启动mininet,我这边是用secureCRT来连接到ubuntu

sudo mn --mac --topo single,3 --switch ovsk --controller remote -x 具体选项的用法:

--mac:host mac为最简mac 一般是与自己的IP地址对应

--topo single,3 生成一个单交换机 和 3个host的拓扑

--switch ovsk 交换机类型指定为ovsswitch

--controller remote 指定远程的controller,但这边还不会自动指定,需要等下我们自己在c0term中打开

-x 各个节点打开xterm


可以看到生成了模拟实验环境

生成了同网段的3个主机 host1:10.0.0.1 host2:10.0.0.2 host3:10.0.0.3

在交换机s1上通过 ovs-vsctl set Bridge s1 protocols=OpenFlow13来将南向协议指定为OpenFlow1.3版

然后可以通过ovs-ofctl -O OpenFlow13 dump-flows s1来查看此时交换机的流表,可以看到此时流表为空


接下来在c0位置运行我们ryu的应用,通过ryu-manage --verbose ryu.app.example_switch_13运行一个预先写好的支持of1.3的交换机


从界面的输出中我们可以看到一条hello报文以及收到了从交换机上发来的Features报文,这说明交换机以及控制器之间的datapath已经成功建立。

现在,我们再去交换机s1上查看流表,可以看到一条新的流表项已经被下发,actions=Controller:65535,说明是一个发向控制器的动作



这些目前来说就是最基础的配置部分,接下来开始做一个简单的小实验,在host1上ping host2,会发生什么?

我们来分析一下,应该是有这4步:

1.host1要ping host2,host2的IP地址已知,而host1与host2处于同一个网段,此时做二层转发,host1需要知道host2的MAC地址,这个时候它就会发送一个ARP请求报文,这个请求报文会被host2和host3收到

2.arp报文请求的是10.0.0.2的MAC地址,所以host2会回复一个arp_reply给host1

3.当host1有了host2的MAC地址,它就会发送一个echo request报文给host2

4.host2回复一个echo reply给host1

分析过程非常简单,那么让我们在抓包来看看吧~

在三台主机上都开启tcpdump抓取各自的端口


在mininet上让h1pingh2 1次


这个时候可以看到各个主机终端上都能够看到相应的数据包产生,先来看看h1


h1第一个报文是一个目标MAC地址为全f的ARP request请求,目的是找到10.0.0.2对应的MAC地址,第二个报文是收到h2的回应,得到h2的MAC地址。第三个报文是发送一个ICMP的echo request报文,第四个报文是接收到h2的ICMP echo reply回复



h2所接受到的报文顺序也与h1一致,不多做赘述。



h3只是收到了一个广播域内泛洪的arp报文,而其余的报文都是单播发送,都与它无关,所以只抓到了这一个包



下面来看一下交换机s1上面的流表,除了发往交换机的流表还新增了2条流表:

1. 入端口in_port=2,目的MAC地址为h1的MAC地址,actions为向端口1发送,匹配到的包数量为2,这两个包分别是一个h2发送到h1的arp reply包和一个h2发送到h1的ICMP reply包。

2入端口in_port=1,目的MAC地址为h2的MAC地址,actions为向端口2发送,匹配到的包数量为1,可以很明显的看出,这是h1发送向h2的数据包,为什么只有一个包呢?这一个包是h1发送到h2的ICMP echo request的单播包,而另外一个arp request数据包的目的地址是广播地址,所以不会被匹配到。



这个是ryu控制器所接收到的交换机发送的包。

1.h1发送的arp request包,泛洪被s1接收到,由于s1不知道怎么转发此类数据包,将数据包通过packet_in交给控制器处理

2.h2发送的arp reply包 

3.h1发送给h2的ICMP数据包

在h2发送ICMP reply给h1的时候,这个数据包却没有被转发给控制器,是因为之前h2发送arp reply给h1的时候,交换机把该报文交给控制器,控制器根据这条报文给交换机新增了一条流表:入端口为2,目的MAC为00:00:00:00::00:01,这时候往端口1转发。所以当回复ICMP报文时,就根据这条流表直接进行转发了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值