我有一些文件要上傳到SFTP服務器,所以我使用JSch來實現這個目標。JSch SSH會話通道是單獨的TCP連接嗎?
我有這些選項實現:
JSch打開一個會話和
JSch打開一個會話和多通道
上述兩種解決方案中,一個信道,其更高效?
一個會話對應一個TCP連接,還是一個通道對應一個TCP連接?
如果一個會話對應一個TCP連接,那麼多個通道必須共享相同的TCP連接,它可以更有效嗎?
我有一些文件要上傳到SFTP服務器,所以我使用JSch來實現這個目標。JSch SSH會話通道是單獨的TCP連接嗎?
我有這些選項實現:
JSch打開一個會話和
JSch打開一個會話和多通道
上述兩種解決方案中,一個信道,其更高效?
一個會話對應一個TCP連接,還是一個通道對應一個TCP連接?
如果一個會話對應一個TCP連接,那麼多個通道必須共享相同的TCP連接,它可以更有效嗎?
一個SSH會話對應一個TCP連接。一個通道只是一個SSH/TCP連接中的虛擬「連接」。
正如您所想的那樣,使用多個通道幾乎不會更高效。
使用多個通道的選項不是爲了效率,而是爲了靈活性(imo)。
實際上使用多個通道可能效率較低。
這取決於SSH各方如何有效地實施SSH流量控制(滑動窗口),與TCP流量控制(通常會進行超級優化)的效率進行比較。
某些SFTP客戶端,當他們知道只有一個通道將被打開時,會故意將客戶端SSH窗口設置爲一個很大的數字,以將流量控制設置爲TCP(期望效率更高)。
此外,基於PuTTY的SFTP客戶端(如psftp或WinSCP)向服務器宣佈它將只使用一個通道(使用專有的[email protected]
消息),以便服務器也可以選擇將流量控制保留到TCP太。不是說我知道任何SSH服務器實際上利用這一點。
它也不能*少*高效。至少避免建立會話的開銷, – EJP
@EPJ這取決於SSH各方如何有效地實現SSH窗口。我已經在答案中添加了一些信息。 –