为什么中继负载差异很大
Tor 管理整个网络的带宽。对大多数中继来说,它运作良好。
但 Tor 的目标与 BitTorrent 等协议不同。
Tor 想要低延迟的网页,需要较快的连接和动态余量。
BitTorrent 想要大量下载,这就需要使用所有的带宽。
我们正在开发新的带宽扫描程序 ,更容易理解和维护。
它可对未测量或测量值较低的中继进行诊断。
Tor 为什么需要带宽扫描程序?
大多数供应商会告诉你本地连接的最大速度。
但是 Tor 用户来自世界各地,而且用户随机地连接 1 或2 个守卫中继。
所以,我们需要知道每个中继能连接到全世界的速度。
因此,即使所有中继运营者将其播放带宽设置为本地连接速度,仍需带宽管理机构来平衡互联网不同部分之间的负载。
正常的中继负载是多少?
正常情况下,大多数中继的负载使用 30%-80% 的容量。
这对客户端是有益的:过载中继延迟较高。
(我们希望有足够的中继,并且每个中继的负载是带宽的 10%。这样,Tor 的速度就将和普通互联网一样快)。
有时,中继变慢是因为它的处理器慢或者是连接受到了限制。
有时是因为网络太慢:中继与大多数其他 Tor 中继的对等连接不好,或者距离太远。
找出限制中继的原因
很多事情会减慢中继的速度。下面是如何查明原因。
系统限制
- 检查中继的内存、CPU 和套接/文件描述符的使用情况
启动时 Tor 记录其中一些信息。其他的可以使用 top 或者类似工具查看。
服务商限制
- 检查你的中继提供商到其他中继的互联网对等连接(带宽、延迟)。
通过 Comcast 传输的中继有时会变得比较慢。
北美和西欧以外的中继通常比较慢。
Tor 网络限制
中继带宽可以被中继自身观测的带宽,或被目录管理机构测量的带宽限制。
以下是如何找出哪种测量值限制了中继:
- 在 consensus-health(大页面)上检查对中继的每一个投票,并检查中值。
如果中继没有被一些目录管理机构标记为“Running”:
- 是否有错误的 IPv4 或 IPv6 地址?
- 它的 IPv4 或 IPv6 地址是否从某些网络不可连接?
- 它的 IPv4 地址上是否有 2 个以上的中继?
否则,请检查中继的观测带宽和带宽速率(限制)。
在Metrics上查找中继。
然后,将鼠标移到带宽标题上,查看观测到的带宽和中继带宽速度。
可以参考以下较具体的案例:共识权重下降和出口中继的上升速度。
如何解决
这些数字中的最小值限制了分配给中继的带宽。
- 如果是带宽速率问题,在 torrc 中增加 BandwidthRate/Burst 或者 RelayBandwidthRate/Burst。
- 如果是观测带宽,那么除非看到自身变快,中继不会要求更多带宽。
你需要弄清楚为什么很慢。
- 如果是中值测量的带宽,从大多数的带宽管理机构来看,你的中继较慢。
你需要弄清楚为什么测量值较低。
对中继进行自测
如果你的中继认为它很慢,或者带宽管理机构认为它很慢,可自己测试带宽:
Run a test using tor to see how fast tor can get on your network
For this, you need to configure a tor client to use use your relay as entry.
If your relay has only Guard
flag, set EntryNodes
with your relay fingerprint in torrc
.
If your relay doesn't have Guard
flag or it has Guard
and Exit
flags,
you can't set your relay as an entry node (see https://gitlab.torproject.org/tpo/core/tor/-/issues/22204),
but you can set it as your bridge, even if it is not a bridge.
To set your relay as a bridge, add to your torrc
:
Bridge <ip>:<port>
UseBridge 1
Then download a large file using your SocksPort
as a socks proxy.
For this, you can use curl
, eg:
curl https://target/path --proxy socks5h://<user>:<password>@127.0.0.1:<socks-port>
Using different user
/password
guarantees different circuits. You can use $RANDOM
.
That will give you some idea of how much traffic your relay can sustain.
Alternatively, you can run relay_bw
to test your relay using 2 hops circuits, in a similar way as sbws does.
Run a test using tor and chutney
to find out how fast tor can get on your CPU.
Keep increasing the data volume until the bandwidth stops increasing.