摘要
- RFC 1116 让客户端处理行编辑和一部分信号字符,把每个按键若干数据包的交互,收束为每行若干数据包;高时延链路上的键入因此有了本地响应。
- DO/WILL 同意的是进入子协商,MODE_ACK 确认的是编辑/信号模式,SLC_ACK 确认的是特殊字符映射。三者都不是远端应用的命令回执。
- 行结束符或 FORWARDMASK 可以释放本地缓冲区;已经发出的前缀无法再本地修改,但是否到达、被解释、获准执行以及是否完成,仍要逐层取证。
速度来自“不再逐键过网”
RFC 1116 对 Linemode 的价值算得很直接。传统的逐字符 Telnet,可能为每个按键付出一对数据包;启用本地编辑后,一整条命令行只需少量数据包。长时延设备不再让使用者等几秒才看见自己的输入,按包收费的网络也少了一笔笔细碎成本。
另一个受益者是远端计算机。某些超级计算机不擅长处理单字符中断,前端机可以承担退格、删行和信号翻译,把远端周期留给向量计算。Linemode 不是简单地少发几个包,而是重新决定哪一侧先处理人机交互。
这份分工使界面变顺,也改变了证据。屏幕上的字符可以完全在客户端回转;远端进程此时甚至还没见到这行字。
当前 RFC Editor 记录保存了 1989 年 8 月的提案及其被替代关系,IETF Datatracker保留文档元数据。1990 年 10 月的 RFC 1184 取代 RFC 1116,新增模式位与可视编辑字符,但仍把行编辑放在客户端。
先同意谈判,才能谈模式
RFC 855 把 Telnet 选项拆成两步。DO 与 WILL 表示双方愿意讨论某个选项,随后 SB/SE 承载参数。任何一方都能以 DONT 或 WONT 结束这项许可。
Linemode 的默认值正是 WONT 与 DONT。存在 TCP 连接、进入 Telnet,乃至知道 34 号选项叫什么,都不能证明本地编辑已启用。成功的 DO/WILL 也只打开子协商入口。
MODE 才指定 EDIT 与 TRAPSIG。正常情况下,服务器提出模式,客户端确认。EDIT 决定谁处理输入行;TRAPSIG 决定客户端是否把某些本地字符翻译成 Telnet 的中断、终止、文件结束或挂起命令。MODE_ACK 的作用是让两端收敛到同一位图。
因此,“接受 Linemode”“启用 EDIT”“命令执行完毕”不是同一事实从粗到细的三种说法。前两项属于协议配置,后一项属于应用结果。
“完成”只修饰本地缓冲区
EDIT 开启时,客户端暂存输入,执行删字、删行等操作,然后只发送已经完成的行。RFC 1184 规定,本地的正常行结束键在传输时形成 CR LF。按下它之前,使用者仍能修改缓冲区,而不必让服务器撤销旧字符。
但结束键不是唯一出口。FORWARDMASK 可由服务器指出哪些 ASCII 字符一出现就应发送现有缓冲;SLC_FORW1 与 SLC_FORW2 再提供两个转发字符。如果本地终端驱动无法精确表达服务器要求的集合,客户端可以接受请求,却在更宽的一组控制字符上转发。
这意味着要记录“实际采用的转发集合”,不能只保存服务器请求。更重要的是时间边界:RFC 1184 明确提醒,某个前缀一旦发出,就不能继续本地编辑。
不可逆发生在客户端,不等于结果已经发生在服务器。字节还要经过 TCP、Telnet 控制解析、远端进程输入、语法判断、权限或策略判断,再可能启动操作、产生输出。编辑器没有观察这些阶段。
SLC_ACK 只确认键位规则
SLC(Set Local Characters)用三元组表达功能、修饰位与 ASCII 字符。级别可以表示不支持、支持但不可改、显式取值或采用默认值。对方同意设置时,返回带 SLC_ACK 的同一映射。
这个 ACK 结束的是配置争议,不是对未来动作的预先签收。它不能证明使用者按过该键;即使按过,也不能证明相应 Telnet 命令抵达;即使抵达,也不能证明远端系统实现了该功能。
RFC 1184 允许不支持 ABORT、EOF 或 SUSP 的系统忽略它们。SLC_FLUSHIN 与 SLC_FLUSHOUT 只是建议,用户界面还可以覆盖建议。一个控制名称被映射、被发送,都不等于进程已停止、文件输入已结束或某段输出确实被清空。
看见回显,仍可能没有一次往返
RFC 857 区分“替对端回显”与系统自行作出的本地回显决定。Linemode 正是利用了后者。CRT 立即出现字符,只证明客户端能显示它。
输出流控也没有被塞入 MODE 位图。RFC 1116 与 RFC 1184 把 FLOW 留给 RFC 1080 定义的独立 Telnet Remote Flow Control 选项。它经另一次同意,决定本地 Telnet 进程是否把 XON/XOFF 当作终端输出门。它不是键盘编辑、应用挂起、TCP 流控或拥塞。
把这些状态机分开,避免了一个“终端正常”标签替回显、编辑、信号、输出和远端进程同时作证。
远端结果需要从接收端重新举证
IANA Telnet Options 登记表至今把 34 号登记为 Linemode,并指向 RFC 1184。登记解决编号协调,不说明某次会话协商过它,也不证明任何实现符合规范。
RFC 854 提供 NVT 与 Telnet 控制命令框架,让数据和信号有共同传输语法。它没有替远端应用定义命令授权与业务结果。RFC 1184 还直言没有讨论安全问题。
可靠记录应保留整条阶梯:本地缓冲完成、前缀发出、服务端收字节、Telnet 解码、进程收输入、策略准入、开始执行、完成执行、输出返回、使用者正确关联响应。Linemode 优化了前半段;它从未让前半段成为后半段的证明。
来源
- RFC 1116 — Telnet Linemode Option
- RFC Editor 的 RFC 1116 记录
- IETF Datatracker 的 RFC 1116 记录
- RFC 1184 — Telnet Linemode Option
- RFC Editor 的 RFC 1184 记录
- RFC 854 — Telnet Protocol Specification
- RFC 855 — Telnet Option Specifications
- RFC 857 — Telnet Echo Option
- RFC 1080 — Telnet Remote Flow Control Option
- IANA Telnet Options 登记表
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
