Asignación de puertos NAT: nat, upnp y nat-pmp
Me gusta resumirlo en un lenguaje muy simple:
natp significa que la máquina interna envía solicitudes de red al mundo exterior a través del enrutador o puerta de enlace. El enrutador recuerda la IP y el puerto. de la máquina interna y, al mismo tiempo, vincularlo al puerto de red externo que realmente envía los datos, generar una tabla de mapeo temporal y luego reenviar los datos a la máquina interna a través de esa tabla de mapeo cuando se reciben datos de la red externa. . Existen varios tipos de asignaciones para nat, que se analizarán más adelante. Los distintos tipos de mapeo se analizan más adelante.
upnp es similar a nat-pmp. Ambos proporcionan servicios intermedios entre el enrutador y la máquina interna. La máquina interna solicita a upnp que vincule el puerto que utiliza con el puerto externo, de modo que cuando el enrutador reciba un. Solicitud externa, primero ingresará a upnp para averiguar si el puerto externo ha sido asignado por upnp y, de ser así, reenviará los datos al puerto correspondiente en la máquina interna.
napt es una función del enrutador. Puede generar varios tipos de tablas de mapeo nat, pero todas estas asignaciones tienen límites de tiempo, lo que significa que después de un período de tiempo, el mapeo nat original dejará de ser válido. y cree un nuevo mapeo nat. El mapa nat primero debe ser generado por la máquina interna que realiza la solicitud a la red externa.
upnp mantendrá el mapeo a largo plazo para que las máquinas externas puedan iniciar solicitudes de conexión de red desde las máquinas internas. Por lo tanto, lo primero que debe hacer es habilitar upnp en el enrutador (generalmente los usuarios deben ingresar la configuración del enrutador y habilitar upnp manualmente), y luego el programa en la máquina interna debe implementar la función de cliente upnp por sí mismo: buscando activamente para servicios upnp, agregar mapas activamente, eliminar mapas, etc.
El cliente no puede controlar el mapeo natp, pero puede controlar activamente el mapeo upnp.
Según mi investigación actual sobre p2p en el código fuente de go-ethereum, Ethereum solo realiza mapeo de puertos para upnpt y nat-pmp, y llama a una biblioteca de código abierto de terceros durante el proceso de implementación, pero no no perforación NATP udp.
El código fuente de Bitcoin aún no se ha leído, pero no debería poder perforar UDP a través de NAT.