Closed FlowerWrong closed 6 years ago
wireshark抓包发现是netstack丢包。
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都调整。
实验表明应该是读写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个包,最后丢了两个包。
确认为
/proc/sys/net/core/rmem_max — 最大的数据接收缓冲
/proc/sys/net/core/wmem_max — 最大的数据发送缓冲
引起的。增大10倍后丢包概率小了很多。
连续写太多大包(每包200多k)后tun设备无法正常工作了,一直阻塞。
cmd/udp/client.go
如果sleep一下就能完成发送接收。