¿Cuál es el propósito de los puertos?


4

Tengo algunas preguntas con respecto a la siguiente explicación de 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 usan el mismo puerto.

El uso de un número de puerto permite que el protocolo de transporte (típicamente TCP) sepa qué tipo de contenido está 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 usaría un número de puerto para indicar qué tipo de protocolo de datos de aplicación reside dentro cuando no hay una garantía absoluta?

    Según tengo entendido, no hay restricciones sobre qué tipo de datos de aplicación envía a través de un puerto (es solo una sugerencia). Además, ¿no se incluyen los datos del protocolo en algún lugar 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)?

  • Tercero, ¿qué sucede con los datos si los envía a un puerto que no está vinculado con ningún programa y, por lo tanto, no se los escucha?

  • ** Finalmente, si un puerto solo puede vincularse a un solo programa, ¿cómo pueden ejecutarse en mi computadora varios programas que dependen de los datos HTTP entrantes al mismo tiempo? ****

¡Gracias por adelantado!

Respuestas:


15

¿Por qué se usaría un número de puerto para indicar qué tipo de protocolo de datos de aplicación reside dentro cuando no hay una garantía absoluta?

Porque adivinar es una forma terrible de ejecutar las cosas, y no hay forma de que puedas detener, por ejemplo, que alguien malicioso envíe la cosa incorrecta de todos modos. Por lo tanto, ayuda en el caso de que todos jueguen bien y no empeoren nada.

Según tengo entendido, no hay restricciones sobre qué tipo de datos de aplicación envía a través de un puerto (es solo una sugerencia).

Correcto. De hecho, ni siquiera es una sugerencia, solo un acuerdo que muchas personas comparten.

Además, ¿no se incluyen los datos del protocolo en algún lugar del paquete para este propósito?

No. Al menos, no en el nivel que el puerto suele indicar: usted sabe qué tipo de protocolo IP de nivel superior se está enviando (por ejemplo: TCP, UDP), pero no cuál es el 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, solo obtienes errores. A veces obtienes agujeros de seguridad explotables.

Ocasionalmente, obtiene un buen comportamiento para clientes incorrectos, como los errores HTTP de texto sin formato que algunos servidores HTTPS generarán cuando no use SSL en el puerto.

Tercero, ¿qué sucede con los datos si los envía a un puerto que no está vinculado con ningún programa y, por lo tanto, no se los escucha?

Recibe un mensaje de error ICMP del sistema receptor. Técnicamente, el receptor podría hacer lo que quisiera, pero en la práctica, eso es lo que sucede.

Finalmente, si un puerto solo puede vincularse a un solo programa, ¿cómo pueden ejecutarse en mi computadora varios programas que dependen de datos HTTP entrantes al mismo tiempo?

Cuando su navegador realiza 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 que 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 al servicio. Como el conjunto es único, el tráfico se puede enrutar a la conexión correcta.


Mirando la segunda a la última respuesta, ¿el enrutador verifica los números de puerto y devuelve un error si no es válido? Mirando la tercera a la última respuesta, ¿el programa que lo solicita toma y maneja los datos o el sistema operativo? ¿Y para aclarar su última respuesta, puede sortear la limitación creando un sistema de subpuerto con un servidor y solicitando conexiones al servidor? ¿Los servidores agregan sus propios datos a la pila antes de enviarlos, para que se puedan distinguir los datos entrantes?
Griffin

El sistema final envía cualquier respuesta de error; ¿Cómo podría un enrutador intermedio saber qué procesos se están ejecutando en el sistema de destino?
Daniel Pittman

El programa, en general. El sistema operativo es solo una tubería, pasando los datos a lo que esté escuchando en ese puerto. (En términos generales, en el sentido de que algunas plataformas ejecutan servidores en el núcleo, lo que puede difuminar las líneas, pero, esencialmente, sigue siendo la aplicación.)
Daniel Pittman

Para su pregunta final, la respuesta es "se dirige en la dirección equivocada"; la acceptoperación devuelve un nuevo identificador de archivo para la conexión TCP, que trata como cualquier otro identificador de archivo Unix. El resto es solo tuberías simples que mueven datos a través de la red. Sin subpuertos, en datos agregados, nada. Simplemente paquetes simples con esos cuatro valores que identifican la conexión.
Daniel Pittman

Ok, entonces un programa solicita una conexión con otra computadora cuando dirige datos a, por ejemplo, el puerto 80; Entonces esa computadora tiene un programa que está escuchando el puerto 80 cuya función es transferir la conexión que hace a uno de los puertos abiertos de la máquina. ¿Está bien? ¿Cómo obtiene la computadora que solicita la conexión el nuevo número de puerto al que está conectada?
Griffin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.