我相信我的问题是:
PC操作系统上是否有一个简单的用户模式TCP堆栈,可用于通过有损耗的串行链路与基于Linux的设备交换数据?
以下是更多上下文:
我有一个基于Linux的设备,通过串行链路连接到一台PC。串行链路是有损耗的,因此在两台设备之间发送的数据有时需要重新传输。目前,该系统使用自定义协议,包括成帧、寻址(用于路由到Linux设备内的不同进程)和不那么健壮的重传算法。
在Linux设备端,可以方便地替换自定义协议,实现串行链路上的SLIP,并使用TCP进行所有通信。问题是,在PC端,我们不确定如何使用主机的TCP堆栈,而不拉入我们不需要的通用IP路由。如果有可用的用户模式TCP堆栈,我似乎可以将其集成到PC应用程序中。到目前为止,我唯一找到的TCP协议栈是用于微控制器的。它们可以移植,但如果有更好的东西就更好了。或者,是否有一些特殊的方法可以使用操作系统的内置TCP堆栈,而不需要管理权限或冒着与真正的以太网接口发生IP地址冲突的风险。
最后,为了让解决方案集中在TCP上,是的,还有其他解决方案可以解决这个问题,比如使用HDLC或只是修复我们的自定义协议。但是,我们希望进一步探索TCP路由,以防它是一种选择。
发布于 2013-01-23 08:08:58
评论似乎已经回答了你的问题,但也许是为了澄清一下;不,你不能不使用IP就使用TCP。TCP是建立在IP之上的,它不会以任何其他方式工作。
PPP是通过串行链路建立IP连接的好方法,但如果您在计算机两端都没有管理访问权限,这可能会很困难。172.16.x、10.x和192.168.x被定义为对本地网络开放,因此您应该能够找到一组不会干扰本地计算机网络操作的IP地址。
从无配置、无依赖的角度来看,使用您自己的成帧/重传协议应该不会太难,如果您不需要互操作性,那么它可能是您的最佳选择。也就是说,kermit,{z,y,z}调制解调器将提供更好的性能和编码标准。
最后,您可以使用socat之类的工具来执行协议转换。即将串行流连接到TCP端口。这不会解决数据可靠性/重传问题,但它可能是您要针对其进行编程的接口。
https://stackoverflow.com/questions/14464861
复制相似问题