作業內容:數據中心的數據包異常檢測
自我介紹:
-
鄭林瀅,032002342,計算機3班
-
性格
-
外向活潑,不怕生。常常主動開啟話題,與人交流,icebreaker實錘
-
有點懶。比如做的ppt總是白底,比如其實這篇博客可以搞得更花里胡哨但我沒有,還義正言辭這是極簡主義;但是該做的事不會偷懶,必要的事情回去做,對自己有好處有收獲的事情會額外去做
-
一點點完美主義,對自己要求有點高。有時做事情會更希望做到盡善盡美,周到而沒有漏洞;但是這和我懶的本性是相違背的,這時候就會根據事情本身權衡
-
遇事急躁,但一直在努力改變。比如當遇到復雜事情的時候就把事情細分,知道要做什么事、怎么做,以降低焦慮
-
會思考,會規划,想得多,也想得細。比如就算是看網絡上的口水小說也會思考文字之后的意義;比如這次作業布置伊始就開始規划每天的進度,然后准確踩在ddl上提交作業;比如如今十八歲就已經想好未來十年的規划,雖然未來變數極大,但未雨綢繆總是讓人心安的
-
善於總結。看到大段材料總是想把它們簡化,找共同點,或得出一個相對使用得結論,可能也只是因為懶,想找到規律性的東西來囊括一切
-
身上有一股狠勁。比如說今天給自己布置的任務沒完成,就硬要求自己加班加點開夜車,寫完才睡覺,但是當然也會結合自身情況調整任務,以繼續明天高效學習
-
之前做事情總是三分熱度,學琴也是,學刻橡皮章也是,也可能是因為對這些東西不是真正喜愛,看小說的興趣倒是從來沒有放下過
-
-
掌握的技術:暑假看翁愷老師網課學了C語言入門,之前會在csdn上寫總結博客,其他課程跟着老師的進度學習,通過這次作業學會了github,如何查找資料,如何自主學習和一些網絡方面的知識等等(后面會詳細寫到),收獲良多
-
現在說研究方向個人感覺為時過早,因為我現今對於這個領域的了解有限,但隨着學習的加深,應該會有自己的想法。通過這次作業,我對於所謂科研有了更深的了解,我想我能在實驗室學到發現和解決問題的方法,創新、提出idea的能力以及自主學習的經驗等等
作業鏈接
虛擬機 + ubuntu 安裝過程
虛擬機+Ubuntu安裝過程
(我的安裝過程如同教程所示,就不再詳細列出,私以為更重要的是該過程的收獲(在下方列出))
- 心得/收獲:
經過之前GitHub的學習,遇到新事物時更有方向地去搜索相應的資源(csdn/b站/百度)
看到難懂的步驟會靜下心反復多看,而不是如之前一樣看不懂就焦慮,一直無法成功的操作會去搜索博客尋找解決方法
通過Ubuntu的安裝和之前GitHub的學習,對命令行的操作有了初步了解
雖然過程磕磕絆絆,但是安裝成功后很有成就感
tcpdump抓包過程和數據清洗過程
-
心得/收獲:
可以耐住性子看長篇的教程
對於命令行操作更加熟悉 -
不足:
在學TCPdump的時候意識到作業的核心應該是提出檢測異常數據的方法,GitHub、虛擬機和tcpdump只是執行idea的手段,於是加快學習的速度,故tcpdump的實踐偏少
檢測異常數據的方法
異常數據:
類似二分法
(靈感來源於論文Lecture 7: Heavy Hitters: the Count-Min Sketch中一個配圖)
假設有1到n個數據包
先對半分,分別統計兩個部分數據包的總字節數
取字節數大的一部分,再次對半分,再分別統計兩部分數據包的字節數
重復以上步驟,直到只剩下最后一個數據包
此數據包即為heavy hitter
- 優點:相比於遍歷,簡化了一半的查找量
- 不足:
- 面對大量數據還是要花費大量時間
- 只能查詢一個heavy hitter,而flow里可能不止一個heavy hitter,達不到檢測top k的目的
- 檢測精確度不夠:
若8個數據包(1-8),大小分別為1,1,1,100,30,30,30,30
分組[1,1,1,100][30,30,30,30](A B)
假設包長大於60即為heavy hitter,則第4個數據包即為heavy hitter
但由於二分取總字節數大的部分,而A組(103)小於B組(120),取數值較大的B組,導致無法檢測出真正的heavy hitter
- 總結:實用性低,需要改進
Sketch
對Sketch的了解:
CM-Sketch
MV-Sketch
-
為什么用sketch:
- 題目背景中要求檢查高頻率、大數據量的數據包,若是用數組一個一個儲存數據不現實(單個數據數據量大,數據總數多,需要耗費大量存儲空間),而用哈希則可以簡化數據的紀錄,符合內存限制
- 有實時性要求,若用數組遍歷則容易超時,而哈希將多個相同數據投入一個桶中(合並),只需查詢桶而不用查詢單個數據
-
檢測重流:數據總數m,找top k
- cm-sketch:遍歷數組,找計數器值大於k/m的桶
- mv-sketch:遍歷數組,找總計數器值vi,j大於k/m的桶,再對這些桶中的重流候選計數器進行查詢,滿足Ci,j>m/k的即為重流
-
cm-sketch與mv-sketch比較:
若有r個哈希函數,每個哈希函數中有w個桶- 時間上:cm遍歷查詢rw次,mv遍歷查詢r²w次
cm所花時間更少 - 內存上:cm每個桶中有一個計數器,mv用靜態內存,每個桶中兩個計數器,一個重流候選
- 特性上:mv可逆,即能得到重流的信息(五元組等),同時mv經歷兩遍查找,數據更准確
cm查詢速度快,卻不能保存重流數據
- 時間上:cm遍歷查詢rw次,mv遍歷查詢r²w次
-
綜上,由於要找到top k個重流,故選用mv-sketch
學習了哪些新的技能/知識:
- 學會GitHub,裝了虛擬機,TCPdump的安裝和一些命令,命令行初體驗
- 當接觸陌生名詞時,積累到一定的學習經驗,歸納了查找/學習的順序
- 查東西的時候先百度,知道這個東西是有什么作用 ,是干什么的(縮句成什么是什么,比如tcpdump是網絡數據采集分析工具),具體是干什么的(定語)掠掉,在后續的深入了解中會知道的。(不然看到陌生的術語會頭大然后不想讀下去)
- 深入了解:先百度找博客,讀不懂去b站找視頻講解(在博客和b站之間反復橫跳)
- 接觸英文論文,了解文章結構,對於某些公式的理解存在困難,但隨着閱讀過程有所緩解
- 習慣靜下心來閱讀長篇文章,遇到困難面向瀏覽器學習
-參考資料:
網頁:
GitHub:https://www.cnblogs.com/jjlee/p/10305194.html
虛擬機安裝:https://blog.csdn.net/zhaoxizxzx/article/details/109274858
tcpdump:https://blog.csdn.net/zhaoxizxzx/article/details/109275325
cm-sketch:
https://baike.baidu.com/item/哈希函數/9796422?fr=aladdin
https://blog.csdn.net/pipisorry/article/details/64126199
mv-sketch:https://www.sdnlab.com/23514.html
論文:
CS369G: Algorithmic Techniques for Big Data Spring 2015-2016
Lecture 7: Heavy Hitters: the Count-Min Sketch
Prof. Moses Charikar Scribes: Nicole Wein
MV-Sketch: A Fast and Compact Invertible Sketch
for Heavy Flow Detection in Network Data Streams
Lu Tang1, Qun Huang2, and Patrick P. C. Lee1
1Department of Computer Science and Engineering, The Chinese University of Hong Kong
2State Key Lab of Computer Architecture, Institute of Computing Technology, Chinese Academy of Sciences
問題
GitHub:
-
初始化用戶名和郵箱的時候一直不成功,后來將我的命令一個字一個字對照教程發現--之前少了空格,從此再輸入命令行特意關注空格
git config --global user.name "YOUR NAME" git config --global user.email "YOUR EMAIL"
-
將本地倉庫上傳時,提示先是說缺少.git倉庫,而我的文件夾里卻有.git目錄,搜索之后又出現更多錯誤提示信息
最后是重新創建了一個本地倉庫才順利上傳,沒弄明白之前不能上傳的原因
虛擬機&Ubuntu
- 在官網下VMware的時候一直找不到windows版本,后來發現是因為瀏覽器自動將英文網頁翻譯成中文,windows被翻譯成窗口渾然不覺
tcpdump
- 用apt-get命令安裝時出現錯誤提示
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
搜索博客之后用rm -rf命令也無法解鎖,后來模仿某些博客中sudo rm -rf命令,用sudo apt-get命令強制安裝
一個專業問題
- 為什么靜態內存會節約開銷?
在看mv-sketch的時候提出的問題,網上找不到解釋,故現在還沒解決
在csdn上寫過程總結時候的問題
-
學習一個新名詞時,自己看懂了但沒辦法在博客上把事情講明白:
當剛接觸到一個新名詞時,搜索博客學習總是看得雲里霧里,但是當自己弄懂了,寫博客的時候會發現,我會着重解釋自己在學習過程中看不懂的部分,但如果是一位對這個知識完全陌生的學習者來看我的總結博客,也會看得雲里霧里,也就是我沒有把所有事情講得通俗易懂,講明白;等過一段時間之后自己再看,也會存在理解問題:“我當初是怎么理解的?” -
解決方法:不要偷懶,把博客寫明白,現在以為容易理解的東西幾個月之后或許會產生理解問題
總結:
-
這次作業在我看來不是特別滿意,總的來說就是時間分配不恰當導致時間不夠,同時思考也不夠:
- 沒有給出代碼實現:留給代碼的時間很少,本來想去GitHub上找個輪子跑一跑的,可是現在作業提交迫在眉睫,一會兒寫完還有時間就去試一試
- idea部分還可以繼續優化,但時間倉促,沒有做到,對於所給的方法也沒有給出誤差分析
- 花了幾天的時間看論文,剛開始不挑重點從頭開始看,后來有所側重但是看一點忘一點,沒有及時總結,對論文所給出的方法的思考也不夠
- 有了解計算機網絡相關內容,但沒有總結
-
但是從此次作業中我學到了很多:
- 從GitHub到虛擬機到tcpdump,越來越適應跟網上的經驗貼學習,對於長篇文章也可以耐住性子細心閱讀
- 首次接觸到英文論文,認識到英語學習的重要性;從論文中學到了一些相關的術語,慢慢學會理解文章中的公式;了解文章的行文結構,知道哪里skim哪里scan哪里細讀研究