Document of Poisson Net

概述

本專案主要提供指定分布來模擬網路封包抵達的情況。
目前預計至少會提供 Poisson 類型的分布,同時支援 File, Webview, Live 三種型態的資料。

核心部分會使用 C++ 進行撰寫並且會將其輸出成 Python Library 提供 python 使用,並且測試部分會使用 pytest 。

CI/CD 流程透過 Makefile 搭配 GitHub Action 達成。

Source Code

GitHub - chris901003/PoissonNet: PoissonNet
PoissonNet. Contribute to chris901003/PoissonNet development by creating an account on GitHub.

基本邏輯

由兩個隨機生成部分來組成整個模擬

第一個隨機部分

透過指定的隨機分佈 (Ex: Poisson) 來決定本次要生成多少個請求,並且每個請求又會根據請求類型決定該次請求會獲得總共多少個 byte。

第二個隨機部分

此部分的隨機會根據請求的類型 (Ex: File, Webview, Live) 決定每次傳送出去的 byte 大小。

每個請求會在每次決定發送出多少個 byte,並且這個動作會持續到他應該傳送出去的 byte 數量達到指定值,當所有 byte 都傳送完畢則刪除此請求。

Feature

分佈類型
  1. Poisson Distribution
  2. Normal Distribution
  3. Uniform Distribution
模擬請求類型
  1. File
  2. WebView
  3. 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

測試各種分布是否根據指定分布類型輸出