V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lysShub
V2EX  ›  程序员

scp 为什么比 sftp 快那么多?

  •  
  •   lysShub · 20 天前 · 6320 次点击

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

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

    44 条回复    2024-10-31 14:42:29 +08:00
    bestsanmao
        1
    bestsanmao  
       20 天前   ❤️ 1
    协议一样 线路一样
    速度差别有 10 倍之大
    猜测:
    首先,你传的文件压缩率比较大 比如文本文件
    其次,两个软件 一个开启了压缩一个没有开启
    Remember
        2
    Remember  
       20 天前
    scp 类似 udp ,可靠性低速度快,sftp 相反。
    jack778
        3
    jack778  
       20 天前
    SFTP 上传速度 (200KB/s) 远低于 SCP 上传速度 (2-3MB/s) 在同一机器、相同网络环境下,确实不太寻常。以下是一些可能导致这种差异的原因分析,希望能帮您找到问题所在:

    1. 加密算法和开销:

    SFTP (基于 SSH 协议) 使用加密传输,默认情况下会协商更强的加密算法,这会带来更高的 CPU 开销,尤其是在处理大量小文件时,加密/解密过程会成为瓶颈。
    SCP (基于 SSH 协议的远程复制) 也使用加密,但通常使用更简单的加密算法,例如 AES-128 ,相对 SFTP 来说,加密开销更低。
    2. 协议和实现差异:

    SFTP 是一个交互式文件传输协议,需要更多的控制信息交互,例如文件列表、权限管理等,这会增加网络传输的负担。
    SCP 则更专注于文件复制本身,传输过程更加直接,减少了不必要的交互。
    3. 服务器配置:

    SFTP 服务器的配置可能会影响传输速度,例如最大连接数、带宽限制、缓存设置等。
    SCP 通常依赖于 SSH 服务器的配置,如果 SSH 服务器配置不合理,也可能影响 SCP 的速度。
    4. 客户端配置:

    SFTP 和 SCP 客户端的配置也可能影响传输速度,例如缓冲区大小、并发连接数等。
    5. 网络环境:

    虽然您提到是在同一台机器上进行测试,但网络延迟和丢包率仍然可能对传输速度产生影响,尤其是在网络状况不佳的情况下。
    建议您尝试以下方法排查问题:

    检查 SFTP 服务器的配置: 查看是否有带宽限制、连接数限制等,并尝试调整相关参数。
    尝试不同的 SFTP 客户端: 不同的 SFTP 客户端可能使用不同的加密算法和实现方式,尝试使用其他客户端,例如 FileZilla 、WinSCP 等,看看是否能提升速度。
    使用 scp -v 或 sftp -v 命令开启详细日志: 分析日志信息,查看是否有错误或警告信息,并尝试根据日志信息调整相关参数。
    尝试使用更简单的加密算法: 在 SFTP 客户端中,尝试选择 AES-128 等更简单的加密算法,看看是否能提升速度。
    排除网络环境问题: 使用 ping 命令测试网络延迟和丢包率,确保网络环境稳定。
    总结:

    SFTP 和 SCP 都是基于 SSH 的安全文件传输协议,但它们在协议设计、加密算法、实现方式等方面存在差异,导致在某些情况下,SCP 的速度可能会比 SFTP 更快。通过仔细分析和排查,您可以找到导致 SFTP 速度缓慢的具体原因,并采取相应的措施提升传输速度。
    eggt
        4
    eggt  
       20 天前
    rsync 又比 scp 快的多
    Donaldo
        5
    Donaldo  
       20 天前
    @jack778 #2 坛子里不允许回复 AI 生成的内容
    weijancc
        6
    weijancc  
       20 天前
    这其实是你 sftp 客户端的问题, 如果是多线程上传, 实际上 sftp 是能跑满速的
    lysShub
        7
    lysShub  
    OP
       20 天前
    @bestsanmao 我那文件大概只能压缩一半
    realpg
        8
    realpg  
       20 天前
    不动系统默认的 openssh-server
    scp sftp 都是慢的突破天际 半斤八两
    iminto
        9
    iminto  
       19 天前 via Android   ❤️ 1
    @jack778

    ai 回复,一文不值,通篇没有任何有用信息。。。
    xqzr
        10
    xqzr  
       19 天前   ❤️ 1
    @Livid #3 AI
    FishBear
        11
    FishBear  
       19 天前 via iPhone
    流传输,多线程,最重要的是多线程,因为多个连接一起发,通常单线程连接比多线程连接慢
    sky96111
        12
    sky96111  
       19 天前
    @realpg 冷知识:openssh-server 就是 sftp 的一个实现
    realpg
        13
    realpg  
       19 天前
    @sky96111 #12
    额 你看明白我在说什么了吗?
    sky96111
        14
    sky96111  
       19 天前 via Android
    @realpg 好吧,我理解错了。我以为你打错字了,不动系统的 openssh-server->不如系统的 openssh-server
    Livid
        15
    Livid  
    MOD
       19 天前
    @xqzr 3 楼的账号已经被彻底 ban 。
    realpg
        16
    realpg  
       19 天前   ❤️ 2
    @Livid #15
    这个要不要先 at 警告一次再 ban 啊
    我也算高强度 V2 用户,要不是这个帖子我还真没注意到 V2 加了规则不允许直接发 ai 生成内容
    Livid
        17
    Livid  
    MOD
       19 天前
    @realpg 这个规则已经执行了超过半年了。这就是为什么你几乎在这里看不到这种 AI 生成的长篇大段的回复,之前这么干的账号都已经被清理了。
    Livid
        18
    Livid  
    MOD
       19 天前
    @realpg 如果要实现这样先警告 X 次再彻底 ban 的系统,意味着还需要存储和读取一个账号之前是否被警告过的记录,我们没有这样的系统。
    vituralfuture
        19
    vituralfuture  
       19 天前 via Android
    ban 得好,贴 AI 回复的占那么大篇幅,我甚至都形成条件反射了,看到开头一句疑似 AI 直接快速下滑
    realpg
        20
    realpg  
       19 天前
    @Livid #18
    没必要那么严谨 一般警告一次很难再犯的
    defaw
        21
    defaw  
       19 天前
    在一篇文章中看到过说 sftp 的滑动窗口机制有 bug ,再具体的忘了,你可以搜搜看
    msg7086
        22
    msg7086  
       19 天前   ❤️ 4
    @Livid 在下面回复框的空白处加一个简单的警示信息如何。
    虽然规则已经执行很久,但规则似乎并不容易被人熟知。
    一般社群会有一个专门的社群规则链接,而 v 站的规则是写在关于里的,我相信很多坛友都会错过这个链接。
    Livid
        23
    Livid  
    MOD
       19 天前   ❤️ 3
    @msg7086 用 AI 回复这种事情,只有非常少数的账号干过,清理一个就少一个。不会因为极少数人的行为,而在界面上增加其他 99% 的人的阅读心智负担。
    airqj
        24
    airqj  
       19 天前   ❤️ 2
    @Livid 在“添加新回复”旁边加个"(禁止 AI 回复)"就好
    PS: 天天逛 v2 也不知道有这个规定
    tool2dx
        25
    tool2dx  
       19 天前 via Android
    ai 回复只适合于生活这个 tag ,不太适用于技术提问,具体问题具体分析,不同情况下原因差别还是挺大的。
    楼主这个问题,ai 明显就是无效回复。
    iden
        26
    iden  
       19 天前
    太可怕了
    julyclyde
        27
    julyclyde  
       19 天前
    @Remember scp 咋就可靠性低了?你的证据呢?
    julyclyde
        28
    julyclyde  
       19 天前
    @jack778 scp 和 sftp 的加密都在 ssh 里,不在 scp/sftp 自己这一层,哪儿来的加密算法不同这一说?
    julyclyde
        29
    julyclyde  
       19 天前
    @weijancc sftp 可以多线程上传吗?
    LanhuaMa
        30
    LanhuaMa  
       18 天前
    @tool2dx #25 同意。简单的问题用 AI 回复有讽刺效果 (你问 AI 去就可以了为什么要贴出来浪费大家时间),三楼这个回复就是一坨,有点类似我电脑驱动掉了然后你告诉我“你有没有试过重启,清理垃圾,升级系统,重装系统,更新 BIOS ,把所有的键帽拔下来抄了吃啊”?
    AmomA
        31
    AmomA  
       18 天前
    `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
        32
    wangyzj  
       18 天前
    @Livid #15 我都没注意这个规则,直接 ban 不给机会的么?
    wangyzj
        33
    wangyzj  
       18 天前
    @AmomA #31 这个也 AI 了吧
    rink9oled3
        34
    rink9oled3  
       18 天前 via iPhone
    我遇到过,是因为软件本身问题,你是用什么软件?

    PS:用 ai 回答贴出的用户 ban 了,为什么不顺便把回复也删除了?差点认真读了。
    suofeiya
        35
    suofeiya  
       18 天前
    @AmomA 哥们儿上面用 AI 的都被 ban 了,你还发.
    chenqh
        36
    chenqh  
       18 天前
    所以有什么办法可以加速 sftp 的传输文件,最好是通过改 client 那边
    AmomA
        37
    AmomA  
       18 天前
    @suofeiya 刚开始玩,不知道这个规则,下次注意,谢谢提醒
    kobe718
        38
    kobe718  
       18 天前
    @AmomA 你如果爬了楼,就应该知道没有下次的机会了。。。
    ugpu
        39
    ugpu  
       18 天前
    @Livid 我几乎每天刷 V2 也并不知道 禁 AI 回复.
    skyfore
        40
    skyfore  
       18 天前
    @Livid 确实也不知道,而且现在 AI 使用还是比较常见的。
    NevadaLi
        41
    NevadaLi  
       17 天前
    @skyfore #40 如果想看 ai 的内容可以自行搜索,v 站不允许 ai 注水确实控制的不错,这个策略把各种自媒体挡在了外面。

    如果允许 ai 内容,用不了多久,就会被 ai 内容淹没的,毕竟 ai+bot 比人要快很多,10 分钟生成几百篇文章和回答不是问题。
    Alias2023
        42
    Alias2023  
       17 天前
    mtu 什么的看看
    xqzr
        43
    xqzr  
       15 天前   ❤️ 1
    @Livid #31 AI
    Livid
        44
    Livid  
    MOD
       15 天前
    @xqzr 谢谢,31 楼的账号已经被彻底 ban 。

    这也是一个例子:有的人就是看不到。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2740 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:02 · PVG 21:02 · LAX 05:02 · JFK 08:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.