学习SDN开发工具 1

简介: 学习SDN开发工具

OpenFlow 的调试工具

SSH终端:连接到 OpenFlowTutorial。

xterm终端:连接到虚拟网络中的主机,将在顶部标有主机名。

OpenFlow 控制器:位于 OpenFlow 接口之上。该控制器与 OpenFlow 交换机结合用作以太网学习交换机。将运行它并查看正在发送的消息。

OpenFlow 交换机:位于 OpenFlow 接口下方。OpenFlow。Open vSwitch 是另一种基于内核的软件交换机

ovs-ofctl:发送快速 OpenFlow 消息的命令行实用程序,对于查看交换机端口和流统计信息或手动插入流条目很有用。

Wireshark:用于查看数据包的通用图形实用程序。OpenFlow 参考分布包括一个 Wireshark 解析器,它以一种方便可读的方式解析发送到 OpenFlow 默认端口 (6633) 的 OpenFlow 消息。

iperf:用于测试单个 TCP 连接速度的通用命令行实用程序。

Mininet:网络仿真平台。Mininet 在单个真实或虚拟机上创建虚拟 OpenFlow 网络——控制器、交换机、主机和链接。

cbench:用于测试 OpenFlow 控制器的流设置速率的实用程序。

启动网络

网络拓扑:3 台主机和一个交换机,还有一个 OpenFlow 控制器,


665561d9c1354f11965bf7fd8f611fd9.png


在 VM 中创建此网络,在 SSH 终端中输入:

sudo mn --topo single,3 --mac --switch ovsk --controller remote

c0b5a60a65cf4b0bb8f4b8dc35f18551.png


这告诉 Mininet 启动一个 3 主机、单(基于 openvSwitch)交换机的拓扑结构,将每个主机的 MAC 地址设置为其 IP,并指向一个默认为 localhost 的远程控制器。


这是 Mininet 刚刚所做的:


1)创建了 3 个虚拟主机,每个都有一个单独的 IP 地址。


2)在内核中创建了一个具有 3 个端口的 OpenFlow 软件交换机。


3)使用虚拟以太网电缆将每个虚拟主机连接到交换机。


4)将每个主机的 MAC 地址设置为其 IP。


5)配置OpenFlow交换机连接远程控制器。


ovs-ofctl用法

ovs-ofctl是 Open vSwitch 附带的实用程序,可实现对单个交换机的流表的可见性和控制。通过查看流状态和流计数器,它对于调试特别有用。大多数 OpenFlow 交换机可以使用被动侦听端口启动,可以从该端口轮询交换机,而无需向控制器添加调试代码。


创建第二个 SSH 窗口,运行:

sudo ovs-ofctl show s1

4527a80a6ef248d2b3b84b945e55d02b.png


输入:sudo ovs-ofctl dump-flows s1


查看流表

f69fcb51ee75450a807efed1e5ff3d15.png



由于我们还没有启动任何控制器,流表应该是空的。


ping测试

现在,回到 mininet 控制台并尝试从 h1 ping h2。在 Mininet 控制台中:


h1 ping -c3 h2

4ee3b7d49903428dbd22da513ca1652e.png



请注意,在 Mininet 控制台中运行命令时,主机 h2 的名称会自动替换为其 IP 地址 (10.0.0.2)。


正如之前看到的,交换机流表是空的。除此之外,没有控制器连接到交换机,因此交换机不知道如何处理传入的流量,从而导致 ping 失败。


将使用ovs-ofctl手动安装必要的流程。在的 SSH 终端中:

ovs-ofctl add-flow s1 in_port=1,actions=output:2
ovs-ofctl add-flow s1 in_port=2,actions=output:1

这会将来自端口 1 的数据包转发到端口 2,反之亦然。通过检查流表来验证

ovs-ofctl dump-flows s1

8d5480cec5da41ba80914c2dd46188a9.png


再次运行 ping 命令。在的 mininet 控制台中:

h1 ping -c3 h2

0825a99bfa64457980b6c994a5b1c850.png


再次检查流表并查看每个流条目的统计信息。根据 ping 流量,可以看到已经ping通了


启动 Wireshark

VM 映像包括预安装的 OpenFlow Wireshark。Wireshark 对于查看 OpenFlow 协议消息以及一般调试非常有用。


打开Wireshark命令:


sudo wireshark &


如果出错就尝试:


sudo -E wireshark &


单击菜单栏中的Capture->Interfaces。通过在靠近顶部的过滤器框中键入“of”,为 OpenFlow 控制流量设置过滤器:


在 Wireshark 中启动 Controller 并查看启动消息

第一步 mininet 并清理

exit
mn -c

现在,在 Wireshark 解析器监听的情况下,启动 OpenFlow 参考控制器。在的 SSH 终端中输入


sudo controller ptcp:6633

将启动一个简单的控制器,该控制器充当学习开关,而无需安装任何流条目。


现在重新启动拓扑

sudo mn --topo single,3 --mac --switch ovsk --controller remote

aac05b2a26ba4a858ef57f96ed69b116.png


这些消息包括:

信息 类型 描述
Hello 控制器->开关 在 TCP 握手之后,控制器将其版本号发送到交换机。
Hello 开关->控制器 交换机回复其支持的版本号
功能请求 控制器->开关 控制器要求查看哪些端口可用
设置配置 控制器->开关 在这种情况下,控制器要求交换机发送流到期
特色回复 开关->控制器 交换机回复端口列表、端口速度以及支持的表和操作
端口状态 开关->控制器 使交换机能够通知该控制器端口速度或连接的变化

由于使用 Mininet 时所有消息都是通过本地主机发送的,因此当有很多模拟开关时,确定消息的发送者可能会令人困惑。但是,这不会成为问题,因为我们只有一个开关。控制器位于标准 OpenFlow 端口 (6633),而交换机位于其他用户级端口。


查看用于 Ping 的 OpenFlow 消息

现在,将查看响应数据包而生成的消息。


建议清理两台主机上的 ARP 缓存,否则可能看不到一些 ARP 请求/回复,因为将使用缓存:


h1 ip -s -s neigh flush all
h2 ip -s -s neigh flush all

在 Mininet 控制台中执行 ping:

h1 ping -c1 h2

a3174e20a9bd4431bc9864b8098bb62b.png


在 Wireshark 窗口中,应该会看到许多新的消息类型:

aad59936b470416d8e6658626a36c5e7.png


信息 类型 描述
分组输入 开关->控制器 收到一个数据包,但它与交换机流表中的任何条目都不匹配,导致数据包被发送到控制器
出包 控制器->开关 控制器从一个或多个交换机端口发送数据包
Flow-Mod 控制器->开关 指示交换机将特定流添加到其流表中
流量过期 开关->控制器 流在一段时间不活动后超时


首先,会看到一个 ARP 请求错过了流表,它会生成一个广播 Packet-Out 消息。接下来,ARP响应回来了;由于控制器现在知道这两个 MAC 地址,它可以使用 Flow-Mod 消息将流下推到交换机。然后交换机会推送 ICMP 数据包的流。后续的 ping 请求直接通过数据路径,不会产生额外的消息;由于连接 h1 和 h2 的流已经推送到交换机,因此没有控制器参与。


带 iperf 的基准控制器

iperf是一个命令行工具,用于检查两台计算机之间的速度。


在 mininet 控制台中运行:

iperf


1052e8a8083748efa30ae4c3f8f29771.png

这个 Mininet 命令在一个虚拟主机上运行一个 iperf TCP 服务器,然后在第二个虚拟主机上运行一个 iperf 客户端。一旦连接,它们就会在彼此之间发送数据包并报告结果。


现在在Mininet控制台中:

exit

使用用户空间开关启动同一个 Mininet:

mn --topo single,3 --controller remote --switch user

使用参考控制器再运行一个 iperf 测试:

iperf

1bd6954dabaa4c0ab2f3d6193c12828a.png



区别:使用用户空间交换机,数据包必须从用户空间跨越到内核空间,然后在每一跳上返回,而不是在通过交换机时留在内核中。用户空间开关更容易修改(无需处理内核oops),但模拟速度较慢。


相关文章
|
11月前
|
消息中间件 缓存 网络协议
|
12月前
|
SDN 网络虚拟化 人工智能
带你读《智慧光网络:关键技术、应用实践和未来演进》——2.9.6 光接入网SDN/NFV
带你读《智慧光网络:关键技术、应用实践和未来演进》——2.9.6 光接入网SDN/NFV
|
SDN 网络虚拟化
SDN与NFV分类对照表
SDN与NFV分类对照表
163 0
SDN与NFV分类对照表
|
云安全 存储 SDN
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(三)
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(三)
167 0
|
SDN 网络虚拟化 云计算
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(二)
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(二)
151 0
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(二)
|
存储 运维 负载均衡
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(一)
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(一)
209 0
第一章 SDN介绍 (附件2)【SDN&NFV基础、云计算】(一)
|
存储 物联网 大数据
论数据中心SDN和NFV技术关系
论数据中心SDN和NFV技术关系
316 0
论数据中心SDN和NFV技术关系
|
5G 测试技术 API
5G架构之NFV和SDN | 《5G移动无线通信技术》之十一
本节介绍了5G架构的NFV和SDN,包括成立背景和基础信息等。
5G架构之NFV和SDN | 《5G移动无线通信技术》之十一
|
SDN 网络虚拟化 异构计算