目录
(一)、记录和重放HTTP流量—Record and replay HTTP traffic
(二)、模拟多种网络条件—Emulate numerous network conditions
(三)、使用未修改的客户端应用程序—Use unmodified client applications
2、如果报错:could not creat work tree ….,
一、Mahimahi 功能介绍
Mahimahi 是用于网络模拟和分析的工具。
其核心功能主要有以下三点:
(一)、记录和重放HTTP流量—Record and replay HTTP traffic
实现这一功能主要依靠Mahimahi的两种Shell模式:
1.RecordShell
用于记录浏览器的实时HTTP请求和响应报文,并完整地存储到本地磁盘。
2.ReplayShell
用于重放记录的内容。
(即在模拟网络下重复进行RecordShell所记录的HTTP请求和相应过程)
(二)、模拟多种网络条件—Emulate numerous network conditions
该模式下提供三种Shell模式,用来模拟不同的链路条件:
1.DelayShell—固定传输延迟
指定单项延迟时间;
2.LinkShell—固定/可变链路速率
模拟时变链路(如蜂窝链路)和具有固定链路速度的链路。
LinkShell 工作原理:通过追踪数据链路上的数据包来模拟链路;
LinkShell 工作过程:
(1).当数据包(从Internet或LinkShell)到达链路时,根据其预期方向,它将直接被放入两个数据包队列之一:上行链路队列或下行链路队列。
上行链路跟踪文件(uplink trace file):模拟从LinkShell的容器到Internet的链接
下行链路跟踪文件(downlink trace file):模拟从Internet到LinkShell容器的链接。
(2).LinkShell 跟踪每个队列中的数据包,并在跟踪文件中记录跟踪到的数据包的信息。
跟踪文件记录的是(在模拟网络下)传递一份数据包的时间,而这个数据包的大小为MTU(即网络传输最大报文包的大小)。
跟踪文件一行只能记录1500byte 大小的信息,但是一行能记录几个总计为1500byte 的数据包的信息。
LinkShell 可以嵌套在DelayShell中,以灵活地创建用户所需的链路条件。
LinkShell 支持实时图形化,以可视化某一进程下的网络使用。
LinkShell 支持的图表可以展示数据传输速率、数据包在离开或进入LinkShell容器的上、下行链路链路时的排队延迟。
3.LossShell—随机丢包
在离开或进入LinkShell容器的上、下行链路链路时,将数据包以给定的速率(0和1之间)随机丢失。
(三)、使用未修改的客户端应用程序—Use unmodified client applications
可以使用商业浏览器(如谷歌浏览器、Mozilla Firefox和Safari)记录和重网站。
此外,包括虚拟机和移动设备模拟器在内的其他客户端应用程序可以在Mahimahi的每个工具中不经修改地运行。
(也就是说在Mahimahi模拟的网络环境下可以运行其它应用或工具)
可在模拟的网络条件下执行应用程序或叠加使用RecordShell来重放HTTP流量。
Mahimahi 提供的每一种shell既可以彼此独立并行又能相互嵌套从而提供更大的实验灵活性。
二、Mahimahi 安装预备知识
(一)安装环境介绍
本文使用的是VMware Workstation Pro虚拟机,并在Linux操作系统下安装的Mahimahi。Linux镜像文件版本为Ubuntu 16.04.7。
(二)基础知识
(这一部分可以选择性跳过)
1、需要用到的Linux命令
Ctrl + Alt + T | 进入终端 |
pwd | 查看当前目录 |
cd | 进入目录;如"cd /home"表示进入home目录,目录前要加"/" |
sudo passwd root | 设置root账户的初始密码,root账户是默认的,不需要再创建 |
sudo useradd -m abc | 创建用户名为abc的普通用户; sudo是允许系统管理员让普通用户执行root命令的一个工具(获取权限); -m 表示自动建立用户的登入目录;这里会需要输入管理员的密码,但不是你想给新用户设置的密码 |
sudo passwd aaa | 输入用户aaa的密码 |
su root | (从普通用户)进入root用户 |
su abc | 从root用户切换到普通用户abc,abc是用户名 |
示例:
(1)设置root用户密码
(2)创建普通用户
2、普通用户权限设置
如果不设置,就会报错:abc is not in the sudoers file
按"i"键进入编辑模式
写完之后要输入“:wq!”,用来保存已经增加的权限信息,像这样:
输入完成后会自动退出的
三、Mahimahi 安装教程
下图为Mahimahi官网要求的安装必备工具,后面会介绍这些工具的安装方法。
(一)安装方法
1、方法一
2、方法二
注:
鄙人在尝试第一种方法的时候没有成功,又没有找到出错的原因,于是使用了第二种方法。
如果大家第一种方法都没成功的话,可以尝试第二种方法。
接下来我将附上第二种方法安装成功的小tips。
接下来进入最关键也是最容易出错的环节
(二)安装细节
1、安装vim
apt install vim
否则会报错:
2、如果报错:could not creat work tree ….,
在执行 "git clone https://github.com/ravinet/mahimahihttps://github.com/ravinet/mahimahi"时报错,如下图:
、出错原因:当前目录没有权限(具体是什么权限,我不知道)
解决方法:
(1)切换到有权限的目录下去执行安装代码
(2)给一个目录赋予权限,然后继续执行安装代码
如:给home目录赋予权限
sudo chmod 777 /home
3、安装git
apt install git
4、安装apt
系统自带,不用安装
5、安装automake
否则会报错:
6、安装apache2
(第一行是更新apt-get可以不用敲)
不安装则会报错:
apache2 is required
7、安装protobuf 3.6
不安装则会报错:
cannot find protoc, the Protocol Buffers compiler
8、安装apx
在root账户下执行:
9、安装openssl
不安装则会报错:
no package ‘libcrypto’ found
no package ‘libssl’ found
10、安装xcb
不安装则会报错:
no package ‘xcb-present’ found
11、更新gcc、g++到8.4.0以上
安装完后要不断检查gcc、g++版本,确保编译的时候使用的是8.4.0以上的版本
如果发现系统默认的是旧的版本,则更改权重,让系统优先使用新的版本
不更新到8.4以上的话则会报错:
报错原因:
Ubuntu 16.04.7自带的gcc、g++版本为4,而这个版本的编译器在执行安装代码“make”的时候会出现格式冲突,因而要手动升级gcc、g++版本(据说要升级到8以上版本才行,我只试了4、5、6、8几个版本没有试7),同时要注意设置权限来让系统使用新版
检查gcc、g++版本
gcc -v
g++ -v
或
gcc --version
g++ --version
12、安装pango、cairo
(执行sudo以后的代码就行了)
(三)安装测试
安装好以上部件,Mahimahi 的第二种方法的全部代码就能顺畅地执行了,最后,测试一下安装是否成功:
mm-delay 20
出现下面的结果就说明安装成功啦