限制 Mac OS X Yosemite (10.10) 中的上传带宽

限制 Mac OS X Yosemite (10.10) 中的上传带宽

我使用 ADSL 上网,当有应用程序全速上传到互联网时(例如文件上传期间使用 Skype 或 Chrome),下载带宽会变得非常非常慢。这意味着我在上传期间几乎无法浏览网页,甚至 ping 也8.8.8.8需要 2-3 秒;正常情况下,这需要不到 0.06 秒的时间。

在 Mac OS X Mavericks (10.9) 及更早版本中,我使用节流限制传出流量,以便互联网在上传期间可用。

Throttled 使用 ipfw 进行节流,该功能已从 Yosemite (10.10) 中删除。建议的替代方案是pf但是 Mac OS X 内核没有 ALTQ 支持,这将启用流量整形(所以正如我所尝试的,所有 altq 命令都被忽略了)。

我也尝试过网络链路调节器应用程序,但无法正确限制传出数据包,因此上传期间互联网仍然无法使用。平均传出带宽有限,但会每隔几秒钟波动/振荡。

那么我该如何限制传出带宽?或者至少如何提高 HTTP 流量优先级?我能以ipfw某种方式安装吗?还有其他想法吗?

更新:到目前为止,对我来说效果最好的配置是使 HTTP/HTTPS/SSH 不受限制,并限制其他所有内容的上传速度。这使得互联网在云备份和 torrent 上传同时可用时可用。以下是脚本:

#!/bin/bash

# Reset dummynet to default config
dnctl -f flush

pfctl -F all

# Compose an addendum to the default config; creates a new anchor
(cat /etc/pf.conf &&
  echo 'dummynet-anchor "my_anchor"' &&
  echo 'anchor "my_anchor"') | pfctl -q -f -

# Configure the new anchor
cat <<EOF | pfctl -q -a my_anchor -f -
no dummynet quick on lo0 all
dummynet out all pipe 1
dummynet out proto icmp all pipe 2
dummynet out proto tcp to any port 443 pipe 2
dummynet out proto tcp to any port 80 pipe 2
dummynet out proto tcp to any port 22 pipe 2
EOF

# Create the dummynet queue
dnctl pipe 1 config bw 30Kbyte/s queue 50
dnctl pipe 2 config queue 50

# Activate PF
pfctl -E

要检查 dnctl 是否配置正确,请运行sudo dnctl list。您应该看到 2 个队列,第一个是有限的,第二个是无限制的:

$ sudo dnctl list
00001: 240.000 Kbit/s    0 ms   50 sl. 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  0 udp         192.168.1.XX/XXX   XX.XX.XX.XX/XXX   1372  1517617  6 8010  96
00002: unlimited    0 ms   50 sl. 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  0 tcp         192.168.1.XX/XXX   XX.XX.XX.XX/XXX     27     4557  0    0   0

答案1

我在使用新版照片应用时就遇到了同样的问题。安装后,photolibraryd应用会在后台上传所有照片,导致您提到的网络拥塞问题。我也安装了 Network Link Conditioner,并设置了 256Kbps 的上传限制。

一开始它不起作用。原因很简单:上传是 TCP 连接(端口 443 上的 HTTPS)。启用 NLC 后,我必须先断开连接(我只是关闭了 WiFi 一秒钟)。之后,上传在新的 NLC 规则下恢复,我能够同时使用我的互联网。

为了进一步了解,请查看启用 NLC 之前和之后的 PF 规则。请注意,启用 NLC 后,您有一个 dummynet PF 规则?!没错,Apple 似乎让 PF 与 dummynet 一起工作,而不是支持 ALTQ。我发布了在我的博客上了解更多关于 Mac OS X 上的 PF 的信息

更新:不需要 NLC。可以使用 直接创建 Dummynet 管道和队列dnctl。阅读随附的手册页,了解使用 的详细说明和示例pf

相关内容