Facebook ATC弱網環境搭建


  用戶的網絡環境並不是一直處於能高速傳輸的狀態,網絡的好壞受用戶所處地理位置,同一基站使用人數等許多因素影響。百度公開的數據顯示,百度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.010.255.255.255
B 類:172.16.0.0172.31.255.255
C 類:192.168.0.0192.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',

  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM