计算机网络 SDN 实验报告
学 院 计算机学院
专 业 计算机科学与技术
年 级
姓 名
2014 级
陶舒畅
学 号
3014216073
2017 年 5 月 27 日
一、 实验题目
SDN 编程实践
要求实现功能:
1. 参照上图所示拓扑部署一个基于 SDN 的简单网络环境,南向接口采用
OpenFlow 1.3 协议。(描述生成步骤,截屏相应命令,贴出生成 topo 的 python
代码)
2. H1、H2、H3、H4 任意两两可互通。(给出 4 个节点两两互 ping 测试截图,
每对只需 ping 二次即可)
3. 下发流表项实现 H1 和 H2,H1 和 H4 不能互通,并使得 H1 和 H3 可互通。(给
出具体操作,查询到的流表信息和 ping 测试结果)
4. 结合捕获到的某些 OpenFlow 协议报文,分析其报文结构,并简要描述该类
报文作用。(一种即可,限 300 字)
5. 思考在同样网络拓扑下如何在传统网络中实现要求 3,并分析与 SDN 实现
之间的差别。(限 500 字)
二、 实验环境
操作系统:Ubuntu 16.04
mininet + Ryu + Wireshark
三、 功能实现
1. 参照上图所示拓扑部署一个基于 SDN 的简单网络环境,南向接口采用
OpenFlow 1.3 协议。
生成步骤
添加主机
h1 h2 h3 h4
添加交换机 s1 s2
添加连接
(s1,h1) (s1,h2) (s1,s2) (s2,h3) (s2,h4)
配置主机
h1 h2 h3 h4
开启控制器 c0
开启交换机 s1 s2
截图
生成过程
用 nodes 命令测试节点
用 net 命令测试网络
第一题
第一题
第一题
用 dump 命令测试
第一题
代码
from mininet.topo import Topo
class hw1topo(Topo):
def __init__(self):
Topo.__init__(self)
S1=self.addSwitch('s1')
S2=self.addSwitch('s2')
H1=self.addHost('h1')
H2=self.addHost('h2')
H3=self.addHost('h3')
H4=self.addHost('h4')
self.addLink(S1,S2)
self.addLink(S1,H1)
self.addLink(S1,H2)
self.addLink(S2,H3)
self.addLink(S2,H4)
topos={
'1topo':(lambda: hw1topo())
}
2. H1、H2、H3、H4 任意两两可互通。
测试节点两两互 ping
第二题
第二题
3. 下发流表项实现 H1 和 H2,H1 和 H4 不能互通,并使得 H1 和 H3 可互通。
使用 postman 的 GET http://localhost:8080/stats/flow/1
得到的流表信息
Pingall 测试是否连接
第三题
操作:使用 postman 的 PUT 操作,
http://localhost:8080/stats/flowentry/modify
更改下发流表
使交换机 1 中 dl_dst 为 00:00:00:00:00:04,in_port 为端口 2 和
dl_dst 为 00:00:00:00:00:01,in_port 为端口 3 的两条线路没有出
口
第三题
第三题
进行操作后,postman GET http://localhost:8080/stats/flow/1
发现更改成功
第三题
用 pingall 测试,发现 h1 只与 h3 互通,与 h2、h4 均不互通
第三题
4. 结合捕获到的某些 OpenFlow 协议报文,分析其报文结构,并简要描述该类
报文作用