scp 为什么比 sftp 快那么多?

61 天前
 lysShub

都是上传一个文件到同一机器,在洛杉矶; sftp 平均下来只有 200KB/s, scp 能有 2-3MB/s 。

根据我查的资料,这两个都是基于 ssh 连接的,为什么有那么大差距?

6639 次点击
所在节点    程序员
44 条回复
defaw
60 天前
在一篇文章中看到过说 sftp 的滑动窗口机制有 bug ,再具体的忘了,你可以搜搜看
msg7086
60 天前
@Livid 在下面回复框的空白处加一个简单的警示信息如何。
虽然规则已经执行很久,但规则似乎并不容易被人熟知。
一般社群会有一个专门的社群规则链接,而 v 站的规则是写在关于里的,我相信很多坛友都会错过这个链接。
Livid
60 天前
@msg7086 用 AI 回复这种事情,只有非常少数的账号干过,清理一个就少一个。不会因为极少数人的行为,而在界面上增加其他 99% 的人的阅读心智负担。
airqj
60 天前
@Livid 在“添加新回复”旁边加个"(禁止 AI 回复)"就好
PS: 天天逛 v2 也不知道有这个规定
tool2dx
60 天前
ai 回复只适合于生活这个 tag ,不太适用于技术提问,具体问题具体分析,不同情况下原因差别还是挺大的。
楼主这个问题,ai 明显就是无效回复。
iden
60 天前
太可怕了
julyclyde
60 天前
@Remember scp 咋就可靠性低了?你的证据呢?
julyclyde
60 天前
@jack778 scp 和 sftp 的加密都在 ssh 里,不在 scp/sftp 自己这一层,哪儿来的加密算法不同这一说?
julyclyde
60 天前
@weijancc sftp 可以多线程上传吗?
LanhuaMa
59 天前
@tool2dx #25 同意。简单的问题用 AI 回复有讽刺效果 (你问 AI 去就可以了为什么要贴出来浪费大家时间),三楼这个回复就是一坨,有点类似我电脑驱动掉了然后你告诉我“你有没有试过重启,清理垃圾,升级系统,重装系统,更新 BIOS ,把所有的键帽拔下来抄了吃啊”?
AmomA
59 天前
`SCP`( Secure Copy Protocol )通常比 `SFTP`( SSH File Transfer Protocol )快,主要是由于这两种协议在设计和处理文件传输的方式上的不同。具体来说,以下几点解释了 `SCP` 通常比 `SFTP` 更快的原因:

### 1. **协议的简化设计**
- **SCP**:是一个更简单的协议,它一次性传输文件数据,类似于直接复制文件。SCP 使用了单向的数据流,只要文件数据从源端传输到目的端即可,中间不进行复杂的控制操作,也没有文件的浏览、权限修改等功能。整个过程通过 SSH 加密传输数据,但传输过程比较直接,协议设计上更轻量。
- **SFTP**:是一个功能更复杂的协议,支持文件浏览、修改权限、断点续传等功能。由于这些附加功能,SFTP 会涉及更多的握手、控制、确认等操作。每个传输块( block )都需要确认,导致了额外的通信延迟,从而降低了整体传输速度。

### 2. **数据传输模式**
- **SCP**:数据传输是一次性完成的,不涉及很多交互。它类似于直接通过 SSH 加密通道传递数据,一次传输的文件较少被分割,减少了传输过程中的协议开销。
- **SFTP**:数据传输过程中,需要分块传输,每个块传输之后还需要目的端的确认( acknowledgment )。这种块级别的传输会引入额外的等待时间,特别是在高延迟网络中,显得更加明显。

### 3. **文件处理方式**
- **SCP**:不具备文件的操作和管理功能,它只负责文件的传输。这意味着 `SCP` 只需将文件内容通过 SSH 通道发送即可,减少了控制指令的交互。
- **SFTP**:则不仅仅是文件传输,还支持文件管理功能,比如创建目录、修改权限、查看文件等。因此,SFTP 通常会有额外的元数据传输和处理。这些附加功能的处理需要占用更多的时间,尤其是在传输大量小文件或需要频繁目录操作时,SFTP 的处理速度会更慢。

### 4. **数据流控和确认机制**
- **SFTP**:有着严格的数据流控制和确认机制。每传输一个数据块,SFTP 必须等待接收方的确认后才能继续传输下一个数据块。虽然这种机制可以确保数据传输的可靠性和完整性,但同时也引入了额外的延迟。
- **SCP**:没有复杂的流控机制,数据流是连续的。由于不需要等到接收方的确认后再发送下一部分数据,因此传输速度通常比 SFTP 快。

### 5. **数据压缩与加密开销**
- **SCP** 和 **SFTP** 都是通过 SSH 进行加密传输的,因此在加密算法的开销上是相似的。然而,SFTP 的额外交互(例如确认、握手)会增加整体的开销,而 SCP 仅处理文件流,因此相对效率更高。
- 在加密和压缩算法方面,传输文件时都可以选择使用压缩选项来提高传输效率,虽然这个选项对两者的影响相似,但 SCP 的简单数据流会更受益于此。

### 6. **网络延迟和带宽利用效率**
- **SCP**:在低延迟的网络环境中表现得更好,因为它不会受到多次握手和确认机制的拖累。
- **SFTP**:由于每传输一个块都需要确认,网络延迟越高,传输速度受影响就越大。即使带宽很大,SFTP 可能也无法充分利用带宽,而 SCP 可以更有效地利用高带宽来提高传输速度。

---

### 结论
`SCP` 比 `SFTP` 快的主要原因是 SCP 协议更简单、传输过程中的控制开销更少,并且没有复杂的确认和管理功能。因此,对于单纯的大文件传输,`SCP` 通常更高效。如果你需要更复杂的文件管理功能,或者需要进行小文件的频繁传输操作,`SFTP` 虽然稍慢,但提供了更全面的控制和功能。

简而言之:
- 如果你需要快速地传输大量文件或大文件,**SCP 是更合适的选择**。
- 如果你需要对远程文件系统进行浏览、文件权限管理、断点续传等操作,**SFTP 更合适**,虽然会牺牲一些速度。
wangyzj
59 天前
@Livid #15 我都没注意这个规则,直接 ban 不给机会的么?
wangyzj
59 天前
@AmomA #31 这个也 AI 了吧
rink9oled3
59 天前
我遇到过,是因为软件本身问题,你是用什么软件?

PS:用 ai 回答贴出的用户 ban 了,为什么不顺便把回复也删除了?差点认真读了。
suofeiya
59 天前
@AmomA 哥们儿上面用 AI 的都被 ban 了,你还发.
chenqh
59 天前
所以有什么办法可以加速 sftp 的传输文件,最好是通过改 client 那边
AmomA
59 天前
@suofeiya 刚开始玩,不知道这个规则,下次注意,谢谢提醒
kobe718
59 天前
@AmomA 你如果爬了楼,就应该知道没有下次的机会了。。。
ugpu
59 天前
@Livid 我几乎每天刷 V2 也并不知道 禁 AI 回复.
skyfore
59 天前
@Livid 确实也不知道,而且现在 AI 使用还是比较常见的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1083863

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX