FlowerWrong / tun2socks

Redirect tun flow to socks 5 in golang, support tcp and udp.
425 stars 107 forks source link

udp写太快会丢包 #3

Closed FlowerWrong closed 6 years ago

FlowerWrong commented 6 years ago

cmd/udp/client.go

如果sleep一下就能完成发送接收。

FlowerWrong commented 6 years ago

wireshark抓包发现是netstack丢包。

FlowerWrong commented 6 years ago
sudo sysctl -a | grep net.core
netstat -us | grep buf
/proc/sys/net/core/rmem_max — 最大的数据接收缓冲
/proc/sys/net/core/wmem_max — 最大的数据发送缓冲

单纯增大buffer size是不可以的,因为本地增大了,服务器还是没法完整接收。除非你能保证cs都调整。

FlowerWrong commented 6 years ago

实验表明应该是读写udp包不均导致的

2017/12/15 15:08:14 writedLen 1500  dataLen 213170
2017/12/15 15:08:14 writedLen 3000  dataLen 211670
2017/12/15 15:08:14 writedLen 4500  dataLen 210170
2017/12/15 15:08:14 recvLen 1500 read 1500 bytes
2017/12/15 15:08:14 writedLen 6000  dataLen 208670
2017/12/15 15:08:14 recvLen 3000 read 1500 bytes
2017/12/15 15:08:14 writedLen 7500  dataLen 207170
2017/12/15 15:08:14 recvLen 4500 read 1500 bytes
2017/12/15 15:08:14 writedLen 9000  dataLen 205670

前面连写了3个包,最后丢了两个包。

FlowerWrong commented 6 years ago

确认为

/proc/sys/net/core/rmem_max — 最大的数据接收缓冲
/proc/sys/net/core/wmem_max — 最大的数据发送缓冲

引起的。增大10倍后丢包概率小了很多。

连续写太多大包(每包200多k)后tun设备无法正常工作了,一直阻塞。