我使用 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
。