引言
疫情期间,都被隔离在家,但是开发不能停,这次调试的是一个船舶综测系统,硬件和嵌入式组都基本调好了,我负责写上位机,上位机功能比较多,花的时间比较长,主要是通过USB串口接入到硬件设备上按通信协议进行数据测量。由于不能和硬件组的在一块调,就想办法让串口穿透网络让我这边的开发环境和硬件设备无障碍、短延迟的联通。因此就有了《串口和TCP互相转发工具》的解决方案。使用这个方案中基本上解决了串口穿透网络的问题,不过中间还是经过了FRP做了内网穿透,闲暇之余,就考虑自己做个轻量级的TCP桥接小工具,此工具应该运行在Windows平台下,是服务端程序,可以接受多个TCP客户端的连接,并将从每个TCP连接接收的数据,转发给其他连接,实现多个TCP连接间的透明桥接,并尽量做到高效率、高并发。
这可能应用到一些需要远程联通的低速设备间,最典型的是部署在2个边缘计算机上,2个计算机串口连接需要通信的设备,通过此工具将2个串口透明桥接起来,达到串口远程互联。也可以达到使部署在内网内的计算机直接通过TCP远程访问远端边缘计算机上的串口的目的,这在数据采集、数据远程传送等场景有比较多的应用。
软件设计
为了让桥接更加灵活,软件设计了2个监听端口,一个用于完全的透明桥接,一个用于基于标签的桥接。
在非标签桥接中,基本的处理流程就是将从任意一个TCP连接发来的数据,转发给所有其他的TCP连接,没有应用层的连接过程,适合于简单的点对点透传。
在基于标签的桥接中,加入了应用层的连接建立过程。在TCP连接建立成功后,客户端需要首先发送标签信息,具体格式如下:
字段 | 长度(字节) | 含义 |
---|---|---|
标签 | 4 | 4个字节的整数标签,标签0保留不可用,用于标识非标签桥接连接。-1标识此连接虽然建立,但没有绑定到有效标签。 |
保留 | 4 | 4个字节的保留字段,用于以后协议扩展 |
校验 | 1 | 1个字节的校验和,将前面8个字节相加得到的结果 |
用户数据流 | 任意 | 承载的用户数据流 |
TCP桥接工具接收够9个字节后,对前8个字节进行校验和计算,如果计算的结果和第9个字节相符,则认为是正确的标签,则将此连接和此标签关联。如果校验和不正确,说明客户端发送的协议不是桥接协议,则直接断开连接。这样所有的客户端连接都会在TCP桥接工具上关联到一个标签上。关联好标签后,当一个TCP连接数据给TCP桥接工具时,TCP桥接工具会查找此连接关联的标签,并将数据转发给所有关联到此标签的连接。
软件界面如下:
软件测试
软件设计每个端口最大并发1000连接,经过压力测试,软件能在每个端口并发1000的压力下持续稳定运行,而占用资源并不是太高。
软件下载
软件下载链接如下,有什么意见和好的建议欢迎讨论。
TCP桥接工具V2.2.3.1 - 多线程版,嵌入式网络穿透调试利器
https://download.csdn.net/download/kernelspirit/88315834
TCP桥接工具V2.2.2.1 - 多线程版,嵌入式网络穿透调试利器
https://download.csdn.net/download/kernelspirit/85310399