当前位置: 首页 > news >正文

上海建材网站互联网十

上海建材网站,互联网十,精准防控高效处置,响应式网站模板的特点一、KCP协议包 1.1 kcp协议包 kcp中只有一种数据包,不管是数据还是控制信息,都用这个数据包来表示 0 4 5 6 8 (BYTE) ---------------------------- | conv |cmd|frg| wnd | ---------------------------- 8 | …

一、KCP协议包

1.1 kcp协议包

kcp中只有一种数据包,不管是数据还是控制信息,都用这个数据包来表示

0               4   5   6       8 (BYTE)
+---------------+---+---+-------+
|     conv      |cmd|frg|  wnd  |
+---------------+---+---+-------+   8
|     ts        |     sn        |
+---------------+---------------+  16
|     una       |     len       |
+---------------+---------------+  24
|                               |
|        DATA (optional)        |
|                               |
+-------------------------------+
  1. conv (4 bytes): 会话号,用于区分不同的会话。由于kcp不处理握手,可以通过两端

  2. cmd (1 byte): 命令类型,可能的命令类型包括:

    • IKCP_CMD_PUSH(数据包)

    • IKCP_CMD_ACK(确认包)

    • IKCP_CMD_WASK(窗口探测包,请求对方告知窗口大小)

    • IKCP_CMD_WINS(窗口大小通告包,告知对方窗口大小)

  3. frg (1 byte): 分片标识,表示数据是否被分片及其序号。对于不分片的数据包,该值为 0。

  4. wnd (2 bytes): 窗口大小,用于流量控制。

  5. ts (4 bytes): 时间戳,用于计算往返时间(RTT)以及重传超时(RTO)。

  6. sn (4 bytes): 序号,用于数据包排序和确认。

  7. una (4 bytes): 未确认的序号,用于流量控制。

  8. len (4 bytes): 数据部分的长度。

1.2 kcp源码IKCPSEG结构体

//=====================================================================
// SEGMENT
//=====================================================================
struct IKCPSEG
{struct IQUEUEHEAD node;//链表节点,结构体类型 IQUEUEHEAD,用于把该分段加入到发送或接收队列的链表中。IUINT32 conv;IUINT32 cmd;IUINT32 frg;IUINT32 wnd;IUINT32 ts;IUINT32 sn;IUINT32 una;IUINT32 len;IUINT32 resendts;//重传时间戳,32 位整数,表示该分段下一次进行重传的时间戳。IUINT32 rto;//重传超时时间,32 位整数,表示该分段的重传超时时间。根据 ACK 的 RTT 值调整。IUINT32 fastack;//快速重传计数,32 位整数,表示该分段被其他数据包跳过的次数,用于快速重传机制。IUINT32 xmit;//传输次数,32 位整数,表示该分段已被发送的次数。char data[1];
};

二、IKCPCB

IKCPCB 结构体是 KCP 协议中控制块的核心数据结构,包含了连接状态、传输参数、缓存和控制信息等。这是整个 KCP 协议运作的核心,用于管理连接的各个方面。下面是对每个字段的详细解释,

看不懂没关系,后边会在流程中解释。

struct IKCPCB {IUINT32 conv;              // 会话 ID,用于区分不同的连接IUINT32 mtu;               // 最大传输单元大小,指网络层能够传输的最大数据包大小IUINT32 mss;               // 最大分段大小,为 MTU 减去固定的 KCP 头部大小IUINT32 state;             // 连接状态IUINT32 snd_una;           // 未确认的发送序号IUINT32 snd_nxt;           // 下一个发送序号IUINT32 rcv_nxt;           // 下一个接收序号IUINT32 ts_recent;         // 最近的时间戳IUINT32 ts_lastack;        // 最后一个确认包的时间戳IUINT32 ssthresh;          // 慢启动门限IINT32 rx_rttval;          // RTT 波动值IINT32 rx_srtt;            // 平滑后的 RTT 值IINT32 rx_rto;             // 重传超时时间IINT32 rx_minrto;          // 最小重传超时时间IUINT32 ff_recovery_point; // 快速恢复点IUINT32 snd_wnd;           // 发送窗口大小IUINT32 rcv_wnd;           // 接收窗口大小IUINT32 rmt_wnd;           // 远端窗口大小IUINT32 cwnd;              // 拥塞窗口大小IUINT32 probe;             // 探测变量IUINT32 current;           // 当前时间IUINT32 interval;          // 内部工作刷新间隔IUINT32 ts_flush;          // 下次刷新时间戳IUINT32 xmit;              // 传输次数IUINT32 next_send;         // 下一个发送时间IUINT32 nrcv_buf;          // 接收缓冲区大小IUINT32 nsnd_buf;          // 发送缓冲区大小IUINT32 nrcv_que;          // 接收队列大小IUINT32 nsnd_que;          // 发送队列大小IUINT32 wait_snd_bytes;    // 等待发送字节数IUINT32 wait_rcv_bytes;    // 等待接收字节数IUINT32 nodelay;           // 是否启用无延迟模式IUINT32 updated;           // 是否已更新IUINT32 ts_probe;          // 窗口探测时间IUINT32 probe_wait;        // 窗口探测等待时间IUINT32 dead_link;         // 最大重传次数,超过此次数认为连接失效IUINT32 incr;              // 拥塞窗口增加量IUINT32 ts_wait_ack;       // 等待 ACK 的时间戳IUINT32 flag_wait_ack;     // 等待 ACK 的标志IUINT32 ts_echo;           // ECHO 的时间戳pthread_mutex_t send_lock; // 发送锁,用于多线程环境struct IQUEUEHEAD snd_queue;  // 发送队列pthread_mutex_t recv_lock; // 接收锁,用于多线程环境struct IQUEUEHEAD rcv_queue;  // 接收队列struct IQUEUEHEAD snd_buf;    // 发送缓冲区struct IQUEUEHEAD rcv_buf;    // 接收缓冲区IUINT32 *acklist;          // 存储待发送的 ACK 列表IUINT32 ackcount;          // ACK 的数量IUINT32 ts_sack;           // SACK 时间戳IUINT32 ackblock;          // ACK 列表的大小(块大小)void *user;                // 用户数据void *user_send_queue;     // 用户发送队列void *user_recv_queue;     // 用户接收队列char *buffer;              // 缓冲区int fastresend;            // 快速重传标志int nocwnd;                // 关闭拥塞控制标志int stream;                // 流模式标志int logmask;               // 日志掩码int delay_ack;             // 延迟 ACK 处理void *ca_priv;             // 拥塞避免私用数据int (*output)(const char *buf, int len, struct IKCPCB *kcp, void *user); // 数据输出回调void (*writelog)(const char *log, struct IKCPCB *kcp, void *user);      // 日志写入回调int (*process_pkt)(void *user, int length, const char *input, char *output); // 数据包处理回调
};
http://www.yayakq.cn/news/835623/

相关文章:

  • 电话销售做网站推销厦门做网站公司哪家好
  • 怎样提高网站转化率在线设计平台哪个好用
  • php网站出现乱码网站制做公司
  • 网站按天扣费优化推广深圳学校网站建设
  • 网站界面设计的相关指南上海SEO网站优化推广公司
  • 广州专业做网站排名哪家好晋州做网站
  • qq安全中心信任网站网页游戏大厅都有哪些
  • 网站空间租赁费用网络与智能媒体设计 干什么?
  • 移动网站建设的基本流程图重庆建筑设计公司排名
  • 绵阳做公司网站朝阳网站建设公司电话
  • 南宁学网站建设wordpress短消息
  • 凡科网站可以做seo优化phpcms旅游网站模板下载
  • 建一个c2c网站要多少钱国内重大新闻20条
  • c# 手机版网站开发网页制作软件案例
  • 知名网站制作公司有哪些ui设计怎么弄
  • 军队 网站备案seo营销推广
  • 网站运营策划wordpress修改管理密码
  • 网站默认首页wordpress修改关键词
  • wordpress开启多站点好处电子商务网站建设的市场分析
  • 友情链接查询青岛设计优化公司
  • 常宁网站制作网站建设实践试卷
  • 如何做响应式网站网站icp备案怎么查询
  • 优秀网站设计作品天元建设集团有限公司商业承兑汇票拒付管辖在哪里
  • 做网站的上海市哪家技术好wordpress图片付费主题
  • 怎么破解别人做的付费网站阿里云做企业网站
  • 商城网站个人网站要怎么做
  • 咸阳专业网站建设网站建设通
  • 学网站开发的能找什么工作四川省城乡住房建设部网站首页
  • 做淘宝店铺有哪些好的网站电子商务网站建设的市场分析
  • 焦作建设企业网站公司网站建设视屏