xtaci / kcp-go

A Crypto-Secure Reliable-UDP Library for golang with FEC
MIT License
4.12k stars 737 forks source link

网络环境有丢包的外网情况下,为什么kcp的延迟比tcp和quic要大? 请教下需要调整哪些参数 #194

Closed rocinan closed 3 years ago

rocinan commented 3 years ago

韩国vps下,200个包 10ms一个,一发一收然后测试下一个的方式

image

通过ss 代理下(无丢包)

image

没有代理,直接走丢包网络下测试

image

kcp配置 本地100M下行 60m上行 联通网络

    kcpconn.SetACKNoDelay(true)
    kcpconn.SetNoDelay(1, 0, 2, 1) //尝试过 1 ,20, 2, 1 / 1 ,10, 2 ,1 / 1,10,2,0/
    kcpconn.SetMtu(1472)
    kcpconn.SetWindowSize(1024, 2048)
    kcpconn.SetReadBuffer(16 * 1024 * 1024)
    kcpconn.SetWriteBuffer(16 * 1024 * 1024) 

另外在ping丢包的时候,kcp tcp 都会卡住,这个配置下的kcp 收到的延迟更高。想在项目里用kcp-go,请教下需要调整那些配置啊。

rocinan commented 3 years ago

mtu 调整1200后 延迟会稍微好点,还是会有一个包传输太长时间的情况出现

xtaci commented 3 years ago

丢包只能通过FEC改善。

rocinan commented 3 years ago

FEC有需要配置的参数吗?测试下看起来每次丢包的时候kcp-go 收到包的时间会比tcp和quic 长

xtaci commented 3 years ago

单个包ping/pong测试发挥不出来优势, 既用不了Fastack特性,也用不上FEC特性。