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开源库 应用,多个服务器的级联,国内很多是基于开源库需改的, 中小厂(比如深信服之类的)不建议跟进这个,做不了

总结!

测试没做

相关推荐
黑桃小柒79 小时前
小,最终显示为TCP WINDOW FULL,TCP ZeroWindow。 仔细分析了下LWIP源码,还以为是内存管理出了问题,跟 ...
网络·网络协议·tcp/ip
网络研究院10 小时前
LastPass 发布紧急安全预警:针对主密码的活跃网络钓鱼攻击正在进行中
网络·安全·黑客·攻击·漏洞·风险·钓鱼
便利店102411 小时前
TCP 为什么有时故意跑不快?拥塞控制与滑动窗口一次讲清
服务器·网络协议·tcp·拥塞控制
向夏威夷 梦断明暄12 小时前
【高效管理token成本】OpenClaw精细化分库管理memory以减少token成本的方案的可行性研究
网络
酷可达拉斯14 小时前
Linux操作系统-免密登录远程操作系统
linux·运维·服务器·网络·云计算
aixingkong92115 小时前
AI超节点Scale Up域总线各层优化设计
linux·服务器·网络
组合缺一17 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·服务器·网络协议·http·solon
瓦学妹18 小时前
为什么您的AI总是显示“不支持的区域”?如何解决?
大数据·网络·人工智能
优化Henry18 小时前
5G站点软件错误告警与资源激活超时两类典型告警分析与处理
网络·笔记·学习·5g·信息与通信
coward9118 小时前
千兆以太网卡(Ethernet)驱动初始化完成,但是无法udhcpc获取ip
服务器·网络·嵌入式硬件·tcp/ip