预定义拓扑类:MinimalTopo
和 LinearTopo
,它们继承自 Topo
类,用于构建不同的网络拓扑结构。以下是详细的解释:
1. MinimalTopo
类
class MinimalTopo(SingleSwitchTopo):
"Minimal topology with two hosts and one switch"
def build(self):
return SingleSwitchTopo.build(self, k=2)
功能
MinimalTopo
是一个简单的网络拓扑,包含一个交换机和两个主机。- 它继承自
SingleSwitchTopo
,并重写了build
方法。
实现细节
build
方法:- 调用父类
SingleSwitchTopo
的build
方法,传入参数k=2
。 k=2
表示创建 2 个主机。
- 调用父类
- 拓扑结构:
- 一个交换机
s1
。 - 两个主机
h1
和h2
,分别连接到交换机s1
。
- 一个交换机
示例
topo = MinimalTopo()
- 生成的拓扑结构:
h1 -- s1 -- h2
2. LinearTopo
类
class LinearTopo(Topo):
"Linear topology of k switches, with n hosts per switch."
def build(self, k=2, n=1, **_opts):
"""k: number of switches
n: number of hosts per switch"""
self.k = k
self.n = n
if n == 1:
def genHostName(i, _j):
return 'h%s' % i
else:
def genHostName(i, j):
return 'h%ss%d' % (j, i)
lastSwitch = None
for i in irange(1, k):
# Add switch
switch = self.addSwitch('s%s' % i)
# Add hosts to switch
for j in irange(1, n):
host = self.addHost(genHostName(i, j))
self.addLink(host, switch)
# Connect switch to previous
if lastSwitch:
self.addLink(switch, lastSwitch)
lastSwitch = switch
功能
LinearTopo
是一个线性网络拓扑,包含 k 个交换机,每个交换机连接 n 个主机。- 交换机之间按顺序连接,形成一个线性链。
参数
k
: 交换机的数量,默认值为 2。n
: 每个交换机连接的主机数量,默认值为 1。_j
是一个函数参数,但它被命名为 j,表示它是一个未使用的参数。在 Python 中,以下划线()开头的变量名通常用于表示该变量是忽略的或不重要的。
实现细节
- 主机命名规则:
- 如果
n == 1
,主机命名为h1
,h2
, …,hk
。 - 如果
n > 1
,主机命名为h1s1
,h2s1
, …,hns1
,h1s2
,h2s2
, …,hns2
, …,h1sk
,h2sk
, …,hnsk
。
- 如果
- 交换机添加:
- 使用
addSwitch
方法添加交换机,命名为s1
,s2
, …,sk
。
- 使用
- 主机添加:
- 使用
addHost
方法添加主机,并根据命名规则生成主机名称。 - 使用
addLink
方法将主机连接到对应的交换机。
- 使用
- 交换机连接:
- 使用
addLink
方法将当前交换机与前一个交换机连接,形成线性链。
- 使用
示例
topo = LinearTopo(k=3, n=2)
- 生成的拓扑结构:
h1s1 -- s1 -- s2 -- s3 -- h1s3 h2s1 | h2s3 h1s2 h2s2
总结
MinimalTopo
:最简单的拓扑,包含一个交换机和两个主机。LinearTopo
:线性拓扑,包含多个交换机和多个主机,交换机之间按顺序连接。- 用途:这些拓扑类可以用于模拟网络环境,测试网络性能或验证网络协议。
注:irange 是 Mininet 中的一个工具函数,用于生成一个包含起始值和结束值的整数序列。它的作用是模拟 Python 2 中 range 的行为,但在 Python 3 中也兼容。