Skip to content

Commit c7ad944

Browse files
committed
Merge #19958: doc: Better document features of feelers
2ea62ca 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 2ea62ca. thank you! practicalswift: ACK 2ea62ca Tree-SHA512: c9c03c09eefeacec28ea199cc3f697b0a98723f2f849f7a8115edc43791f8165e296e0e25a82f0b5a4a781a7de38c8954b48bf74c714eba02cdc21f7460673e5
2 parents de4b7f2 + 2ea62ca commit c7ad944

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/net.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1811,7 +1811,7 @@ void CConnman::SetTryNewOutboundPeer(bool flag)
18111811

18121812
// Return the number of peers we have over our outbound connection limit
18131813
// Exclude peers that are marked for disconnect, or are going to be
1814-
// disconnected soon (eg one-shots and feelers)
1814+
// disconnected soon (eg ADDR_FETCH and FEELER)
18151815
// Also exclude peers that haven't finished initial connection handshake yet
18161816
// (so that we don't decide we're over our desired connection limit, and then
18171817
// evict some peer that has finished the handshake)

src/net.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,19 @@ enum class ConnectionType {
153153
MANUAL,
154154

155155
/**
156-
* Feeler connections are short lived connections used to increase the
157-
* number of connectable addresses in our AddrMan. Approximately every
158-
* FEELER_INTERVAL, we attempt to connect to a random address from the new
159-
* table. If successful, we add it to the tried table.
156+
* Feeler connections are short-lived connections made to check that a node
157+
* is alive. They can be useful for:
158+
* - test-before-evict: if one of the peers is considered for eviction from
159+
* our AddrMan because another peer is mapped to the same slot in the tried table,
160+
* evict only if this longer-known peer is offline.
161+
* - move node addresses from New to Tried table, so that we have more
162+
* connectable addresses in our AddrMan.
163+
* Note that in the literature ("Eclipse Attacks on Bitcoin’s Peer-to-Peer Network")
164+
* only the latter feature is referred to as "feeler connections",
165+
* although in our codebase feeler connections encompass test-before-evict as well.
166+
* We make these connections approximately every FEELER_INTERVAL:
167+
* first we resolve previously found collisions if they exist (test-before-evict),
168+
* otherwise connect to a node from the new table.
160169
*/
161170
FEELER,
162171

0 commit comments

Comments
 (0)