psm*_*ith 5 networking bandwidth ipfw pf osx-yosemite
我有 ADSL 互联网,当有应用程序全速上传到互联网时(例如文件上传期间的 Skype 或 Chrome),下载带宽变得非常非常慢。这意味着我在上传过程中几乎无法浏览网页,甚至 ping8.8.8.8
需要 2-3 秒;通常这需要不到 0.06 秒。
在 Mac OS X Mavericks (10.9) 和更早版本中,我使用了节流来限制传出流量,因此在上传过程中可以使用互联网。
Throttled 使用 ipfw 进行节流,该功能已从 Yosemite (10.10) 中移除。推荐的替代方法是pf
,但 Mac OS X 内核没有 ALTQ 支持,这将启用流量整形(所以我尝试过,所有 altq 命令都被简单地忽略)。
我还尝试了Network Link Conditioner应用程序,但这并没有正确限制传出的包,因此在上传过程中互联网仍然无法使用。平均输出带宽是有限的,但它以几秒钟的周期波动/振荡。
那么如何限制传出带宽呢?或者我怎样才能至少提高 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
Run Code Online (Sandbox Code Playgroud)
要检查 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
Run Code Online (Sandbox Code Playgroud)
我在使用新的照片应用程序时遇到了这个问题。安装后,photolibraryd
应用程序会在后台上传所有照片,导致您提到的网络拥塞问题。我也安装了 Network Link Conditioner 并设置了 256Kbps 的上传限制。
起初它不起作用。原因很简单:上传是 TCP 连接(端口 443 上的 HTTPS)。启用 NLC 后,我必须先断开连接(我只是关闭 WiFi 一秒钟)。之后,根据新的 NLC 规则恢复上传,我可以同时使用互联网。
如需进一步了解,请查看启用 NLC 之前和之后的 PF 规则。请注意,当 NLC 启用时,您有一个虚拟网络 PF 规则?!是的,Apple 似乎没有支持 ALTQ,而是让 PF 与 dummynet 一起使用。我在我的博客上发布了有关 Mac OS X 上的 PF 的更多信息。
更新:不需要 NLC。可以使用直接创建虚拟网络管道和队列dnctl
。请阅读随附的手册页,了解使用它的详细说明和示例pf
。