我有一个内核模块,该模块从netfilter钩子读取数据包并用于sk_buff
访问数据。
我观察到的是,当数据sk_buff->len
包以较低的速率传入时,行为正常,但是当数据包以较高的速率(1Gbps等)到达时,则sk_buff->len
少数数据包开始增加(始终是8的倍数)。
我正在重放的数据也有零散的数据包。零散的数据包是否被添加到相同的数据包中,sk_buff
从而导致数据包增加sk_buff->len
?如果是,如何sk_buff
知道堆栈以及在什么时候?
有人可以解释为什么会发生这种情况以及如何解决它。对某些文档的任何引用也会有所帮助。
出现此现象的原因是GRO(通用接收卸载)。与TSO或GSO一样,它是在接收端的一种优化。它将具有相同tcp和ip标头的数据包附加到一个大skb缓冲区中,以使内核处理更加容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句