超冷門知識之 SCPS 與 WANEM 測試

今天要來講個超冷門的東西,甚至有沒有用我也不是很確定,不過研究了很久才找到可動的方法,就記下來了。

SCPSSpace Communications Protocol Specifications 的縮寫,聽起來就很威不是嗎?簡單的說就是太空用的通訊協定。當然也是基於 IP 網路上的 TCP 延伸。

WANEM 則是 WAN 的 emulator,可以用來模擬 WAN 的一些行為,例如衛星的低速與高延遲。

由於沒有衛星可以拿來給我測試,所以透過 WANEM 來做驗証是理所當然的組合了。

系統安裝

為了模擬實際的環境,我們要有5台的虛擬機,其中一台用做於 WANem,兩台用做於SCSP TCP加速,兩台用做於一般的 Client。除了 WANem 自附vmware虛擬機外,其它機器皆自行安裝 Ubuntu 14.04。會安裝這麼舊的版本,主要是 scsp reference design 已經是 25 年前的軟體 (1997),若用現今的 64 bit 程式,不確定可否運行

由於需要複雜的網路配置,這邊需要以 VMWare 做為虛擬機的環境,其網路 Topology 如下。

測試架構

  1. WANem: 利用 WANEM 架設的網路模擬器,可以限制頻寬、增加延遲
  2. GW1, GW2: 運行 SCPS 的機器,基本上可以看成是一個橋接器
  3. PC1, PC2: 要對通的2台電腦, gateway 分別設定成 WANem 的 eth0 / eth1 IP,這樣才能通訊。

WANEM 下載

WANEM 由於太大,請上其官網下載,本文用的是 2.3 的版本,下載後解壓縮,就可直接用 vmware 執行了。

壓縮檔內容

若有需要,也可將 .iso 檔燒到光碟或隨身碟,在實體機器上執行。

PC 與 GW 的 Ubuntu 14.04 套件需求

本文所有的操作,皆以 root 身份執行,除 WANem 外的虛擬機,其它系統皆安裝 Ubuntu 14.04 的VM,並安裝下列套件。建議使用 Server 的版本會比較省空間和記憶體,Ubuntu 的安裝與設定就不贅述。在安裝好一台虛擬機後,再用複制的方式來產生其它台會比較方便,不用一台台重灌。

 

編譯 SCPS

本文所使用的 SCPS 軟體,是由 github 下載,而該來源也不是原作,是由 Wiki 裡所提到的網站下載。由於 scps 太冷門,這是我唯找到可下載源始碼的地方。

Github 內下載的程式碼,在運行時會發生 stack overflow 的錯誤,需套用下列修改。附件的 scps.tar.gz 已是修改過的。

 

將附件的 scps.tar.gz 放進系統Ubuntu內解壓縮後,用以下命令進行編譯。

編譯失敗

第一次的編譯會失敗,是一個字串定義的問題,也許是之前的 compiler 允許這種寫法吧。所以我們把該字串覆寫再進行一次編譯就好了。

最後編譯完成的執行檔,就在 scps/bin 的目錄下了。

輸出檔案

此外依 README.GATEWAY.LINUX.TAP 的文件說明,還要修改一下 scps 的設定。可將下面兩行貼入

並手動將 AIF_NAME 改為 eth0,BIF_NAME 改為 eth1。

scps 的 gateway 檔案運行時,會創建 tap0, tap1 裝置,並分別與 eth0, eth1 橋接成 aif, bif。gateway 程式會去載取 aif / bif 的封包,再決定是否要進行動作,這是我基本的理解。

建立執行腳本

為了方便測試,我們可以在/root建立2個腳本。

上面的run_scps.sh腳本會運行 scps ,來測試加速的效果

上面的run_bridge.sh腳本則套用橋接,用來測試無加速的狀況。

虛擬機配置

在虛擬機的配置,最主要的部份就是要新增網路卡來符合前面提到的 Topology。會選擇 Ubuntu 14.04 來測試,一方面 SCPS 已經是25年前程式了,有可能會不相容64bit 的OS,所以選 14.04。另一方面,在 14.04 上的網卡命名比較傳統,VM 設定的第一張網卡就會是 eth0,第二張就是 eth1,這樣比較好設定。

以下就列出各虛擬的設定,供大家參照。其中 WANem 會多出一個 Host-Only 的介面,是因為要由 PC 來連線其網頁的。

開啟5台vm

WANem

wanem網卡1配置

wanem網卡2配置

wanem網卡3配置

PC1

pc1網卡1配置

PC2

pc2網卡1配置

GW1

gw1網卡1配置

gw1網卡2配置

GW2

gw2網卡1配置

gw2網卡2配置

 

開機後設定

此時,將所有的虛擬機開機,逐一設定。

WANEM

WANEM 在開機過程中,會詢問是否用 DHCP,直接選 y 以加速流程。

進入系統後,會有 WANEM 自己的操作 CLI。這邊打入 exit2shell 來進入 Linux 的 shell 系統

接著將 eth0, eth1 如之前 Topology 所示設定 IP,並觀察 eth2 的 IP,用來打開瀏覽進行設定。由於這是手動設定,可能會與內建的 DHCP 有所衝突,若後來又看到 eth0 / eth1 沒有 up , 再手動下一次即可。

然後就可以打開瀏覽器 http://192.168.195.128/WANem 來進行設定

這裡我們設定 eth0 和 eth1 的頻寬都是 20Mbps, 延遲也都是 250ms. 所以從 PC1  ping PC2 ,的時間約為 500ms,這個時間相當於利用地球同步衛星做 ping 所需的時間。

PC1

僅需設定 eth0 IP 與 gateway

PC2

僅需設定 eth0 IP 與 gateway

GW1、GW2 設定

GW1, GW2 與測試有關,我們稍後再設定。

開始測試

我們首先會測試沒加速前的數值,再看一下加速後的狀況。

沒加速前

在 gw1, gw2 下達命令 ./run_bridge.sh 命令,來測試未加速的狀況。

接著在 PC2 執行

在 PC1 執行

跑出來的數值大約只有 500k

啟用加速

在 gw1, gw2 下達命令 ./run_scps.sh 命令,來測試scps加速的狀況。

接著在 PC2 執行

在 PC1 執行

跑出來的數值有 1.9 Mb 結果,大概有 4 倍的改進。

看了一下scps設定檔 “bin/rfile”,原來是 output 介面被限制在了 2Mbps (BIF_RATE)。修改成20Mbps後,再測試一次可以達到將近 8Mb 的速度,又提升了 4 倍!

從原本的改500Kbps, 到 8Mbps,這改善是很明顯的, 也達到了預期的 TCP 加速效果。

更多參數

其它更多的參數可以參考 scps/doc/GW_config.pdf 的配置,這邊僅就效果做展示。

結語

這種 Long Delay 的網路,可以說是極少數的應用,所在一開始研究 TCP 加速時,資料並不好找,同事還自己刻出了自己的版本。但隨著馬斯克的 StarLink 網路部署,想必也是採用著類似的技術,讓這個學問不再冷門了。

參考

  1. 【CCSDS】SCPS简介及安装(Linux下TAP方式) –> 網路上的資料真的很少,唯一一篇我看了很久也終於參透
  2. SCPS Github –> 善心人事9年前撈出的 reference design
  3. XipLink
  4. WAN emulator

附件

我修正過後的 SCPS 源始碼

Leave a Reply

請輸入答案 six + two =