go-libp2p icon indicating copy to clipboard operation
go-libp2p copied to clipboard

Fix dcutr roles in holepunching

Open MarcoPolo opened this issue 9 months ago • 0 comments
trafficstars

We did the opposite thing of what the spec says to do. This meant that we would fail to hole-punch with rust nodes because both sides would attempt to be the dialer.

The spec is a bit confusing since roles get flipped in the middle. But essentially:

  1. A connects to B.
  2. B initiates the /libp2p/dcutr protocol.
  3. After synchronizing, A and B dial each other. A is the client and B is the server.

This means the side handling the stream is the client, and the side initiating the stream should be the server.

#3044 exposes a flag to enable the spec behavior, but it is default set to legacy behavior. There are no backwards compatible migrations in that PR.

To close this issue we should implement a backwards compatible change. One suggestion by Sukun is:

On the side that in the new code will be the Server, can we add a random wait time after which the server will switch the role to Client and initiate the security negotiation?

MarcoPolo avatar Feb 05 '25 17:02 MarcoPolo