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

总结!

请添加图片描述

测试没做

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值