TGTGInsighttelegram intelligenceLIVE / telegram public index
Post content
Post content
在回头看去年六月发现的 tcp checksum 问题的时候 ( https://t.me/c/1459082815/120 ),我发现 tcp checksum 居然是在 netdev 上做校正的,而 ipv4 checksum 在 skb 生成之时就是准确的。这意味着在 ingress 方向的 tc 和 xdp bpf 看到的 skb 无论如何都是错误 checksum,因为修正校验和的函数 skb_csum_hwoffload_help 在 tcf_classify 之后。 大家都从书本上学过 tcp checksum 不正确会被内核扔掉,我对此的理解是 tcp segment 在生成之时 checksum 就算好了,然而并不如此。错误的理解在仔细排查 bug 时会变成干扰项,因为你不知道这是异常与否。 我一直想搞一个 Linux TCP/IP 的观测系列,名字就叫“真的吗?我不信”。那些大家背得滚瓜烂熟的网络八股,以为自己理解了,其实并没有,至少我不理解。你真的见到过 checksum 异常时被内核扔掉吗?你亲眼观测过滑动窗口对用户态 IO 的影响吗?那些网络上的 iptables chains 执行顺序真的就像他们所说的那样吗?在现代 Linux 网络下,bpf 可以 redirect skb,一个包可以多次遍历内核栈,又有哪些情况和旧时代不同了?我唯一知道的是我一无所知。 以上只是口嗨,紧接着我就开始打游戏。。。