博客 / 列表

MageekChiu - eBPF HashMap 與 padding 的坑

前言 上一篇文章《ebpf-go 初體驗》中,我們提到了一個小插曲,就是當 map 的 key 這樣寫的時候 struct tuple key = {ip, bpf_ntohs(sport)},map 的 key 看起來會重複,有些令人詫異,於是我用另外一台機器 B 測了下(內核 6.6,clang 14.0.0)。發現了報錯:"invalid indirect read from stack R

bpf , hashmap , 編程技巧 , padding , c

MageekChiu - 容器網絡中的 Iptables 包路徑

前面我們分析了《數據包如何遊走於 Iptables 規則之間》,那麼在容器網絡這種更復雜的場景中數據包是如何在 iptables 的各個規則之間遊走的呢? 為了搞清楚這個問題,我們首先有一些前置概念需要了解。 前置概念 network namespace namespace 是容器隔離的基礎,而 network namespace 則使得每個 namespace 獨享 IP address、por

iptables , Linux , 雲原生 , 網絡

MageekChiu - 數據包如何遊走於 Iptables 規則之間?

在前文《Linux 路由三大件》中,我們提到了 iptables 可以修改數據包的特徵從而影響其路由。這個功能無論是傳統場景下的 防火牆,還是雲原生場景下的 服務路由(k8s service)、網絡策略(calico network policy) 等都有依賴。 雖然業界在積極地推進 ipvs、ebpf 等更新、更高效的技術落地,但是出於各種各樣的原因(技術、成本、管理等),iptables 仍然

trace , iptables , Linux , 網絡

MageekChiu - Linux 路由三大件

對於 Linux 網絡,好奇心強的同學一定思考過兩個問題: 當我們發出一個包的時候,Linux 是如何決策該從哪個網卡(假設有多個網卡)、哪個下一跳發出這個包,用什麼 IP 作為 source...... 當 Linux 收到一個包時,又是如何決定往哪裏送的,是發送給本地程序、其他虛擬接口,還是轉發到其他機器...... 今天,我們就來分析這兩個問題的核心所在:路由。 我們學習計算機網絡的

iptables , Linux , 路由