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.
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.
fuente
Aunque esta pregunta ya ha sido marcada como respondida, quería abordar algunas de las preguntas adicionales formuladas en el OP.
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.
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.
Los números de puerto se asignan de varias maneras, según tres rangos:
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)
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.)
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.
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.
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).
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.
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.
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.
fuente