跳到主要内容

5. Compatibility With Old SSH Versions (与旧版 SSH 的兼容性)

5. Compatibility With Old SSH Versions (与旧版 SSH 的兼容性)​

如前所述, 本协议规定的 protoversion 为 "2.0". 更早版本的协议未正式成文, 但众所周知其使用 "1.x" 形式的 protoversion (例如 "1.5" 或 "1.3"). 撰写本文时, 许多 SSH 实现已使用协议版本 2.0, 但仍有设备使用先前版本. 在过渡期内, 需要能够以兼容已安装的使用旧协议版本的 SSH 客户端与服务器的方式工作. 本节信息仅与支持 SSH 1.x 兼容性的实现相关. 对 1.x 协议唯一已知的说明仅见于随源码分发的 README 文件 [ssh-1.2.30].

5.1. Old Client, New Server (旧客户端, 新服务器)​

服务器实现可以支持可配置的兼容性标志, 以启用与旧版本的兼容. 当该标志开启时, 服务器应该将其 protoversion 标识为 "1.99". 使用协议 2.0 的客户端必须能够将其识别为与 "2.0" 等同. 在此模式下, 服务器不应该在标识字符串之后发送回车符 (ASCII 13).

在兼容模式下, 服务器在发送其标识字符串之后, 在收到客户端标识字符串之前, 不应该再发送任何数据. 服务器随后可判断客户端是否使用旧协议, 并在需要时回退到旧协议. 在兼容模式下, 服务器不得在标识字符串之前发送附加数据.

当不需要与旧客户端兼容时, 服务器可以在标识字符串之后立即发送其初始密钥交换数据.

5.2. New Client, Old Server (新客户端, 旧服务器)​

由于新客户端可以在发送其标识字符串之后立即发送附加数据 (在收到服务器标识字符串之前), 当客户端发现服务器为旧实现时, 旧协议数据可能已损坏. 发生此情况时, 客户端应该关闭与服务器的连接, 并使用旧协议重新连接.

5.3. Packet Size and Overhead (分组大小与开销)​

一些读者会担心新首部, 填充以及报文认证码 (MAC) 导致的分组增大. 最小分组大小约为 28 字节 (取决于协商算法). 对大分组而言增幅可忽略, 但对单字节分组 (类 telnet 会话) 则非常显著. 然而, 若干因素使这在几乎所有情况下都不成问题:

  • TCP/IP 首部最小为 32 字节. 因而实际增幅大约是从 33 字节到 51 字节.

  • 以太网分组数据字段最小为 46 字节 [RFC0894]. 因而增幅不超过 5 字节. 若计入以太网首部, 增幅小于 10%.

  • 互联网中类 telnet 数据的总体占比可忽略, 即便分组变大亦然.

分组大小增幅唯一可能产生显著影响的场景是 PPP [RFC1661] 上的慢速调制解调器线路 (PPP 会压缩 TCP/IP 首部, 从而凸显分组增幅). 然而, 使用现代调制解调器时, 传输所需时间约为 2 毫秒, 远快于人工输入.

还存在与最大分组大小相关的问题. 为尽量减少屏幕刷新延迟, 交互式会话不希望分组过大. 最大分组大小对每个信道单独协商.