玩转KCP(2)-流模式和消息模式

栏目: IT技术 · 发布时间: 4年前

内容简介:KCP协议包含了2中模式,消息模式和流模式。今天笔者来讲讲这2中模式的区别。回顾一下KCP协议
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

1. 前言

KCP协议包含了2中模式,消息模式和流模式。今天笔者来讲讲这2中模式的区别。

2. 流模式和消息模式

回顾一下KCP协议

0               4   5   6       8 (BYTE)
+---------------+---+---+-------+
|     conv      |cmd|frg|  wnd  |
+---------------+---+---+-------+   8
|     ts        |     sn        |
+---------------+---------------+  16
|     una       |     len       |
+---------------+---------------+  24
|                               |
|        DATA (optional)        |
|                               |
+-------------------------------+

frg :分片,用户数据可能会被分成多个KCP包,发送出去

xtaci/kcp-go 的消息模式实现不完整,这个字段始终为0 详见 issues/121

sn : 序列号

len :数据长度(DATA的长度)

data :用户数据

2.1 消息模式

假定一个场景,在IM中,A向B发送了一个消息,这个消息可能是文本消息,也可能是图片消息。那么应用程序发送的数据是有逻辑的 消息 的概念的。

kCP协议提供了一种能力把不同的 消息 (应用程序)划分在不同的KCP包中。

KCP定义 MSS 的默认大小为1400 bytes, MSS (maximum segment size)表示最大段大小,它本身是TCP中的概念,表示包含TCP header,整个数据包的最大大小。在KCP协议中,概念类似,表示包含KCP header在内,整个KCP包的最大大小。

超过 MSS 的数据将会被拆分到成多个KCP包。根据是否拆包将会分成2种情况。

1)不拆包

玩转KCP(2)-流模式和消息模式 3条消息 Msg1 , Msg2 , Msg3 分别包含在 sn 为 90、91、92的KCP包中

2) 拆包

假定这个消息是个图片消息,比较大,大小为3252 bytes

玩转KCP(2)-流模式和消息模式

Msg被拆成了3部分,包含在3个KCP包中。 注意 , frg 的序号是从大到小的,一直到0为止。这样接收端收到KCP包时,只有拿到 frg 为0的包,才会进行组装并交付给上层应用程序。由于 frg 在header中占1个字节,也就是最大能支持

(1400 – 24) * 256 / 1024 = 344kB的消息

总结

在消息模式下,每个KCP包最多包含一个上层应用的消息。

2.2 流模式

消息模式减少了上层应用从流中拆解出消息的麻烦,但是它对网络的利用率较低。Payload(有效载荷)少,KCP头占比过大。

玩转KCP(2)-流模式和消息模式

在流模式下,KCP试图让每个KCP包尽可能装满。一个KCP包中可能包含多个 消息 。在上图中, Msg1Msg2Msg3 的一部分被包含在 sn 为234的KCP包中。 上层应用需要自己来判断每个消息的边界。

xtaci/kcp-go 中可以通过

var sess *kcp.UDPSession
sess.SetStreamMode(true)

开启流模式

请我喝瓶饮料

玩转KCP(2)-流模式和消息模式


以上所述就是小编给大家介绍的《玩转KCP(2)-流模式和消息模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

首席产品官2 从白领到金领

首席产品官2 从白领到金领

车马 / 机械工业出版社 / 79元

《首席产品官》共2册,旨在为产品新人成长为产品行家,产品白领成长为产品金领,最后成长为首席产品官(CPO)提供产品认知、能力体系、成长方法三个维度的全方位指导。 作者在互联网领域从业近20年,是中国早期的互联网产品经理,曾是周鸿祎旗下“3721”的产品经理,担任CPO和CEO多年。作者将自己多年来的产品经验体系化,锤炼出了“产品人的能力杠铃模型”(简称“杠铃模型”),简洁、直观、兼容性好、实......一起来看看 《首席产品官2 从白领到金领》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具