本文记录如何使用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的使用

如下图所示为本文搭建起来的框架

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(较少使用)。还能有自定义表。

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

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

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

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

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

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

一个封包进入linux主机的简单路径,可以用下图三表示

上图分为三个路径:
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)

如有错误欢迎拍砖

DASH NET(网速控制,可变)相关推荐

  1. isis学不到looback口的路由_使用路由器后测速达不到宽带的网速怎么办?

    如您使用无线路由器后测速达不到宽带网速的话,请按以下方法进行排查: 分两种情况: 1.有线测速慢 2.有线测速正常,无线测速慢 注意事项: 关于网速,注意单位换算: 宽带运营商提供的宽带速率单位为Mb ...

  2. 什么软件可以测试家里的宽带,技术贴 | 如何简单又专业的测试自己家的网速是否达标...

    原标题:技术贴 | 如何简单又专业的测试自己家的网速是否达标 随着网络的迅猛发展,不少家庭已经升级了百兆光纤,作为用户,最关心的肯定是网速问题啦,怎么知道自己家的网速是否达到运营商承诺的速度呢?怎么知 ...

  3. 是不是网站服务器限速最高11,限制网速多少合适(100m访客限速多少kb合适)

    浏览网页一般50--80就可以了,不用特别高,这个速度不光上网页,听音乐都足够了. 4. 若要按照个别IP来限制网速的话,使用控制规则来实现.左边选项IP带宽控制,选. 那么用路由器限制速度多少比较合 ...

  4. tplink控制上网设备_上网总有人抢网速如何解决 上网卡慢解决方法【详解】

    不知道大家在运用无线WiFi上网时,有没有遇到这种情况?明明家中的宽带速率已经升级到50M.100M的高速宽带了,可在家中进行上网活动时还会产生卡慢现象? 移动设备的快速崛起,颠覆了原来家中只有电脑可 ...

  5. tplink控制上网设备_TP-LINK无线路由器怎么设置限制别人wifi网速

    TP-LINK无线路由器怎么设置限制wifi网速 ? 如果是利用路由器共享上网,那么如果你发现你的网速很慢的话,可能是被别人的上网设备占用了宽带了,那就很有必要对别人的WIFI进行限速管理了,下面为大 ...

  6. 如何控制局域网网速_WiFi新时代|要想网速飞起来,先让WiFi“6”起来

    5G已经来了,Wi-Fi 6也正在路上!信息通讯设备的江湖,风起云涌! 伴随着5G的热度,Wi-Fi 6的热度也在持续提升,各大展会.媒体都在热议Wi-Fi 6给企业发展和公众生活带来的巨大变化.即将 ...

  7. 教你控制局域网的网速

    从百度网站,输入P2P终结者,查询.可以看到很准确的相关信息.速度也很快速.百度引擎超快啊. 从页面随便点击一个内容进去,即可看到下载地址.如下图: P2P的主要功能介绍是这样描述的:P2P终结者是一 ...

  8. 如何控制局域网网速_ipv4和ipv6哪个网速快

    IP地址是我们上网的地址,就好比我们寄快递或者写信就必须写明地址对方才能收到,电脑也是如此,电脑在网络上的地址就是IP地址.那么,ipv4和ipv6哪个网速快?下面将会为大家介绍. ipv4和ipv6 ...

  9. php控制wifi上网时长,怎么限制wifi网速 TP-LINK无线路由器设置方法【步骤方法】...

    怎么限制wifi网速? 如果是利用路由器共享上网,那么你要做的不是提高网速, 下面为大家带来 TP-LINK无线路由器设置教程,一起来看看. 我们知道,双绞线是由四对线按严格的规定紧密地绞和在一起的, ...

  10. 如何控制局域网网速_科普 | 路由器网速突然变慢怎么办?

    腾达路由器Q&A 有微博网友提问@Tenda腾达 路由器网速变慢怎么办? 可以从下面几点入手

最新文章

  1. 丰田chr优惠5万_别克昂科威优惠5万?是否该考虑入手了呢?
  2. python openstack rabbitmq_OpenStack--Rabbitmq组件消息队列
  3. 计算机产品创新设计实践,基于TRIZ的计算机辅助机械产品创新设计研究
  4. ASP.NET Form Authentication安全漏洞及对策
  5. WebRTC促进跨平台指挥调度,触发安防应用新创意
  6. ASR开发工作笔记0002---认识iccid
  7. FPGA芯片手册阅读技巧
  8. linux 修改文件日期,Linux中使用touch命令来修改文件的时间
  9. vbox NAT 设置端口映射(NAT+8080端口转发)
  10. AVOD-代码阅读理解系列(一)
  11. 《代码大全》个人总结
  12. java socket 局域网_javase基础socket编程之局域网聊天,局域网文件共享
  13. Fliqlo:一款精致高逼格的翻页时钟屏保软件
  14. styl类型文件css,styl样式文件问题:vue重复加载
  15. 使用Python Snap7读取西门子触摸板 Dint LReal(int double)数据
  16. 使用openssl将pfx格式证书转换成key和crt
  17. 基于HTML5 Canvas实现黑白滤镜
  18. 黑马Java常见面试题基础(一)
  19. 新东方托福词汇(List 31 ~ List 35)
  20. 索纳塔进入wince系统_索航导航一体机如何进wince系统?|KBS车友会

热门文章

  1. css 彩虹色渐变色,纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)...
  2. Android解决手机图片压缩后旋转问题
  3. 一般python程序员的工资_【Python程序员工资|Python程序员待遇怎么样】-看准网
  4. java程序员的待遇_想学java,一般的java程序员的薪资待遇是多少?
  5. 计算机语言底层用汉语拼音设计,设计英语元素计算机汉字输入拼音代码的研究...
  6. 80端口被屏蔽解决方法
  7. jsmy97时间控件,时间范围选择
  8. tm影像辐射定标_「教程」遥感图像预处理之辐射定标
  9. java求方程的解_给定一个 n 元一次方程组,求方程组的解。(java8)
  10. Django 2.1文档