c - 用户模式 TCP 堆栈,用于通过有损串行链路重新传输



我相信我的问题是:

PC操作系统上是否有一个简单的用户模式TCP堆栈,可用于通过有损串行链路与基于Linux的设备交换数据?

以下是更多背景信息:

我有一个基于 Linux 的设备通过串行链接连接到 PC。串行链路是有损的,因此有时需要重新传输在两个设备之间发送的数据。目前,该系统使用自定义协议,其中包括成帧,寻址(用于路由到Linux设备中的不同进程)和不太强大的重传算法。

在 Linux 设备端,替换自定义协议、通过串行链路实现 SLIP 并使用 TCP 进行所有通信会很方便。问题是,在PC端,我们不确定如何使用主机的TCP堆栈,而不拉入我们不需要的一般IP路由。如果有可用的用户模式 TCP 堆栈,似乎我可以将其集成到 PC 应用程序中。到目前为止,我发现的唯一TCP堆栈是用于微控制器的。它们可以移植,但如果有更多现成的东西就好了。或者是否有一些特殊的方式来使用操作系统的内置TCP堆栈,而无需管理权限或冒着与真实以太网接口发生IP地址冲突的风险。

最后,为了使解决方案专注于TCP,是的,还有其他解决方案可以解决此问题,例如使用HDLC或仅修复我们的自定义协议。但是,我们希望进一步探索TCP路由,以防万一它是一种选择。

看来评论已经回答了你的问题,但也许是为了澄清;不,你不能在不使用IP的情况下使用TCP。TCP建立在IP之上,它不会以任何其他方式工作。

PPP 是通过串行链路建立 IP 连接的好方法,但如果您的计算机两端都没有管理访问权限,这可能会很困难。172.16.x、10.x 和 192.168.x 定义为对本地网络开放,因此您应该能够找到一组不会干扰本地计算机网络操作的 IP 地址。

从没有配置、没有依赖的角度来看,用自己的成帧/重传协议来编写应该不会太难,如果你不需要互操作性,可能是你最好的选择。话虽如此,kermit,{z,y,z}modem将提供更好的性能和编码标准。

最后,您可以使用类似socat的东西来进行协议转换。 即将串行流连接到TCP端口。这不会解决数据可靠性/重新传输问题,但它可能是您要针对其编程的接口。

最新更新