Código fuente de Goethereum
Natp significa que cuando una máquina interna envía una solicitud de red al exterior a través del enrutador, es decir, la puerta de enlace, el enrutador recuerda la IP y el puerto del La máquina interna y la comunica con el exterior que realmente envía los datos. El enlace del puerto de red genera una tabla de mapeo temporal y, después de recibir datos de la red externa, los datos se reenvían a la máquina interna a través de esta tabla de mapeo. Los distintos tipos de mapeo de NAT se discutirán más adelante.
Upnp es similar a nat-pmp. Proporciona un servicio intermedio entre el enrutador y la máquina interna. La máquina interna solicita a upnp que vincule el puerto que utiliza con el puerto de red externo, de modo que cuando el enrutador. recibe una solicitud de red externa, primero va a upnp para averiguar si el puerto de la red externa ha sido asignado por upnp y, si está asignado, reenvía los datos al puerto correspondiente de la máquina interna.
Napt es una función imprescindible para los routers. Hay muchos tipos de tablas de mapeo NAT generadas por napt, pero todas tienen un límite de tiempo, es decir, el mapeo NAT original dejará de ser válido después de un período de tiempo y luego se creará un nuevo mapeo NAT. Las asignaciones de nat deben ser generadas por máquinas internas que realicen solicitudes a la red externa.
Upnp almacena la relación de mapeo durante mucho tiempo y las máquinas externas pueden solicitar activamente conexiones de red desde las máquinas internas. Por lo tanto, el enrutador primero debe habilitar la función upnp (generalmente el usuario activa upnp manualmente en la configuración del enrutador), y luego el programa interno de la máquina debe implementar la función del cliente upnp por sí mismo: buscar activamente servicios upnp, agregar asignaciones activamente, eliminar asignaciones, etc.
El cliente no puede controlar el mapeo de natp, pero puede controlar activamente el mapeo de upnp.
Según mi investigación actual sobre p2p en el código fuente de go-ethereum, ethereum solo asigna los puertos de upnpt y nat-pmp. Llama a una biblioteca de código abierto de terceros, pero no hace ningún agujero. en NATP udp.
No he mirado el código fuente de Bitcoin, pero no creo que haya perforado un agujero udp a través del NAT.