问题定位
在Linux
虚拟机中用tcpdump
、Wireshark
等工具抓包的时候,发现length
超过了MTU
1514( 6+6+2+1500)
解决方案
ethtool -k eth0 #查看LRO/GRO当前是否打开
# 此处的`eth0`为网卡,`ifconfig`看一下自己的,以自己的为准
ethtool -K eth0 lro off #关闭LRO
ethtool -K eth0 gro off #关闭GRO
ethtool -K eth0 tso off #关闭TSO
注意事项
1、Ubantu
中设置lro
时报Cannot change large-receive-offload
不用管,设置了gro
的就行
2、一般来说设置了LRO/GRO
就行了,TSO
并不是很重要
3、这个设置并不是真正的一劳永逸,会发现有时重启虚拟机后就又需要重新设置
原理分析
LRO/GRO
:网卡收包时将同一流的小包合并成大包(>MTU 1500/1514)交给内核协议栈
TSO
:一种利用网卡分割大数据包,减小 CPU 负荷的技术
想要深入了解的就去学习一下这些功能吧~~