Solía pensar que mi comprensión de los protocolos TCP y UDP, aunque limitada, es correcta. Aunque recientemente, cuando me di cuenta de que los compañeros que comparten un torrente común pueden conectarse entre sí a través de protocolos TCP o UDP sin la necesidad real de reenviar puertos, me confundí. ¿Cómo sabe un enrutador a qué máquina de la red local reenviar los paquetes? Cualquier ayuda para aclarar eso sería apreciada. Los diagramas y artículos del protocolo de torrent en Internet están muy simplificados y, por lo tanto, no contienen ninguna información que pueda ayudar.Conexión punto a punto de Torrent
Respuesta
El enrutador (que ejecuta NAT) rastrea todos los paquetes salientes y luego permite los paquetes entrantes que son respuestas a esos paquetes salientes.
Por lo tanto, si realiza una conexión TCP saliente a google.com:80, se volverán a permitir los paquetes (en respuesta) de google.com:80. Si dos hosts internos hacen una conexión al mismo puerto, puede diferenciarlos porque el puerto local es diferente, por ejemplo:
1) El host A establece una conexión con Google y el enrutador usa su propio puerto local 10001 para el TCP conexión
2) Host B hace una conexión similar y el router utiliza su propio 10002 puerto local para la conexión TCP
Si llega un paquete de google.com:80 y su dirigida para el 10001 en el puerto la IP WAN del enrutador luego el enrutador sabe enviarla al Anfitrión A. Si está direccionada para el puerto 10002, el enrutador sabe enviarlo al Anfitrión B.
Si tiene dos hosts punto a punto detrás de los enrutadores (dos NAT), entonces no hay forma de establecer la conexión, salvo que haya algo para transferir información sobre las direcciones IP de cada uno (es decir, un servidor que ambos pueden usar para intercambiar información) pueden intentar adivinar qué puerto elegirá el enrutador como un puerto local y luego comenzar a enviarse datos entre sí en ese puerto, a los enrutadores WAN IP. Debido a que ambos enrutadores ven que los datos salen OUT, entonces configuran una regla para permitir la entrada de datos. Si los puertos se adivinan correctamente, los paquetes de cada lado pueden pasar porque ambos enrutadores tienen una regla establecida. Esto se conoce como perforación de agujeros UDP/TCP.
http://en.wikipedia.org/wiki/UDP_hole_punching
I creen Skype es un ejemplo de una aplicación que utiliza UDP y hace la perforación de orificios.
¡Gracias por una respuesta perspicaz! Creo que ahora entiendo suficientemente el tema para dejar que mi mente descanse ... por ahora. Por cierto, Skype es una bestia inteligente. Creo que podría detectar cuando estás en una conversación con una persona de tu red local (una vez podría hablar con mi hermana mientras el enrutador todavía se conectaba a Internet después de reiniciar) – Neob91
Hablando estrictamente, dado que no ha calificado su enrutador de términos con 'NAT', la respuesta es que el enrutador usa ARP para determinar la dirección MAC del host de destino y luego envía y encuadre ethernet con esa dirección MAC como la dirección objetivo
Pero creo que eso no era lo que querías decir.
¿Quiere decir cómo sabe un enrutador NATting a dónde reenviar los paquetes entrantes?
La respuesta es que el enrutador mantiene una lista de "conexiones" activas para permitirle hacer la traducción de direcciones. Utiliza el número de puerto externo para asignar a una dirección de host interna y número de puerto. En el caso de TCP, el concepto de "conexión" es simplemente si hay una conexión TCP (aunque generalmente con un tiempo de espera para detener la fuga). En el caso de UDP, es más difícil porque no hay una conexión UDP per se, por lo que generalmente es un caso de seguimiento por tiempo de espera solo.
- 1. Conexión de conexión de punto en dbml a app.config
- 2. Conversión de punto flotante a punto fijo
- 3. Punto más cercano a un punto dado
- 4. API de red punto a punto Bluetooth iOS
- 5. video punto a punto de iOS a Android?
- 6. Replicación punto a punto de una base de datos sqlite
- 7. biblioteca de almacenamiento punto a punto en Java
- 8. Expansión para '../' (punto punto barra)
- 9. Mostrar progreso punto-punto-punto en un botón WPF
- 10. Comunicación punto a punto entre dispositivos iOS y Android
- 11. Replicación punto a punto en SQL Server 2005/08
- 12. API punto a punto de Wi-Fi en Mac OS X
- 13. Evitar SSL "Estás a punto de ser redireccionado a una conexión que no es segura." mensaje
- 14. ¿Cuál es la diferencia entre la seguridad punto a punto y de extremo a extremo?
- 15. Gire un punto alrededor de un punto con OpenCV
- 16. Calcular punto final dado distancia, rodamiento, punto de partida
- 17. punto de interpolación lineal
- 18. ¿Convertir variable de punto flotante a entero?
- 19. recomendaciones Puesta a punto de mysqltuner.pl: query_cache_limit
- 20. Distancia de un punto a un polígono
- 21. Límites de punto flotante
- 22. ¿Cuál es el punto de verificar la accesibilidad antes de hacer una conexión a internet?
- 23. Cómo crear un punto de acceso inalámbrico a partir de una conexión 3G en iOS
- 24. ¿Qué significa un tope o punto o punto (.) En Haskell?
- 25. punto más cercano en la superficie cóncava desde el punto
- 26. ¿Cuándo un punto muerto no es un punto muerto?
- 27. Girar un punto por otro punto en 2D
- 28. Punto flotante o punto fijo para aplicaciones Android NDK OpenGL?
- 29. La mejor manera de encontrar un punto en un círculo más cercano a un punto dado
- 30. Dibuje un punto a una distancia establecida de un punto base
FYI: 90% de la mayoría de los enrutadores/cortafuegos bloquean UDP! –
¿Y de dónde sacas esa estadística? Nunca tuve un problema con mis aplicaciones UDP (en casa en varios SOHO, en coffeeshops o en oficinas), ya sea tftp, juegos o algo personalizado. –
La mayoría de los enrutadores bloquean UDP * broadcast * de forma predeterminada. –