En el inicio, el protocolo de descubrimiento utiliza un enfoque de estilo Kademlia para encontrar pares. Por lo tanto, obtenemos una tabla de enrutamiento local que contiene (dirección IP, puerto UDP e ID de nodo) de algunos pares activos y en línea.
La siguiente etapa, según tengo entendido, es:
¿Cuál es la estrategia utilizada para seleccionar a qué nodos conectarse?
p.ej
Solo una respuesta parcial para el primer par de subpreguntas...
¿A cuántos nodos nos conectamos?
El número máximo se establece en 25 de forma predeterminada , pero se puede configurar mediante el --maxpeers
indicador en la línea de comando. Este límite es flexible cuando se tienen en cuenta los nodos "de confianza". (Vea abajo.)
El detalle más fino es que también podemos establecer el total combinado de conexiones entrantes y salientes pendientes--maxpendpeers
usando la bandera. Este es el número de nodos que realizan simultáneamente protocolos de enlace de conexión, que pueden tener éxito o no, y que depende de si podemos verificar su identidad. Está configurado en 66 de forma predeterminada ( 50 y 16 respectivamente).
¿Cuál es el criterio para seleccionar a qué nodos conectarse?
Hay tres categorías diferentes de nodos a los que nos conectamos, aunque no estoy seguro de los criterios que deben cumplir (aparte de que deben completar el proceso de reconocimiento):
Nodos de arranque
// Bootstrap nodes are used to establish connectivity
// with the rest of the network.
BootstrapNodes []*discover.Node
Nodos estáticos:
// Static nodes are used as pre-configured connections which are always
// maintained and re-connected on disconnects.
StaticNodes []*discover.Node
Nodos de confianza:
// Trusted nodes are used as pre-configured connections which are always
// allowed to connect, even above the peer limit.
TrustedNodes []*discover.Node
admin.addPeer()
le permite agregar una nueva entrada a la matriz de nodos estáticos.
JackWinters
nTab
en server.go se completa el proceso de descubrimiento de DHT aldial.go
que se intenta iniciar el protocolo de enlace. Si server.go verifica la identidad, entonces se agregan los pares que pasan,peers[]
pero luego está en algún lugar del controlador del protocolo Eth dondepeerset
se construye.