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