为什么中继负载差异很大

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.