用户模式TCP堆栈,用于通过有损串行链路进行重传

时间:2013-01-22 17:48:03

标签: c linux windows tcp serial-port

我相信我的问题是:

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

以下是更多背景信息:

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

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

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

1 个答案:

答案 0 :(得分:2)

似乎评论已经回答了你的问题,但也许可以澄清一下;不,不使用IP就不能使用TCP。 TCP建立在IP之上,并且它不会以任何其他方式工作。

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

从没有配置的角度来看,没有依赖性,与你自己的成帧/重传协议相比应该不会太难,如果你不需要互操作性,它可能是你的最佳选择。据说kermit,{z,y,z}调制解调器将提供更好的性能和标准代码。

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