交换机与控制器如何建立连接,这个问题在一些资料上有过说明,但没有具体细节。这个也让我困惑了几天,今天通过实验验证一番。


一、实验环境搭建如下:


    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上可以得到如下数据:




二台MESH设备连接光猫_controller


 


实验结论


    1. 先看灰色头的几行,可以看到交换机用53967端口连通了控制器后,交换机要求关闭连接,并且控制器端给交换机发送了OFP的hello消息


    2. 再看接下来的灰色几行,可以看到交换机用53968端口又和控制器端连接,连通后,交换机就用这个端口向控制器发送了OFP的hello消息


    3. 从此以后交换机的通信都一直使用端口53968,这样连接建立成功。


    4.以后就进行OFP的echo-request/reply消息