2017-07-28 43 views
1

我有一些文件要上传到SFTP服务器,所以我使用JSch来实现这个目标。JSch SSH会话通道是单独的TCP连接吗?

我有这些选项实现:

  1. JSch打开一个会话和

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

上述两种解决方案中,一个信道,其更高效?

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

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

回答

0

一个SSH会话对应一个TCP连接。一个通道只是一个SSH/TCP连接中的虚拟“连接”。

正如您所想的那样,使用多个通道几乎不会更高效。

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


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

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

某些SFTP客户端,当他们知道只有一个通道将被打开时,会故意将客户端SSH窗口设置为一个很大的数字,以将流量控制设置为TCP(期望效率更高)。

此外,基于PuTTY的SFTP客户端(如psftp或WinSCP)向服务器宣布它将只使用一个通道(使用专有的[email protected]消息),以便服务器也可以选择将流量控制保留到TCP太。不是说我知道任何SSH服务器实际上利用这一点。

+0

它也不能*少*高效。至少避免建立会话的开销, – EJP

+0

@EPJ这取决于SSH各方如何有效地实现SSH窗口。我已经在答案中添加了一些信息。 –