xtaci / kcptun

A Quantum-Safe Secure Tunnel based on QPP, KCP, FEC, and N:M multiplexing.
MIT License
13.86k stars 2.54k forks source link

路由器部署模式下上传大于1M文件失败 #842

Open menghoumenghou opened 3 years ago

menghoumenghou commented 3 years ago

我部署了一套Kcptun系统,连接如下: PC--Linux 网关上部署的Kcptun client--远程Linux服务器上部署的Kcptun serer--远程Linux服务器上部署的Squid proxy--目标网站 测试发现不管我怎么调节参数,PC在通过以上部署模式向最终的web服务器上传文件,当文件超过一定大小时(1M),上传一定失败. 在PC上抓包可以看到Linux 网关上部署的Kcptun向PC发送了窗口降低为0的数据包,但是不久之后又增大了窗口,继续发送,但是抓包上看来回这样几次,上传就失败了,在Kcptun client上查看未发现明显的关于失败原因的日志.

曾经以为是MTU的问题,因为PC和Linux网关之间MTU是1500, 而Kcptun client和server之间的MTU是1440, 所以猜测是不是fragment太多,造成失败? 于是通过iptables 将kcptun client监听的tcp端口的mss修改为1400,甚至1300,但是问题仍然存在.

如果将kcptun client直接部署在PC上,则上传文件没有问题.

请各位帮忙看看这会是哪里的问题? 谢谢.

menghoumenghou commented 3 years ago

抓了一下PC和Linux网关上Kcptun client之间的TCP通信,可以看到连接一开始的Windows size就特别小,后面流控时降为0, 然后越来越小,直到只有159,然后可以看到是PC发出了RST消息. PC 102, GW 1 Kcptun Client listen on 10801.zip

@xtaci 烦请帮忙看看这个可能会是什么原因,抓包文件请见附件.