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

一、实验环境搭建如下:
    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消息
 


 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐