DASH NET(网速控制,可变)

本文记录如何使用mininet搭建一个网速可控,且可动态变化的局域网搭建出来的网络环境可以用于DASH(Dynamic Adaptive Streaming over HTTP)的测试,或者其他需要控制网速变化的情况
参考《An Evaluation of Dynamic Adaptive Streaming over HTTP in Vehicular Environments》github:https://github.com/liuheng92/DASH_NET

需要硬件

1.装有linux的主机且有至少一张网卡(我使用的linux版本为16.04)
2.能在交换机状态工作的路由器(我使用的是TPlink TL-WR886N)
3.两根网线
4.一个use网卡(usb转网口)
主机电源线,鼠标键盘啥的就不说了,肯定是要的

需要软件

1.需要linux主机安装dhcp(sudo apt-get install isc-dhcp-server)
2.安装mininet,安照http://mininet.org/download/中的第二部源码使用install.sh脚本安装(单独下一个仓库,与dash-net无关,这步只是为了按照dashnet需要的依赖,因为dashnet是在mininet基础上开发的)
3.Dash-net

Dash-net的使用

如下图所示为本文搭建起来的框架
图一、framework.png

1.使用ifconfig可以查看网口名称,因为本机自带一个网口,加上usb转网口,这台待配置的主机就有两个网卡了,本文中一个网口名叫eno1是主机自带网口,一个名叫enx000ec6de8983是usb网口。

2.将eno1用网线与外网相连,或者与内网相连都行(如果只是要测试app在弱网情况下的表现只需接内网就行,这样能更好的控制网速,因为内网网络波动小)

3.将enx000ec6de8983用网线与无线路由器相连(虽然连接的是路由器,但是需要设置它以交换机的方式工作)

4.设置无线路由器使其能以交换机的方式工作(本文使用的是TL-WR886N,操作就是关闭其dhcp功能)

5.为无线路由器分配静态ip地址192.168.1.10(本文将192.168.1.1作为待配置的局域网的网关,192.168.1.1~192.168.1.10为局域网地址,这部分代码写死了)

6.为linux主机安装dhcp(sudo apt-get install isc-dhcp-server)

7.拉取Dash-net仓库

8.cd到Dash-net仓库的根目录

9.更改dash_minievents.json,该json由两个字典组成,一个是config用于告诉dashnettopo.py主机两个物理网卡的名字,一个是events用于配置网速的变化

config:
in_intf对应的是连接外网或者公司内网的网口,本文为eno1
out_intf对应的是连接无线路由器的网口,本文为enx000ec6de8983
events:
time是数字,用于表示时间单位为秒(s)
type,程序只支持editLink和stop,stop表示停止该网络拓扑,editLink用于编辑网速
(当type为editLink时,支持输入link,bw,loss,delay四个参数,link表示拓扑中创建的link1,bw表示期望带宽,loss表示丢包率,delay表示发包延时)

10.sudo python dashnettopo.py运行脚本(该脚本默认输入dash_minievents.json)

若一切正常,原理图中的拓扑将会启动,网速控制也将启动,可以使用另一台电脑连接无线路由器发射出的局域网,通过wget内网的数据,查看网速控制效果

原理

1.mininet
* 什么是mininet
mininet是一个网络仿真开源框架,它可以在一台主机上仿真出一个真实的虚拟网络,其中能包含控制器(controller)、交换机(switch)、主机(host)、连接(link)等。官网地址为http://mininet.org,里面有walkthrough可以看一下。
至于一些相关的SDN,Openflow协议等概念感兴趣可以了解一下,本文基本不涉及里面的细节,所以不作详细介绍

  • mininet的原理简介
    就是为什么它能够在一台主机上仿真出虚拟网络
    mininet利用的是linux内核里命名空间的特征实现的。

    1)其虚拟出来的host其实是linux网络命名空间中的某个进程(所以linux服务器能正常运行的命令,host就能运行,且host拥有自己私有的网络接口,只能看见自己的进程)
    2)其虚拟出来的switch是基于一些软件虚拟出来的,如Open vSwitch或者其他一些基于OpenFlow协议的软件
    3)其虚拟出来的link是Linux的veth pair(虚拟网络设备对,是不同Network namespace间进行通信的方式)

  • 本文的拓扑
    从原理框图可以很清楚的看到,本文通过mininet创建了一个通过默认控制器(controller)c0控制的交换机(switch)s1,s1通过link与新创建的节点(Node)root连接,而网卡enx000ec6de8983则是作为交换机s1的物理接口工作的(此时的物理接口没有IP,因为它是二层交换机的借口,工作在物理链路层)

2.NAT
* 什么是NAT
NAT全名是Network Address Translation(网络地址转换),说白了就是修改网络封包的来源IP(来源NAT,Source NAT, SNAT)与目标IP(目标NAT,Destination NAT,DNAT)
想更好的理解NAT,需要先了解linux的防火墙,在linux version 2.4以上版本(版本查看uname -r)使用iptables实现
详情可以查看鸟哥的linux私房菜

  • iptables
    iptables可以用来定义即将进入linux主机的封包的行为,比如该封包能否进入linux主机,进入主机后该往哪走走等
    从名字看出,iptables这个软件里面有多个表格(table),每个表格都可以定义出自己的预设政策与规则,且每个表格的用途都不相同,如下图二看出linux的iptalbes主少就有三个表格,包括管理本机进出的filter、管理后端主机(防火墙内部的其他电脑)的nat、管理特殊标志使用的mangle(较少使用)。还能有自定义表。
    图二、iptalbes的表格与相关链示意图.png

注意:这些表里面的内容不是互相独立的,他们是有一定关系串起来的链

各个表分规则:
1)filter:主要跟进入linux本机的封包有关,其里面包含的链有

INPUT:主要与想要进入linux本机的封包有关
OUTPUT:主要与linux本机所要送出的封包有关
FORWARD:这个与linux本机没有关系,用来转送封包

2)nat:这个表格用来进行封包来源于目的的IP或port的转换,与本机较无关,主要与linux主机后的局域网内电脑相关,其里面包含的链有

PREROUTING:在进行路由之前所要进行的规则
POSTROUTING:在进行路由判断之后所要进行的规则
OUTPUT:与发送出去的封包有关

3)mangle:这个表主要是与特殊封包的路由标志有关,一般较少使用,而且这里我们没有用到,所以不介绍了

一个封包进入linux主机的简单路径,可以用下图三表示
图三、iptalbes 内建各表格与链的相关性.png

上图分为三个路径:
1)封包进入linux主机使用资源(路径A):在路由判断后确定是给linux的封包,就会通过filter的INPUT链来进行控制
2)封包只是经过linux主机的转换,没有使用主机资源,而是发给后端主机(局域网主机)(路径B):在路由判断之前进行封包包头的修改,发现封包是发给局域网的其他主机时就走B路径。主要经过的链是filer的FORWARD以及nat的POSTROUTING,PREROUTING。
3)封包有linux主机发送出去(路径C):例如回应之前的封包要求,或者linux主机主动发送,都是通过路径C。显示通过路由判断,决定了输出的路径后,在通过filter的OUTPUT链传送,最后经过nat的POSTROUTING链。

  • 本文NAT
    本文将发送给与internet或者内网连接的网口eno1的封包,通过设置iptables转发给Node(root)中的root-eth0接口,从而封包经过虚拟交换机s1,另一个物理网口enx000ec6de8983,最后经过无线路由器(这时候应该是交换机)发送出去。

3. 网速控制
这部分认真看mininet的网速控制的代码,其实就是内部运行了linux的tc对封包的发包速度进行控制

网络架构参考
《An Evaluation of Dynamic Adaptive Streaming over HTTP in Vehicular Environments》(http://www-itec.uni-klu.ac.at/bib/files/Demo_Paper_Camera_Ready.pdf

如有错误欢迎拍砖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值