qemu-kvm:虚拟网络丢包实例UDP:virtionet-tun-bridge-tun-virtionet

这个问题发生在
RHEL-7客户端虚拟机;RHEL-8作为主机系统;
同时RHEL-7的UFO打开;

此时可能出现小范围的打包丢失情况;怎么个小范围内,也就是某个大小值(UDP长度大约是1478)左右四个字节内的变化。

后续处理时,在bridge中做is_skb_forwardable时,
包UDP长度1478字节左右有那面四个字节范围内的包,会被一种逻辑给吃掉,传递不下去。这种包被判定为,既不属于GSO的包,同时整个长度还大于出端口的MTU值,然后被丢掉。
为什么会出现这种情况呢?如果去看相应内核版本的changelog,我们可以发现如下的两个commi;关于gso的一些性能优化;作用就是对小包做了判断,如果是小包,就不要走GSO的逻辑。

主机内核版本带有如下两个commit
- net: be more gentle about silly gso requests coming from user (Paolo Abeni) [2018437]
- net: check untrusted gso_size at kernel entry (Paolo Abeni) [2018437]

因为这两个改动,牵扯到一处改动;作用是对于小包,没有必要走入GSO的逻辑;
/* Too small packets are not really GSO ones. */
if (skb->len - p_off > gso_size) {

猜你喜欢

转载自blog.csdn.net/qq_36428903/article/details/126550443