Tengo algunas preguntas con respecto a lasiguiente explicación de los puertos que encontré.
La capa de Aplicación se comunica con la capa de Transporte a través de un puerto. Los puertos están numerados y las aplicaciones estándar siempre utilizan el mismo puerto.
El uso de un número de puerto permite que el protocolo de transporte (normalmente TCP) sepa qué tipo de contenido hay dentro del paquete, lo que le permite saber, en el lado de recepción, a qué protocolo de aplicación debe entregar los datos recibidos.
¿Por qué se utilizaría un número de puerto para saber qué tipo de protocolo de datos de aplicación reside en su interior cuando no existe una garantía absoluta?
Según tengo entendido, no existen restricciones sobre el tipo de datos de la aplicación que envía a través de un puerto (es solo una sugerencia). Además, ¿los datos del protocolo ya no están incluidos en alguna parte del paquete para este propósito?
Además, ¿qué sucede con los datos si envía HTTP o algún otro tipo de protocolo a un destino del puerto 25 (que espera SMTP)?
En tercer lugar, ¿qué sucede con los datos si los envía a un puerto que no está vinculado a ningún programa y, por lo tanto, no está siendo escuchado?
**Finalmente, si un puerto solo puede vincularse a un único programa, ¿cómo pueden ejecutarse en mi computadora varios programas que dependen de datos HTTP entrantes al mismo tiempo?****
¡Gracias de antemano!
Respuesta1
¿Por qué se utilizaría un número de puerto para saber qué tipo de protocolo de datos de aplicación reside en su interior cuando no existe una garantía absoluta?
Porque adivinar es una forma terrible de ejecutar las cosas y, de todos modos, no hay forma de evitar que, por ejemplo, alguien malintencionado envíe algo incorrecto. Por lo tanto, ayuda en el caso de que todos actúen bien y no empeora las cosas.
Según tengo entendido, no existen restricciones sobre el tipo de datos de la aplicación que envía a través de un puerto (es solo una sugerencia).
Correcto. De hecho, ni siquiera es una sugerencia, sólo un acuerdo que mucha gente comparte.
Además, ¿los datos del protocolo ya no están incluidos en alguna parte del paquete para este propósito?
No. Al menos, no en el nivel que normalmente indica el puerto: usted sabe qué tipo de protocolo IP de nivel superior se está enviando (por ejemplo: TCP, UDP), pero no cuál es su contenido (por ejemplo: HTTP, SMTP) .
Además, ¿qué sucede con los datos si envía HTTP o algún otro tipo de protocolo a un destino del puerto 25 (que espera SMTP)?
TCP simplemente pasa los datos a la capa de aplicación, que puede hacer lo que quiera. La mayoría de las veces, simplemente obtienes errores. A veces se obtienen agujeros de seguridad explotables.
Ocasionalmente, obtienes un buen comportamiento para clientes incorrectos, como los errores HTTP de texto sin formato que algunos servidores HTTPS darán cuando no uses SSL en el puerto.
En tercer lugar, ¿qué sucede con los datos si los envía a un puerto que no está vinculado a ningún programa y, por lo tanto, no está siendo escuchado?
Recibe un mensaje de error ICMP del sistema receptor. Técnicamente, el receptor podía hacer lo que quisiera, pero en la práctica eso es lo que sucede.
Finalmente, si un puerto sólo puede vincularse a un único programa, ¿cómo pueden ejecutarse en mi computadora varios programas que dependen de datos HTTP entrantes al mismo tiempo?
Cuando su navegador establece una conexión HTTP a un servidor remoto, utiliza un puerto local aleatorio y se comunica con el puerto conocido (80 o 443) en el servidor remoto. EN este caso, es único para cada conexión saliente distinta. (Aunque, técnicamente, no tiene por qué ser así, como en el caso del servidor).
En el lado del servidor, cuando escucha, solo un proceso puede aceptar nuevas conexiones en un puerto (en sockets Unix/BSD), pero puede pasar la conexión establecida a otros procesos para dar servicio. Como el conjunto es único, el tráfico se puede dirigir a la conexión correcta.