-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Iperf3 不经过openvp×n或者其他代理软件测速时 报data_len>1800错误,关闭GRO时报错消失 #228
Comments
如果2个长度是1400的包粘在一起,你可以从中间切开恢复出两个包。 如果一个1400的包和1000的包粘在,粘在一起以后你怎么知道第一个包长度是1400呢。 至少需要加一个字段在包的开头标识包有多长吧。 |
刚刚粗略地看了下GRO的工作原理https://lwn.net/Articles/358910/ 是不是GRO没法区分udp2raw传过来的数据(可能目的地MAC 端口什么的都一样,Headers也相似,因为都是通过udp2raw来传输的),把数据包识别成了被分片的数据了?进而导致GRO把这些相似数据包合并了。 |
刚刚测试了下 udp2raw两侧使用--seq-mode 2选项能降低超长包数量 感觉是因为seq没有按续所以内核判断数据包不可合并,便把之前收集的待合并包先发上去了。 参考https://www.ibm.com/developerworks/cn/linux/l-cn-network-pt/index.html
|
I'm using udp2raw with Wireguard and I am also facing this issue. |
The size is maximum segment size (MSS). |
具体测试过程和结果我贴在了 #226 最后,经测试是GRO在驱动层合并了数据包,关闭GRO无此问题
但是在远程VPS(我用的vultr)母机开启了GRO GSO之类的功能,子机器无法修改母鸡设置导致上传的时候依旧会报错
现在暂时通过修改源码 让udp2raw不丢弃超长的包,想法是既然数据包已经送进了网卡,由网卡进行了合并,进了系统就不再需要考虑包超长的问题,所以不丢弃也无妨
不过只是个暂时(暴力)解决方法,只要调控好发送端MTU,确保不会有(大量)超长包发送,不影响使用即可
不知道UDP2RAW处理大于1800的包还会有什么其它问题,本人小白一枚,看不懂代码细节,所有想法和结论只是基于猜猜猜,希望不要惹怒wangyu大大hhhhh
The text was updated successfully, but these errors were encountered: