1.安装所需工具
sudo apt-get update
sudo apt-get install -y git vim-noxpython-setuptools python-all-dev flex bison traceroute
2.检查mininet版本号
git checkout remotes/origin/class/cs244
执行./util/install.sh -fnv 即安装openflow,更新其配置
3.检查pox版本号
git checkout f95dd1a81584d716823bbf565fa68254416af603
3.检查pox版本号
git checkout f95dd1a81584d716823bbf565fa68254416af603
4.安装ltprotocol
cd ~
git clonegit://github.com/dound/ltprotocol.git
cd ltprotocol
sudo python setup.py install
二、配置路由器
1.从斯坦福网站上下载相应代码
cd ~
git clonehttps://huangty@bitbucket.org/huangty/cs144_lab3.git
cd cs144_lab3/
git checkout --trackremotes/origin/standalone
2.安装简单路由器pox的模块并配置环境
cd ~/cs144_lab3
./config.sh
中间在安装某几个模块时(比如incremental模块)会有无数的warning提醒在某目录中找不到对应匹配的文件,所以在后面要对应的安装三个包。
有两个配置文档:
~/cs144_lab3/IP_CONFIG
该文档列出了分配给server1,server2,client的IP地址和路由器与之相连的网关的IP地址。可以看到,构建的简单拓扑如下:
~/cs144_lab3/router/rtable
该文档显示的是路由表,列出了IP地址,子网掩码和对应的网关编号(这条路由的网络出口)
3.测试仿真拓扑结构的可连接性
> ./run_mininet.sh
保持这个终端始终打开,新建另一个终端尝试pox连接来运行控制器:
> cd ~/cs144_lab3/
> ln -s ../pox
> ./run_pox.sh
结果发生报错,提示没有安装incremental包
运行sudo pip installincremental,安装包,然后重新./run_pox.sh,他会再提示没有安装其他的包,同上继续安装 sudo pip install XXX,直到不报错位置。
总共安装了三个包:zope.interface,incremental, constantly后, ./run_pox.sh得到结果如下:
这代表环境已经配置成功。
4.测试环境的连接性
> ./sr_solution
可以看到结果和之前的rtable和IP_CONFIG是一样的
5.在之前运行的mininet的终端尝试从client ping Server1,观察是否可以ping通以及pox终端的反应:
mininet> client ping -c 3192.168.2.2
可以看到,三个包全部接收成功,其中第一个包的时间最长,后面的时间变短。
观察运行./sr_solution的界面,可以看到每个包的发出信息和接收信息,包括:版本号,头长度,服务类型,长度,ID编号,碎片标识,偏移量,生命周期,校验和,源地址,目的地址。
6. 用traceroute检测一下发出数据包的client到Server1之间所经过的网关数量
mininet>client traceroute -n 192.168.2.2可以看到经过了两个网关10.0.1.1和192.168.2.2,后面显示的分别是三个数据包经过网关的时间。
7.测试一下server1和server2之间是否可以工作,发送htto请求进行测试
mininet> client wgethttp://192.168.2.2
可以看到,server1和server2可以连接上,发送http请求后对方可以接受到
8.尝试关闭./sr_solution,就会发现无论是ping/traceroute/wget都不会再成功
1.运行源代码
> cd ~/cs144_lab3/router/
> make
>./sr
其结果和> ./sr_solution一样,均反映了rtable和IP_CONFIG的内容。
2.记录接收到的packets
> ./sr -l logname.pcap
其结果与> >./sr效果一致,当./run_mininet.sh时,会接收到很多包的长度:
用wireshark测试回环接口,可得如下图结果:
3.可以直接监听每一个节点,以server1为例
可以通过如下监听server1:
mininet> server1 sudo tcpdump -n -i server1-eth0
也可以重新打开一个server1节点的窗口进行监听
mininet> xterm server1
> sudo tcpdump -n -i server1-eth0
开始监听
然后,在新终端中打开./sr_solution,在原mininet终端用client去pingserver1
>client ping -c 3 server1
可以看到三个数据包接收成功,观察正在监听server1的端口:
可以看到,最初是广播,以ARP协议询问谁有192.168.2.2(Server1),告诉192.168.2.1(网关),然后以ARP协议回复192.168.2.2的MAC地址。后面开始进行client和server1的传数据包的工作,以ICMP进行。
四、使用mininet构建简单的路由实验
使用mininet构建一个简单的路由实验,在桌面建立Router.py文件:
from mininet.topo import Topo
class Router_Topo(Topo):
def __init__(self):
"Create P2P topology."
# Initialize topology
Topo.__init__(self)
# Add hosts and switches
H1 = self.addHost('h1')
H2 = self.addHost('h2')
H3 = self.addHost('h3')
S1 = self.addSwitch('s1')
S2 = self.addSwitch('s2')
# Add links
self.addLink(H1, S1)
self.addLink(H2, S1)
self.addLink(H2, S2)
self.addLink(H3, S2)
topos = {
'router': (lambda: Router_Topo())
}
拓扑结构如下:
为节点配置路由功能如下:
则进行h1 ping h3可以ping通
mininet> h1 ping -c 1 192.168.23.3