我面临一个令人尴尬的问题,我有一个家庭 Ubuntu 服务器,当我想从同一 LAN 中的另一台 PC 下载时,无论我是从/到 http 下载或上传(我的 http 服务器是 ubuntu 服务器上的 apache2)、ftp 还是 sftp,无论我使用 WinSCP 还是 FileZilla,都没有什么不同:
我的下载/上传速度约为 1.5 Mo/s。
但有时我看到速度达到 100 Mo/s。
问题是:
我该如何解决我的 ubuntu 服务器的网络速度慢的问题?
我能说的是:
It's not because of CPU performances (either the server CPU and client PC's CPU) htop shows really low usage of CPU on the server as task manager do for my PC.
It's not because of the LAN performances.
我在谷歌上搜索过,发现很多人遇到了同样的问题,但我没有找到适合我的情况的解决方案。
[更新 1] 重新安装服务器后,使用 sftp 和 ftp 的下载速度没有任何变化。感谢您的关注!
[更新 2] 好的,我尝试使用有线连接,速度最高可达 50Mo/s,但事实上,我使用的是 Wi-Fi 连接,速度要差得多,只有 8Mo/s。我不明白的是,为什么当我从互联网上下载某些东西时,即使是使用 Wi-Fi 连接,速度也会达到 24Mo/s...
[解决方案] 购买 PLC(电力线载波)
答案1
首先,我没有在您的帖子中看到任何问题......但我假设您的问题是“为什么我的传输速率不总是 1 GiB/s?”。
理论 VS 实际网络速度。
当宣布某个链接支持 100MiB/s 或 10GiB/s 时,它就是 //原始// 传输速率。
协议正在使用带宽
如果您使用 TCP(HTTP/SFTP/SCP/FTP... 就是这种情况),实际带宽将是1500 (commonly used MTU) - sizeof TCP header - sizeof Ethernet header - sizeoef protocols metadata
::
- 以太网头:~30字节。
- TCP 标头:~20 字节。
因此,对于 1500 字节,您已经丢失了 50 字节,即 3%。
这是仅有的用于通过 TCP 进行 RAW 传输。使用 HTTP/SFTP/FTP 意味着使用更多元数据(与协议相关的元数据:HTTP 上的标头、FTP 上的命令通道等),这些元数据会占用带宽。
这是“理论与实际”带宽。
网卡:“嘿,我需要数据”,硬盘:“等一下兄弟”。
现在,还有另一点可能会大大减慢您的传输速度:您正在传输文件。
只要您传输文件,那么您就依赖于文件系统 + 大容量存储性能。例如,传输 15GiB 的小文件将比传输 15GiB 文件花费的时间更长,因为您的操作系统必须:
- 列出文件
- 打开文件
- 读取文件内容
- 将其推入插座。
- 关闭文件。
- 打开下一个文件...
您的文件使用硬盘、SSD、USB 闪存等上的文件系统存储。因此您必须考虑:
- 文件系统引入的开销。
- 由您的真实硬件设备引入的开销。
基准网络
如果您想确保您的网络确实以全速运行,我建议使用同一局域网上的两台机器进行以下基准测试:
在机器 #1 上
time nc -l -p 10000
在机器 #2 上
dd if=/dev/zero bs=1M count=1024 | nc <machine #1> 10000
它会:
- 在机器#1上,监听端口 10000 上的传入数据包并返回接收数据所经过的时间。
- 在机器#2上,从
/dev/zero
(几乎即时)读取 1GiB 零并通过网络将其推送到机器#2。
如果使用此基准,您的链路带宽达到最大带宽减去约 3%,则表明您的链路正在全速运行。否则,您应该调查该链路上存在问题。
获取更多更多更多字节/秒
为了提高传输速度,您可以:
- 如果您对网络有完全控制权,则可以增加 MTU,以便每个数据包都有更多专用于有效负载的空间。
- 研究更好的文件系统。
- 考虑使用 ramdisk 代替真实硬盘。
- 使用使用少量元数据的应用程序协议(
nc
> *.HTTP
在大多数情况下并不是那么糟糕,避免FTP
因打开/关闭新的 TCP 端口进行文件传输而引起的开销,避免SFTP
因加密而引起的开销等......)
在评论中与原帖交流后进行了编辑
Wifi 与 RJ45
Wifi 在大传输中表现不佳。我无法解释,但我经常注意到性能很差,甚至比使用跳跃主机互联网实现传输还要差。它可能取决于使用的 Wifi(a、b、c、n)、wifi 设置(接入点、使用的信道)和邻里环境(每个人都在同一个信道上?)。要获得最佳效果,请使用 RJ45!