基于SDN的In-network Cache系统开发

来源:互联网 发布:数据库链表查询sql语句 编辑:程序博客网 时间:2024/06/03 16:03

整体架构图:

这里写图片描述

优势:

1,SDN网络可以获取传统网络无法知道的全局拓扑信息,实现数据流的统一管理控制;
媒体服务器实现流媒体视频源的流化工作;
管理服务器协调控制层与应用层的关系:它既能获取应用层数据信息,也能与控制器交互获取网络拓扑信息。
2,交换机节点上面向内容的存储,而不是原来的数据包的存储,减少重复网络流量。

准备工作:

OpenWRT with OpenvSwitch 刷路由器教程 :
http://blog.csdn.net/qq_15437629/article/details/51381693

openflow交换机型号:WNDR3800
带ovs的openwrt.bin文件(固件版本OpenWrt Attitude Adjustment 12.09.1):https://pan.baidu.com/s/1pLniFxh
backup(the current configuration files): http://pan.baidu.com/s/1hr9Zib6 (在Luci:System:Backup/Flash firmware:Restore backup:upload)

进行如下设置,初始化配置文件在 /etc/init.d/ovs-set

       ovs-vsctl add-br br0       ovs-vsctl add-port br0 eth0.1 tag=1       ovs-vsctl add-port br0 eth0.2 tag=2       ovs-vsctl add-port br0 eth0.3 tag=3       ovs-vsctl add-port br0 eth0.4 tag=4       ovs-vsctl add-port br0 wlan0 tag=5       #ovs-vsctl add-port br0 adhoc0 tag=6       ovs-vsctl set-controller br0 tcp:10.0.0.99:6633       ovs-vsctl set bridge br0 other_config:datapath-id=0000000000000001 #不同交换机设这不同的dpid       ovs-vsctl set controller br0 connection-mode=out-of-band//必须设置带外控制!!!       ovs-vsctl get controller br0 connection-mode //查询       ifconfig br0 192.168.1.1       mkdir rtpcap

挂载U盘到/mnt目录下: http://blog.csdn.net/qq_15437629/article/details/51397655
需要设置允许权限:

root@OpenWrt:/mnt# chmod 777 *

安装fdisk等ipk(注意版本):http://blog.csdn.net/qq_15437629/article/details/45767575
wiki: https://wiki.openwrt.org/doc/packages
12.09 ipk:https://downloads.openwrt.org/attitude_adjustment/12.09/ramips/rt305x/packages/
python,Luci ipk: https://pan.baidu.com/s/1dEATywT
输入“/etc/init.d/uhttpd enable”回车,打开uhttpd服务;
输入“/etc/init.d/uhttpd start”回车,让uhttpd自启动;
在电脑端的浏览器中输入“xxx.xxx.xxx.xxx”,可访问路由器就表示LuCY安装成功;

rtptools源码下载:http://www.cs.columbia.edu/irt/software/rtptools/
交叉编译rtpdump,rtpplay工具,参考:http://blog.csdn.net/qq_15437629/article/details/45765717
进入工具目录进行以下操作:

将 /home/zlk/openwrt/bin/ar71xx中的OpenWrt-SDK-ar71xx-generic_gcc-5.3.0_musl-1.1.14.Linux-i686.tar.bz2压缩包解压到如下新目录cd rtptools-1.20 #进入源码目录#设置环境变量PATH=$PATH:~/OpenWrt-SDK-ar71xx-for-linux-i686-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/binexport PATHSTAGING_DIR=$STAGIN_DIR:~/OpenWrt-SDK-ar71xx-for-linux-i686-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2export STAGING_DIR./config.guess #显示机型:i686-pc-linux-gnu./configure --build=i686-pc-linux-gnu  --host=mips-openwrt-linux-uclibcCC=mips-openwrt-linux-gccLD=mips-openwrt-linux-ldmake cleanmake

执行后若有以下报错,正常:

host2ip.o: In function `host2ip':/home/zlk/rtptools-1.20/host2ip.c:38: undefined reference to `yp_match'/home/zlk/rtptools-1.20/host2ip.c:37: undefined reference to `yp_get_default_domain'

在https://github.com/maximeh/buildroot/tree/master/package/rtptools下载patch等文件于/rtptools-1.20源码目录下,执行:

patch -p0 < 0001-host2ip-no-nis-on-uClibc.patch

重复以上步骤进行交叉编译。

以上仅供参考,详见wiki:https://wiki.openwrt.org/doc/devel/crosscompile
将以下文件上传到各个交换机下:
http://pan.baidu.com/s/1dE1rIRB

    scp Switch.py rtpdump rtpplay root@10.0.0.6:rtpcap

实验流程:

初步代码:https://github.com/pkpk8/Software-Defined-Cache-System
     http://pan.baidu.com/s/1dF39QKT
MKV转换为TS tsMuxeR_1.10.6.zip:http://pan.baidu.com/s/1dE0CclN
备注:交换机重启后需检查如下设置:

ifconfig br0 192.168.1.1ovs-vsctl set controller br0 connection-mode=out-of-bandovs-vsctl get controller br0 connection-mode //查询fdisk -lmount -t ext4 /dev/sda1 /mnt

实验步骤:

1.交换机端(10.0.0.1/2/3…):

cd /mntpython Switch.py

注:rtpplay时若出现Timeout情况,重启程序即可

2.启动控制器(10.0.0.99):

./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk  openflow.discovery poxdesk.tinytopo forwarding.4l2_multi

打开浏览器输入以下地址可查看网络拓扑:

http://10.0.0.99:8000/poxdesk/source/

注:若有交换机未连接上,检查OVS设置,删除端口后重新添加

3.启动管理服务器(192.168.1.110;10.0.0.110)与媒体服务器(192.168.1.110):

python manager.pypython server.py

4.客户端(192.168.1.111)申请加入:

python client.py 1/2/3/4/5

注:参数表示请求的视频序号;
关闭客户端大约需等待40s,服务器端检测到客户端断开

展示拓扑与代码:
https://github.com/pkpk8/SDCache_PHPTopo
这里写图片描述

0 0