聊一聊sockmap 以及ebpf 實例演示


eBPF實質上是一個內核注入技術

  • 用戶態可以用C來寫運行的代碼,再通過一個Clang&LLVM的編譯器將C代碼編譯成BPF目標碼;
  • 用戶態通過系統調用bpf()將BPF目標碼注入到內核當中,並創建必要的eBPF-maps。eBPF具有用作socket filter,kprobe處理器,流量控制調度,流量控制操作,tracepoint處理,eXpress Data Path(XDP),性能監測,cgroup限制,輕量級tunnel的程序類型。
  • 將加載的程序attach到系統中。根據不同的程序類型attach到不同的內核系統中。程序運行的時候,啟動狀態並且開始過濾,分析或者捕獲信

 

對於bpf系統調用內核實現可以參考:https://www.csdn.net/gather_2d/MtjaQg2sMzIwMy1ibG9n.html   kernel/bpf/syscall.c為bpf的系統調用

說正題:Netronome的Jakub Kicinski和Nic Viljoen發表了標題為“eBPF / XDP硬件卸載到SmartNIC”  

  • 什么是XDP
    • 即eXpress Data Path,它其實是位於網卡驅動程序里的一個快速處理數據包的HOOK點,最顯而易見的是,可以在如此低的層驅動鏈路層面上把數據包丟棄或者直接處理掉。如果面臨DDoS攻擊,采用這種方式的話,數據包就沒有必要上升到Netfilter層面再被丟棄了。也就是XDP允許數據包在進入Linux協議棧之前就能被處理,沒必要到tcp ip 協議棧處理。
     
  • 怎樣知道這個報文要丟棄還是直接處理完回復再或者是到tcpip協議棧處理呢?
    • 答案就是:eBPF!這相當於在網卡驅動層面運行了一個eBPF程序
     

是不是發現ebpf這個hook想干嘛就干嘛???簡直是為所欲為!!!

https://lwn.net/Articles/800606/    目前gcc 還不支持ebpf不過很快應該就可以了。

 先編寫代碼 編寫完在上傳,順便 編寫自己的網絡事件庫

等着。。。。。。。。。。。。。。。。

今天寫了一部分。。

2020-04-25 記錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM