我在一台配置非常简单的 Ubuntu 8.04 机器上运行 vsftpd 2.2.1,在通过 FTP 上传到机器时遇到了一个奇怪的问题。如果我上传文本文件,传输速度约为 70 KB/s,如果我上传二进制数据(zip 文件等),传输速度大约是 50 倍。我使用过几个不同的客户端,它们在不同操作系统、不同文件大小等上工作。我尝试过在二进制和 ASCII 模式下传输文本文件,但似乎没有任何区别。有人见过这种情况吗?或者知道是什么原因导致了这种现象?
更新: FTP 服务器与我之前测试过的客户端计算机位于不同的子网中,中间有一个 Linux 网关,看来只有当不同子网上的计算机通过网关连接到 FTP 服务器时才会出现此问题。当与 FTP 服务器位于同一子网的计算机上传文本文件时,问题似乎不会发生。这仍然没有多大意义,但网关上使用的 ip_conntrack_ftp 模块可能存在问题。
更新: 事实证明,有人在网关的一侧设置了 Snort IDS,该网关在大约换行符上分解 FTP 数据包,从而导致文本文件滞后。
答案1
也许 vsftpd 中的行尾转换写得效率不高,而且由于二进制模式最常用,所以没有人费心去改进 vsftpd 中使用的算法。
或者,可能只是将数据从 tcp 套接字传递到磁盘确实比检查每个字符的 CR 和 LF 要快得多。检查可能会在连接中引入足够的延迟,从而降低传输速度。
您是在以太网(低延迟,会受到额外延迟的很大影响)或互联网上本地运行测试?