2017-07-28 94 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窗口。我已經在答案中添加了一些信息。 –