-
Notifications
You must be signed in to change notification settings - Fork 723
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
应用层对UDP进行分段的计算规则? #6
Comments
UDP没有缓存的说法是错误的,man 7 udp有明确的说明:
通过sysctl -a |grep udp, 可以观察到系统的udp缓存分配 窗口是TCP的概念,接收方用于告诉发送方可以一次性发送多少数据,而不等ACK,用于消除RTT带来的等待耗时。 KCP的默认MTU是1400,即单个UDP包最大为1400+8,不是你说的s.kcp.mss乘以窗口数,这里的分隔值只是确保单个数据包大小不超过整个发送缓冲区。 576这个值是个经验值,此文的时间可能比较久远,旧式设备可能有这个限制,但新设备基本都支持1400,你可以观察一下你的家用路由器的MTU默认值。 如果1400这个值真的导致了IP fragment,其实是很容易观察到降速问题的,按需调整也就行了。 |
谢谢 @xtaci
麻烦帮看下我的理解的对吗?
关于rmem_min 和 wmen_min设置有个疑问: |
静态窗口控制来说,这个是正确的。
两者没有关系,MTU已经控制了。建议你复习下TCP。
如果处理的够快,基本不需要调整这些参数,默认系统给的buffer就很大了,你可以计算下。 |
谢谢 @xtaci, 我买本tcp协议学习下。 |
@xtaci 您好,我看了下Write函数的代码,对分段的处理有点疑问:
我看了下UDP协议头结构体的定义如下:
其中,数据包长度用2个字节来表示,所以UDP最大载荷为65535。
kcp.mss在
中看到mss的值=IKCP_MTU_DEF-IKCP_OVERHEAD=1400-24=1376。
从网上看到这样的信息:
我的疑问:
期待您的回复,非常感谢!
The text was updated successfully, but these errors were encountered: