【问题标题】:Telnet over half-duplex comms link - negotiation parameters半双工通信链路上的 Telnet - 协商参数
【发布时间】:2012-10-02 02:43:01
【问题描述】:

我们的嵌入式系统需要一个 Telnet(通过串行)接口,由于硬件/旧系统,它通过半双工链路 (RS485) 工作。是的,我知道 - 不,我们无法改变它,业界喜欢这样。

这样做的问题是,当我们向终端发送全屏文本时,用户可能会按下按钮并将数据发送回网络。

Telnet 支持 IAC->GA (Go Ahead) 命令向用户终端发出信号,它可以开始发送数据,但是我读过的任何 RFC 中都没有关于什么的信息告诉用户终端停止发送数据,以便我们刷新屏幕。

不幸的是,1973 年以后的所有 RFC 都假定将使用 SGA (Suppress Go Ahead) 模式,因此很少提及。不幸的是,似乎没有一个 RFC 或其他文档实际上涵盖了整个协议。

有没有人有任何信息/链接可以更完整地记录 telnet 协议(或只是 Go Ahead 行为)?我意识到其中一些可能是写在带有绿色条纹的羊皮纸上;)

重新编辑:为什么这个编程问题的“离题”结束? Telnet 是你知道的 OSI 模型的第 7 层...

【问题讨论】:

  • 我也想知道为什么它被关闭了。仅仅因为 telnet 和 RS485 不是广泛的热门话题并不意味着该问题无效或无用。
  • 我怀疑人们看到“RS485”并认为它是硬件或类似的东西。该死的孩子们,离开我的草坪!

标签: c embedded telnet legacy obsolete


【解决方案1】:

啊……RS-485……我记得很清楚! :-)

GA 定义已损坏(请参阅 https://www.rfc-editor.org/rfc/rfc596),但对于串行线路实现应该没问题,因为没有数据包分解。

您要求的是“反向中断”:

“反向中断”是一种将计算机连接到 通过半双工路径的终端可以重新获得对路径的控制 在之前放弃它之后进一步打字。

就其本质而言,“中断”(反向或其他)在半双工连接上必须是带外的,因为它需要能够随时发送。

编辑:聊天产生的新信息: 但是,如果您不希望中断实际传输(RFC393,reverse-break case "b")and 带有 go-ahead 令牌的一方不会将硬件切换到“发送”模式,除非在实际发送时(在此模式下,RS-485 无法接收,即使没有发送数据)偶尔的损坏/截断传输是可以容忍的并且telnet程序正确地实现了这种相当不寻常的极端情况,那么在带内发送这个代码可能是可以接受的。

我认为解决此问题的另一种方法是破解客户端 Telnet 程序,以定期向服务器发送“继续”数据包,即使它没有其他要发送的内容。这将允许服务器进行更新并作为回报做“继续”;它有点像“令牌环”。您甚至不必延迟 - 当收到“继续”时,发送所有待处理的数据(可能没有),然后返回“继续”。

可能的替代解决方案:

既然你也控制着 ser->ip 设备,为什么不在服务器和设备之间简单地建立一个专门的协议呢?

  • 服务器发送STX data stream ETX

  • 客户端发送STX data stream ETX

  • 无延迟地重复

如果任何一方的数据缓冲区中没有数据,那么它只是一个STX ETX 对,有效地告诉另一方“继续”。如果250ms内对方没有消息,重发ETX

在检测到错误的情况下,您甚至可以通过使用STX data stream ETX CRC1 CRC2(而不是STX ...)回复来扩展它以进行错误检测,并导致重新传输整个最后一个数据包。

【讨论】:

  • 有趣——但我们无法控制客户端;我们是服务器,通过 485 链接进行通信,该链接通过 IP 编码器,然后由用户使用 PuTTY 之类的东西访问。听起来它可能有用的是,当我们想开始说话时,我们发送一个“反向中断”,然后是一屏数据,然后是一个“Go Ahead”——这听起来合理吗?
  • 这变得越来越复杂,因为您仅限于终端可以支持和转换器可以支持的内容。你使用的是什么 485TCP 设备?您正在协商哪些回显和线路模式选项?
  • 我们使用的是对 remserial 的本土致敬。我们还没有协商回声/线路模式。另一个值得一提的问题是,一些屏幕正在显示来自我们系统的实时数据,因此在某些情况下,屏幕更新频率约为 1Hz。导航使用箭头键,登录等按照通常的命令行样式完成。遗留系统很有趣吧? :D
  • 没有任何一方可以随时发送的全功能半双工 telnet。如果您可以启用 485 接收和传输单独,那么您可以通过仅写入传入数据的中断来实现换行,并让另一方通过在传输时读取并注意到存在损坏来检测它在线上。以太网最初是半双工的。
  • 问题出在 BREAK 上。你如何沟通它?如果它是一个字符代码并且不加注意地传输,它可能会与另一个方向的传输发生冲突。传入的数据和中断都将被破坏。更不用说 485 在传输时通常不会收听(或者它会看到自己的传出字符)。
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2017-02-25
  • 2015-01-17
  • 2016-07-02
  • 2011-04-06
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多