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

2.2.3 UDP的可靠传输协议QUIC 2

  1. udp可靠传输 kcp协议

    网络通畅下,kcp比tcp慢

    请添加图片描述

    这里直接看课件图片, 延迟ack比非延迟减少应答包数量,但是慢

  2. kcp 讲解

    kan代码ikcp.c

    按照readme指南编译一下!!

    mkdir build
    cd build
    cmake ..
    make
    

    第一遍报错,再编译一遍就好了

    本来老师要讲kcp源码,但是太难懂,so 主要掌握会用kcp

    直接在vscode 里ctrl+` 然后拆分终端,开三个,在里面操作

    先服务端运行  最右
    ./chat_server 0.0.0.0 10001
    
    客户端运行  中间
    ./chat_client 192.168.1.28 10001
    
    中间客户端发:hacyon来了 但是我这里显示收不到
    
    1. kcp 名词讲解

      mtu, rto, cwnd, rwnd, snd_buf, snd_nxt, snd_una 了解

    2. 使用

      乱七八糟的 看吐了

      1. client和server都要先创建映射,ikcp_create(conv), conv由client产生,可能会一样的id,用uuid算法生成不重复的,

        请添加图片描述

      2. update:在线程中更新 状态,互相独立

        ikcp.h里看ikcp_update函数

        请添加图片描述

        while是一个场景,里面先休息,然后for来调度kcp们, 如果不调度,可能多个客户端就死掉了,一个可以

      3. ikcp_send

        只是先放在内部,等待kcp_update调度,没发出去,最终是要调sendto接口

      4. ikcp_input, ikcp_recv收数据

        默认支持报文模式,因为基于udp的; 也支持(字节)流模式

        请添加图片描述

      5. kcp配置模式

        跳了,工作时查,调参数

      6. kcp协议头

        kcp是udp, 是无连接的,conv用来识别client哪一个,对连接的一种替代;这里稍微看看吧,基本没仔细看,反正记不住,这个以后再看吧

        大部分协议设计原则:header+body

      7. kcp发送数据过程

        粗略过一遍原理, 源码的话粗看 不看stream流模式,只看报文模式

        发送队列:send第一步,第二步 发送缓存:ikcp_update调度用缓存, 发送窗口

        请添加图片描述

        struct里和协议头 不对应的, 要对齐?

        今天好棒,晚上固定搞这个 这三个月,白天穿插(算法+八股 )+ 论文 (主要)

        ikcp_flush调度发送data

        发送窗口 跳了

      8. kcp接收数据

        snd_buf删除已经收到的确认的分片,没仔细听,晕啊太罗嗦了这里

        请添加图片描述

      9. kcp确认包 跳

      10. kcp快速确认 跳

        fastack,fastresend

      11. ikcp_input逻辑

        这里逻辑再看

      12. acklist应答列表

        收到data包以后,自己组织acklist回发,自己解析acklist

      13. 流量控制 拥塞控制 跳

      14. 使用 官方自带的,看完还是不知道怎么用

      15. 聊天室:chat_server.cc 和chat_client.cc

      请添加图片描述

      见kcp_server.h里对session的封装,这里都看看就行,源码再看吧

      请添加图片描述
      见kcp_client.cc 每一个客户端有一个session handle_message调用子类 处理业务

      可以TRACE(内容) 打印内容看看是什么 代码不算太复杂 一百多行 还行!!!

​ asio_kcp的官方项目 可以参考

​ 课后作业

  1. quic协议

    有的公司专门优化这部分,做网络协议的

    why 在应用层实现,在内核改影响很大比较麻烦

    quic tcp对比

    quic比kcp可能严谨一些

    ngtcp2 二次开发 quic开源库 应用,多个服务器的级联,国内很多是基于开源库需改的, 中小厂(比如深信服之类的)不建议跟进这个,做不了

总结!

请添加图片描述

测试没做


http://www.kler.cn/a/300114.html

相关文章:

  • HashMap用法
  • Linux(LAMP)
  • CSRF漏洞学习总结
  • windows下本地部署安装hadoop+scala+spark-【不需要虚拟机】
  • MyBatis最佳实践:提升数据库交互效率的秘密武器
  • unity插件Excel转换Proto插件-ExcelToProtobufferTool
  • 【读书笔记-《30天自制操作系统》-19】Day20
  • 【Python知识宝库】迭代器与生成器:高效处理大数据集
  • SQL的高级查询练习知识点中(day25)
  • 认识向量数据
  • 【Docker系列】docker缓存详解
  • 【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)
  • HAL库学习目录查询表
  • 在WPF中集成OpenTK画图形
  • google vr 入门之VrPanoramaView制作全景图列表(1)
  • 深入理解Spring Boot结合MyBatis调用MySQL,并实现主从复制读写分离
  • Linux进阶命令-echodatealias
  • redis底层—网络模型
  • 在社交物联网中使用MQTT协议和Hardy Wall算法实现有效的多播通信
  • [论文笔记]ChatQA: Surpassing GPT-4 on Conversational QA and RAG
  • 分布式项目中使用雪花算法提前获取对象主键ID
  • 非关系型数据库Redis
  • PDF和CDF
  • 8.Bug流程管理,禅道的使用(包含笔试/面试题)
  • Linux 工程师:探索开源世界的专业之路
  • 记录一款人气领先的开源国产 ERP 系统