IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> VDT (virtual device on tcp) 基于tcp通信的虚拟设备工具集 -> 正文阅读

[网络协议]VDT (virtual device on tcp) 基于tcp通信的虚拟设备工具集

概要

VDT (virtual device on tcp) 基于tcp通信的虚拟设备工具集

  • DOT (device on tcp) 创建虚拟字符设备,通过tcp收发来读写。
  • DTT (device to tcp) 打开字符设备,通过tcp来读写。
  • NOD (net on device) 创建虚拟网卡设备,通过字符设备读写来收发。
  • NOT (net on tcp) 创建虚拟网卡设备,通过tcp来收发。
  • VH (virtual hub) 创建虚拟集线器,基于对文件(tcp,设备文件,普通文件)集的接收转发。
  • VS (virtual switch) 创建虚拟交换机,针对不同通信协议进行通信优化,减少无必要广播。

介绍

DOT (device on tcp)

在系统中创建一个字符设备,设备名可任意指定,对外提供一个TCP接口(客户端或服务端),设备读写和tcp收发联通透传。ioctl调用都是空操作,正常返回。类似windows上的USR-VCOM软件,USR-VCOM只针对串口设备,而dot可以是任意字符设备,也就兼容串口设备。dot只是按字节流模式打通了字符设备接口到tcp接口的收发通道,至于内容是串口数据还是ADC采集数据等全由应用层来决定和处理。

DTT (device to tcp)

打开一个字符设备文件(可以附加一些ioctl操作,如设置串口波特率),并创建一个TCP接口(客户端或服务端),将设备读写和tcp收发联通透传。类似windows上的TCP2Com软件。
dtt和dot有些相似,但并不相同,dtt并不创建设备文件,而是要打开设备文件(此设备可以是实体设备也可以是由dot虚拟的设备),如果设备文件不存在则会运行失败。打开设备时可以附加一些ioctl操作,如设置串口波特率等。dtt另一端也是tcp服务端或客户端,可以和dot的tcp端口或其他tcp端口对接。

NOD (net on device)

基于存在的字符设备创建新的网卡设备。字符设备可以是串口等实体设备,也可以是dot虚拟的设备。
就是创建一个网卡设备,底层实际是调用的是文件读写而不是网卡寄存器操作。
问:原理上是能实现这样一个网卡,可是这样的网卡性能也太差了,谁会用这样的网卡上网。
答:这个肯定是在特殊情况下才有意义有价值的。除了速度慢,其他都和普通网卡无异。比如一个板卡,没有网卡,只有一个串口命令行可操作,如果想多人同时操作那就需要多个命令行,可以通过多余的串口来实现这一功能,每个串口启动一个命令行任务,但这比较浪费串口资源,通用性易用性也较差。如果将一个串口实现一个虚拟网卡,应用层完全就可以通过网络来实现,可以创建多个telnet,也可以通过ftp传输文件。所有基于网络的应用、工具就立马可用了。在借助一个串口版的“交换机”就可以实现多块串口板卡的组网,应用层直接按照局域网的模型去开发。有网络就拥有全世界,而有串口就有网络,串口又能通过gpio模拟,那么一个计算机系统只要有两个多余的io口就能连接全世界。对于一些低端的硬件,就可以轻松实现高端的玩法。

NOT (net on tcp)

基于tcp客户端的虚拟网卡。和NOD类似,只是底层通信由设备文件变成socket通信,DOT+NOD也能实现同样的效果,但链路更长运行效率更低。NOD更倾向于通过非网卡物理接口实现实际的网络连接,而NOT能更方便的连接局域网内乃至广域网内其他主机,构建应用的“虚拟局域网”。注意,NOT的tcp端口只有客户端没有服务端模式。
问:既然有tcp,那就已经有网络了,为啥还要创建这样一个网卡?
答:为了组建虚拟网络。类似vpn,但这是一个简洁不安全的只适合实验室或测试的方案。实现和使用都非常简单,可以和串口网卡等其他工具组合使用。另一个目的就是方便虚拟网络和正式网络的路由转发。以便让虚拟网络接入真实的网络世界。

VH (virtual hub)

创建一个虚拟集线器,通过创建一个tcp服务器实现,可以同时连接多个客户端,每个客户端收到的数据都原样转发给其他客户端。
VH实现原理就是,构建一个设备文件文件集合,通过select接收文件可读数据,然后转发给其他文件。更进一步思考,类Unix系统下一切皆文件,tcp连接是文件,设备文件和普通文件更是文件,所以除tcp客户端可接入VH外,设备文件也可以直接接入VH。所以NOD和NOT都可以接入VH,构建一个虚拟的”以太网局域网“,只是连接NOD必须是本机的设备,而NOT可以是本机也可以是外部主机的tcp客户端。
再想想,还能干啥?借助DOT或DTT可以实现设备到设备的连接,这是点到点的,比如两个设备通过串口连接或通过CAN口连接。借助虚拟的集线器工具,就可以实现多设备总线试的连接。对于本机的设备可以直接将设备接入HUB,也可以通过DTT先转为tcp再接入HUB,对于其他机器的设备则只能通过DTT方式接入。
如果将HUB的服务端口,通过内网穿透暴露到互联网,那不同局域网的设备也可以通过DTT方式接入。
更进一步,接入HUB的可以不仅是设备,虚拟设备,也可以是一个应用程序,比如一个接入的tcp客户端应用对收到的内容进行记录和监视。
这样,一个VH其实就可以构建一个"局域网",为接入的设备,虚拟设备,网络应用程序等广播/共享信息。
基于此"局域网"又可以模拟各种网络或总线。比如模拟一个以太网的局域网,CAN的局域网,485的局域网。

VS (virtual switch)

SWITCH(交换机)和HUB(集线器)的功能类似,都是用于多个节点的连接和组网,让局域网内的端口互联互通。但是集线器是无数据格式要求的,是全域广播,无差别转发的,需要接收端进行过滤。HUB实现简单,通用性好,但性能低,尤其在节点较多,非广播内容内容较多时,自己和节点大量带宽和算力都消耗在无实际意义的收发和过滤操作上了。
交换机是针对有特定通信格式,每个端口只能连接一个节点,每次发送的数据得是一个完整的帧,帧内要有源地址和目标地址,收到的帧只会转发给目标节点,找不到目标节点才进行广播。交换机实现复杂,针对特定通信模型实现,不同通信模式不能兼容共用,但整体通信性能高。如以太网交换机,CAN交换机,485交换机。
VH的实现是基于select单线程板双工收发的,而VS是多线程并行收发的,所以VS耗费资源更多性能也更好。

用法

因为tcp是标准的网络接口,可以不限操作系统不限编程语言,这就可以让这组工具和其他系统其他语言的各种工具进行搭配使用。所以这些工具可以单独使用,也可以组合使用,也可以结合windows端的工具组合使用。再借助内网穿透,又可以超越局域网的限制进行远程操作。

  1. Git仓库下载最新工程源码,
  2. 导入工作空间编译目标板体系结构的内核模块vdt.ko
  3. 部署和安装vdt.ko内核模块 (insmod /lib/modules/vdt.ko)此时为系统增加了6条内核命令。
  4. 根据实际需求调用相应命令

本工具开发原始目的是解决项目在虚拟机下的仿真问题,但实际使用并不局限于虚拟机,在物理机上也是无差别的。

  • 用例1:某应用app调用了某字符设备dev,现在想搞清楚app对dev进行了哪些操作。
    此测试可以在虚拟机上进行,先用DOT命令创建dev同名设备,并开启本设备实时打印,然后启动app,查看控制台输出的dev调用过程和内容。
  • 用例2:某app要通过串口控制GPS单机,但现在没有GPS单机单机,调试app又需要有设备收发数据激励。
    此测试可以在虚拟机上进行,先用DOT命令创建dev同名设备,虚拟设备tcp端连接电脑网络调试助手,通过络调试助手查看app发送请求并返回应答数据。如果命令较复杂或有时限要去,可以用Python写一个GPS模拟器,用词模拟器替代络调试助手来和app对接仿真。
  • 用例3:物理机和上位机调测(通过串口通信),但物理机只有一台不够用,或者物理机只有串口更新程序太繁琐太慢影响效率。
    用虚拟机来替代物理机进行调测,DOT命令创建dev同名虚拟串口,win上也创建虚拟串口,两虚拟串口tcp连接,上位机挂win虚拟串口运行。虚拟机,想开几个开几个。
  • 用例4:还是物理机和上位机调测(通过串口通信),但物理机开发人员和上位机开发人员不在同一城市。
    类似用例3的操作,tcp连接借助下内网穿透即可。
  • 用例5:一个负责复杂系统,有20个设备单机和1个主机,主机要通过20路串口来操控这20个单机,现在是20个设备单机就绪了但主机还没就绪,也没有其他具备20路串口的主机,要调测主机上的app应用,如何进行?
    找4个具备5路串口的主机(具备网络功能),20个设备单机分别连接这4个主机的串口,4个主机连接在同一局域网,4个主机使用DTT命令将20路串口转化为tcp连接到app主机用DOT创建的20路虚拟串口上,app访问这20路虚拟串口来间接访问这20个设备单机。
  • 用例6:simulator下开启多个虚拟机,每个虚拟机都可个win系统ping通,但各自之间网络不通
    win系统下启动VS_NET服务,各虚拟机使用NOT命令创建虚拟网卡,配置各虚拟网卡的ip和mac地址保证不冲突,NOT的tcp客户端连接VS_NET服务,此时就建立了又虚拟网卡组成的局域网。可以进行ping命令测试。
  • 用例7:

后面慢慢补充吧 。。。。。。

基于tcp创建虚拟设备,基于虚拟设备创建虚拟网卡,基于虚拟网络再创建虚拟设备。。。可以玩套娃了

本版说明

2022.10.24 周一
本工具集源于某卫星项目测试实际需求,属于项目的副产物,部分功能早已完成并实用,近期进行了补充和整理,但功能和细节处理上还有很多不完善,也仅在虚拟机sparc平台下进行过测试和使用。
期望感兴趣的小伙伴们多多提供需求案例和bug提交。

博客文章

说明文档和博客会不定期补充增加。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:34:57  更:2022-10-31 12:36:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:32:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码