【问题标题】:How exactly does the Windows telnet client work?Windows telnet 客户端究竟是如何工作的?
【发布时间】:2012-09-03 22:10:56
【问题描述】:

我在这里有点困惑。通常当我将 Windows telnet 连接到一个简单的回显服务器时,它会回显每一次击键。

现在,由于某种原因,它会堆叠其中的一些并将它们发送到服务器。这是正常行为吗?这种奇怪的不一致有什么原因吗?

例子:

客户:

>>blahblahblah

>>

回显服务器:

I recieved "b"
I recieved "lahbl"
I recieved "ahbla"
I recieved "h\r\n"

【问题讨论】:

    标签: windows telnet


    【解决方案1】:

    这取决于双方的缓冲。客户端等待行尾发送可用字符。回显服务器读取,但读取获取可用的内容,并且根据网络和缓冲的随机性,这可能是从 1 个字符到您发送的所有字符。

    使用 TCP,一切都可以保证到达那里,但不一定在您发送它的同一时间或同一块中。

    【讨论】:

    • 感谢您的解释,这正是我想要的。大多数类似 Windows telnet 的客户端都做同样的事情吗?
    • 通常有一些选项可以控制是否每个字符都单独发送,以及是否在本地完成回显。此外,telnet 几乎已被 ssh 取代,后者对其流量进行加密。
    • Telnet 客户端不会等待行尾发送字符,除非启用了行模式。
    【解决方案2】:

    我很肯定,这取决于你的打字速度。

    如果我要编写这样一个交互式客户端,我会将击键排队到一个时间间隔,这个时间间隔对人类来说仍然是即时的,但对于计算机来说实际上很长。如果我的缓冲区已满(真正的高速输入 - 很可能是重定向输入)或发生上述超时后,我会开始发送操作。

    通过这样做,我可以通过为每个数据包发送更大的有效负载来减少感觉延迟,从而将感觉延迟减少到 1/n,其中 n 是数据包中的平均击键次数。作为一个积极的副作用,这将(稍微)更好地利用网络资源。

    要验证我的假设,请使用剪贴板将一段较长的文本粘贴到 telnet 客户端。

    【讨论】:

    • 我想知道为什么客户端会这样做......我总是觉得立即发送击键很奇怪。
    • Windows telnet 客户端(与大多数 telnet 客户端一样)来自一个网络延迟为 100 毫秒的时间(想想:电话调制解调器)。等待一条完整的线路不是一种选择,因为本地回显和远程回显的工作方式可能完全不同。因此,这是提供单次击键(回显!)并仍然阻止数据包携带单字节有效负载(延迟!)的最佳方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2021-08-15
    • 2012-06-08
    • 2011-10-11
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多