Merge #19958: doc: Better document features of feelers

2ea62cae483b764e30f61c06d8ac65755bbd864c Improve docs about feeler connections (Gleb Naumenko)

Pull request description:

  "feeler" and "test-before-evict" are two different strategies suggest in [Eclipse Attacks on Bitcoin’s Peer-to-Peer Network](https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-heilman.pdf). In our codebase, we use `ConnType::FEELER` to implement both.

  It is confusing, up to the point that our documentation was just incorrect.

  This PR:
  - ~clarifies this aspect by renaming "ConnType::FEELER" to "ConnType::PROBE", meaning that this connections only probes that the node is operational, and then disconnects.~
  - fixes the documentation

ACKs for top commit:
  amitiuttarwar:
    ACK 2ea62cae48. thank you!
  practicalswift:
    ACK 2ea62cae483b764e30f61c06d8ac65755bbd864c

Tree-SHA512: c9c03c09eefeacec28ea199cc3f697b0a98723f2f849f7a8115edc43791f8165e296e0e25a82f0b5a4a781a7de38c8954b48bf74c714eba02cdc21f7460673e5
This commit is contained in:
fanquake 2020-09-30 12:17:06 +08:00 committed by pasta
parent d6ac2b9771
commit 51fa0ed1a3
No known key found for this signature in database
GPG Key ID: 52527BEDABE87984
2 changed files with 14 additions and 5 deletions

View File

@ -2209,7 +2209,7 @@ void CConnman::SetTryNewOutboundPeer(bool flag)
// Return the number of peers we have over our outbound connection limit // Return the number of peers we have over our outbound connection limit
// Exclude peers that are marked for disconnect, or are going to be // Exclude peers that are marked for disconnect, or are going to be
// disconnected soon (eg one-shots and feelers) // disconnected soon (eg ADDR_FETCH and FEELER)
// Also exclude peers that haven't finished initial connection handshake yet // Also exclude peers that haven't finished initial connection handshake yet
// (so that we don't decide we're over our desired connection limit, and then // (so that we don't decide we're over our desired connection limit, and then
// evict some peer that has finished the handshake) // evict some peer that has finished the handshake)

View File

@ -161,10 +161,19 @@ enum class ConnectionType {
MANUAL, MANUAL,
/** /**
* Feeler connections are short lived connections used to increase the * Feeler connections are short-lived connections made to check that a node
* number of connectable addresses in our AddrMan. Approximately every * is alive. They can be useful for:
* FEELER_INTERVAL, we attempt to connect to a random address from the new * - test-before-evict: if one of the peers is considered for eviction from
* table. If successful, we add it to the tried table. * our AddrMan because another peer is mapped to the same slot in the tried table,
* evict only if this longer-known peer is offline.
* - move node addresses from New to Tried table, so that we have more
* connectable addresses in our AddrMan.
* Note that in the literature ("Eclipse Attacks on Bitcoins Peer-to-Peer Network")
* only the latter feature is referred to as "feeler connections",
* although in our codebase feeler connections encompass test-before-evict as well.
* We make these connections approximately every FEELER_INTERVAL:
* first we resolve previously found collisions if they exist (test-before-evict),
* otherwise connect to a node from the new table.
*/ */
FEELER, FEELER,