JSch SSH 会话通道是一个单独的 TCP 连接吗?
Is JSch SSH session channel a separate TCP connection?
我有一些文件要上传到 SFTP 服务器,所以我使用 JSch 来实现这个目标。
我有以下实施选项:
JSch开一期一频道
JSch开一期多频道
以上两种方案,哪个更高效?
是一个session对应一个TCP连接,还是一个channel对应一个TCP连接?
如果一个session对应一个TCP连接,那么多个channel必须共享同一个TCP连接,会不会更高效?
一个SSH会话对应一个TCP连接。频道只是一个 SSH/TCP 连接中的虚拟 "connection"。
正如您正确地假设的那样,使用多个渠道几乎没有比这更有效的了。
选择使用多个通道不是为了效率,而是为了灵活性 (imo)。
实际上使用多个渠道可能效率较低。
这取决于 SSH 各方实施 SSH 流量控制的效率(滑动 window),与 TCP 流量控制的效率(通常会超级优化)相比。
一些SFTP客户端,当他们知道只有一个通道将被打开时,故意将客户端SSHwindow设置为一个巨大的数字,以将流量控制交给TCP(期望它更高效) ).
此外,基于 PuTTY 的 SFTP 客户端(如 psftp 或 WinSCP)向服务器宣布它只会使用一个通道(使用专有 simple@putty.projects.tartarus.org
消息),因此服务器也可以选择也将流量控制留给 TCP。并不是说我知道有任何 SSH 服务器可以真正利用这一点。
我有一些文件要上传到 SFTP 服务器,所以我使用 JSch 来实现这个目标。
我有以下实施选项:
JSch开一期一频道
JSch开一期多频道
以上两种方案,哪个更高效?
是一个session对应一个TCP连接,还是一个channel对应一个TCP连接?
如果一个session对应一个TCP连接,那么多个channel必须共享同一个TCP连接,会不会更高效?
一个SSH会话对应一个TCP连接。频道只是一个 SSH/TCP 连接中的虚拟 "connection"。
正如您正确地假设的那样,使用多个渠道几乎没有比这更有效的了。
选择使用多个通道不是为了效率,而是为了灵活性 (imo)。
实际上使用多个渠道可能效率较低。
这取决于 SSH 各方实施 SSH 流量控制的效率(滑动 window),与 TCP 流量控制的效率(通常会超级优化)相比。
一些SFTP客户端,当他们知道只有一个通道将被打开时,故意将客户端SSHwindow设置为一个巨大的数字,以将流量控制交给TCP(期望它更高效) ).
此外,基于 PuTTY 的 SFTP 客户端(如 psftp 或 WinSCP)向服务器宣布它只会使用一个通道(使用专有 simple@putty.projects.tartarus.org
消息),因此服务器也可以选择也将流量控制留给 TCP。并不是说我知道有任何 SSH 服务器可以真正利用这一点。