交换机与控制器如何建立连接,这个问题在一些资料上有过说明,但没有具体细节。这个也让我困惑了几天,今天通过实验验证一番。
一、实验环境搭建如下:
1. 两台局域网中相连的电脑:A和B (我的环境,两台电脑在192.168.4.*网络中)
2. A电脑装好从官网下载的Ubantu虚拟系统,内含 mininet,wireshark
启动虚拟机后,查看eth0的ip地址为192.168.4.105;
2. B电脑装好同样上一份虚拟机,再从git上克隆了POX控制器
启动虚拟机后,查看eth0的ip地址为192.168.4.70;
3. putty、xming等来连接两个虚拟机,提供图形界面
二、实验过程:
1. 首先启动两台虚拟机,并且分别打开wireshark,命令为sudo wirshark
2. 在wireshark中写入过滤规则
A电脑(192.168.4.105):ip.addr == 192.168.4.70 && tcp.port = 6633
B电脑(192.168.4.70):ip.addr == 192.168.4.105 && tcp.port = 6633
3. 启动wireshark分别监视端口eth0
启动控制器
1. 启动B电脑的pox控制器:
(1)cd pox
(2)./pox.py openflow.of_01 -address=192.168.4.70 -port=6633 pox.forwarding.l2_pairs py
2. 这时候控制器pox进入等待状态,显示为:POX>
控制器端观查
1. wireshark没有任何数据输出
关闭控制器
1. 在pox> 输入结束字符 Ctrl +D
启动mininet
1. 启动mininet建立虚拟的拓扑:
(1)sudo mn --controller=remote,ip=192.168.4.70,port=6633
2. 网络建立成功后,mininet进入等待状态,显示为:mininet>
3. 这样建立了一个只有一个交换机,两主机的拓扑,指定控制器在192.168.4.70:6633
mininet端观查
1. 此时wireshark有数据出现
2.从数据中可以看出,switch在不停地向控制器(192.168.4.70:6633)发送连接请求【SYN】,但是由于对端的控制器关闭,连接无法建立【RST ,ACK】。而且每次连接请求都都会使用新的端口号
关闭mininet
1.此时在mininet>输入exit或quit
以上两个实验只是证明是switch在向指定的控制器发送连接请求
接下来的实验来说明控制器与交换机通信的过程
启动控制器端wireshark
启动mininet端wireshark
启动控制器
启动mininet
经过以上四步,可以看到A和B上的wireshark都开始显示数据:
从mininet上可以得到如下数据:
实验结论
1. 先看灰色头的几行,可以看到交换机用53967端口连通了控制器后,交换机要求关闭连接,并且控制器端给交换机发送了OFP的hello消息
2. 再看接下来的灰色几行,可以看到交换机用53968端口又和控制器端连接,连通后,交换机就用这个端口向控制器发送了OFP的hello消息
3. 从此以后交换机的通信都一直使用端口53968,这样连接建立成功。
4.以后就进行OFP的echo-request/reply消息