2.3.1 EstiNet 網路模擬器
在本論文中實驗中為了測量 Citrix XenDesktop 在不同網路環境下對於畫面 的反應時間,因此需要引入網路模擬器做為變化網路情境的工具,在本論文中使 用 的 是 思 銳 科 技 公 司 所 開 發 的 EstiNet 網 路 模 擬 器 , EstiNet 的 前 身 是 NCTUns[4][5][6],是一款具有高真實性和擴充性的網路模擬器和擬真器,具有 模 擬 各 種 有 線 和 無 線 網 路 設 備 和 協 定 的 能 力 , 其 核 心 技 術 是 利 用 Kernel re-entering 方法,這套方法是交通大學王協源教授 1990 年在美國哈佛大學時 所設計的。由於這套創新的方法,EstiNet 有著許多獨一無二的優點,這些獨特 的優點是傳統的網路模擬器無法達到的,像是 ns2、OPNET。EstiNet 還具有以下 優點。
1. 利用真實世界中的傳輸層與網路層的協定堆疊 (Protocol Stack),能產生更 精準的模擬結果。
2. 真實世界的應用程式可以不經修改直接運行於此模擬器上。
3. 具有高度整合性的使用者圖型化介面 (Graphical User Interface),提供便 捷的操作方式進行模擬情境的設計、執行與模擬結果檢視。
Kernel re-entering 方法如圖 2 所示,透過這個方法 EstiNet 在模擬的時候,
可以利用真實世界中 Linux kernel 的 TCP/IP 協定來協助模擬,因此可以得到更 真實的模擬結果。在圖 2 中,TCP/IP 協定堆疊是真實世界 Linux kernel 的協定。
雖然圖 2 中有兩個 TCP/IP 協定堆疊,但它們都是表示同一個 Linux kernel 的協 定堆疊。而通道介面 (tunnel interface)可以看成是一個虛擬的網路卡介面 (pseudo network interface),但是沒有對應到真實世界的網路裝置。由於我們 的通道介面 1 設定成封包的輸出設備,所以封包會被插入到通道介面 1 的 output queue 裡面。模擬引擎將立即偵測到這個事件,並透過執行 read()系統呼叫,從 通道介面 1 獲得這個封包。封包在模擬引擎中會模擬 transmission delay 和 propagation delay 的情況,之後模擬引擎會透過執行 write()系統呼叫將封包 插入通道介面 2 的 input queue 裡面。然後,核心會藉由執行軟體中斷,並把封 包傳到 TCP/IP 協定堆疊。接著將封包放入 TCP 接收端的 receiver queue 裡面。
最後,TCP 接收端執行 read()系統呼叫接收封包。
9
EstiNet 網路模擬器的架構如圖 3 所示,裡面包含了幾個基本元件,分別是 模擬引擎 (Simulation Engine)、協定模組 (Protocol Module)及圖形化使用者 介面(Graphical User Interface)。模擬引擎可以想成是一個小型的作業系統核 心,它是由許多複雜的功能所組成,包含事件的排程、模擬時間的管理、行程通 訊…等,它也提供許多 API 程式,協定模組可以藉由執行這些 API 程式取得系統 資訊和要求模擬引擎提供服務。EstiNet 網路模擬器採用模組化設計,每一種網 路型態設備的協定堆疊採用了模組化設計,像是 ARP 模組則是對應到 ARP 協定,
而 FIFO 模組則是實作 FIFO 封包排程和緩衝區管理。因此當有新的網路型態出現 之後,只需要實作並更新其內部的協定模組,就可以對新的網路型態進行模擬。
圖形化使用者介面提供使用者一個方便使用的網路模擬環境,使用者可以簡單隨 意地規劃出想要模擬的網路拓樸。此外 EstiNet 對 Linux 的核心做了一些修改,
使得利用 Socket 介面所撰寫的網路應用程式,不需要經過任何修改就可以直接 在 EstiNet 上面執行。
圖 2、Kernel re-entering 模擬方法
10
圖 2. 1 EstiNet 架構圖
圖 3、EstiNet 架構圖
11
2.3.2 EstiNet Emulator
EstiNet 網路模擬器可以輕易的轉換成 Emulator,Emulator 是指 EstiNet 裡模擬的網路環境可以和真實世界的裝置互動,強迫真實世界的封包導入使用者 指定的虛擬網路環境裡。因此 EstiNet Emulator 拿來測試真實世界的應用程式 的效能或是真實世界的裝置在各式各樣的網路環境下是非常有用的。在本論文中 就 是 使 用 這 個 特 別 的 功 能 , 來 產 生 各 式 各 樣 的 網 路 環 境 , 來 觀 察 Citrix XenDesktop 的反應會是如何。
在 EstiNet Emulation 環境中,一個外部的裝置可以和模擬網路環境裡的裝 置交換 TCP/UDP/ICMP 封包,除此之外還有一個用途,兩個真實世界的裝置也可 在模擬的網路環境下交換它們的封包,舉例來說,兩個裝置可以建立一條 TCP 連線,並且設定它們封包傳送的路徑經過設定好的模擬網路環境下。Emulator 提供了許多好處,像是真實世界的裝置可以和模擬網路互動,還有可以設定真實 世界網路封包的遺失率、延遲、重排、排程方法等等…,因此我們可以拿來測試 應用程式或是裝置在各式各樣網路拓樸或是網路狀況下的表現如何。
EstiNet使用一個模擬核心模組(Emulation Kernel Module)來橋接真實世界 的裝置與模擬的網路環境,此模組最主要的功能是執行了 Network Address Translation (NAT)的功能,它將使用者裝置輸出或輸入的封包攔截,並適當的 修改此封包IP及Port,最後再將其導入模擬的網路環境中,最後再根據封包的目 的地將它導到虛擬網路或是真實世界的裝置上。在設定完模擬的拓樸之後,在 EstiNet網路模擬器裡有一支叫做EstiNetclient程式,會自動的產生一些命令來 設定模擬核心模組,然後當模擬開始時,EstiNet模擬引擎會自動的觸發Linux Kernel載入及透過系統呼叫來初始化模擬核心模組。此外由於模擬核心模組會消 耗一些CPU時脈來執行NAT功能,所以為了達到更精準的模擬結果,執行模擬的機 器規格需要一定程度。EstiNet更詳細的實作及設計方式可參考[7]。
12