# KCPUnityCSharp **Repository Path**: liyonghelpme/KCPUnityCSharp ## Basic Information - **Project Name**: KCPUnityCSharp - **Description**: csharp KCP Unity - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2016-12-08 - **Last Updated**: 2021-03-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ####基于UDP 的 可靠 有序 模仿TCP的网络实现 用于Unity 大量网络报文的实时网络游戏 参考KCP 协议 ####TCP 协议的核心特征: 可靠,有序,滑动窗口 ####网络中的核心角色模型: 发送者 接受者 ####最简单的可靠模型: A B 同时只有一个报文在处理 A--->发送 等待 B--->接受 ACK 当A等待超时,则重发报文 B接受到报文,若未处理过的报文,则保存下来,发送一次ACK,若处理过,则忽略报文,只发送一次ACK ####A B 之间同时多个报文可靠发送: 滑动窗口算法 A 发送方, 窗口2 同时2个报文 B 接收方,窗口4 最多接受4个报文 A 窗口第一个报文被确认了,才平移窗口,发送后面报文 B 接受到当前接受窗口的后半部分的报文,则平移接受窗口 判定特定序号的报文是否在窗口中, 两种情况 winStart > winEnd inWin = sid >= winStart || sid < winEnd winStart <= winEnd inWin = sid >= winStart && sid < winEnd ####B 接收方报文有序性保证: B 缓存接受窗口给报文,当接受到新报文,判定当前缓存区开头的报文是否都已经到达,已经到达,则将报文推入业务逻辑层 ####其它,异常处理: 发送方堆积的未确认报文数量太多,导致窗口已满,业务逻辑报文无法放入窗口 接收方长时间无法收到报文,导致接受窗口报文之间有空槽,无法有序向上层业务逻辑层投递 都将关闭连接,重建连接 ####连接的建立 TCP 建立连接 通过TCP 将客户端UDP通道和当前的TCP绑定 通过该库 进行网络通信 ####系统架构 应用层 50ms帧率 KCP 可靠有序 UDP 数据传输 ####Quake的网络模型: 50ms 处理一次网络, 每次对客户端上次ACK的状态和当前状态做diff, diff同步给客户端