You are on page 1of 82

中 原 大 學

電 機 工 程 學 系
碩 士 學位 論 文

於 NetFPGA 平台實現基於速寫演算法之
高速網路流量資訊熵值估算分析

Sketch-based Entropy Estimation for High-speed Network Traffic Analysis


on the NetFPGA Platform

指導教授:賴裕昆

研 究 生:黃柏瑜

中 華 民 國 109 年 6 月
摘要

網際網路規模快速增加,攻擊手段亦日漸多樣使網路安全議題備受重視。
網路流量監測常使用資訊熵值作為分析的指標,於高速網路環境中因現有
網路設備難以進行熵值的即時計算與統計,故本論文探討熵值估算演算法,
並使用 P4 程式語言實現了擁有即時熵值估算功能的交換器,且具體實現在
NetFPGA­SUME 開發平台,可達成線速(40Gbps)的資訊熵值估算,當中
的熵值估算功能使用記憶體空間 3.51KB 近似了原論文法帶有對數、三角函
數等的運算流程,可達成與之相近的效能。
此熵值估算功能以 Verilog HDL 實現為 P4 外部函式,彌補了原有 Xilinx
SDNet 之函式庫於網路監測功能方面的不足,並可供其他使用者透過 SDNet
引用,使其能專注開發基於熵值的進階功能。
關鍵詞:網路流量監測、資訊熵、即時、高速網路環境、FPGA、P4 程
式語言

doi:10.6840/cycu202000498
Abstract

With the rapid increase of network and different types of attacks, cyberse­
curity issues have received much attention. Entropy can be used as an indicator
for network traffic analysis; however, in the high­speed network environment, it
is a time­consuming task to calculate Entropy in real time. Therefore, this paper
presents a network switch implementation with Entropy estimation function on the
NetFPGASUME platform using the P4 language. The function of Entropy estima­
tion is implemented in Verilog HDL in the form of the P4 extern as an extra Xilinx
SDNet library. Entropy extern libraries can be referenced by P4 application de­
velopers through the SDNet compiler easily. The switch can estimate Entropy at
40Gbps wire speed in real time, and the system only uses memory space of 3.51KB
with similar accuracy compared to that of the original algorithm, which contains
logarithm and trigonometric functions.
Keyword : Network traffic analysis; Entropy; Real­time; FPGA; P4.

II

doi:10.6840/cycu202000498
致謝

感謝指導教授賴裕昆老師為本論文研究提供珍貴的建議,並於碰上瓶頸
時指引可能的研究方向,使本論文能有此研究成果。同時也感謝口試委員林
余昭老師與劉德隆老師,於百忙之中抽空來參與學生的口試,給予寶貴的建
議,使論文更加完善。
感 謝 電 腦 網 路 與 系 統 實 驗 室 (CNSRL, Computer Networks & Systems
Research Lab)提供完整的環境進行研究和實驗,也感謝實驗室的學長施谷
燁、同學李賀平、張正昇、學弟蔡承霖,於本研究提供協助與各式的建議。
最後感謝家人的支持,使本論文得以完成。

III

doi:10.6840/cycu202000498
目錄

摘要 I

Abstract II

致謝 III

目錄 IV

圖目錄 VIII

表目錄 X

第一章 緒論 1
1.1 研究動機 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 研究目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 論文貢獻 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 論文架構 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

第二章 研究背景介紹 4
2.1 網路環境概況 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 網路流量監測 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.1 取樣法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.2 速寫演算法 . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 熵(Entropy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

IV

doi:10.6840/cycu202000498
2.3.1 Clifford 熵值估算速寫演算法 . . . . . . . . . . . . . . . . 8
2.3.2 資訊熵值估算演算法相關研究 . . . . . . . . . . . . . . . 9
2.4 P4 程式語言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1 軟體定義網路 . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.2 P4 程式語言簡介 . . . . . . . . . . . . . . . . . . . . . . 10
2.5 NetFPGA­SUME . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.1 NetFPGA 平台簡介 . . . . . . . . . . . . . . . . . . . . . 12
2.5.2 開源專案與架構概述 . . . . . . . . . . . . . . . . . . . . 13
2.5.3 SDNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.4 P4 NetFPGA 專案 . . . . . . . . . . . . . . . . . . . . . . 16

第三章 演算法之參數探討與實現 18
3.1 本論文使用之數學變數定義總覽 . . . . . . . . . . . . . . . . . . 18
3.2 Clifford 熵值估算速寫演算法參數探討 . . . . . . . . . . . . . . 19
3.2.1 Kullback­Leibler 散度 . . . . . . . . . . . . . . . . . . . . 19
3.2.2 速寫格子數目之 k 值對精準度影響探討 . . . . . . . . . 21
3.2.3 觀測區間之長短對精準度影響探討 . . . . . . . . . . . . 22
3.3 硬體實現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4 近似最大偏移穩定分佈演算法之實現 . . . . . . . . . . . . . . . 25
3.4.1 函數輸入值對於輸出結果之影響 . . . . . . . . . . . . . 25
3.4.2 有限精度輸入值之函數表格化 . . . . . . . . . . . . . . . 26
3.4.3 函數表格化之內部資料型態於精準度探討 . . . . . . . . 28
3.4.4 階段法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4.4.1 單組表尾分佈近似驗證 . . . . . . . . . . . . . 31
3.4.4.2 表尾化簡探討 . . . . . . . . . . . . . . . . . . . 33
3.4.4.3 表頭化簡探討 . . . . . . . . . . . . . . . . . . . 33
3.4.4.4 階段法總結 . . . . . . . . . . . . . . . . . . . . 34
3.4.5 記憶體資源使用試算 . . . . . . . . . . . . . . . . . . . . 34
3.5 偽隨機亂數產生器之實現 . . . . . . . . . . . . . . . . . . . . . . 36

doi:10.6840/cycu202000498
3.5.1 線性同餘產生器 . . . . . . . . . . . . . . . . . . . . . . . 36
3.5.1.1 相依線性同餘產生器 . . . . . . . . . . . . . . . 38
3.5.1.2 獨立線性同餘產生器 . . . . . . . . . . . . . . . 39
3.5.2 參數比較與探討 . . . . . . . . . . . . . . . . . . . . . . . 40
3.6 演算法實現總結 . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

第四章 系統架構與硬體實現 44
4.1 P4 NetFPGA 專案架構 . . . . . . . . . . . . . . . . . . . . . . . . 44
4.2 外部函式之熵值估算速寫演算法模組架構 . . . . . . . . . . . . 45
4.2.1 外部函式訊號解析 . . . . . . . . . . . . . . . . . . . . . 48
4.2.2 表頭表尾鍵值產生器 . . . . . . . . . . . . . . . . . . . . 48
4.2.3 函數 R 之階段法表格 . . . . . . . . . . . . . . . . . . . . 50
4.2.4 速寫格子 . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2.5 讀取韌體與軟體端之資訊熵值估算 . . . . . . . . . . . . 52

第五章 系統驗證與效能評估 53
5.1 測試環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.1.1 實驗拓樸 . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.1.2 實機測試環境 . . . . . . . . . . . . . . . . . . . . . . . . 54
5.1.3 封包流量檔 . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1.4 OSNT(Open Source Network Tester) . . . . . . . . . . . 56
5.2 量測準確度驗證與探討 . . . . . . . . . . . . . . . . . . . . . . . 56
5.3 封包處理時間與吞吐量與探討 . . . . . . . . . . . . . . . . . . . 59
5.4 硬體使用資源與探討 . . . . . . . . . . . . . . . . . . . . . . . . 61
5.4.1 階段法表格數量之硬體實現探討 . . . . . . . . . . . . . 62

第六章 結論與未來展望 64
6.1 結論 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.2 未來展望 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.2.1 硬體架構優化 . . . . . . . . . . . . . . . . . . . . . . . . 65

VI

doi:10.6840/cycu202000498
6.2.2 熵值對演算法參數的影響 . . . . . . . . . . . . . . . . . 65
6.2.3 巨量速寫格子數目之潛力 . . . . . . . . . . . . . . . . . 65
6.2.4 Ping Li 壓縮計數演算法 . . . . . . . . . . . . . . . . . . . 66

參考資料 67

VII

doi:10.6840/cycu202000498
圖目錄

圖 2.1 分散式阻斷服務攻擊之平均攻擊強度 [10] . . . . . . . . . . . 5


圖 2.2 P4 程式語言之於軟體定義網路之控制器、交換器關係 [19] . 11
圖 2.3 NetFPGA­SUME 開發板 [22] . . . . . . . . . . . . . . . . . . 12
圖 2.4 網路介面卡專案之架構方塊圖 [23] . . . . . . . . . . . . . . . 14
圖 2.5 SDNet 編譯與實現流程示意圖 [24] . . . . . . . . . . . . . . . 15
圖 2.6 P4 NetFPGA 專案之 P4 交換器架構方塊圖 [25] . . . . . . . . 17

圖 3.1 (上)估測熵值誤差分佈圖範例;(下)無誤差分佈圖範例 . 20
圖 3.2 速寫格子數目 k 值對精準度影響之測試 . . . . . . . . . . . . 21
圖 3.3 觀測區間之長短對精準度影響之測試 . . . . . . . . . . . . . 23
圖 3.4 Clifford 熵值估算速寫演算法實現流程圖 . . . . . . . . . . . . 24
圖 3.5 U1 , U2 小數點精度位數對於函數 R 之輸出結果精準度測試 . 26
圖 3.6 函數 R 輸出結果表格化示意圖 . . . . . . . . . . . . . . . . . 27
圖 3.7 表格內小數點精度位數對於函數 R 之輸出結果精準度測試 . 28
圖 3.8 單組變數 U2 之函數圖形(單組表尾) . . . . . . . . . . . . . 30
圖 3.9 變數 U2 之函數圖形 . . . . . . . . . . . . . . . . . . . . . . . 30
圖 3.10 表頭表尾關係圖 . . . . . . . . . . . . . . . . . . . . . . . . . 31
圖 3.11 單組表尾分佈近似驗證 . . . . . . . . . . . . . . . . . . . . . 32
圖 3.12 表尾分佈比例堆疊圖 . . . . . . . . . . . . . . . . . . . . . . 32
圖 3.13 表頭函數圖形 . . . . . . . . . . . . . . . . . . . . . . . . . . 34
圖 3.14 線性同餘產生器之亂數產生流程 [27] . . . . . . . . . . . . . 37

VIII

doi:10.6840/cycu202000498
圖 3.15 相依線性同餘產生器之產生亂數流程 . . . . . . . . . . . . . 39
圖 3.16 獨立線性同餘產生器之產生亂數流程 . . . . . . . . . . . . . 40
圖 3.17 偽亂數產生器各參數比較 . . . . . . . . . . . . . . . . . . . 41
圖 3.18 本論文實現 Clifford 熵值估算速寫演算法之流程圖 . . . . . 42
圖 3.19 演算法總結比較 . . . . . . . . . . . . . . . . . . . . . . . . . 43

圖 4.1 P4 NetFPGA 專案之資料路徑 . . . . . . . . . . . . . . . . . . 45


圖 4.2 Clifford 熵值估算速寫演算法之模組架構圖(理想) . . . . . 46
圖 4.3 (上)理想整體架構與(下)修正後整體架構 . . . . . . . . 47
圖 4.4 外部函式輸入訊號示意 . . . . . . . . . . . . . . . . . . . . . 48
圖 4.5 表頭表尾鍵值產生器之模擬波形 . . . . . . . . . . . . . . . . 49
圖 4.6 函數 R 之階段法表格模擬波形 . . . . . . . . . . . . . . . . . 50
圖 4.7 速寫格子累計過程模擬波形 . . . . . . . . . . . . . . . . . . . 51

圖 5.1 測試環境之實驗拓樸 . . . . . . . . . . . . . . . . . . . . . . . 53
圖 5.2 實機測試環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
圖 5.3 實機測試結果比較 . . . . . . . . . . . . . . . . . . . . . . . . 57
圖 5.4 自學習交換器專案內部使用模組 . . . . . . . . . . . . . . . . 60
圖 5.5 (左)原專案與(右)本論文之硬體使用資源 . . . . . . . . 61
圖 5.6 本論文之時序餘裕度與功耗表現 . . . . . . . . . . . . . . . . 62
圖 5.7 階段法表格使用數量之硬體資源比較 . . . . . . . . . . . . . 63

IX

doi:10.6840/cycu202000498
表目錄

表 3.1 本論文使用之數學變數定義總覽 . . . . . . . . . . . . . . . . 18
表 3.2 各方法所需表格大小與記憶體空間 . . . . . . . . . . . . . . . 35
表 3.3 演算法總結比較之使用參數 . . . . . . . . . . . . . . . . . . . 43
表 3.4 演算法總結之誤差累積分佈比例 . . . . . . . . . . . . . . . . 43

表 5.1 使用設備規格表 . . . . . . . . . . . . . . . . . . . . . . . . . 54
表 5.2 封包流量檔資訊 . . . . . . . . . . . . . . . . . . . . . . . . . 55
表 5.3 200701011400 封包流量檔實機測試結果 . . . . . . . . . . . . 58
表 5.4 封包轉送之延遲與吞吐量測試 . . . . . . . . . . . . . . . . . 60

doi:10.6840/cycu202000498
第一章

緒論

1.1 研究動機

資訊科技的進步使網際網路的規模快速增加,安全議題亦引發關注,攻
擊手段更多樣且攻擊流量更加巨大,於骨幹網路環境,這些巨大的網路流量
使以往的分析方法難以應付,因網路流量就如河川中的流水般不斷流過,若
無法於當下立刻分析判斷是否有異常流量,就必須將巨大的網路流量全部
儲存起來做事後分析,其成本十分驚人且緩不濟急,在得知有異常流量時損
失早已造成。巨量資料分析工作變得不易,意味著網路異常行為偵測難度變
高,亦即難以預防異常流量造成的損失,這將使整體網路環境變得不穩定與
品質下降,也將使相關行業付出更多成本。
每種攻擊方式依據其背後原理,往往會有一些特別的行為,使流量有著
特殊的特徵。資訊熵的數值反映了資訊分佈的疏離與密集程度,可藉由觀察
特定封包項目的熵值變化,有效辨別微量的異常流量,因此資訊熵值被運用
在許多網路異常偵測系統的核心 [1, 2, 3],來彌補基於流量大小變化為主體
的異常行為偵測方法之不足 [4]。然而要在高速網路環境下即時得到精確的
資訊熵值有其難度 [5, 6],因為資訊熵值的精確計算需要統計該觀測區間中
出現的獨立項目(Distinct Items)分別來了幾次,高速流量下動輒數百萬筆
獨立項目,以當前交換器的記憶體與計算資源尚無法負荷即時的精確資訊熵

doi:10.6840/cycu202000498
值計算 [7]。

1.2 研究目的

由於在高速網路環境下,實現即時、達限速的精確熵值統計有難度,故
目前多使用取樣、事後分析、速寫演算法的方式進行,而本論文的目標則是
以有限的計算與記憶體資源,在交換器上實現可達線速的資訊熵值估算。使
用速寫演算法會犧牲少許但仍可接受的統計結果精確度,換取效能與較少
的資源使用,其會將每筆封包資訊納入計算,不會遺漏掉任何潛在的異常封
包,因此能反映出微量異常流量對資訊熵值所造成的影響。取樣的方式亦可
提升效能與減少資源使用,但可能會失去關鍵封包的資訊;事後分析可以得
到最精確的結果,但無法即時統計出資訊熵值,判斷異常流量。
目前已有許多論文在討論如快速且正確地估算網路川流之資訊熵值,本
論文根據 Peter Clifford 等人 [8] 提出的速寫演算法,以隨機映射的方式預估
網路川流資訊熵值,最後讓使用者能以 P4 高階語言的形式,輕易使用資訊
熵值估算模組,達成資訊熵值估算。

1.3 論文貢獻

本論文根據 Peter Clifford 等人 [8] 提出的速寫演算法,以隨機映射的方式


預估網路川流資訊熵值,並簡化其實現所需的硬體資源,使用記憶體空間
3.51KB 近似了原論文法帶有對數、三角函數等的運算流程,最後使用硬體
描述語言 Verilog HDL 實現其電路於 NetFPGA SUME 平台上,並配合 SDNet
開發環境將核心電路包裝成 P4 外部函式(P4­Extern),讓使用者能以 P4 高
階語言的形式,輕易使用資訊熵值估算模組,達成線速(40Gbps)的資訊熵
值估算。

doi:10.6840/cycu202000498
1.4 論文架構

本論文第二章介紹與本研究相關的知識與研究背景,包含當前網路環境
概況、網路流量監測的方法、資訊熵值、開發平台;第三章為演算法的實
現,是本論文的核心,說明熵值估算方法的參數測試與如何根據硬體特性進
行演算法優化,本論文使用之所有數學變數定義總覽亦擺放於此;第四章為
系統架構,描述實現於硬體上的架構與其中各模組的功能;第五章透過實際
硬體的驗證,探討其功能正確性、系統轉送封包的延遲時間與吞吐量,還有
硬體資源使用量的多寡和其對系統架構的影響;第六章為最後的結論與未來
展望,總結了本論文的理論實現與實驗結果,並提出未來可改進的方向。

doi:10.6840/cycu202000498
第二章

研究背景介紹

2.1 網路環境概況

根 據 網 路 公 司 思 科 (Cisco) 年 度 網 路 報 告 [9], 全 球 平 均 頻 寬 速 度
(Broadband­speed)在 2018 年時為 45.9Mbps,2019 年為 52.9Mbps,成長率
約為 15%,而該公司預測在 2023 年時頻寬速度將會成長至 110Mbps,即六
年內便會成長至 2 倍以上,報告中亦指出網路攻擊行為也跟著大幅成長。網
路攻擊行為非常多樣,以分散式阻斷服務攻擊(DDoS, Distributed Denial of
Service)為例,這是一種使被攻擊方的頻寬、記憶體資源耗盡的攻擊手段,
Bashar Ahmed Khalaf 等人 [10] 指出目前尚未有安全系統能有效地防止分散
式阻斷服務攻擊,此種攻擊方式已存在一段時間,近年來攻擊強度增加造成
許多嚴重損害,圖 2.1顯示分散式阻斷服務攻擊的歷年成長趨勢,可見其攻
擊流量跳躍式的成長。由於不斷增加的網路頻寬使統計分析行為變得複雜,
Nicola Bonelli 等人 [11] 指出,當今至少要能在頻寬 10Gbps 以上進行即時量
測分析才符合現況。

doi:10.6840/cycu202000498
圖 2.1: 分散式阻斷服務攻擊之平均攻擊強度 [10]

2.2 網路流量監測

網路流監量測為網路領域的重要研究項目之一,除了能讓網路服務提供
者評估網路基礎設施的運作狀態,亦能檢測突發異常、惡意活動,以維護整
體網路服務正常運作。網路流量中的封包可視為連續不斷的資料流,就如河
水般綿延不絕,因此也有人稱之為「網路川流」,在規模較小的網路環境不
需要特別硬體設施即可測量,但在規模較大的高速網路環境如骨幹網路,以
當前交換器的記憶體與計算資源難以負荷 [7],若在有限的資源底下想分析
高速網路流量,則需要其他方法。

2.2.1 取樣法

統計學中的取樣,是從目標總體中隨機抽取一些個體作為樣本,然後從
樣本數據去推估總體數量特徵的方法。對網路流量監測而言,取樣則是從網
路川流資訊中根據特定規則選取部份封包來分析的方法,規則因不同工具而
異,常見的如 NetFlow[12] 與 sFlow[13]。由於只分析部份封包,故可以大幅
減少運算量與使用的記憶體資源,相當於減少了成本;但若要應用於高速網
路環境做異常攻擊偵測,依照取樣頻率的設定值,得到的樣本數據可能跟目
標總體有很大的差別,因為在面對高流量的網路環境時,需將取樣頻率降低
方可承受高流量,但取樣頻率減少意味著其準確度跟著降低,此時將可能出

doi:10.6840/cycu202000498
現嚴重失真。Jianning Mai 等人 [14] 指出,取樣法比較適用於網路管理,而
不適用於網路異常流量的監測,他們使用取樣配合其他演算法來偵測通訊埠
掃描等攻擊,發現會因取樣的特性使演算法檢測結果大幅失真。

2.2.2 速寫演算法

速寫演算法為一種資料結構,其特色為少量的記憶體使用與能夠快速查
詢、更新資料結構中的內容。每種速寫演算法都有其特定功能,以布隆過濾
器(Bloom Filter)為例,其功能為判斷一元素是否可能存在於集合當中,不
同於排序或是二元樹等常規資料結構,當面對元素種類超過億的巨大集合
時,依然能快速查詢欲查找元素是否存在於集合,亦可快速地將新元素新增
於集合中,並且不必將所有元素種類存下,故可大幅降低記憶體使用量。
速寫演算法之所以快速,是因為使用了散列函數(Hash Function),在查
找與新增元素過程將資料映射到儲存位置,相當於摘要(Summarize)濃縮
了資料,因此能使記憶體資源使用量極小。但須注意的是,作為高效能與低
記憶資源使用的代價,速寫演算法的判定結果之準確率(Accuracy)並非百
分之百,原因為散列函數在摘要資料時產生了碰撞,將不同筆資料映射到了
同樣儲存位置的緣故。同樣以布隆過濾器為例,假設現有一未知項目由布隆
過濾器判斷是否存在於集合中,若此未知項目實際上為集合內的元素,則布
隆過濾器必能判斷正確,也就是一定能認出此未知項目存在於集合中,精確
率(Precision)為百分之百;若此未知項目實際上並非集合內的元素,則布
隆過濾器可能會判斷錯誤,誤將此未知項目當成集合內的元素,此時判斷精
確率就不是百分之百。
由於速寫演算法的特性,因此不適用於對資料準確度十分敏感的領域;
但是在網路流量監測領域,可以將監測系統設計成如一層一層的篩子,最前
端直接面對巨大流量的那個篩子只需判斷流量是否「可能」有問題,然後將
可能有問題的流量交給後方進行更一步的篩選確認即可。速寫演算法符合了
最前端篩子的條件,擁有快速、低記憶資源使用的優勢,而其有誤判率的缺
陷則可由後方更精確的監測系統來彌補。

doi:10.6840/cycu202000498
2.3 熵(Entropy)

物理學中的熵為秩序或亂度的度量單位,而在資訊理論(Information
Theory),熵是對混亂程度的度量,用來評估可傳達訊息的多寡。資訊理論
的「熵」常被通稱作「資訊熵」
,以和物理學中的「熵」做區隔。
資訊熵也被用在其他領域,而在網路流量監測中,可以用來觀測封包
標頭資訊的離散程度,如來源端 IP 地址(Source IP Address)、目的端 IP
地址(Destination IP Address)、來源端通訊埠(Source Port)、目的端通訊
埠(Destination Port)、網路傳輸協定(Protocol)、封包長度(Packet Length)
等。資訊熵又有許多變形,這裡以最基本的夏儂熵(Shannon Entropy)為
例,欲觀察集合 O 之夏儂熵值 H ′ 定義如下:


n
H ′ (O) = − [P (oi )· log (P (oi ))] (2.1)
i

其中 n 為集合 O 中相異元素個數(Total Distinct Items),P (oi ) 為元素 oi


於集合中佔有的比例。本論文使用之數學變數定義如表 3.1所示。
若要將夏儂熵值標準化,則:

H ′ (O)
H (O) = (2.2)
log (N )

其中 H (O) 為標準化後的夏儂熵,且 0 ≤ H (O) ≤ 1;N 為集合 O 中的


元素總數目(Total Number of Items)。
標準化後的夏儂熵其值會介於 0 至 1 之間(含),熵值愈接近 0 表示欲觀
察集合之分佈愈集中,熵值愈接近 1 表示欲觀察集合之分佈愈分散。熵值偏
低或偏高並不意味著網路流量必然有異常,而緊鄰的幾個觀測區間內若熵值
有大幅度的變化則很有可能有異常流量發生。例如 DDoS 攻擊發生時,短時
間內會有大量不同的來源端 IP 地址傳送封包至特定幾個目的端 IP 地址,此
時來源端 IP 地址的熵值便會大幅下降,目的端 IP 地址之熵值會大幅上升,
這時就能合理懷疑發生了 DDoS 攻擊,將網路流量做更進一步分析與處理。

doi:10.6840/cycu202000498
2.3.1 Clifford 熵值估算速寫演算法

精確的夏儂熵值計數如演算法 2.1所示,可發現計算過程需知道集合中的
每個元素出現比例為多少,亦即需得知此段區間共有多少種元素,以及每個
元素出現了幾次。以計算來源端 IP 地址的夏儂熵為例,在一段觀測區間中,
監測設備必須記下每個來源端 IP 地址各出現幾次,高速網路環境下動輒數
百萬種來源端 IP 地址,意味著精確計數必須付出如此的記憶資源才能完成,
以當前設備尚無法負荷,於是就有許多論文在討論如何快速、正確地估算網
路川流之資訊熵值。
2013 年,Peter Clifford 等人 [8] 提出了一個以少量記憶體來預估網路川
流之夏儂熵值的方法,如演算法 2.1所示,其中所使用之數學變數定義如表
3.1所示,其會將每個觀測項目透過演算法 2.2映射到 k 個偏差分佈的隨機變
數上,並在觀測區間結束時透過對數平均求出此段區間的夏儂熵值。
更詳細的流程如下。演算法 2.1會對川流資料中的每個項目 ot ,透過演
算法 2.2近似該論文文中提及之最大偏移穩定分佈(Maximally Skewed Stable
Distribution)並產生 k 個最大偏移穩定分佈的近似值,然後將這 k 個值各自
累加至 k 個記憶體空間中,本論文將這些用來儲存最大偏移穩定分佈近似值
的記憶體空間定義為「速寫格子」。當觀測區間結束時,每個速寫格子皆會
除以區間內的封包總數 Cnt 求其平均值,然後對 k 個速寫格子分別求其自
然指數值後加總,最後再對加總值取對數平均,得到預估的夏儂熵值。演算
法 2.1中的 U1 , U2 為均勻分佈(Uniform Distribution)的隨機值,其隨機值為
基於川流資料項目 ot 當種子值所產生的偽隨機數(Pseudo­random Number),
介於 0 至 1 之間(不含)。
本論文基於此熵值估算速寫演算法進行實現,整個過程不需記錄川流資
料中的每個項目分別來了幾次,只需知道觀測區間中的總封包數,與對每個
項目求其最大穩定偏差分佈值後累加即可,故此演算法初衷為只需儲存 k 個
速寫格子的數值即可估算出川流熵值。然而演算法 2.2之最大穩定偏差分佈
近似值的計算過程會用到除法、對數、三角函數等計算,不利於實現在硬體

doi:10.6840/cycu202000498
中,故在第 3章中會闡述本論文對此演算法所做的硬體相容性優化。於本論
文後續章節將稱此演算法為「原論文法」;而夏儂熵值簡稱為「熵值」;近似
最大偏移穩定分佈演算法 R (U1 , U2 ) 簡稱為「函數 R」。

演算法 2.1 透過對數平均估算值之預估川流資料之經驗夏儂熵演算法


1: Initialize data sketch (y1 , ..., yk ) = (0, ..., 0).
2: Set the counter Cnt = 0.
3: For t = 1 to T :
4: Set dt = 1 denotes a packet.
5: Update the counter Cnt = Cnt + dt .
6: Seed the PRNG with ot .
7: For j = 1 to k :
8: Simulate Uj1 , Uj2 ∼ Unif(0, 1) independently.
9: Generate Rj (Uj1 , Uj2 ).
10: Update yj = yj + Rj (Uj1 , Uj2 ) × dt .
11: At time t = T , set yj = yj /Cnt for j = 1, ..., k.
′ ∑
12: Return Ĥ (O) = − log[k −1 kj=1 exp(yj )].

演算法 2.2 近似最大偏移穩定分佈演算法 R (U1 , U2 )


1: Let W1 = π(U1 − 21 ) and W2 = − log U2 .
2: Return R(U1 , U2 ) = tan(W1 ) · [ π2 − W1 ] + log(W2 · cos W1
π/2−W1
).

2.3.2 資訊熵值估算演算法相關研究

2006 年,Ashwin Lall 等人 [15] 提出兩種估算資訊熵值的方法。第一種方


式基於 Noga Alon 等人 [16] 提出的演算法來設計資料結構,其資料結構類
似於估計資料流的次數動差(Frequency Moment)方法,配合適當的估計函
數,能保證熵值估算誤差範圍與資源使用量,作者表示理論上此方法適用於
任何資料流。第二種方式為根據流量特徵將其分為小流量(Mice)與大流量
(Elephants),並使用基本的資料流演算法來估算熵值,作者證明了將大小流
量分開可以提升熵值估算的精確度。
2011 年,V´clav Bartos 等人 [5] 於現場可程式化邏輯閘陣列(FPGA, Field
Programmable Gate Array)硬體上實現了熵值預估。作者基於精確的熵值演
算法,將演算法中獨立項目的計算部份以估算方式替代,其方法是以散列函
數摘要觀測區間內各元素的出現次數,並記錄於一表格中,最後再根據其表

doi:10.6840/cycu202000498
格內的元素獨立項目數量計算熵值。此方式避免了如 2.3.1節開頭所述之精
確熵值計數需使用巨量記憶資源的窘境,但散列函數會有碰撞(Collision)
的情況發生,因此摘要出的元素獨立項目資訊未必相等於實際流量之分佈情
況,而散列函數品質與表格大小決定了其估算結果之精確度。
2011 年,Ping Li 等人 [17] 提出了一種壓縮計數(Compressed Counting)
的演算法,可應用於預估資訊熵值。與 2.3.1節的演算法類似,其會將每個
觀測項目映射至 k 個隨機變數上,映射所使用的函數有所不同,並在觀測區
間結束時計算出其資訊熵值。該演算法有一 α 參數,當 α → 1 時,其估測
結果將趨近於夏儂熵。

2.4 P4 程式語言

2.4.1 軟體定義網路

軟體定義網路(SDN, Software­Defined Networking)為一種新提出的網


路 架 構, 其 將 傳 統 網 路 的 控 制 層 (Control Plane) 與 資 料 轉 發 層 (Data
Plane)分離,資料轉發層依然留在交換器中,而控制層則被集中至控制器
(Controller)上,使原本分散在各設備上的控制平面集中化,讓網路管理人
員能以軟體與中央控管的方式規劃網路,也為控制網路流量提供了新方法。

2.4.2 P4 程式語言簡介

過去的交換器能處理的封包種類,綁定於其本身硬體設計,一旦出廠即
無法改變。即使是根據軟體定義網路之 OpenFlow 協議 [18] 所設計的交換
器,能一定程度彈性地處理特殊封包,但其硬體依然受限於 OpenFlow 協
議,未在協議上定義的封包格式亦無法直接處理。

10

doi:10.6840/cycu202000498
P4(Programming Protocol­Independent Packet Processors)程式語言是於
2014 年,由史丹佛大學、普林斯頓大學(Princeton University)及一些企業
所提出 [19],目的為解決硬體受限於協議的問題,讓使用者能自由定義交換
器可處理的封包形式。P4 程式語言有三個主要願景:

1. 可重構性(Reconfigurability):使用者要能自行定義封包的解析、處理
方式。

2. 協議獨立性(Protocol Independence):交換器硬體不該被特定封包格式
所綁定。

3. 目標獨立性(Target Independence):使用者不必了解交換器底層硬體
細節就能達成目的。

最終 P4 以一個高階語言的形式出現,撰寫程式碼後透過編譯,將程式碼轉
成 P4 交換器能理解的方式執行。這麼做的優點為,若未來出現新的封包
格式,則交換器本身的硬體不必更換,亦即不必購買新的交換器,節省成
本;又由於能自定義封包格式,將能產生一些創新應用,例如帶內網路遙
測(INT, In‐band Network Telemetry)[20],透過發送遙測封包就能知道網路
拓樸的當前狀態,可減輕網路管理人員的負擔。圖 2.2指出了 P4 程式語言
於軟體定義網路架構中的定位,其就如交換器的程式語言,可以實現包含
OpenFlow 協議在內的新功能,並且可與控制器配合溝通。

圖 2.2: P4 程式語言之於軟體定義網路之控制器、交換器關係 [19]

11

doi:10.6840/cycu202000498
2.5 NetFPGA­SUME

2.5.1 NetFPGA 平台簡介

FPGA 為「現場可程式化邏輯閘陣列(Field Programmable Gate Array)」,


可將硬體描述語言(HDL, Hardware Description Language)所描述的邏輯電
路,透過合成工具實現出來,讓工程師快速地進行電路驗證,或是應用於一
些技術變化較快的產業。
NetFPGA 則是於 2007 年由美國史丹佛大學(Stanford University)所開
發,為專門實現網路系統架構的 FPGA,如可將其實現為交換器、路由器、
網路卡等。NetFPGA 背後有其開發平台,提供了許多開源的軟硬體專案,
使學生、研究人員、開發者不必從最基本的封包傳送、接收電路開始撰寫,
而能專心開發自己的核心電路。
目 前 市 面 上 共 有 四 種 NetFPGA 型 號:NetFPGA­1G、NetFPGA­10G、
NetFPGA­CML、NetFPGA­SUME,當中 NetFPGA­SUME[21] 為系列的最新
型號,如圖 2.3,亦是本論文所使用之開發板,其在資料平面(Data Plane)
擁有四個網路線插孔(SFP+),每孔提供 10Gbps 的傳輸速度;另在控制平
面(Control Plane)有 PCIe Gen 3 規格的匯流排通道可與電腦之中央處理
器(CPU, Central Processing Unit)溝通,使搭載開發板的電腦可以道撈取
NetFPGA 記憶體中的資料應於其他用途。

圖 2.3: NetFPGA­SUME 開發板 [22]

12

doi:10.6840/cycu202000498
2.5.2 開源專案與架構概述

NetFPGA 平台有許多網路功能相關的程式碼開源專案,除了較關鍵的幾
個智慧財產權核心(IP Core, Intellectual Property Core),其他幾乎是以軟核
(Soft IP Core)、固核(Firm IP Core)的形式提供,也就是開發者能夠修改其
HDL 程式碼,達成自己想要的功能。
NetFPGA­SUME 中較具代表性的專案有:網路介面卡(Reference Nic)、
網路交換器(Reference Switch)、網路路由器(Reference Router),三個專
案若以方塊圖(Block Diagram)呈現架構的話會發現它們高度相似,如圖
2.4所示,其核心電路皆是由三個 IP Core 所組成,分別為輸出仲裁器(Input
Arbiter)、輸出埠查詢器(Output Port Lookup)、輸出佇列(BRAM Output
Queues),當中三個專案的輸出仲裁器與輸出佇列完全相同,使用了同樣的
IP Core,不同點只在輸出埠查詢器的功能不同,各專案依據其目的使用了不
同的 IP Core 做替換。若使用者今日想開發新功能,可基於上述原生專案,
於適當位置加入自己開發的 IP Core,保留和移除任何不需要的 IP Core,使
整體開發流程更加快速。
最後補充圖 2.4中其他較重要的模組功能說明:

• 10GMAC­RX、10GMAC­TX:四個網路孔的光纖訊號轉換模組。

• DMA­RX、DMA­TX:處理從電腦端中央處理器過來訊號的控制模組。

• 輸出仲裁器:將來自四個網路孔的訊號依序分配送往下一級電路。

• 輸出埠查詢器:根據專案有所不同,功能為決定封包該送往哪一個網
路孔。

• 輸出佇列:暫存封包並依據輸出埠查詢器的判斷結果將封包送出至正
確網路孔。

13

doi:10.6840/cycu202000498
圖 2.4: 網路介面卡專案之架構方塊圖 [23]

14

doi:10.6840/cycu202000498
2.5.3 SDNet

SDNet(Software Defined Specification Environment for Networking)的概


念是美國賽林思公司(Xilinx)於 2014 年所提出,目的在於使軟體定義網路
的硬體設備更加靈活,發揮軟體的優勢。SDNet 是一個開發環境,當中有提
供許多函式庫,可以用軟體的方式去定義資料轉發層,例如自己定義一個新
方法去轉送、處理封包、或是其他更複雜的行為,目前支援的硬體有賽林思
公司自家的 Kintex、Virtex 系列晶片,而本論文使用的 NetFPGA­SUME 為
Virtex 系列,故也有被支援;軟體目前有支援 2.4節提到的 P4 程式語言。
SDNet 的一大特色是使用者不需了解硬體的底層架構便可進行開發。以
下圖 2.5之 P4 程式語言如何實現在開發板上為例,最上層的系統架構師
(System Architect)只需訂定系統行為、完成 P4 程式語言的撰寫即可,接著
全交給 SDNet 編譯器代勞,根據硬體規格與開發板的種類,SDNet 編譯器會
使用硬體工程師事先開發好的模組資源,自動完成按 P4 程式語言所描述的
功能,最後實現於開發板上。

圖 2.5: SDNet 編譯與實現流程示意圖 [24]

15

doi:10.6840/cycu202000498
2.5.4 P4 NetFPGA 專案

P4 NetFPGA 為史丹佛大學與劍橋大學聯合開發的開源專案,此專案會將
NetFPGA­SUME 變成一台 P4 交換器,可於其之上進行如 2.4節所提之 P4 程
式語言的開發與測試。在 NetFPGA­SUME 上實現 P4 程式語言的優點是,其
為低成本的測試平台,板子本身的價格目前低於可執行 P4 的交換器,卻擁
有不錯的效能,且為開源平台;缺點為並非所有 P4 語法皆可實現,相關支
援套件尚得仰賴他人開發,或是自行使用 HDL 撰寫。
圖 2.6為此專案的架構方塊圖,可發現其承襲 2.5.2節中提及之網路介面
卡等專案架構,使用了相同的輸出仲裁器與輸出佇列,只替換掉了輸出埠查
詢器為「簡易交換器(Simple Sume Switch)」,而「簡易交換器」為此架構
之核心,是實現所有 P4 程式行為的核心電路所在。詳細流程如圖 2.5所示,
最上層所撰寫之 P4 程式語言定義了交換器的行為,而該 P4 程式碼會透過
SDNet 編譯器,配合 SDNet 中的函式庫,編譯成 HDL 模組並放置於「簡易
交換器」IP Core 中。
SDNet 編譯器為此 P4 NetFPGA 專案之重點,是 P4 程式能被實現為硬體
的關鍵,然而 SDNet 編譯器之所以能將 P4 程式碼轉換為 HDL,依靠的是函
式庫中先前硬體開發人員所提供的實體電路,若開發者想實現新功能的 P4
函式,則只靠 SDNet 本身的函式庫式不足的。因此 SDNet 亦允許開發者自
己撰寫外部函式(P4­Extern),只要定義好 P4 函式和提供與之相應的 HDL
行為電路,便可使用 P4 實現新功能。本論文便是開發了快速預估資訊熵值
的電路,並將其包裝成 P4 外部函式,讓其他使用者可藉由 P4 程式語言,輕
易地呼叫該功能使用。

16

doi:10.6840/cycu202000498
圖 2.6: P4 NetFPGA 專案之 P4 交換器架構方塊圖 [25]

17

doi:10.6840/cycu202000498
第三章

演算法之參數探討與實現

3.1 本論文使用之數學變數定義總覽

本論文使用之各項數學變數定義如表 3.1所示,列出了下列符號於本論文
所代表的意義。

表 3.1: 本論文使用之數學變數定義總覽
數學變數 本論文定義 數學變數 本論文定義

a 線性同餘產生器之乘數 n 集合 O 中相異元素個數

α Ping Li 演算法 [17] 之參數 O 欲觀察集合

Cnt 計數器 o 集合 O 內之元素

c 線性同餘產生器之增量 P 出現機率之函數

D Kullback­Leibler 散度函數 Q 某一隨機分佈之舉例

對稱之 Kullback­Leibler
D R 近似最大偏移穩定分佈演算法
散度函數

dt 觀測數據之個數 S 某一隨機分佈之舉例

H 標準化之夏儂熵值 T 觀測數據集合之長度

H′ 未標準化之夏儂熵值 U 偽隨機亂數值

以 Clifford 演算法估測之
Ĥ ′ Unif 平均分佈的偽隨機亂數產生函數
未標準化夏儂熵值

k 速寫格子數目 X 線性同餘產生器之輸出值

m 線性同餘產生器之模數 y 速寫格子內數值

N 集合 O 中的元素總數目 ­ ­

18

doi:10.6840/cycu202000498
3.2 Clifford 熵值估算速寫演算法參數探討

本論文欲於硬體上實現的演算法為 Clifford 熵值估算速寫演算法,如


2.3.1節所介紹,可影響演算法結果精確度的參數共有兩項:

1. 速寫格子的數目 k 值

2. 觀測區間的長短

根據原論文所述,預估熵值之精確度在速寫格子的數目 k ≥ 20 即可獲得一
定效果。觀測區間的長短根據 Abigail Koay 等人 [26] 以基於熵值分析 DDoS
攻擊的結論,觀測區間的長短不同所表現出之流量行為並無太大差異,且無
論是正常流量或是 DDoS 攻擊流量皆是如此,對準確性只有輕微影響。然而
為分析對於網路環境流量實際可用之速寫格子數目 k 值,與使用的是熵值估
算而非精確計算可能會被觀測區間大小所影響,故以下 3.2.2、3.2.3小節將
使用原論文法對這兩項參數以實際封包流量做再次驗證,而 3.2.1節會先說
明本論文判斷實驗結果的指標「Kullback­Leibler 散度」。

3.2.1 Kullback­Leibler 散度

Kullback­Leibler 散度(Kullback­Leibler divergence)又稱為相對熵,以下


簡稱 KL 散度,可以用來度量兩個隨機分佈之間的差異,其定義如下:

[ ]
( n ) ∑ Q (i)
D Q S = Q (i) ln
i S (i)

f
其中 Q, S 為兩個欲觀察的隨機分佈;而 D (Q S) 為分佈 Q 至 S 的 KL
散度。
若兩個隨機分佈的差異愈大則 KL 散度亦會愈大,當兩個隨機分佈完全
相同時 KL 散度為 0。KL 散度為非對稱性的,若分佈 Q 至 S 的 KL 散度為
f f f f
D (Q S),分佈 S 至 Q 的 KL 散度為 D (S Q),則 D (Q S) ̸= D (S Q);
f f
D(Q S)+D(S Q)
若希望得到對稱的 KL 散度 D,則 D = 2

19

doi:10.6840/cycu202000498
本論文使用 KL 散度作為判斷實驗結果的依據,以評估一估測熵值的實
驗結果為例,首先會對每個觀測區間所求出的估測熵值與精確熵值進行相
減,求出其差值並其畫成分佈圖,如圖 3.1上方圖形所示,一般較好的實驗
結果為中間點靠近 0 的數值很高、隨著向外擴散而遞減的類似鐘形曲線之形
狀;接著求出「精確熵值和自己的差值」的分佈圖,由於「精確熵值和自己
的差值」為沒有差異,故其形狀有如脈衝函數,如圖 3.1下方圖形所示,只
在中心點 0 有值之分佈。最後將「估測熵值誤差分佈」與「精確熵值和自己
的差值」分佈做比較,計算出對稱的 KL 散度 D 並以此判斷實驗結果,KL
散度值愈小愈表示結果估測結果愈趨近精確熵值。

圖 3.1: (上)估測熵值誤差分佈圖範例;(下)無誤差分佈圖範例

20

doi:10.6840/cycu202000498
3.2.2 速寫格子數目之 k 值對精準度影響探討

根據原論文所述,速寫格子數目之 k 值愈大,其結果會愈準確,並於
k ≥ 20 時能有一定水準。為觀察參數 k 值大小對估測實際封包流量之熵值有
何影響,本論文使用了 5.1.3節的 10 個的封包流量檔做測試,先設定另一參
數「觀測區間」為 30 秒,並以 3.2.1節「Kullback­Leibler 散度」提及之方式
作為結果比較依據。實驗結果如圖 3.2所示,橫坐標表示速寫格子數目 k 值,
範圍為 {1, 10, 20, . . . , 1000};縱坐標為 KL 散度,值愈小表示估測結果愈接
近精確熵值。此四個分佈分別代表來源端 IP 地址、目的端 IP 地址、來源端
通訊埠、目的端通訊埠的實驗結果,如同原論文所描述,隨著 k 值增大其
結果愈準確,且愈小的 k 值成長幅度愈明顯,為對數增長趨勢(Logarithmic
Increase)。其中當 k < 100 時,相對於其他區間,相同的 k 值增加量能提升
較多的估測精準度,而當 k > 700 後提升效果則相當有限。
對於硬體實現而言,電路所需面積與速寫格子數目成正比關係,亦即速
寫格子數目愈多,所需的電路面積也就愈大。雖然極大的 k 值其結果相當準
確,但由於準確度成長趨勢為對數增長,當準確度達一定程度後,須使用更
多速寫格子才可使準確度有些許提升,付出的資源與收益並不對等,且若所
需的電路面積愈大,因硬體資源有限,在合成時也將更容易遇到時序餘裕度
問題使設計無法達成,故在準確度即硬體設計上須取得一平衡點。基於此理
由,本論文使用原論文所推薦之速寫格子數目 k = 20 作為後續模擬與硬體
實現之參數。

圖 3.2: 速寫格子數目 k 值對精準度影響之測試

21

doi:10.6840/cycu202000498
3.2.3 觀測區間之長短對精準度影響探討

根據 Abigail Koay 等人 [26] 基於熵值分析 DDoS 攻擊的結論,觀測區間


的長短對準確性只有輕微影響,為確認此結論是否同樣適用於本論文使用之
熵值估測演算法,本論文使用了與 3.2.2節相同之封包流量檔與結果比較方
式,並使用該節得出的結論 k = 20 進行測試,實驗結果如圖 3.3所示,隨著
觀測區間的拉長,四個觀測項目之 KL 散度有些微的下降,表示觀測區間愈
長則預估熵值愈準確,然而當觀測區間大於 60 秒時此趨勢開始不穩定。推
測可能造成趨不穩定的原因為,測試使用的是 10 個 15 分鐘的封包流量檔,
當觀測區間較短時估測出的熵值樣本數目會較多,而當觀測區間較長時樣本
數目會變少,亦有可能是樣本數的減少使極端值出現的機率降低而讓觀測區
間較長的實驗結果較佳。
從網路流量監測的角度來看,若觀測區間設定得太長,則可能無法顯示
出持續時間比觀測區間長度還短的網路異常行為;若觀測區間設定得太短,
則可能會對流量的細微變化過於敏感,使些微的波動被誤認為異常。此處不
再深入探討多長或多短的觀測區間才適合流量異常監測,因為每個環境的網
路流量、欲分析的異常種類皆不相同,適合的觀測區間長短必會不同。本論
文目的為將熵值估測速寫演算法實現至硬體中,對於之後會出現的他種參數
優劣探討,理應只要基於同一個觀測區間長度來判斷即可。假設此處選擇了
觀測區間為 30 秒做比較,則只要所有實驗皆使用觀測區間 30 秒,則可以在
此前提下做出其他參數的優劣判斷。
本小節的實驗結論為,觀測區間長至一定程度後,預估熵值會精準度會
達穩定,且並非觀測區間愈長愈好。

22

doi:10.6840/cycu202000498
圖 3.3: 觀測區間之長短對精準度影響之測試

3.3 硬體實現

3.2節使用軟體模擬分析了兩項參數對預估精準度的影響,然而無法就直
接依照此參數實現於硬體上,以下會先依照演算法 2.1簡述流程,然後說明
其困難點為何。
整個演算法流程並不需計數川流資料的獨立項目出現次數,只要將每
筆觀測項目做為偽隨機亂數產生器(Pseudo­random Number Generator)的種
子值,如演算法 2.1的步驟 6,並將步驟 9 所產生之均勻分佈亂數透過第 9、
10 步驟,將亂數經由演算法 2.2近似最大偏移穩定分佈之函數 R(以下簡稱
「函數 R」)運算並累加其運算結果即可;當要統計觀測區間內的熵值時,則
需知道區觀測區間內的封包總數 Cnt,並透過演算法 2.1第 11、12 步驟,對
k 個速寫格子求平均與對數平均,即得出熵值。
不同於軟體模擬可以輕易實現上述運算,硬體設計會有其限制,例如除
法、指數、對數、三角函數等運算是對硬體不友善的,可以實現但會於電
路面積、時脈方面付出非常高的代價。演算法 2.1第 9 步使用之函數 R、第
11 步求平均與第 12 步的求對數平均皆不適合實現在硬體上,故本論透過
NetFPGA­SUME 可藉匯流排通道與中央處理器溝通之功能,如圖 3.4所示,
將第 11、12 步驟交給電腦軟體端做統計區間結束時的熵值計算,只在硬體
端實現將觀測項目經函數 R 映射並累加至 k 個速寫格子的運算,而函數 R

23

doi:10.6840/cycu202000498
則使用查詢表格的方式實現。
本章接下來要討論的重點為如何以查詢表格的方式盡量還原 Clifford 熵值
估算速寫演算法的運算,本論文提出「階段法」,在概念上將函數 R 以查詢
表格的方式實現,再配合其數學特性減少表格空間使用量,期望以極少的資
源實現於硬體中。

圖 3.4: Clifford 熵值估算速寫演算法實現流程圖

24

doi:10.6840/cycu202000498
3.4 近似最大偏移穩定分佈演算法之實現

由於在硬體設計上較難實現如指數、對數、三角函數等運算,故須避免
直接使用計算的方式實現演算法 2.2之近似最大偏移穩定分佈函數 R。通常
要實現這類較複雜的函數,包括前面提及之對數、三角函數等運算,最直觀
的方式是使用查詢表格實現近似,通過事先將所有可能輸出結果計算出來放
置於硬體表格中,當函數輸入值一來直接對照表格就能給出近似輸出,優點
為實現方式簡單、速度快;缺點為使用電路面積較大。
本論文亦使用查詢表格的方式實現函數 R,以下小節會詳述如何將函數
的輸出進行表格化,並盡量縮小其電路使用面積。

3.4.1 函數輸入值對於輸出結果之影響

觀察演算法 2.2之近似最大偏移穩定分佈函數 R,由於步驟 1 之 W1 為實


數、W2 為正實數,且步驟 2 之 log 內的運算式結果必為正實數,故函數 R
的輸出亦為一實數。
U1 , U2 為根據以觀測項目作為種子值的偽隨機亂數產生器所產生的均勻
分佈亂數,以觀測項目為 32 bits 的來源端 IP 地址為例,於速寫格子數目
k = 20 的情況下,所有可能的組合數目為「232 個來源端 IP 地址經函數 R 之
輸出結果」乘以「速寫格子數目 20」,即 232 × 20 ≈ 858.99 × 1010 ,約有 859
億種組合,若以 64 位元雙精度的浮點數資料型態來儲存,則須約 640GB 的
記憶體空間,非常巨大,很難將此組合直接放入至硬體上,記憶體資源難以
負荷。
但從另外一個角度想,如果能限制函數 R 之輸入值數目,即可縮減函數
R 的輸出結果組合數量。本小節第一段提及可將 U1 , U2 兩個變數為函數 R 之
輸入,而 U1 , U2 為數值介於 0 至 1 間的實數,理論上有無限多種可能數值,
但是如果限制了 U1 , U2 的小數點精度位數,則 U1 , U2 的可能數值將變為有
限。假設 U1 , U2 的小數點精度位數只有一位,則 U1 , U2 = {0.1, 0.2, . . . , 0.9},
亦即共只有 9 × 9 = 81 種組合,同樣以 64 位元雙精度的浮點數資料型態來

25

doi:10.6840/cycu202000498
儲存只需要 0.63KB 的記憶體空間,所有觀測項目都將被函數 R 映射至這 81
個值中的其中一個,且無論速寫格子數目 k 值為多少,皆不影響此組合大
小,可大幅減少硬體所使用的記憶體資源。
限制 U1 , U2 的小數點精度位數將可大幅縮減記憶體所需資源,為驗證此
想法是否可行,本論文使用了同 3.2.2節之封包流量檔與結果比較方式,實
驗結果如圖 3.5所示,橫坐標為 U1 , U2 的小數點精度位數,評估了位數 1 至
5 位的情況,位數由左向右遞減;縱坐標為 KL 散度,值愈小表示估測結果
愈接近精確熵值。可發現當 U1 , U2 的小數點精度位數為四位時仍有相當好的
效果,而保留的位數少於四位時則差異顯著提升,因此若要以限制 U1 , U2 的
小數點精度位數的方法來降低記憶體資源使用,則保留精度位數四位將是個
不錯的選擇。

圖 3.5: U1 , U2 小數點精度位數對於函數 R 之輸出結果精準度測試

3.4.2 有限精度輸入值之函數表格化

3.4.1節之最後實驗表明,可藉由限制 U1 , U2 的小數點精度位數來減少
記憶體資源使用,故本節將使用此概念將函數 R 輸出製成表格。表格製
作的邏輯如圖 3.6所示,為方便說明此處以精度位數一位為例,表格位置
[0][0] 擺放的是 U1 , U2 = 0.1 的函數 R 輸出結果,向右一格之位置 [0][1] 則
是 U1 = 0.1, U2 = 0.2 時的函數 R 輸出結果,其餘依此類推,最後擺成一張
9 × 9 的方形表格。實際運用為每個觀測項目會經亂數產生器產生 U1 , U2 兩
個值,而在此例子這兩個值都只會是 0.1, 0.2 至 0.9 九個浮點數的其中一個,

26

doi:10.6840/cycu202000498
表格行列對照後即能得到函數 R 之輸出值。
同樣根據 3.4.1節之最後實驗結果,本論文選擇將函數 R 之輸入 U1 , U2
的小數點精度位數限制為四位,然而遷就偽隨機亂數產生器於硬體上之
限制,方形表格的邊長須為二的次方倍才較容易實現,原因將於 3.5.1節
「線性同餘產生器」詳述,這裡只做提及。原本精度位數四位的表格應為
大小 9999 × 9999,且 U1 , U2 = {0.0001, 0.0002, . . . , 0.9999};因為此限制,
本論文選擇大於且最接近 9999 之二的次方倍數字 214 作為表格邊長,此
2
參數下的表格大小為 (214 ) = 16384 × 16384 ≈ 2.68 × 108 ,約 2.68 億,而
U1 , U2 ≈ {0.000061, 0.000122, . . . , 0.999939}。若以 64 位元雙精度的浮點數資
料型態來儲存,則須約 2GB 的記憶體空間。
從原本 3.4.1節提及之 640GB 縮減為 2GB,約節省了 99.6% 的空間,但
2GB 的記憶體空間對於硬體來說依然是個十分龐大的數字,再加上函數 R
輸出值為非整數之實數,於硬體上存放浮點數會比單純的整數更加耗費資源
且設計更複雜,因此下一段 3.4.3節「函數表格化之內部資料型態於精準度探
討」會以實際封包流量,觀察表格內的數值精確度對函數 R 輸出結果有何影
響;並於下下段 3.4.4節「階段法」根據此結論更進一步地縮減表格大小。

圖 3.6: 函數 R 輸出結果表格化示意圖

27

doi:10.6840/cycu202000498
3.4.3 函數表格化之內部資料型態於精準度探討

3.4.2節提及如何將函數 R 表格化以利實現於硬體中,然而函數 R 本身
輸出值須使用浮點數資料型態進行儲存,對硬體而言比起單純的整數資料
型態更加耗費資源且設計複雜,故本小節以實際封包流量,測試表格大小
16384 × 16384 內的小數點精度位數,對於輸出結果精準度有何影響。
實驗結果如圖 3.7所示,使用了同 3.2.2節之封包流量檔與結果比較方式,
其橫坐標為小數點精度位數,從左方精度最高之原數值至右方完全捨棄了
小數點只剩下整數;縱坐標為 KL 散度,值愈小表示估測結果愈接近精確熵
值。可觀察到即使表格內的數值為整數資料型態,完全捨棄了小數點,對於
輸出結果也幾乎沒有影響。考量到付出的硬體資源代價與獲得的準確度提升
效益,表格內使用單純的整數資料型態存放會是個較好的選擇。
表格大小 16384 × 16384 的 2.68 億種組合若以四位元組的整數資料型態
儲存,約須 1GB 的記憶體空間。然而即使表格內的資料型態可以整數存放,
不必存放浮點數,1GB 的記憶體空間對於硬體仍太過巨大,無法直接將此表
格實現於硬體上,因此下一段 3.4.4節「階段法」會闡述如何利用函數 R 輸
出值規律,更進一步地縮減表格大小。

圖 3.7: 表格內小數點精度位數對於函數 R 之輸出結果精準度測試

28

doi:10.6840/cycu202000498
3.4.4 階段法

3.4.1節與 3.4.2節中提出了讓表格資源使用量大幅減少的方法,然而即使
是縮減後的表格,其大小為 16384 × 16384,仍有 2.68 億種組合,對硬體的
負擔仍太過巨大,因此本小節會應用函數 R 本身的規律,大幅減少其實現
在硬體上所需的記憶體資源。
函數 R 的輸出為一實數,而 U1 , U2 兩個變數為其輸入。首先觀察單組輸
入變數 U2 的函數圖形,此處的「單組輸入變數 U2 」定義為「某一 U1 值與
U2 = { 16385
1 2
, 16385 16384
, . . . , 16385 } 的輸入變數組合」,也就是圖 3.6中表格的某一橫
列,以表格中的第一橫列為例,如圖 3.8所示,其橫坐標表示位於表格橫列
中的第幾格、縱座標表示所對應的函數 R 輸出值;虛線表示函數 R 未經過
任何處理的原輸出值、實線為根據 3.4.3節結論而捨棄小數點只保留整數資
料型態的結果,可發現其函數圖形呈「ㄣ」字形,頭尾數值變化快速但中間
變化緩慢,且隨著變數 U2 的遞增而函數 R 輸出值遞減。
大小 16384 × 16384 的表格應有 16384 組變數 U2 ,礙於圖片大小此處僅
呈現幾組展現其整體趨勢。圖 3.6呈現了四組輸入變數 U2 的函數圖形,其橫
坐標為表格中由左至右、由上至下數來的第幾格,縱座標表示所對應的函數
R 輸出值。由於圖片尺度的關係,每組變數 U2 圖形看起來像一條水平線,
但其實都是如圖 3.8一般呈「ㄣ」字形,本論文將一組「變數 U2 的『ㄣ』字
形分佈」定義為一組「表尾分佈」。每個表尾分佈的起始點位置不同,但分
佈的形狀極其相似,皆隨著變數 U2 的遞增而函數 R 輸出值遞減,這意味著
或許可以使用一組表尾分佈去近似其他所有表尾形狀,且只要知道原本每組
表尾的起始點,即可近似出整張表格。由於圖 3.6中不斷重複的一階一階的
特點為縮減資源的關鍵,因此以其一階一階的形狀命名本論文提出的方法為
「階段法」。
本論文將「每組表尾的起始點」所形成的集合定義為「表頭」,表頭與表
尾的關係如圖 3.10所示,表頭記錄的是每組表尾的起始點值,而表尾為遞減
123 456
的曲線,因此記錄的是相比起始值少了多少。以查詢 U1 = 16385
, U2 = 16385

29

doi:10.6840/cycu202000498
的函數 R 輸出值為例,首先 U1 的分子為 123,經查詢第 123 組的表尾起始
點為­135;U2 的分子為 456,經查詢後得知第 456 格的表尾會比起始點的值
少 1,故函數 R 輸出值即為 (−135) − 1 = −136。
表頭與表尾皆是長度為 16384 的單維度陣列,如果能只使用一組表尾分
佈近似其他表尾形狀的話,則只需要 16384 × 2 = 32, 768 的表格大小即可
近似整個函數 R 輸出,若以四位元的整數資料型態儲存,約須 0.125MB,
相比之前的 1GB 記憶體空間,能節省約 99.99% 的記憶體資源。由於能否
只使用一組表尾分佈近似其他表尾形狀是大幅節省記憶體資源的關鍵,故
3.4.4.1節「單組表尾分佈近似驗證」會以實際封包流量檔驗證此想法是否可
行;而 3.4.4.2節「表尾化簡探討」會探討如何以更少的記憶體資源實現表尾
分佈;最後 3.4.4.3節「表頭化簡探討」同樣會探討如何以更少的記憶體資源
來實現表頭分佈,至此完成整個階段法的實現。

圖 3.8: 單組變數 U2 之函數圖形(單組表尾)

圖 3.9: 變數 U2 之函數圖形

30

doi:10.6840/cycu202000498
圖 3.10: 表頭表尾關係圖

3.4.4.1 單組表尾分佈近似驗證

原始大小 16384 × 16384 的表格可視為一個表頭加上 16,384 種不同的表尾


分佈所形成,然而每種表尾分佈極其相似,若能只以一種表尾分佈近似全部
種類的表尾形狀,那將可以省下許多記憶資源,故本小節會對此想法進行驗
證,確認其可行性。
本小節選擇了四種表尾分佈來測試,第 1 組表尾(下稱「前表尾」)、第
8,192 組表尾(下稱「中表尾」)、第 16,384 組表尾(下稱「後表尾」)、全
部表尾的平均值(下稱「平均表尾」);對照組為「原論文法」與「表格寬
16384」,其中「表格寬 16384」則為 3.4.3節內之整數資料型態結果。實驗結
果如圖 3.11所示,使用了與 3.2.2節相同之封包流量檔與結果比較方式,橫坐
標為上述表尾種類;縱坐標為 KL 散度,值愈小表示估測結果愈接近精確熵
值。可觀察到除了後表尾以外,其餘幾種表尾形式的 KL 散度與原論文法的
差異並不大,皆可做為近似全部種類的表尾形狀代表。
為了更詳細了解每個表尾的差異為何,以下做了表尾內分佈比例的探討。
圖 3.12呈現了表格大小 16384 × 16384 使用整數資料型態儲存下,所有表尾
的分佈比例。橫坐標為第幾組表尾的分佈情況,從第 1 組至第 16384 組;縱
座標為表尾內各等份所占有的數目,以堆疊的方式呈現,總和為 16,384。圖
中可觀察到等份 2, 3, 4 的佔有數目較多,這意味著確實表尾分佈都是頭尾數

31

doi:10.6840/cycu202000498
值變化快速但中間變化緩慢的「ㄣ」字形分佈,不同處在於每個等份所佔有
的比例不同。整體表尾分佈比例有如波浪般的週期性,第 2,000 組以後可見
到等份 1,2,3 比例增加時等份 4~12 的比例就會減少,增加到一定程度時又會
驟降回去緩慢遞增,愈後面的組數這種變化週期愈慢。如果能重現此種比例
變化關係或許會使階段法更接近原論文法,但若要於硬體中實現此種比例變
化會使電路變得複雜,且又會增加額外的表格使用量,在只使用單一種表尾
也還能獲得不錯結果的情況下,本論文暫不考慮於硬體上實現此種比例變化
關係。

圖 3.11: 單組表尾分佈近似驗證

圖 3.12: 表尾分佈比例堆疊圖

32

doi:10.6840/cycu202000498
3.4.4.2 表尾化簡探討

3.4.4.1節驗證了使用單組表尾分佈近似所有表尾形狀依然能有不錯的結
果,但即使如此一個表尾分佈依然需要一個大小 16,384 的單維陣列來記錄,
對硬體實現而言使用的資源能少就少,故本小節探討於硬體實現上表尾的化
簡。
根據圖 3.8所呈現,變數 U2 的函數圖形為單純的遞減趨勢,亦即一組表
尾內的資料為由大至小整齊排列;而圖 3.12呈現了各組表尾內的分佈比例,
其共通點為每組表尾分佈皆被分成了 13 份,這意味著即使一組表尾的陣列
長度雖然有 16,384 個,但當中記錄的值只會有 13 種。綜合以上兩個特性,
一個很長的單維陣列內只存放了由大至小的 13 種數字,於硬體上可使用閥
值比大小的方式輕易實現,只需要一個輸入閥值判斷電路,加上一個大小
13 格的表格即可。這又使實現表尾的所需資源更加優化。

3.4.4.3 表頭化簡探討

表頭記錄的為每個表尾分佈的起始點,可視為定位點,其函數圖形如圖
3.13所示,共記錄了 16,384 組表尾的起始值。仔細觀察後發現,在第 274 個
數值之前的圖形可用雙曲線函數去進行近似,而後面的分佈則可使用像是
3.4.4.2節「表尾化簡探討」的閥值比大小方式,只是排列順序是由小至大,
分成 64 等份進行化簡。然而於硬體中要實現雙曲線函數其複雜度不亞於實
現三角函數,需使用大量的硬體資源;又每一個表頭值皆會影響一組表尾的
準確度,因此不適合再使用近似值。綜合以上原因,原本欲使用雙曲線函數
去近似的 274 個點直接記錄於表格中,而後面的分佈則採用與 3.4.4.2節同樣
的方式進行化簡。對於實現表頭,共使用了 274 + 64 = 338 個表格空間,外
加一輸入閥值判斷電路,相比表尾的化簡資源使用量更高一些。

33

doi:10.6840/cycu202000498
圖 3.13: 表頭函數圖形

3.4.4.4 階段法總結

由於表格大小 16384 × 16384 使用的記憶體資源依然過多,故本論文提出


階段法,將表格以更少的資源以實現於硬體中。
階段法利用了每個表尾分佈起始點不同但函數形狀相似的特性,可以只
記錄一組表頭與一組表尾就能近似整個表格,也就是函數 R 的輸出;再加
上表尾與表頭內本身存放的資料擁有已排序、種類較少等特性,因此於硬體
實現時可以使用一閥值判斷電路加上一個極小的表格,就能使用更少資源得
到完全相同的結果。
最後硬體優化過的階段法只需要兩組閥值判斷電路與共計表格大小 351
格,即可得到與 3.4.4節末段提及之表格大小 32,768 格完全相同的輸出結果;
並又近似於未化簡過的表格大小 16384 × 16384;與近似原論文法。

3.4.5 記憶體資源使用試算

本小節會對近似最大偏移穩定分佈演算法函數 R 之表格實現的各方法進
行更實際的使用記憶資源試算,結果如表 3.2所示,關於硬體實現所需要的
表格數量將在 5.4.1節「階段法表格數量之硬體實現探討」詳細討論,此處直
接引用結論進行計算。詳細的計算過程如下,以速寫格子數目 k = 20,估測

34

doi:10.6840/cycu202000498
來源端 IP 地址為例:

• 原 論 文 法 直 接 表 格 化: 來 源 端 IP 地 址 共 有 232 種, 速 寫 格 子 數 目
k = 20,亦即共需 232 × 20 ≈ 859 億的表格大小。若以 C 程式語言的資
料型態 double(64 位元雙精度浮點數)來儲存表格內的數值,則共需
8 × (232 × 20)Bytes≈ 640GB。

2
• 表格大小 16384 × 16384(未化簡):共需 (214 ) ≈ 2.68 億的表格大小。
表格內負數最大值為 −16403,正數最大值為 +3,因此 16 位元即可
2
存放此兩個極端值,亦即每張表格需 16 × (214 ) bits= 0.5GB 的空間。
於硬體實現每四個速寫格子需要一張的話,則共需要 5 張,也就是
0.5GB×5= 2.5GB。

• 表格大小 16384 × 16384(階段法):表頭需要 338 格,表尾需要 13


格,合計 338 + 13 = 351 格。表格內負數最大值為 −16403,正數最
大值為 +3,因此 16 位元即可存放此兩個極端值,亦即每張表格需
16 × 351 = 5616bits≈ 0.686KB 的空間。於硬體實現每四個速寫格子需
要一張的話,則共需要 5 張,也就是 0.686KB×5= 3.43KB。

對於原論文法,使用階段法後大約只需要億分之一的表格空間與記憶體使用
量;對於表格大小 16384 × 16384,使用階段法後大約只需要百萬分之一的
表格空間與記憶體使用量,可以大幅節省實現於硬體上所需的記憶資源。

表 3.2: 各方法所需表格大小與記憶體空間
方法 表格大小 所需空間
原論文法 859 億 640GB
表格大小 16384 × 16384(未化簡) 2.68 億 2.5GB
表格大小 16384 × 16384(階段法) 351 3.42KB

35

doi:10.6840/cycu202000498
3.5 偽隨機亂數產生器之實現

於原論文法中,若要估測網路川流熵值,會先將每筆觀測項目做為偽隨
機亂數產生器之種子值(Random Seed)
,也就是演算法 2.1中的步驟 5,然後
產生數值介於 0 至 1 間的平均分佈偽隨機亂數,提供給近似最大偏移穩定分
佈函數 R 做後續運算。然而為了方便實現於硬體上,3.4節已將函數 R 改成
以表格的方式實現,亦即偽隨機亂數產生器也必須修改,產生的值也要能夠
映射到表格上才可以。
硬 體 上 較 常 見 的 偽 隨 機 亂 數 產 生 器 有 線 性 同 餘 產 生 器 (LCG, Linear
Congruential Generator)、線性反饋移位暫存器(LFSR, Linear Feedback Shift
Register)等,由於本論文的軟體模擬使用的語言為 Python 程式語言與 C 語
言,而 Python 所使用的偽亂數模組(Random)亦是使用 C 語言實現,故本
論文選擇了較常見的 GNU C 語言編譯器(GCC, GNU Compiler Collection)
所使用的線性同餘產生器於硬體上實現。

3.5.1 線性同餘產生器

線性同餘法是一種被廣泛使用的亂數產生方式,其遞迴關係式如下:

Xn+1 = (aXn + c) mod m (3.1)

其中 m 為模數(Modulus),其值須大於 0;a 為乘數(Multiplier),須符


合條件 0 < a < m;c 為增量(Increment),須符合條件 0 ≤ c < m;而起始
值 X0 ,又被稱為種子值,須符合條件 0 ≤ X0 < m。
亂數產生的流程如圖 3.14所示,一開始會有一個種子值作為起始值,然
後其運算出的輸出結果會再作為輸入,導回遞迴關係式中並得到輸出,如此
周而復始。於本論文中的應用方法類似,每筆觀測項目會作為種子值送入線
性同餘產生器中,然後根據速寫格子數目 k 值決定要遞迴幾次,對於已經表
格化的函數 R 而言,要查詢表格依然需要兩個輸入值,一個代表 U1 決定表

36

doi:10.6840/cycu202000498
頭值、另一個代表 U2 決定表尾值,故最後每筆觀測項目會產生出 2k 個亂數
值。另外,線性同餘產生器的輸出結果範圍為 [0, m),當選用的參數 m 大於
表格邊長時,會超出表格造成查詢失敗,故會對輸出結果以表格邊長為模數
再次求餘作為遮罩(Mask),讓輸出結果必定可以查詢到表格內的某一值。
線性同餘產生器所使用到的有乘法、加法、求餘共三種運算,其中加法
與乘法於硬體中較容易實現,然而求餘運算則對硬體不友善,一般要實現需
花費大量資源,但有兩個例外,當求餘運算的模數為二的次方倍或是梅森質
數(Mersenne Prime)時,就可使用極少資源完成求餘運算。3.4.2節「有限
精度輸入值之函數表格化」中曾提及,方形表格的邊長須為二的次方倍會較
容易實現,就是因為求餘運算的模數為二的次方倍會較容易實現的關係,上
一段提及當線性同餘產生器的參數 m 大於表格邊長時,會對其輸出結果以
表格邊長為模數求餘作為遮罩,為了使限制輸出結果的求餘運算變容易,故
使表格邊長為二的次方倍。
本論文將以上介紹之擁有遞迴關係的線性同餘產生器稱為「相依線性同
餘產生器」,其輸出與上一個輸出會有密切關係,於硬體實現中會有些小
缺陷,這會在 3.5.1.1節「相依線性同餘產生器」詳細說明;與之相對的是
3.5.1.2節「獨立線性同餘產生器」,為線性同餘產生器的另一種用法。關於這
兩種產生器的實際運用效果,將於 3.5.2節「參數比較與探討」以實際封包流
量檔進行比較。

圖 3.14: 線性同餘產生器之亂數產生流程 [27]

37

doi:10.6840/cycu202000498
3.5.1.1 相依線性同餘產生器

有許多程式語言的編譯器其亂數產生方式是使用相依線性同餘產生器,
以 GCC 編譯器的參數為例,其參數 [27] 為 m = 231 , a = 1103515245, c =
12345,不過此組參數無法應用於網路觀測項目中的 IP 地址,因為使用上會
將觀測項目作為種子值,而 IP 地址共有 232 種組合,最大數值為 232 − 1,不
符合種子值 X0 須滿足 0 ≤ X0 < m 的條件,可能會導致週期太小,使產生
的亂數品質下降,如圖 3.14之中間流程所示,該例子只能產生數值 3 與 6 的
輸出,亂度不足。故在本論文中選擇了 Borland C 編譯器的參數作為相依線
性同餘產生器的實現,其參數 [27] 為 m = 232 , a = 22695477, c = 1,以符合
種子值的條件限制。
相依線性同餘產生器會以其當前輸出會作為輸入決定下一個輸出值為何,
亦即後面的亂數輸出結果必須先等前面的結果算完才可得知,這會使整體運
算時間拉長。假設熵值估測演算法的速寫格子數目 k = 20,亦即每個觀測項
目需要 2k 個亂數,也就是 40 個亂數,當第 40 個亂數還在等待第 39 個與更
前面的亂數產生時,第 1、2 個亂數可能早就已經產生完畢且完成函數 R 的
表格查詢,也就是前面早已完成運算的亂數全部會受限於最慢產生的亂數,
就算使用管線化(Pipeline)設計,等待的過程也需以許多正反器儲存,會耗
費許多空間;若使用前瞻式設計,雖然可以同時拿到所有亂數值,但其面積
耗費驚人,比管線化設計更加耗費資源。圖 3.15呈現了以管線化設計實現相
依線性同餘產生器的流程,圖中每一個線性同餘產生器皆為同樣的參數與架
構,可發現最早產生的 U1 與最後產生的 Uk2 已間隔相當長的時間。
為優化相依的等待問題而產生了 3.5.1.2節「獨立線性同餘產生器」,會在
下一小節詳細描述。不過這並不意味著相依線性同餘產生器就無法使用,只
是在硬體設計上會耗用多一些資源,還須經過實際封包流量檔的測試才可判
斷,若相依設計的測試結果十分優良,則可以選擇付出多一些資源以換取準
確度。

38

doi:10.6840/cycu202000498
圖 3.15: 相依線性同餘產生器之產生亂數流程

3.5.1.2 獨立線性同餘產生器

相依線性同餘產生器為使用當前輸出會作為輸入決定下一個輸出值,因
而導致了後面的亂數運算時間太長的問題,那麼只要多準備幾組不同的 a, c
參數,讓這些參數不同的線性同餘產生器同時運作即可,就能同時拿到許多
亂數值。舉例來說,假設熵值估測演算法的速寫格子數目 k = 20,那麼可
以準備 20 組不同的 a, c 參數,每組線性同餘產生器只要產生兩個亂數即可,
避免了運算時間過長的問題,這個使用方式相當於把線性同餘產生器當成了
散列函數來使用。
由於種子值 X0 須滿足 0 ≤ X0 < m 的條件是為了擁有最大週期的考量,
此處每組線性同餘產生器只產生兩個值的話週期問題便影響不大,故本論
文將獨立線性同餘產生器的參數選擇為梅森質數 M31 = 231 − 1,以避免
Borland C 編譯器選擇的參數 m = 232 與遮罩只取較低 14 位元的行為無視高
位元,使亂度不足。
本節提出了兩種架構的獨立線性同餘產生器。熵值估測演算法的速寫格
子數目 k,第一種準備了 k 組不同的 a, c 參數,每組線性同餘產生器會產生
兩個亂數,以下稱為「半獨立線性同餘產生器」,如圖 3.16左方模組所示;
第二種準備了 2k 組不同的 a, c 參數,每組線性同餘產生器只會產生一個亂
數,以下稱為「全獨立線性同餘產生器」,如圖 3.16右方模組所示。兩種架
構下的參數 m 皆為梅森質數 M31 ,實際測試結果會於下一小節「參數比較與
探討」,與上面的相依線性同餘產生器一同進行比較。

39

doi:10.6840/cycu202000498
圖 3.16: 獨立線性同餘產生器之產生亂數流程

3.5.2 參數比較與探討

本小節對軟體亂數產生器、相依線性同餘產生器、半獨立線性同餘產生
器、全獨立線性同餘產生器,共四種偽亂數產生器進行比較,其中「軟體亂
數產生器」為使用 Python 程式語言提供的亂數模組,對照組為「原論文法」

測試所使用的函數 R 表格形式為 3.4.4節「階段法」最後提出的架構,速寫
格子數目 k 使用 20。實驗結果如圖 3.17所示,使用了與 3.2.2節相同之封包
流量檔與結果比較方式,橫坐標為亂數產生器的種類,其中軟體亂數產生器
為 3.4.4.1節中的平均表尾實驗結果;縱坐標為 KL 散度,值愈小表示估測結
果愈接近精確熵值。可發現三種偽亂數產生器的品質並沒有太大的差異,各
個觀察項目的 KL 散度值表現也不一致,而對於硬體實現而言,全獨立線性
同餘產生器是使用面積最小與運算所需時間最快的,其次為半獨立線性同餘
產生器,最後為相依線性同餘產生器。
使用 Borland C 編譯器參數的相依線性同餘產生器另有一個潛在問題,
其參數 m = 232 ,但由於本論文為了使偽亂數產生器的輸出結果能夠查詢
表格不超邊界,會對其輸出結果做遮罩,也就是只取只取較低 14 位元資
料而無視高位元,而造成混淆使亂度降低。例如現有兩筆來源端 IP 地址
192.168.0.1 與 231.168.0.1,若使用高位數在前(Big­endian)的位元組順序
(Byte Order)排列,則此兩筆來源端 IP 地址所產生的亂數經遮罩後會完全

40

doi:10.6840/cycu202000498
相同,因為兩者唯一不同的高位元數字已被忽略。
由於在硬體實現上,全獨立線性同餘產生器是使用面積最小與運算所需
時間最短的,再加上三者偽亂數產生器的結果並沒有相差太多,故本論文會
選擇使用全獨立線性同餘產生器實現於硬體中。

圖 3.17: 偽亂數產生器各參數比較

3.6 演算法實現總結

此小節將為前面章節的探討做出總結,說明本論文實現 Clifford 熵值估算


速寫演算法(下稱「原論文法」)所使用的方式與參數,呈現其效能並比較
使用記憶體資源多寡。
綜合以上各小節的計算方式探討,完整的計算流程如圖 3.18所示,本論
文使用速寫格子數目 k = 20,並根據演算法 2.1的計算步驟,當觀測項目出
現時,首先會將觀測項目做為種子值,經過 40 個全獨立線性同餘產生器產
生 40 個亂數,每兩個亂數為一組,經階段法化簡的函數 R 表格查詢出函數
近似值。階段法的化簡方式為對函數 R 輸入值進行取樣減少其輸出值數目,
將函數 R 化簡為一大小 16384 × 16384 的表格,再利用表尾分佈都很相似的
特性,以一個「平均表尾」近似其他表尾分佈,使階段法能以一組表頭和一
組表尾即可近似出原本的函數 R 表格。最後將經階段法得到之函數 R 近似
值累加至速寫格子中,待觀測區間結束後由外部軟體讀取速寫格子內部數
值,計算後得出最後的估計熵值。
效能與使用之記憶體資源多寡如圖 3.19所示,橫坐標為使用方法,每個
方法所使用的詳細參數如表 3.3所示;圖片上方縱坐標為 KL 散度,值愈小

41

doi:10.6840/cycu202000498
表示估測結果愈接近精確熵值;圖片下方縱坐標為所需記憶體空間比例,以
原論文法為基準值 100%。此處比較了三種方法,其中「原論文法」為未經
任何修改的原論文法結果,「表格寬 16384」為未經過階段法化簡的函數 R
表格,而「本論文法」則是使用階段法化簡過的函數 R 表格,可發現相比
原論文法,本論文能使用不到其億分之一的記憶體資源,達成與之相當的效
能。
本小節更進一步以量化方式呈現實驗結果,如表 3.4所示,其呈現了圖
3.19中實驗結果之各方法誤差的累積分佈比例,其中熵值誤差為實驗結果
之估測熵值與精確熵值的誤差取絕對值。以「本論文法之熵值誤差」的觀
測項目「來源端 IP 地址」為例,實驗結果中有 30% 的數據其熵值誤差小於
0.011;有 60% 的數據其熵值誤差小於 0.028;有 90% 的數據其熵值誤差小
於 0.046。從圖 3.19與表 3.4可觀察到本論文法與原論文法結果相當接近,而
本論文法可使用更少的記憶體資源,使硬體上能夠實現即時且快速的熵值估
算。

圖 3.18: 本論文實現 Clifford 熵值估算速寫演算法之流程圖

42

doi:10.6840/cycu202000498
表 3.3: 演算法總結比較之使用參數
參數名稱 原論文法 表格寬 16384 本論文實現方法

速寫格子數目 20

觀測區間 30 秒

偽隨機亂數產生器種類 軟體亂數產生器 軟體亂數產生器 全獨立線性同餘產生器

硬體實現所需表格大小 859 億 2.68 億 351

表格所需記憶體空間 640GB 2.5GB 3.43KB

表格內之資料型態 64 位元雙精度浮點數 16 位元整數 16 位元整數

階段法之表尾種類 – – 平均表尾

速寫格子之資料型態 64 位元雙精度浮點數 32 位元整數 32 位元整數

速寫格子所需記憶體空間 0.156KB 0.078KB 0.078KB

合計所需記憶空間
640GB 2.5GB 3.51KB
(含表格與速寫格子)

圖 3.19: 演算法總結比較

表 3.4: 演算法總結之誤差累積分佈比例
來源端 IP 地址 目的端 IP 地址 來源端通訊埠 目的端通訊埠

累積分佈比例 30% 60% 90% 30% 60% 90% 30% 60% 90% 30% 60% 90%

原論文法之熵值誤差 0.013 0.025 0.05 0.012 0.025 0.051 0.01 0.018 0.036 0.011 0.023 0.052

表格 16384 之熵值誤差 0.013 0.03 0.052 0.017 0.03 0.054 0.008 0.017 0.032 0.01 0.024 0.048

本論文法之熵值誤差 0.011 0.028 0.046 0.011 0.023 0.044 0.011 0.021 0.041 0.01 0.022 0.041

43

doi:10.6840/cycu202000498
第四章

系統架構與硬體實現

4.1 P4 NetFPGA 專案架構

本論文基於 P4 NetFPGA 專案做開發,該專案之資料路徑如圖 4.1所示,


使用者利用 P4 程式語言所描述的功能行為會經 SDNet 編譯器轉換成實體
電路,並實現於簡易交換器(Simple Sume Switch)IP Core 內。由於原生
SDNet 函式庫有提供基本的交換器功能電路,故可使用 P4 程式語言撰寫輕
易實現,然而若欲加入使用者自行開發之新功能,則須將其包裝成外部函式
(P4­Extern),只要硬體電路採用管線化設計並符合外部函式所要求的輸入輸
出介面,然後在 SDNet 外部函示庫中定義好,即可被 P4 程式呼叫使用。
本論文的熵值估算速寫演算法屬於使用者自行開發的新功能,因此包裝
成了外部函式以利 P4 程式使用。由於此新功能並不存在於原生 SDNet 函式
庫中,因此 SDNet 編譯器會到外部函式庫去尋找相對應的模組來實現電路,
雖然使用的函式庫不同,但最終所有 P4 程式碼轉換的電路皆會實現在簡易
交換器 IP Core 當中。

44

doi:10.6840/cycu202000498
圖 4.1: P4 NetFPGA 專案之資料路徑

4.2 外部函式之熵值估算速寫演算法模組架構

本論文的 Clifford 熵值估算速寫演算法模組(以下簡稱「熵估算模組」)


是以外部函式的方式實現於 P4 NetFPGA 專案中,為管線化設計,從觀測項
目輸入至函數 R 結果計算出共需 16 個時脈,理想的整體模組架構如圖 4.2所
示,其中速寫格子數目 k 值為 20。一開始由「外部函式訊號解析」將觀測項
目資訊從外部函式訊號中提取出來,同時送入 20 個「表頭表尾鍵值產生器」
算出查詢表格所需的表頭、表尾鍵值,當中內部會經過「線性同餘產生器」
將觀測項目當成種子值產生亂數,再透過「表頭鍵值」與「表尾鍵值」確認
亂數所對應的查詢鍵值。拿到的兩個鍵值會分別查詢「函數 R 之階段法表
格」內的「表頭表格」與「表尾表格」,得到表頭數值與表尾數值,兩者相
加後即為函數 R 的近似輸出值 R′ ,最後累加至速寫格子中。當觀測區間結
束時,軟體端會讀取硬體端的速寫格子值,經過運算後得出估測熵值,完成
一個觀測區間的計算。
然而於實際硬體實現時,若將 20 個「表頭表尾鍵值產生器」的鍵值全部
同時拿去查 1 個「函數 R 之階段法表格」,會因時序餘裕度問題而導致輸出
結果出現錯誤,此問題會在 5.4.1節「階段法表格數量之硬體實現探討」詳細
探討,本論文的解決方式為分散階段法表格的查詢負擔,也就是多使用幾張
同樣的階段法表格去處理鍵值,最後經修正的整體架構如圖 4.3所示,上方
為原本圖 4.2的理想架構簡圖,下方為修正後的架構,每 4 個「表頭表尾鍵
值產生器」使用 1 個「函數 R 之階段法表格」,整個熵估算模組內共有 5 個
相同的「函數 R 之階段法表格」模組。所有模組內的設計細節皆不變,變動

45

doi:10.6840/cycu202000498
的只有增加「函數 R 之階段法表格」的數目以分流「表頭表尾鍵值產生器」
的鍵值查詢。
每個小模組更詳細的行為與模擬波形圖,將在以下小節分別介紹。

圖 4.2: Clifford 熵值估算速寫演算法之模組架構圖(理想)

46

doi:10.6840/cycu202000498
圖 4.3: (上)理想整體架構與(下)修正後整體架構

47

doi:10.6840/cycu202000498
4.2.1 外部函式訊號解析

「外部函式訊號解析」為本熵估算模組與外部其他 SDNet 編譯器產生的電


路的輸入介面,會從外部函式輸入訊號中提取熵值估測運算所需要的資訊。
外部函式的輸入訊號很單純,只有兩個變數,分別為「輸入資料」與「輸入
資料的有效判別訊號」,如圖 4.4所示。「輸入資料」的內容由使用者自行定
義,若有多個輸入參數會則會並排在「輸入資料」變數中,本熵估算模組只
需要觀測項目做估算,故只有一個 32 位元的觀測項目加上外部函式介面本
身定義的 1 位元有狀態判別位。「輸入資料的有效判別訊號」只有一位元,
高位元表示此時進入的「輸入資料」可用。
由於本熵估算模組所需的觀測項目輸入僅是並排在「輸入資料」變數中,
因此不需要任何判斷電路,直接將「輸入資料」變數拉線分流即可獲得所需
的觀測項目參數。

圖 4.4: 外部函式輸入訊號示意

4.2.2 表頭表尾鍵值產生器

「表頭表尾鍵值產生器」模組中會做兩件事,其一為將觀測項目作為種子
值產生偽隨機亂數 U1 , U2 ;其二為把偽隨機亂數 U1 , U2 映射到經階段法化簡
的函數 R 表格位置,也就是將亂數轉換為可查詢階段法表格的鍵值。此模
組的輸入為一個觀測項目;輸出有兩個,分別為表頭鍵值與表尾鍵值。總架
構圖 4.2中「表頭表尾鍵值產生器」模組的數量共有 k 個,相等於速寫格子

48

doi:10.6840/cycu202000498
數目 k 值,以本論文實現的參數為例,k 值為 20,故共有 20 個「表頭表尾
鍵值產生器」模組,每個模組差別僅為當中的兩個線性同餘產生器參數 a, c
不同,其餘架構皆相同。
此處為方便說明模組內資料流,只以一個「表頭表尾鍵值產生器」模組
的模擬波形圖為範例,如圖 4.5所示,其中時間點 A、B、C 為產生表頭鍵值
的模擬波形;時間點 A、D、E 則為產生表尾鍵值的模擬波形,以下分點詳
細說明。

• 時間點 A:新的觀測項目出現,此處以來源端 IP 地址為例。


「0xC0A8_000B」
為 IPv4「192.168.0.11」的十六進位表示。

• 時間點 B:以觀測項目為種子值的亂數產生完成,共花費 11 個時脈。


方框內上方為 32 位元的原亂數值,方框內下方為遮罩後剩餘的 14 位
元數值。

• 時間點 C:表頭鍵值計算完成,共花費 3 個時脈。將時間點 B 所產生


的亂數經由比大小的閥值判斷電路轉換為階段法表格的查詢鍵值。

• 時間點 D:動作同時間點 B,也是花費了 11 個時脈。

• 時間點 E:表尾鍵值計算完成,也是花費 3 個時脈。將時間點 D 所產


生的亂數經由比大小的閥值判斷電路轉換為階段法表格的查詢鍵值。

從新的觀測項目出現至表頭、表尾鍵值計算完成,共花了 14 個時脈,而計
算出的鍵值將會送到下一級「函數 R 之階段法表格」做查詢以得出函數 R
的輸出。

圖 4.5: 表頭表尾鍵值產生器之模擬波形

49

doi:10.6840/cycu202000498
4.2.3 函數 R 之階段法表格

「函數 R 之階段法表格」模組會使用來自上一級的表頭、表尾鍵值進行表
格查詢,完成函數 R 值計算。此模組的輸入有兩項,為表頭鍵值與表尾鍵
值;輸出則為一項函數 R 值。總架構圖 4.2中,為 k 個「表頭表尾鍵值產生
器」共同查詢一個「函數 R 之階段法表格」,因此前面提及的「一項表頭鍵
值」其實是 k 個表頭鍵值並排在一起送入本模組中,於 HDL 的撰寫則是將
k 個表頭鍵值並排在一個變數內做為輸入,另一個輸入「表尾鍵值」與輸出
「函數 R 值」也是進行了同樣的處理。
此處為方便說明模組內資料流,只以一組「表頭表尾鍵值產生器」模組
的輸入輸出模擬波形圖為範例,如圖 4.6所示,承接了上一小節「表頭表尾
鍵值產生器」圖 4.5中的輸出結果繼續說明。其中時間點 A、B 為查出表頭
值的模擬波形;時間點 C、D 為查出表尾值的模擬波形;時間點 E 為最終的
函數 R 輸出模擬波形,以下分點詳細說明。

• 時間點 A:上一小節的表頭鍵值輸出結果。

• 時間點 B:表頭值查詢完成,花費 1 個時脈。

• 時間點 C:上一小節的表尾鍵值輸出結果。

• 時間點 D:表尾值查詢完成,花費 1 個時脈。

• 時間點 E:函數 R 輸出值計算完成,花費 1 個時脈。將表頭值與表尾


值相加即得到函數 R 值輸出值。

從上一小節的表頭、表尾鍵值出現至函數 R 輸出值計算完成,共花費 2 個時
脈。函數 R 輸出值會送到下一級「速寫格子」中進行累加,並等待觀測區間
結束而讀取計算出估計熵值。

圖 4.6: 函數 R 之階段法表格模擬波形

50

doi:10.6840/cycu202000498
4.2.4 速寫格子

「速寫格子」模組為累計每筆觀測項目之函數 R 輸出值的地方,上一級所
產生的函數 R 輸出值會被分別累加至相對應的速寫格子當中。此模組為 P4
NetFPGA 專案所提供的外部函式,功能為儲存數值的記憶體模組,於資料
平面中可對其執行讀(Read)、加(Add)、寫(Write)三種動作,分別為讀
取記憶體數值、累加新數值至記憶體、寫入新數值;於控制平面可執行讀、
寫兩種動作,為讀取記憶體數值、寫入新數值。本論文的使用方式為在資料
平面使用「加」的動作,也就是觀測項目運算完畢時用於累加函數 R 輸出
值;而在控制平面則使用「讀」與「寫」兩種動作,當觀測區間結束時由軟
體端發送讀取訊號讀出記憶體中的值,讀取完畢後再寫入數值 0 做歸零,以
利下一個觀測區間的熵值估算。
圖 4.7為資料平面中累加函數 R 輸出值的模擬波形,此處為方便說明模組
內資料流,只以一個速寫格子作為範例。速寫格子中的初始值為 0,當第一
個觀測項目運算完畢時,上方紅色方框中的數值會累加至下方紅色方框中,
此處為 (−4) + 0 = −4;當第二個觀測項目運算完畢時,上方藍色圓框中的
數值會累加至下方藍色圓框中,此處為 (−3) + (−4) = −7,之後新的觀測項
目運算完畢時也為同樣過程。
至此為實現於硬體上的所有模組,下一小節會簡述軟體端如何與硬體端
進行溝通。

圖 4.7: 速寫格子累計過程模擬波形

51

doi:10.6840/cycu202000498
4.2.5 讀取韌體與軟體端之資訊熵值估算

於軟體端所要執行的動作為,當一觀測區間結束時,讀取速寫格子中的
數值,並使用演算法 2.1之第 9、10 步驟完成計算,得出最終的預估熵值。
P4 NetFPGA 專案提供了以 Python 程式語言撰寫的韌體,可輕易地與當初使
用 P4 程式撰寫的硬體溝通,只要以 Python 程式語言呼叫函式,並給予當時
P4 程式中定義的記憶體模組名稱,即可進行讀、寫動作。
本論文以 Python 程式語言撰寫軟體端之計算流程,將演算法 2.1之第 9、
10 步驟實現為函式,並配合 P4 NetFPGA 專案所提供的韌體讀取速寫格子數
值,然後將速寫格子數值送入估算函式中求出最後的估測熵值。此一觀測區
間結束後,同樣透過韌體寫入數值 0 進行歸零動作,開始下一個觀測區間的
估算。

52

doi:10.6840/cycu202000498
第五章

系統驗證與效能評估

5.1 測試環境

5.1.1 實驗拓樸

實驗拓樸如圖 5.1所示,發送端與接收端兩台電腦皆透過 10Gpbs 網路卡


連接到作為交換器的 NetFPGA­SUME 開發板上。由於是交換器,所以於實
驗開始前可使用 ICMP 回音檢查(ping 命令)確認發送端可連接至接收端。
當發送端開始播送封包,交換器即開始計算通過的封包資訊,並在每個觀測
區間結束時,由上方軟體端透過匯流排撈取交換器中的資料計算出估測熵
值。播送結束後可從接收端檢查是否有遺漏未接受到的封包,或是於交換器
上方的軟體端確認交換器收到的封包數量。

圖 5.1: 測試環境之實驗拓樸

53

doi:10.6840/cycu202000498
5.1.2 實機測試環境

實機測試環境如圖 5.2所示,本論文於一台電腦中安裝了一張 NetFPGA­


SUME 開發板與一張 10Gbps 的雙孔網路卡。雙孔網卡的兩個網路孔都接到
了 NetFPGA­SUME 開發板上,其中一個網路孔作為發送端,另一個網路孔
作為接收端,在電腦作業系統上以虛擬機器(Virtual Machine)的方式隔開
了這兩個網路孔,確保此兩個網路孔互相獨立,不因為它們實體是在同一張
網卡上而受影響。表 5.1為設備的型號規格。

圖 5.2: 實機測試環境

表 5.1: 使用設備規格表
設備 規格
作業系統 CPU RAM
電腦
Ubuntu 16.04.6 AMD A10 7850K 16GB
雙孔網路卡 Intel 82599ES 10­Gigabit SFI/SFP+

54

doi:10.6840/cycu202000498
5.1.3 封包流量檔

為模擬真實網路的流量特性,本論文使用 MAWI 骨幹網路 [28] 提供的流


量紀錄檔進行系統效能測試,這些封包流量檔(以下簡稱「流量檔」
)為擷取
自日本 WIDE[29] 計劃的的網路流量,由 MAWI(Measurement and Analysis
on the WIDE Internet)工作小組負責流量檔的資料庫維護,考量到隱私問題,
其刪除了封包的資料內容,也就是負載(Payload)的部份,只保留了封包標
頭(Header)資訊。
本論文使用了 2007 年每月第 1 日的封包流量檔,1 至 10 月共 10 個,
每個流量檔約 15 分鐘,取自計劃中的節點 F,其承諾的存取速率(CAR,
Committed Access Rate) 為 150Mbps, 而 實 際 承 受 的 速 率 為 100Mbps 至
1Gbps。流量檔本身包含了 IPv4 與 IPv6 的封包,然而本論文的熵值估測模
組只針對 IPv4 封包做統計,IPv6 封包不進行任何動作,故此處列出流量檔
中的 IPv4 封包統計資訊,如表 5.2所示。

表 5.2: 封包流量檔資訊
IPv4 來源端 IP 地址 目的端 IP 地址 來源端通訊埠 目的端通訊埠
封包流量檔名稱 檔案大小
封包數 種類數 種類數 種類數 種類數

200701011400 6,901,513 79,822 147,466 63,507 43,471 503MB

200702011400 20,012,626 126,215 217,160 64,587 61,928 1.5GB

200703011400 18,533,976 125,381 289,813 63,777 60,533 1.4GB

200704011400 9,413,521 98,401 164,225 62,734 57,121 689MB

200705011400 24,757,182 116,268 177,665 64,077 60,401 1.8GB

200706121400 23,319,343 165,564 262,563 64,677 61,818 1.7GB

200707011400 14,330,677 111,424 177,423 64,387 56,791 1.0GB

200708011400 21,822,515 208,495 426,937 64,678 64,210 1.6GB

200709011400 19,179,222 141,241 348,879 64,457 60,827 1.4GB

200710011400 29,659,012 187,626 350,587 64,631 63,899 2.2GB

55

doi:10.6840/cycu202000498
5.1.4 OSNT(Open Source Network Tester)

OSNT(Open Source Network Tester)[30] 是一個開放原始碼並以硬體實


現的網路測試系統,實現於 NetFPGA­10G 與 NetFPGA­SUME 開發平台上,
可產生 10Gbps 的封包流量,或是擷取網路流量下來觀測,以下為此兩項功
能的介紹。

• 流量產生器(Traffic Generator):可將使用者預先準備好的封包流量檔
進行重複且連續的播送,並能設定重複次數與播送速率。

• 流量觀測(Traffic Monitor):可擷取網路流量來觀測並測量其速率,且
可配合流量產生器蓋上時戳標籤進行封包傳送的延遲測試。

本論文使用 OSNT 對交換器進行封包轉送的延遲測試,5.3節「封包處理時


間與吞吐量與探討」將比較原生的「自學習交換器(Learning Switch)」專案
與加入熵值預估功能後的專案之封包轉送延遲時間和吞吐量(Throughput)

5.2 量測準確度驗證與探討

本論文根據圖 4.3下方修正後的架構,將 Clifford 熵值估算速寫演算法實


現為 P4 程式語言的外部函式,並且於 P4 NetFPGA 專案提供的範例「自學習
交換器(Learning Switch)」專案中,以 P4 程式語言的方式使用該外部函式
加入此熵值估算功能,但受限於 NetFPGA 開發板的硬體資源限制,本論文
僅於自學習交換器專案中實現了一個觀測項目「來源端 IP 地址」的熵值估
算功能。使用 P4 程式語言加入此熵值估算功能相對單純,只需使用三個外
部函式:熵值估算、速寫格子記憶體、封包計數記憶體,首先將標頭剖析器
(Parser)解析出的來源端 IP 地址資訊作為輸入送入熵值估算外部函式,再
將其輸出送往速寫格子記憶體累加,並增加封包計數記憶體之值即可。
本小節「量測準確度驗證與探討」所使用的網路拓樸與設備如 5.1.1、
5.1.2節所述,並使用了 5.1.3節提及之 10 個封包流量檔進行實機播送測試,
觀測區間大小為 30 秒,測量觀測項目「來源端 IP 地址」之熵值,結果衡量

56

doi:10.6840/cycu202000498
方式使用 3.2.1節「Kullback­Leibler 散度」。實驗結果如圖 5.3所示,橫坐標
為三個測試項目,其中「原論文法」為 2.3.1節之「Clifford 熵值估算速寫演
算法」實驗結果;「軟體模擬」為硬體實現的理論數值,使用的為 3.6節之參
數;「實機測試」則為實現於硬體後的實際機器測試結果。縱坐標則為 KL
散度,KL 散度統計的為 10 個流量檔產生的 300 個估測熵值,值愈小表示估
測結果愈接近精確熵值。對硬體實現而言,最理想的情況為「實機測試」結
果完全與「軟體模擬」相等,但從實驗結果可發現兩者略有差異,主要原因
有兩個,其一為播送封包流量檔的起始時間難以與觀測區間的起始計數時間
完全同步,而 MAWI 的封包流量每秒約有 7000 個,微小的時間差便會造成
不小的封包數量落差,使估測熵值有所不同;其二為封包流量檔的播送品質
取決於播送電腦本身狀況,若作業系統突然繁忙則可能會產生播送延遲或是
封包遺失(Packet Loss)的情況,使實際的觀測區間偏移。若使「實機測試」
接收到的封包與「軟體模擬」完全一樣,則兩者的輸出結果,也就是估測熵
值亦會完全相同。表 5.3呈現了 10 個流量檔中的其中一個實機測試結果,其
中「模擬估測熵值」等同圖 5.3中的「軟體模擬」項目,可觀察到每個觀測區
間接收封包數的差距。

圖 5.3: 實機測試結果比較

57

doi:10.6840/cycu202000498
表 5.3: 200701011400 封包流量檔實機測試結果
觀測時間(秒) 精確熵值 模擬估測熵值 實機測試熵值 理論接收封包數 實機接收封包數

30 0.497 0.455 0.456 230,204 223,143

60 0.485 0.493 0.492 231,792 230,430

90 0.493 0.487 0.487 235,385 235,186

120 0.498 0.481 0.481 223,395 223,606

150 0.492 0.449 0.455 227,728 227,504

180 0.487 0.433 0.436 228,793 228,598

210 0.478 0.438 0.439 241,490 241,055

240 0.485 0.476 0.475 227,723 227,714

270 0.487 0.469 0.466 230,025 230,047

300 0.489 0.459 0.461 237,637 237,929

330 0.487 0.445 0.446 246,143 245,934

360 0.493 0.445 0.443 229,772 229,570

390 0.489 0.461 0.463 232,359 231,304

420 0.479 0.437 0.437 242,889 243,673

450 0.488 0.439 0.440 229,731 229,042

480 0.468 0.421 0.420 255,665 256,014

510 0.483 0.436 0.430 230,265 229,951

540 0.491 0.438 0.445 223,018 223,979

570 0.489 0.441 0.441 220,947 219,471

600 0.492 0.450 0.449 217,327 218,234

630 0.485 0.445 0.447 227,038 225,616

660 0.487 0.454 0.454 225,887 226,958

690 0.479 0.443 0.442 228,676 227,051

720 0.487 0.421 0.423 229,429 230,110

750 0.487 0.443 0.445 232,896 232,392

780 0.484 0.450 0.451 224,618 225,625

810 0.495 0.450 0.449 217,811 218,051

840 0.487 0.454 0.454 220,259 219,561

870 0.482 0.453 0.451 226,710 225,802

900 0.477 0.453 0.459 225,901 228,035

58

doi:10.6840/cycu202000498
5.3 封包處理時間與吞吐量與探討

本小節對自學習交換器(下稱「原生專案」),和於 5.2節實現的交換器進
行封包轉送延遲與吞吐量測試。實驗方式為使用 OSNT 於交換器的一個網路
孔重複播送一個 64 位元組長度的封包 500 次,然後於交換器的另一個網路
孔接收封包,並由 OSNT 求出其平均延遲時間與吞吐量,這樣稱為一組,共
做了十組求其平均值,實驗結果如表 5.4所示,可發現兩者吞吐量幾乎一樣,
然而封包轉送的延遲時間本論文明顯耗時較長,所需時間較原生專案約多出
31.95%。
理論上而言,本論文的熵值估測模組只是純粹收集封包資訊然後計算熵
值,並不參與封包轉送路徑的決定,因此只需要在封包進入交換器時,拿取
旁路的封包資訊即可,不應增加任何轉送延遲時間,然而實驗結果卻顯示增
加了約 32% 的轉送延遲,透過合成軟體檢視其合成電路架構後發現,SDNet
在編譯時會將外部函式放在封包轉送的管線化路徑上,外部函式亦為管線化
設計,因此增加的每一個外部函式皆會使整個管線化路徑變長,就如同樣的
水流速度經過愈長的水管花的時間會愈多,結果導致了封包轉送延遲時間增
加。圖 5.4呈現了合成後專案內部所使用的小模組,一開始封包會先經由剖
析器(TopParser)解析出封包標頭資訊,然後送往管線模組(TopPipe_lvl)
對封包進行層層處理,最後由反剖析器(TopDeparser)組合封包並準備送
出,其中管線模組為本小節關心的部份,透過檢視電路架構發現本論文加入
的外部函式皆實現在管線模組中,可觀察到圖片左方之原生專案只有三組
TopPipe_lvl,如紅方框所示;而圖片右方為本論文的實現,藍色虛線框為加
入的三個外部函式(速寫格子記憶體、封包計數記憶體、熵值估算),可發
現紅方框中多出了額外三階 TopPipe_lvl,說明加入的外部函式使管線模組的
層數增加了,而層數增加即意味著延遲時間的增加。
使用高階軟體語言實現硬體雖然方便,但其代價往往伴隨著效能的降低。
本論文的熵值估測模組並不參與封包轉送過程,以旁路方式拿取封包資訊
即可,因此實際上不應拖累交換器效率。由於本模組為耗費 16 個時脈的管

59

doi:10.6840/cycu202000498
線化設計,而 NetFPGA­SUME 的時脈週期為 6.25 奈秒,在此條件下,每筆
封包資訊進入模組至運算完畢的理論延遲時間為 100 奈秒;而若以最小封
包長度 64 位元組計算,吞吐量的理論極限值為 107.52Gbps,實際上可應付
100Gbps 的高速網路流量監測。

表 5.4: 封包轉送之延遲與吞吐量測試
測試項目 封包轉送之延遲時間(ns) 單一網路孔之吞吐量(Gbps)
原生專案 2,044.332 8.891
本論文 2,697.471 8.978

圖 5.4: 自學習交換器專案內部使用模組

60

doi:10.6840/cycu202000498
5.4 硬體使用資源與探討

本節會比較自學習交換器的原生專案,與本論文實現之硬體使用資源,
並於下個小節探討階段法表格數量的資源使用量差異。
硬體使用資源比較如圖 5.5所示,左方為原生專案,右方為本論文。經
過比較可得知,本論文最主要的使用資源為 LUT(Lookup Table,查找表)、
FF(Flip Flop ,正反器)、BRAM(Block RAM,區塊記憶體)三者,其中又
以正反器使用資源最多,約增加 18%;其次為區塊記憶體,約增加 15%;最
後為查找表,約增加 7%。
圖 5.6左方為合成工具所報告之時序餘裕度,其中最差負餘裕度(WNS,
Worst Negative Slack)大於零表示表示全路徑皆通過;總負餘裕度(Total
Negative Slack)等於零表示設計滿足時序要求。由左圖可得知資料準備時間
(Setup Time)與資料保持時間(Hold Time)皆符合時序要求。圖右方為本論
文基於原生專案所實現的交換器於 NetFPGA­SUME 上的功耗資訊,總功耗
為 9.82 瓦,而原生專案為 8.104 瓦,約多出 21% 功耗。
雖然硬體使用資源看似還剩餘很多,足以實現其他觀測項目之估測熵值
運算,但在合成的時候,時序餘裕度要求會無法達成,這說明本論文硬體設
計可能尚須優化,此處僅先實現單一觀測項目以驗證構想是否可行。

圖 5.5: (左)原專案與(右)本論文之硬體使用資源

61

doi:10.6840/cycu202000498
圖 5.6: 本論文之時序餘裕度與功耗表現

5.4.1 階段法表格數量之硬體實現探討

4.2節「外部函式之熵值估算速寫演算法模組架構」提及的熵值估測模組
理想架構為 20 個「表頭表尾鍵值產生器」模組全部共用一張函數 R 之階段
法表格(以下簡稱為「階段法表格」),如圖(上)理想整體架構與(下)修
正後整體架構上方所示,是最節省硬體資源的配置,然而在實際合成電路
時,會發生時序餘裕度無法通過的情況,經推測可能是在繞線時產生困難,
於是退而求其次使用多張相同的階段法表格處理輸入鍵值查詢,讓每張階段
法表格的輸入負載降低。隨著階段法表格數量的增加,合成軟體顯示時序餘
裕度無法通過的問題得到解決,此時會發生合成軟體顯示時序餘裕度通過,
但實機測試時某幾個速寫格子數值會與軟體模擬結果不符合的情況。經過仔
細檢查與優化各個模組,最後在檢查最差負餘裕度(WNS)路徑時發現,即
使合成軟體顯示了時序餘裕度通過,但只要階段法表格電路的最差負餘裕度
剩餘量太低,實機結果依然會出錯。最終對階段法表格進行優化,移除了階
段法表格的重置數值(Reset)功能,畢竟其內容本來就是唯讀的,此優化動
作大幅降低了正反器與查找表的使用量,也解決了合成軟體顯示時序餘裕度
通過但實機測試錯誤的問題,然而即使優化過後,理想架構的時序餘裕度依
然無法通過,經過幾次測試後,最後決定使用 5 張表格,架構如圖(上)理
想整體架構與(下)修正後整體架構下方所示。
圖 5.7呈現了各階段法表格數量的硬體使用資源,除了最右下角的「(最
終優化)階段法表格數量 5 張」為圖 5.5右方之最終實現版本,有進行階段

62

doi:10.6840/cycu202000498
法表格優化,其餘五項皆為進行優化前的合成結果,該五項當中只有「階段
法表格數量 20 張」實機測試正確。於圖 5.7可觀察到階段法表格數量的增加
只影響正反器的使用量,每多一張階段法表格就約增加 0.3%,而最終優化
後的 5 張階段法表格正反器使用量甚至比 1 張表格還要少。

圖 5.7: 階段法表格使用數量之硬體資源比較

63

doi:10.6840/cycu202000498
第六章

結論與未來展望

6.1 結論

本論文基於 Clifford 熵值估算速寫演算法(下稱「原論文法」


),提出了一
個使用少量記憶體但效能與之相當的方法於 FPGA 上實現,可應用於高速網
路環境即時估測熵值,其透過修改原論文法中較複雜的函數運算,對函數輸
入值進行取樣減少其輸出值數目,再利用函數分佈具有週期的特性,進行第
二次取樣化簡,對比直接實現原論文法,能夠讓記憶體使用量少於其億分之
一,約需要 3.51KB。
於硬體實現,本論文基於 P4 NetFPGA 專案,將此熵值估測方法包裝成
P4 程式語言之外部函式,並使用專案內部的交換器範例,以 P4 程式語言實
現了一具有熵值估測功能的交換器,經實測其封包轉送延遲時間約為 2,697
奈秒,較原生專案約多出 31.95% 的延遲時間,單一網路孔的吞吐率量約為
8.9Gbps,然而此實驗受限於 SDNet 編譯實現的方式,理論上本論文熵值估
測模組不會參與封包轉送路徑決策,故不應增加轉送延遲時間;另外受限於
使用的 NetFPGA 開發板,本模組理論吞吐量應可達 100Gbps。
於硬體資源使用量,相較於原生專案,單一觀測項目所增加的使用量不
到 20%,但若再加入其他觀測項目於合成時會遇到時序餘裕度問題,說明硬
體設計可能尚須優化,以加入更多觀測項目使整個熵值分析更加完整。若本

64

doi:10.6840/cycu202000498
模組不實現為外部函式供 P4 程式語言使用,而是以 HDL 直接實現於交換器
中,應可加入更多觀測項目的熵值估算功能。

6.2 未來展望

6.1節「結論」總結了本論文的分析與貢獻,本節將闡述本論文的未來研
究方向。

6.2.1 硬體架構優化

目前於硬體只實現了單一觀測項目的熵值估算,而結論亦提及若加入其
他觀測項目將會遇到合成時序餘裕度問題,代表硬體設計方面可能還須優
化。除了本論文實現之熵估測外部函式,也有用到用來存取速寫格子與封包
計數的記憶體外部函式,其為專案提供之範例,資源使用率亦不少,或許也
可從此方面進行優化。

6.2.2 熵值對演算法參數的影響

本論文選擇演算法參數的指標皆根據使用 10 個封包流量檔的測試結果,
這些流量檔的封包資訊熵數值範圍約在 0.3 至 0.5 之間,目前尚未對較極端
的熵值進行完整的測試,因此無法確定本論文選擇的演算法參數於熵極端值
情況下是否適用。若能收集其他熵值分佈的封包流量檔進行驗證,應可使參
數選擇更有說服力。

6.2.3 巨量速寫格子數目之潛力

在測試原論文法之速寫格子數目 k 值對於熵值估測精準度的影響時,發
現在 k 值極大時能獲得非常優秀的精準度,約在 k = 700 時能達到與精確熵
值相差三位小數的誤差,然而巨大的 k 值難以直接實現於硬體,利用本論文
的方法也很難達成。若能以另一種不同的方式實現巨大 k 值的計算,將能獲
得比本論文更佳優秀的結果。

65

doi:10.6840/cycu202000498
6.2.4 Ping Li 壓縮計數演算法

2.3.2節「資訊熵值估算演算法相關研究」提及之 Ping Li 的壓縮計數演算


法亦可用於估測夏儂熵,其計算流程與 Clifford 熵值估算速寫演算法非常相
似,或許可利用本論文提出之階段法與系統架構進行實現。然而尚未對該演
算法進行完整的模擬測試,不知其效能如何,是個值得研究的方向。

66

doi:10.6840/cycu202000498
參考資料

[1] P. Bereziński, B. Jasiul, and M. Szpyrka, “An entropy­based network anomaly


detection method,” vol. 17, no. 4, pp. 2367–2408. [Online]. Available:
http://www.mdpi.com/1099­4300/17/4/2367

[2] C.­K. Han and H.­K. Choi, “Effective discovery of attacks using entropy of
packet dynamics,” vol. 23, no. 5, pp. 4–12, conference Name: IEEE Network.

[3] Y. Kanda, R. Fontugne, K. Fukuda, and T. Sugawara, “ADMIRE:


Anomaly detection method using entropy­based PCA with three­step
sketches,” vol. 36, no. 5, pp. 575–588. [Online]. Available: http:
//www.sciencedirect.com/science/article/pii/S0140366412003994

[4] C. Callegari, S. Giordano, and M. Pagano, “Entropy­based network anomaly


detection,” in 2017 International Conference on Computing, Networking and
Communications (ICNC), pp. 334–340.

[5] V. Bartos and M. Žadnik, “Hardware precomputation of entropy for anomaly


detection,” in 2011 ACM/IEEE Seventh Symposium on Architectures for Net­
working and Communications Systems, pp. 219–220.

[6] A. Chakrabarti, K. D. Ba, and S. Muthukrishnan, “Estimating entropy and


entropy norm on data streams,” vol. 3, no. 1, pp. 63–78, publisher: A K Peters,
Ltd. [Online]. Available: https://projecteuclid.org/euclid.im/1175266368

67

doi:10.6840/cycu202000498
[7] B.­Y. Choi and S. Bhattacharyya, “Observations on cisco sampled NetFlow,”
vol. 33, no. 3, pp. 18–23. [Online]. Available: https://doi.org/10.1145/
1111572.1111579

[8] P. Clifford and I. A. Cosma, “A simple sketching algorithm for entropy


estimation.” [Online]. Available: http://arxiv.org/abs/0908.3961

[9] Cisco annual internet report ­ cisco annual internet report (2018–
2023) white paper. Library Catalog: www.cisco.com. [Online].
Available: https://www.cisco.com/c/en/us/solutions/collateral/executive­
perspectives/annual­internet­report/white­paper­c11­741490.html

[10] B. A. Khalaf, S. A. Mostafa, A. Mustapha, M. A. Mohammed, and W. M.


Abduallah, “Comprehensive review of artificial intelligence and statistical ap­
proaches in distributed denial of service attack and defense methods,” vol. 7,
pp. 51 691–51 713, conference Name: IEEE Access.

[11] N. Bonelli, C. Callegari, and G. Procissi, “A probabilistic counting framework


for distributed measurements,” vol. 7, pp. 22 644–22 659, conference Name:
IEEE Access.

[12] Introduction to cisco IOS NetFlow ­ a technical


overview. Library Catalog: www.cisco.com. [Online]. Avail­
able: https://www.cisco.com/c/en/us/products/collateral/ios­nx­os­software/
ios­netflow/prod_white_paper0900aecd80406232.html

[13] sFlow.org ­ making the network visible. [Online]. Available: https://sflow.org/

[14] J. Mai, C.­N. Chuah, A. Sridharan, T. Ye, and H. Zang, “Is sampled
data sufficient for anomaly detection?” in Proceedings of the 6th
ACM SIGCOMM conference on Internet measurement, ser. IMC ’06.
Association for Computing Machinery, pp. 165–176. [Online]. Available:
https://doi.org/10.1145/1177080.1177102

68

doi:10.6840/cycu202000498
[15] A. Lall, V. Sekar, M. Ogihara, J. Xu, and H. Zhang, “Data streaming
algorithms for estimating entropy of network traffic,” vol. 34, no. 1, pp.
145–156. [Online]. Available: https://doi.org/10.1145/1140103.1140295

[16] N. Alon, Y. Matias, and M. Szegedy, “The space complexity of approximating


the frequency moments,” in Proceedings of the twenty­eighth annual ACM
symposium on Theory of Computing, ser. STOC ’96. Association for
Computing Machinery, pp. 20–29. [Online]. Available: https://doi.org/10.
1145/237814.237823

[17] P. Li and C.­H. Zhang, “A new algorithm for compressed counting


with applications in shannon entropy estimation in dynamic data,” in
Proceedings of the 24th Annual Conference on Learning Theory, pp.
477–496, ISSN: 1938­7228 Section: Machine Learning. [Online]. Available:
http://proceedings.mlr.press/v19/li11a.html

[18] N. McKeown, T. Anderson, H. Balakrishnan, G. Parulkar, L. Peterson,


J. Rexford, S. Shenker, and J. Turner, “OpenFlow: enabling innovation
in campus networks,” vol. 38, no. 2, pp. 69–74. [Online]. Available:
https://doi.org/10.1145/1355734.1355746

[19] P. Bosshart, D. Daly, G. Gibb, M. Izzard, N. McKeown, J. Rexford,


C. Schlesinger, D. Talayco, A. Vahdat, G. Varghese, and D. Walker, “P4:
programming protocol­independent packet processors,” vol. 44, no. 3, pp.
87–95. [Online]. Available: https://doi.org/10.1145/2656877.2656890

[20] Y. Kim, D. Suh, and S. Pack, “Selective in­band network telemetry for over­
head reduction,” in 2018 IEEE 7th International Conference on Cloud Net­
working (CloudNet), pp. 1–3.

69

doi:10.6840/cycu202000498
[21] NetFPGA­SUME virtex­7 FPGA development board. Library Catalog:
www.xilinx.com. [Online]. Available: https://www.xilinx.com/products/
boards­and­kits/1­6ogkf5.html

[22] Department of computer science and technology –course pages 2017–


18: High performance networking –course materials. [Online]. Available:
https://www.cl.cam.ac.uk/teaching/1718/P51/materials.html

[23] NetFPGA/NetFPGA­SUME­public. Library Catalog: github.com. [Online].


Available: https://github.com/NetFPGA/NetFPGA­SUME­public

[24] L. Wirbel, “Xilinx SDNet: A new way to specify network hardware,” p. 10.

[25] NetFPGA/p4­NetFPGA­public. Library Catalog: github.com. [Online].


Available: https://github.com/NetFPGA/P4­NetFPGA­public

[26] A. Koay, I. Welch, and W. K. G. Seah, “(short paper) effectiveness of entropy­


based features in high­ and low­intensity DDoS attacks detection,” in Advances
in Information and Computer Security, ser. Lecture Notes in Computer Sci­
ence, N. Attrapadung and T. Yagi, Eds. Springer International Publishing,
pp. 207–217.

[27] “Linear congruential generator,” page Version ID: 956137747. [Online].


Available: https://en.wikipedia.org/w/index.php?title=Linear_congruential_
generator&oldid=956137747

[28] MAWI working group traffic archive. [Online]. Available: https://mawi.wide.


ad.jp/mawi/

[29] WIDE. [Online]. Available: http://www.wide.ad.jp/

[30] OSNT. [Online]. Available: http://osnt.org/

70

doi:10.6840/cycu202000498

You might also like