Document of Poisson Net
概述
本專案主要提供指定分布來模擬網路封包抵達的情況。
目前預計至少會提供 Poisson 類型的分布,同時支援 File, Webview, Live 三種型態的資料。
核心部分會使用 C++ 進行撰寫並且會將其輸出成 Python Library 提供 python 使用,並且測試部分會使用 pytest 。
CI/CD 流程透過 Makefile 搭配 GitHub Action 達成。
Source Code
基本邏輯
由兩個隨機生成部分來組成整個模擬
第一個隨機部分
透過指定的隨機分佈 (Ex: Poisson) 來決定本次要生成多少個請求,並且每個請求又會根據請求類型決定該次請求會獲得總共多少個 byte。
第二個隨機部分
此部分的隨機會根據請求的類型 (Ex: File, Webview, Live) 決定每次傳送出去的 byte 大小。
每個請求會在每次決定發送出多少個 byte,並且這個動作會持續到他應該傳送出去的 byte 數量達到指定值,當所有 byte 都傳送完畢則刪除此請求。
Feature
分佈類型
- Poisson Distribution
- Normal Distribution
- Uniform Distribution
模擬請求類型
- File
- WebView
- Live
架構
C++ 部分
Datas
PackageInfo
存放一個請求,分成 File, Webview, Live 三種子類別
包含該請求的 tag, 剩餘未傳送的 byte, 當前是第幾個封包
FilePackageInfo
保存 File 請求類型的資訊
File 類型的特性: 基本上都是大流量資訊
WebViewPackageInfo
保存 WebView 請求類型的資訊
WebView 類型的特性: 大多都是小流量封包偶而會有大流量封包出現
LivePackageInfo
保存 Live 類型的請求資訊
Live 類型的特性: 會是穩定的小流量,並且流量是根據畫質決定
LiveQualityData
與影片畫質相關設定,提供「低, 中, 高」三種類型
不同畫質類型會給出不同的 package size
LivePackageInfoData
就是保存 Live 類型請求的資訊
PackageResponse
回復的封包內容
- id: String
- tag: int
- packetCount: int
- packetSize: int
PackageTypeConfig
設定封包類型相關,主要會記錄該種資料的分布型態
設定分布型態會影響到該類型資料出現的頻率
NormalPackageType
提供以下設定
- 指定出現的分布類型
- 資料類型(File, WebView, Live)
- 某種資料類型的資料大小範圍
Distributed
Poisson
使用 Poisson 作為該類型資料出現的分布狀態
Normal
使用 Normal 作為該類型資料出現的分布狀態
Uniform
使用 Uniform 作為該類型資料出現的分布狀態
Network
專案核心部分,主要是在每個時段中創建新的封包
自動化測試
Distributed Test
測試各種分布是否根據指定分布類型輸出