# kcp **Repository Path**: zhangjun93/kcp ## Basic Information - **Project Name**: kcp - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-06-15 - **Last Updated**: 2022-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # kcp > kcp是一种ARQ 协议,可解决在网络拥堵情况下tcp协议的网络速度慢的问题 ![](screenshot/kcp.gif) ## 下载安装 直接在OpenHarmony-SIG仓中搜索kcp并下载。 ## 使用说明 准备一套完整的OpenHarmony 3.1 Beta代码 1. 库代码存放路径:./third_party/kcp 3. 修改添加依赖的编译脚本 在/developtools/bytrace_standard/ohos.build文件中添加以下修改: ``` { "subsystem": "developtools", "parts": { "bytrace_standard": { "module_list": [ "//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core", "//developtools/bytrace_standard/bin:bytrace_target", "//developtools/bytrace_standard/bin:bytrace.cfg", "//developtools/bytrace_standard/interfaces/kits/js/napi:bytrace", "//third_party/kcp:kcp_targets" ], "inner_kits": [ { "type": "so", "name": "//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core", "header": { "header_files": [ "bytrace.h" ], "header_base": "//developtools/bytrace_standard/interfaces/innerkits/native/include" } } ], "test_list": [ "//developtools/bytrace_standard/bin/test:unittest" ] } } } ``` 4. 用命令 ./build.sh --product-name rk3568 --ccache 编译 5. 生成库文件路径: out/rk3568/common/common 该路径会生成test可执行文件 ## 接口说明 1. 接收到下层协议UDP传进来的数据底层数据buffer转换成kcp的数据包格式 `int ikcp_input(ikcpcb *kcp, const char *data, long size)` KCP报文分为ACK报文、数据报文、探测窗口报文、响应窗口报文四种。 kcp报文的una字段(snd_una:第一个未确认的包)表示对端希望接收的下一个kcp包序号,也就是说明接收端已经收到了所有小于una序号的kcp包。解析una字段后需要把发送缓冲区里面包序号小于una的包全部丢弃掉 2. 用户层面的数据读取 `ikcp_recv(ikcpcb *kcp, char *buffer, int len)` 首先合并fragment,如果rcv_queue小于rcv_wnd(接收窗口大小),则将rcv_buf中合适的segment放入rcv_queue中 3. 将buffer中的数据发送,把要发送的buffer分片成KCP的数据包格式,插入待发送队列中 `ikcp_send(ikcpcb *kcp, const char *buffer, int len) ` 当用户的数据超过一个mss(最大分片大小)的时候,会对发送的数据进行分片处理。KCP采用的是流的方式进行分片处理 如果需要发送的数据大小大于mss,则将其拆分为多个segment发送,将其frg至为其相应的序号,序号从count-1开始递减至0,即count-1表示第一个segment,0表示最后一个segment。 4. 刷新待处理数据,待处理数据包括ack,win probe,push data等等,以及检测snd_buf中的数据是否需要重传 `ikcp_flush(ikcpcb *kcp)` ## 兼容性 支持 OpenHarmony系统 3.0 及以上版本。 ## 目录结构 ``` |---- kcp | |---- ikcp.c #kcp的主要实现逻辑 | |---- test.c #测试代码文件 | |---- screenshot #测试结果图 ``` ## 贡献代码 使用过程中发现任何问题都可以提 [Issue](https://gitee.com/openharmony-sig/inotify-tools/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://gitee.com/openharmony-sig/inotify-tools/pulls) 。 ## 开源协议 本项目基于 [MIT License](https://gitee.com/openharmony-sig/kcp/blob/master/LICENSE) ,请自由地享受和参与开源。