给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
注意:一些翻译可能不太准确,读者敲sudo mn -h读英文原版更好。
Options:
-h, --help 显示帮助信息并退出
--switch=交换机 default|ivs|lxbr|ovs|ovsbr|ovsk|user[,param=value…]
ovs=OVSSwitch default=OVSSwitch ovsk=OVSSwitch
lxbr=LinuxBridge user=UserSwitch ivs=IVSSwitch
ovsbr=OVSBridge
--host=主机 cfs|proc|rt[,param=value…]
rt=CPULimitedHost{‘sched’: ‘rt’} proc=Host
cfs=CPULimitedHost{‘sched’: ‘cfs’}
--controller=控制器
default|none|nox|ovsc|ref|remote|ryu[,param=value…]
ovsc=OVSController none=NullController
remote=远程控制器 default=DefaultController
nox=NOX ryu=Ryu ref=控制器
--link=链接 default|ovs|tc|tcu[,param=value…] default=Link
ovs=OVSLink tcu=TCULink tc=TCLink
--topo=拓扑 linear|minimal|reversed|single|torus|tree[,param=value…]
linear=线性拓扑 torus=圆环拓扑 tree=树形拓扑
single=单交换机拓扑
reversed=单交换机反转拓扑 minimal=最小拓扑
-c, --clean 清楚并退出
--custom=自定义 从.py文件读取类或参数
--test=测试 none|build|all|iperf|pingpair|iperfudp|pingall
-x, --xterms 为每个节点生成xterm
-i IPBASE, --ipbase=基于IP
基于IP地址的主机
--mac 自动设置主机MAC地址
--arp set all-pairs ARP entries
-v VERBOSITY, --verbosity=信息复杂度
info|warning|critical|error|debug|output
--innamespace sw and ctrl in namespace?
--listenport=监听端口
用于无源开关监听的基本端口
--nolistenport 不使用被动监听端口
--pre=提前运行 CLI 脚本在测试之前运行
--post=之后运行 CLI 脚本在测试后运行
--pin 主机固定到CPU内核 (需要 --host cfs 或 --host rt)
--nat [option=val…] 将NAT添加到拓扑,主机链接到物理网络
警告:这可能会将使用Mininet的IP子网的计算机上的所有流量路由
到Mininet网络中。如果您需要更改Mininet的IP子网,请参阅–ipbase选项。
--version 打印版本并退出
--cluster=server1,server2…
在多台服务器上运行 (实验!)
--placement=block|random
--cluster的节点放置 (实验!)
常用命令及分类
种类 | 命令/参数 |
---|---|
网络构建启动 | –topo、–custom、–switch、–controller、–mac |
内部交互 | dump、net、nodes、links、dpctl、iperf |
外部运行 | -c、-h、–version |
开启mininet
nodes命令查看所有节点
nodes
net命令查看链接
net命令
更多命令参考Walkthrough
知识补充——拓扑结构
单一拓扑:一个交换机,交换机链接多个主机,举例,一个交换机三个主机
sudo mn --topo=single,3
线性拓扑,交换机呈线性排列,一个交换机下一个主机,举例,三个交换机三个主机
sudo mn --topo=linear,3
树形拓扑,树形排列,交换机层数与分支数,举例,二层的二叉树,三个交换机,四个主机
sudo mn --topo=tree,depth=2,fanout=2
自定义拓扑,自己写.py文件进行自定义,mytopo1是topo1.py文件中的类
sudo mn --custom topo1.py --topo=mytopo1
mininet图形化界面
在examples目录下,启动miniedit
启动miniedit
之后会自动打开编辑页面
打开的界面
构建自定义网络,创建时单击左侧图标,再单击右侧即可,连线时鼠标左键点击一个拖到另一个
拓扑图
修改c0参数,右键点击c0,选择第二个选项修改,如果你的OpenDaylight与Mininet不在同一虚拟机里面,记得修改ip
控制器设置
修改交换机s1、s2参数,DPID是16位
交换机参数
修改主机h1、h2、h3参数
修改主机参数
在Edit->Preferences里面有参数,可以看网段,修改openflow协议版本等等。
标题
打开OpenDaylight,如果你没有安装控制器的话,可以看这篇文章。
点击左下角Run,查看最终结果
最终结果
OpenDaylight Dlux页面,可以看到有两个交换机,使用的是openflow协议
Dlux界面拓扑结构
保存的是.mn文件,再次使用File->open打开即可。
保存成.py文件(File->Export Level 2 Script)时,以下步骤再次使用。
保存成.py文件
查看.py文件
#!/usr/bin/python
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call
def myNetwork():
net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
c0=net.addController(name='c0',
controller=Controller,
protocol='tcp',
port=6633)
info( '*** Add switches\n')
s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')
s2 = net.addSwitch('s2', cls=OVSKernelSwitch, dpid='0000000000000002')
info( '*** Add hosts\n')
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
info( '*** Add links\n')
net.addLink(s1, s2)
net.addLink(s1, h1)
net.addLink(s1, h2)
net.addLink(s2, h3)
info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start()
info( '*** Starting switches\n')
net.get('s1').start([c0])
net.get('s2').start([c0])
info( '*** Post configure switches and hosts\n')
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()
运行保存的拓扑
sudo python test.py
还可以运行
OpenDaylight的DLUX界面
pingall命令后的全部拓扑
使用pingall命令后 ,Topology这里可以发现主机,也就能看到全部的拓扑结构了
节点列表
点击Nodes,看到节点列表。
详细信息
点击“NodeConnectors”号查看详细信息,如端口ID、端口名称、每个交换机的端口号、MAC地址。
统计信息
点击Statistics列中的“NodesConnectors”查看具体节点ID的节点连接器的统计信息,可以看到交换机s1有三个接口,连接h1、h2、s2。
发送成功
ODL获取交换机信息的界面在YangUI中,具体节点为:Yang UI APIopendaylight-inventory-rev->operational->nodes->node{id}。点击node{id},在下方出现的path中输入Node Id(在Nodes中点击后的详细信息列表上方,本机id为openflow:1),提交方式为GET,点击Send发出消息,则交换机信息则会出现在path下方。
交换机信息
鼠标向下滑,可以看到很多信息。
xml版本
使用http://你的ip:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1 浏览器地址,在浏览器上可以看到xml版本的信息,也可使用postman等工具查看。
标题
使用http://你的ip:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/opendaylight-flow-table-statistics:flow-table-statistics浏览器地址,可以看到流表的统计信息。
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!