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

总结!

测试没做

相关推荐
KookeeyLena521 分钟前
IP池对数据爬取工作的帮助
网络·网络协议·tcp/ip
Reuuse21 分钟前
【HCIA-Datacom】华为VRP系统
服务器·网络·华为
我的运维人生44 分钟前
利用Python与Ansible实现高效网络配置管理
网络·python·ansible·运维开发·技术共享
车载诊断技术4 小时前
电子电气架构——中央计算的软件定义汽车架构
网络·架构·汽车·soa·电子电器架构
活老鬼4 小时前
Web与HTTP
网络·网络协议·http
天启代理ip5 小时前
HTTP代理PAC脚本:自动化代理设置的利器
网络协议·http·自动化
qq_416560205 小时前
fmql之ubuntu添加dhcp服务
网络
小霸王_300378636 小时前
《网络协议 - HTTP传输协议及状态码解析》
网络·网络协议·http
小狮子安度因6 小时前
边缘智能-大模型架构初探
linux·网络
宇宙第一小趴菜7 小时前
探索网络世界:TCP/IP协议、Python Socket编程及日常生活比喻
网络·python·tcp/ip