KCP
- 本质是一套算法,而下层通信是自己选择(UDP,TCP),通过回调函数(udp.send)的方式进行处理
- 所以 UDP 收到数据时调用 input 解析 kcp 协议后,调用接受接口就能得到数据
- 握手机制需要自行协商创建 conv
- 使用 send 会放到发送队列,当时钟更新(update)后,从队列换到缓冲区
- ts 为 timestamp,发送时间戳,可以用于计算 RTT,再得到 RTO
- una:已发送,但是为收到确认的第一个序号
- sn:una 之后的不连续的序号(cmd=82),和 TCP seq 一样(cmd=81)
- 这样最开始未确认的地方会选择性重传,等这段 una 补全后,再到下一段缺失的 una 和 sn
- cmd:操作码,表示协议解析的一些特殊操作
- wnd:当 cmd = 83 时,表示询问远端窗口大小,当 cmd = 84 时,表示告知远端窗口大小
- conv:是会话匹配数字
- frg:是拆分数据的编号
- len:表示总长度
特点:
- RTO 超时重传时间是 1.5 倍
报文类型
- 数据报文
IKCP_CMD_PUSH
- 确认报文
IKCP_CMD_ACK
- 窗口探测报文
IKCP_CMD_WASK
, 询问对端剩余接收窗口的大小. - 窗口通知报文
IKCP_CMD_WINS
, 通知对端剩余接收窗口的大小.