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

如有错误欢迎拍砖

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,337评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,560评论 3 406
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,632评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,219评论 1 303
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,219评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,670评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,018评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,000评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,552评论 1 326
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,565评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,692评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,280评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,009评论 3 341
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,435评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,587评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,276评论 3 383
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,752评论 2 367