2

我相信我的问题是:

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

这是更多上下文:

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

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

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

4

1 回答 1

2

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

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

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

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

于 2013-01-23T00:08:58.370 回答