网卡靠这个哈希决定一个包进哪条收包队列。它没有查表、没有乘法,只有移位和异或—— 下面逐位走一遍,看那个 32 位窗口怎么在 key 上滑过去。
默认值是微软 RSS 规范里的第一组测试向量,四元组结果应为 0x51ccc178。
Toeplitz 矩阵每一行都是上一行左移一位,所以整个矩阵只用存这 40 字节。框住的 32 位就是当前行,每处理一个输入位它向右滑一格。
同一条 TCP 连接的两个方向,五元组是对调的。 网卡对每个方向独立算哈希——如果两个方向算出不同的值,它们就进不同的队列,被不同的核处理。 需要看双向流量的场景(NAT、状态防火墙、流量分析)会因此拿不到完整的一条流。
队列号 = reta[ hash & 0x7F ],reta 按轮转填充。
len + 4 字节。
最后一个输入位要用到第 32 + len*8 - 1 位 key。IPv6 四元组是 36 字节输入,
所以标准 key 恰好 40 字节——这个数字是被最长的输入定死的,不是随便取的。