OpenBMC开发之KVM客户端建连RFB协议

OpenBMC开发之KVM客户端建连RFB协议

1. 知识补充

  • WebSokcet协议:一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
  • RFB协议:Remote Frame Buffer 远程帧缓冲协议,用于远程访问图形用户界面的协议。
  • 图像传输特点:RFB 协议会在服务器端将窗口在显存中画好,然后将图像传给客户端,客户端只需要将得到的图像解码显示即可。
  • RFB 适用范围: RFB协议于瘦客户端,瘦客户端指的是最大可能减轻客户端的负担,多数工作由服务器端完成。
  • RFB协议连接流程:与大多数协议一样,它也是通过TCP /IP协议簇连接。
    首先是握手报文,目的是对协议版本和加密方式进行协商。
    第二步是初始化报文,主要用于客户和服务器的初始化消息。
    最后就是正常协议的交互,客户端可以按需发送消息,然后可以获得服务器的回复。

2. 如何获取到图像帧

  1. websocket 建连
  2. fb协议信息交互,获取图像帧数据
  3. canvas填充图像

3. WebSocket建连

kvm前端创建websocket,连接到数据中转模块;然后数据中转模块创建websocket,连接到kvm后端,完成websocket连接通道的建立。
在这里插入图片描述

参考代码:
webui\node_modules@novnc\novnc\core\rfb.js
webui\node_modules@novnc\novnc\core\websock.js

4. RFB协议交互

整体交互流程如下所示:
在这里插入图片描述

  • 接收并发送rfb版本号:
    _handle_message()(line815) -> _init_msg()(line1746) -> _negotiate_protocol_vertion();

  • 当前使用的版本号为: RFB 003.008
    在这里插入图片描述

  • rfb协议安全认证

安全认证流程及涉及接口:
确认主从权限:
   _negotiate_oem_magic() ;
接收安全认证方式类型列表:
   _negotiate_security();
选择安全认证方式: None
接收安全认证结果:
   _handle_security_result();

在这里插入图片描述

  • rfb协议信息交互
客户端初始化:
发送远程会话模式,独占或共享;
服务端初始化 _negotiate_server_init():
接收图像相关参数 _negotiate_server_init()
发送图像编码格式 clientEncodings()  Tight Encoding
消息交互 _normal_msg()(line1908) :
获取第一帧数据:_framebufferUpdate()(line2182) ;

在这里插入图片描述

5. Canvas图像填充

  • 创建canvas节点:
    document.createElement()
  • 节点绑定:
    Websocket建连成功将canvas节点绑定到noVNC_container之下;取消连接则移除相应canvas节点;
  • 图像填充:
    _framebufferUpdate ()(line2182)
    display.flip()(line256) drawImage();
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬恋上雨

打赏助力,共创精彩博客内容!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值