¿Qué son realmente los puertos y protocolos?

11

Escucho a la gente hablar sobre puertos y protocolos (en relación con las redes de computadoras), y a menudo les proporcionan analogías (por ejemplo: "un puerto es muy parecido a un puerto de envío, envía y recibe datos como un puerto de envío envía y recibe mercancías"). de otros puertos ") y cosas así.

Entiendo lo que todo esto significa, pero solo a un nivel muy artificial. Básicamente, sé lo que es un puerto y entiendo qué son los protocolos, pero ¿qué son realmente?

¿Son estos puertos objetos físicos? ¿Son algo integrado en parte de mi computadora? ¿Cuántos puertos hay? ¿Puedo aumentar o disminuir el número de puertos? ¿Son incluso algo físico? O escrito en código? ¿Dónde está este código? ¿El sistema operativo? ¿Qué es realmente un puerto?

¿Qué son los protocolos? Me imagino que son algún tipo de código ... ¿Puedes crear tu propio protocolo? ¿Cómo se obtiene un puerto específico para ejecutar un protocolo específico? ¿Qué idioma usas para crear un protocolo? ¿Cómo define o inventa un nuevo protocolo?

Beto
fuente

Respuestas:

9

Además de la respuesta de Hello71, podría ayudar visualizar un puerto pensando en la estructura de una dirección en un paquete. Un paquete es una unidad de datos que se pasa por una red. TCP es un ejemplo de un protocolo de capa de transporte que usa puertos y se usa comúnmente sobre IP.

Por lo tanto, IP tiene dos componentes de direccionamiento: la IP de origen y la IP de destino. TCP agrega a esto mediante el uso de un puerto de origen y un puerto de destino. Son los puertos los que permiten a la máquina receptora diferenciar el tráfico destinado a la misma dirección IP, es decir, si tiene un servidor que recibe tanto solicitudes web como correo electrónico en una sola dirección IP, debe determinar qué aplicación debe recibir los datos. - el servicio de correo electrónico o el servicio web. Por lo tanto, pueden verse así si un solo usuario realizara una solicitud web y una solicitud de correo electrónico al mismo servidor:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

El servicio web posee el puerto 80 y el servicio de correo electrónico posee el puerto 25: "escuchan" en sus respectivos puertos, lo que permite que el tráfico termine en el lugar correcto.

El puerto de origen es "efímero", es decir, está compuesto en el momento en que se envía el paquete. Sin embargo, todavía tiene un propósito útil. Permite que ambos extremos de la conexión realicen un seguimiento de conversaciones separadas. Considere si nuestro usuario envió dos solicitudes web simultáneas:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

Esto le permite al servicio web saber que se trata de solicitudes separadas, pero también, el tráfico de retorno del servidor web (las páginas web) se envía de vuelta a los puertos de origen respectivos, lo que permite al navegador saber a qué solicitud responde el servidor.

Tenga en cuenta que todo esto se refiere a números de puerto, desde una perspectiva TCP / IP, los datos reales que se mueven a través de estos puertos podrían ser cualquier cosa. No le importa o no tiene conocimiento de las aplicaciones, por lo que si tuviera tráfico web en el puerto 25 y correo electrónico en el puerto 80, no sería más sabio.

Depende de la aplicación de envío y recepción asegurar que los datos tengan la estructura correcta, y aquí es donde entran los protocolos de aplicación. HTTP es un ejemplo de un protocolo de aplicación que utilizan los navegadores web para comunicarse con los servidores web. Es un protocolo bien definido que garantiza que el navegador enviará solicitudes a cualquier servidor web y que el servidor web comprenderá y responderá con sensatez. Pero lo que no incluye en su definición es nada sobre cómo los paquetes pasan de A a B, es responsabilidad de las capas anteriores, las capas de transporte, internet y enlace.

Paul
fuente
¡Gracias! Esta fue solo la respuesta que estaba buscando, ¡gracias por ayudar!
Bob
3

Hm. Creo que el mejor lugar para comenzar sería mirar el IP Suite, también conocido como el modelo TCP / IP. (Ignorando las otras capas del modelo OSI por motivos de simplicidad).

Básicamente, es una serie de capas:

Capa de aplicación: HTTP, FTP, POP, SSH, etc.
Capa de transporte: TCP, UDP, etc.
Capa de Internet: IP, ICMP, etc.
Capa de enlace: Ethernet, etc.

La mayoría de los puertos se implementan en la capa de transporte (capa 4: sí, la numeración es correcta).

La mayoría de las pilas TCP y / o UDP implementadas en los sistemas operativos utilizan un sistema básico de asignación de puertos a los programas y simplemente generan eventos en estos programas a medida que los paquetes llegan a través de la red. Sin embargo, cualquier implementación podría funcionar teóricamente; incluso puede haber pilas hipotéticas alternativas consideradas en la academia.

Se ha definido que TCP tiene un total de 65535 puertos, que cualquier programa puede usar para hacer lo que quiera (aunque muchos sistemas operativos limitan el uso de puertos por debajo de 1024, dándoles un estado especial ad hoc). Aunque hay algunas listas limitadas, no existe un estándar real para definir quién obtiene qué puerto y qué puerto ejecuta qué programa. Un puerto es, por lo tanto, más o menos un número aleatorio en el que las diferentes implementaciones de un programa deciden ponerse de acuerdo para comunicarse. Por supuesto, los diseñadores de dichos programas intentan evitar los puertos que otros programas populares ya han elegido.

Concedido que de ninguna manera se requiere ejecutar usando TCP. Algunos protocolos se ejecutan en la capa básica de Internet, o incluso en la capa básica de enlace, principalmente con fines de eficiencia, o porque estos protocolos se inventaron incluso antes de que existieran TCP o IP. Por supuesto, al hacerlo, cambia la simplicidad y la extensa comprobación de errores de las bibliotecas de redes del sistema operativo.

Para obtener más detalles, consulte las páginas de Wikipedia sobre el modelo OSI, TCP e IP.

Hola71
fuente
Entiendo todo eso. Entonces, básicamente, ¿un puerto no es algo físico? ¿Es algo que está programado? ¿Dónde se define el puerto en una computadora? Y luego, para los protocolos, ¿cómo se crean? ¿Están programados?
Bob
No, un puerto no es algo físico en este contexto (obviamente, un puerto USB es físico pero no está relacionado con este tema). Los protocolos se definen a través de RFC ( en.wikipedia.org/wiki/Request_for_Comments ) y se implementan en código programado.
Paul
¿Sería correcto decir que TCP es un proceso del sistema que reserva memoria para almacenar datos entrantes desde IP (o almacenar datos para ser recuperados por IP) y que esta memoria se divide en 'puertos'? Y que otras aplicaciones (procesos) como HTTP, pueden notificar a TCP que les gustaría reservar puertos específicos (es decir, 80 y 443). Entonces se convierte en el trabajo de TCP: 1. ¿permitir que HTTP agregue datos salientes a esas direcciones de memoria e 2. informar a HTTP cuando se hayan agregado datos entrantes a esas direcciones de memoria?
Zach Smith
Quizás Bob estaba confundiendo entre los puertos de protocolo y los puertos físicos del conmutador. La parte del puerto del protocolo fue respondida bien por varios, aunque faltaba alguna fuente. En cuanto a los puertos físicos, esos son lugares de entrada y salida de entrada donde se conectan los cables que permiten la transferencia de datos de la red. Eso puede implicar circuitos electrónicos, receptores de fibra óptica, láser y tampones. L. Peterson 4ta edición.
nassim
3

Aunque esta pregunta ya ha sido marcada como respondida, quería abordar algunas de las preguntas adicionales formuladas en el OP.

¿Son estos puertos objetos físicos?

No hay puertos no son objetos físicos.

Un número de puerto es un entero sin signo de 16 bits, lo que significa que el rango de puertos disponibles para usar es de 1 a 65535 (el número de puerto 0 está reservado y no se puede usar). Un proceso asocia sus canales de entrada o salida a través de enchufes de Internet, un tipo de descriptor de archivo, con un protocolo de transporte, un número de puerto y una dirección IP. Este proceso se conoce como enlace y permite enviar y recibir datos a través de la red.

¿Son algo integrado en parte de mi computadora? ¿Son incluso algo físico? O escrito en código? ¿Dónde está este código? ¿El sistema operativo? ¿Qué es realmente un puerto?

El software de red del sistema operativo tiene la tarea de transmitir datos salientes de todos los puertos de la aplicación a la red, y reenviar los paquetes de red entrantes a un proceso haciendo coincidir la dirección IP y el número de puerto del paquete.

Solo un proceso puede vincularse a una combinación de puerto y dirección IP específica utilizando el mismo protocolo de transporte. Las fallas comunes de la aplicación, a veces llamadas conflictos de puerto, ocurren cuando varios programas intentan vincularse a los mismos números de puerto en la misma dirección IP usando el mismo protocolo.

El párrafo anterior es clave para comprender por qué los puertos / protocolos se usan en redes. Si no tuviéramos una forma de especificar el protocolo, que transmite los datos a través de un número de puerto apon acordado, no podría hacer más de 1 cosa a la vez (verifique su correo electrónico y use la web) porque su computadora tendría no hay forma de diferenciar entre los datos de su cliente de correo electrónico y los datos del sitio web que está navegando.

¿Cuántos puertos hay?

Los números de puerto se asignan de varias maneras, según tres rangos:

  1. Puertos conocidos / del sistema (0-1023): esta gama de puertos los utilizan los procesos del sistema que proporcionan tipos de servicios de red ampliamente utilizados (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)

  2. Puertos registrados / de usuario (1024-49151): el rango de números de puerto de 1024 a 49151 son los puertos registrados. IANA los asigna para un servicio específico previa solicitud de una entidad solicitante. (Webmin / 10000, HTTP Proxy / 8080, Protocolo de escritorio remoto / 3389, etc.)

  3. Puertos efímeros / dinámicos / privados (49152-65535): el rango 49152–65535 contiene puertos dinámicos o privados que no se pueden registrar con IANA. Este rango se utiliza para fines personalizados o temporales y para la asignación automática de puertos efímeros.

¿Puedo aumentar o disminuir el número de puertos?

Con respecto a poder aumentar el número de puertos disponibles, no puede asignar un puerto superior a 65535 debido a las matemáticas que permiten que la red funcione (binario), por lo que la respuesta a esta pregunta es no, no puede aumentar el número total de puertos disponibles puertos superiores a 65535.

¿Qué son los protocolos?

Dentro de la informática, un protocolo de comunicaciones es un sistema de reglas digitales para el intercambio de mensajes dentro o entre computadoras. Cuando los mensajes se intercambian a través de una red informática, el sistema de reglas se denomina protocolo de red. Un protocolo es básicamente un conjunto acordado de instrucciones / comandos / llamadas que dos dispositivos en red pueden comunicar. ¿Piensa si no hubiéramos acordado protocolos y servidores web que hubieran enviado datos aleatoriamente a los navegadores web que el navegador no sabía con qué hacer? Afortunadamente, tenemos HTTP y cada navegador web creado ha incorporado el software para que pueda comunicarse con cualquier servidor web que también hable el mismo idioma (HTTP).

Me imagino que son algún tipo de código ... ¿Puedes crear tu propio protocolo? ¿Qué idioma usas para crear un protocolo?

Sí, puedes crear tus propios protocolos. Los protocolos están escritos en una amplia variedad de idiomas. No soy un desarrollador de software, pero estoy bastante seguro de que, siempre que el idioma que esté utilizando tenga bibliotecas que le permitan escribir software que pueda comunicarse a través de TCP / IP (hay otros conjuntos de protocolos, pero TCP / IP es el más ampliamente utilizado) puede usar ese lenguaje para escribir un protocolo. El lenguaje de programación 'C' parece ser el más utilizado para escribir protocolos. Esto se debe al hecho de que muchos de los primeros protocolos de red se desarrollaron en UNIX en la década de 1970 y C resulta ser el lenguaje en el que está escrito UNIX.

¿Cómo se obtiene un puerto específico para ejecutar un protocolo específico?

Esto difiere bastante entre los sistemas operativos. Por ejemplo, para cambiar el número de puerto en el que se ejecuta el Protocolo de escritorio remoto en Windows, debe editar el registro. En Linux, muchos de los servicios de red se pueden configurar directamente desde un archivo .conf para un servicio de red en particular.

¿Cómo define o inventa un nuevo protocolo?

Vea https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/ para una publicación de blog de alguien que recientemente ha desarrollado un nuevo protocolo de red y qué tipo de cosas tuvo que hacer por el camino.

Richie086
fuente