Bittorrent:get_peers DHT 响应中的令牌大小

Bittorrent: Token size in get_peers DHT response

我已阅读 BEP 5 规范并期望 DHT 消息中的令牌值始终具有 20 个字节的长度。因为:

The BitTorrent implementation uses the SHA1 hash of the IP address concatenated onto a secret that changes every five minutes and tokens up to ten minutes old are accepted.

而 SHA1 是 20 个字节。
但在实践中,我在 get_peers 响应中得到了 8 字节长的令牌。 BEP 5 还包含使用 8 字节长令牌的示例。

那是其他类型的令牌吗?如果是这样,它的长度是否有任何规范或限制?我可以假设它 <= 20 吗?

UPD:事实上,我也得到了大小为 20 和 4 的令牌。很少:2、3、7。

sha1 用于 生成令牌并不意味着您收到的 sha1 输出,即 sha1使用不排除额外的处理步骤。另外前一句说

Since the token is merely returned by the querying node to the same node it received the token from, the implementation is not defined

因此,原始 bittorrent 客户端使用的实现只是一个如何以无状态方式完成的示例。

令牌是一个不透明的值,具有特定于实现的长度,应按原样返回给发件人。