使用者的網絡環境并不是一直處于能高速傳輸的狀态,網絡的好壞受使用者所處地理位置,同一基站使用人數等許多因素影響。百度公開的資料顯示,百度APP使用者約有1%的人群處于弱網狀态。是以研究弱網測試,來提升這部分流量使用者的體驗,非常有必要。低帶寬、低信号強度、高延時、丢包率高等都屬于弱網。弱網情況下通常還伴随的隐藏的bug,使用者體驗差等因素。開展這項測試前,我們得把環境搭起來,是以今天先來介紹下如何搭建ATC。
弱網工具簡介:
Augmented Traffic Control(ATC)是Facebook的一款開源的移動網絡模拟工具,能很友善的模拟2g,3g,4g,wifi,delay,loss等各種網絡場景。
硬體準備:
我是搭建在本機的,是以需要用VM虛拟出一個Linux系統。
1.Ubuntu 16.04 LTS
2.USB無線網卡(晶片型号是RTL8188EUS)要確定無線網卡能支援AP(用iwlist檢視)
一、配置Ubuntu無線wifi熱點
在操作之前先确認USB無線網卡和驅動都支援AP。
1.配置hostapd
通過Hostapd可以将無線網卡切換為AP/Master模式,通過修改配置檔案,可以建立一個開放式的(不加密)的,WEP,WPA或WPA2的無線網絡。
apt-get install hostapd
建立hostapd檔案:vi /etc/hostapd/hostapd.conf
interface=wlx488ad2a0e0fe //wifi裝置名稱
driver=nl80211
ssid=autotest
hw_mode=g
channel=10
macaddr_acl=0
auth_algs=3
wpa=2
wpa_passphrase=12345678 //密碼
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
啟動AP
hostapd -B /etc/hostapd/hostapd.conf
此時應該有一個autotest的wifi可以連接配接,連接配接後處于“正在擷取IP”狀态。
2.配置dhcpd
dhcp簡單來說是管理ip的
apt-get install isc-dhcp-server
開啟DHCP伺服器是為了讓終端能夠擷取到IP位址,配置設定的位址是私有的,是以隻要不與公有的位址相沖突就可以,RFC 1918 為私有網絡預留出了三個IP 位址塊,上述三個範圍内的位址不會在網際網路上被配置設定,我們可以放心使用。
A 類:10.0.0.0~10.255.255.255
B 類:172.16.0.0~172.31.255.255
C 類:192.168.0.0~192.168.255.255
我們需要配置/etc/dhcp/dhcpd.conf檔案,添加要配置設定的網段,指明配置設定的位址範圍,預設網關和DNS伺服器位址。在檔案最後我們添加以下内容。注意要配置設定的網段不能和主機ens33所處的網段相同。
subnet 192.168.0.0 netmask 255.255.255.0
{
range 192.168.0.2 192.168.0.10;
option routers 192.168.0.1;
option domain-name-servers 8.8.8.8;
}
配置無線網口wlx488ad2a0e0fe所處的網段,和上面的網段要一緻。
ifconfig wlx488ad2a0e0fe 192.168.0.1 netmask 255.255.255.0
接下來開啟dhcp,熱點會給接入的裝置配置設定ip,從 192.168.0.2~192.168.0.10 中随機取一個。
service isc-dhcp-server start
現在應該能連接配接上熱點,但還不能上網。
3.配置NAT
我們需要打開轉發功能,讓192.168.0.1/8網段的位址都通過網卡ens33轉發出去。
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 192.168.0.1/8 -o ens33 -j MASQUERADE
手機連接配接wifi熱點,若可以正常上網,表示熱點配置成功了。
二、配置ATC
1.安裝和使用virtualenv建立python虛拟環境
apt install virtualenv
virtualenv project_ATC
cd project_ATC/bin
source activate
2.安裝python-pip工具
用python3+嘗試安裝了一次,沒有成功。然後發現有些依賴第三方庫是python2+寫的,是以先確定你的python版本是python2.7,然後安裝對應的pip工具。
apt-get install python-pip
通過pip下載下傳安裝ATC需要的Django元件。
pip install atc_thrift
pip install atcd
pip install django-atc-api
pip install django-atc-demo-ui
pip install django-atc-profile-storage
3.修改ATC配置
用指令建立一個Django工程
django-admin startproject ATC_UI
編輯配置檔案 setting.py
cd ATC_UI/ATC_UI
vi settings.py
在INSTALLED_APPS添加如下内容:
'rest_framework',
'atc_api',
'bootstrap_themes',
'django_static_jquery',
'atc_demo_ui',
'atc_profile_storage',
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIDO5YjMykDNz0yM4czM1YTM2ETOyETM4EDMy0CN1gjNzITMvwVMxgTMwIzLcRTN4YzMyEzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
ALLOWED_HOSTS 修改如下,‘*’允許所有ip通路。
ALLOWED_HOSTS = ['*']
編輯檔案urls.py
vi urls.py
修改增加如下配置:
from django.views.generic.base import RedirectView
from django.conf.urls import include
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^api/v1/',include('atc_api.urls')),
url(r'^atc_demo_ui/',include('atc_demo_ui.urls')),
url(r'^api/v1/profiles/',include('atc_profile_storage.urls')),
url(r'^$',RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
]
最後切換到manage.py目錄,執行更新Django資料庫:
python manage.py migrate
4.設定網卡
--atcd-wan 參數 指定網卡作為公網連接配接, --atcd-lan 參數 指定此網卡作為内網連接配接。
atcd --atcd-wan ens33 --atcd-lan wlx488ad2a0e0fe
然後我遇到上網速度很慢的情況,按照GitHub上的解決方法,給atcd指令加個參數:https://github.com/facebookarchive/augmented-traffic-control/issues/314
--atcd-dont-drop-packets
5.運作ATC_UI
然後就可以運作Django啦,runserver 參數 指定端口。
python manage.py runserver 0.0.0.0:8000
6.使用官方已經配好的網絡配置檔案
具體使用方法:
git clone https://github.com/facebookarchive/augmented-traffic-control.git
cd augmented-traffic-control
utils/restore-profiles.sh 192.168.0.1:8000
三、ATC使用方法
1.手機浏覽器輸入192.168.0.1:8000,可以看到下面的UI
2.選擇需要的網絡環境,點選“select”,然後點選最上面的“update shaping”,也可以自定義網絡。然後你可以愉快的測試了,而且每部手機連接配接的網絡互不影響,也就是說你設定了限速隻對你自己有效,不會影響其他人。
部分參考github:https://github.com/facebookarchive/augmented-traffic-control