JSch SSH会话通道是否是单独的TCP连接?

时间:2017-07-28 09:04:30

标签: ssh tcp sftp jsch

我有一些文件要上传到SFTP服务器,所以我使用JSch来实现这个目标。

我有这些实施方案:

  1. JSch打开一个会话和一个频道

  2. JSch打开一个会话和多个频道

  3. 以上两种解决方案哪种更有效?

    一个会话是对应TCP连接,还是一个通道对应TCP连接?

    如果一个会话对应一个TCP连接,那么多个通道必须共享相同的TCP连接,它会更有效吗?

1 个答案:

答案 0 :(得分:0)

一个SSH会话对应一个TCP连接。频道只是一个虚拟的连接"在一个SSH / TCP连接中。

正如您所正确的那样,使用多个频道几乎没有效率。

使用多个渠道的选项不是为了提高效率,而是为了灵活性(imo)。

实际上使用多个频道可能效率较低。

这取决于SSH各方实施SSH流量控制(滑动窗口)的效率,与TCP流量控制的效率相比(通常会进行超级优化)。

一些SFTP客户端,当他们知道只打开一个通道时,故意将客户端SSH窗口设置为一个庞大的数字,将流量控制留给TCP(希望它更高效)。

此外,基于PuTTY的SFTP客户端(如psftp或WinSCP)向服务器宣布它将只使用一个通道(使用专有的simple@putty.projects.tartarus.org消息),以便服务器也可以选择离开流也控制到TCP。并不是说我知道任何SSH服务器都能真正利用这一点。