En redes informáticas , un puerto o número de puerto es un número asignado para identificar de forma única un punto final de conexión y para dirigir datos a un servicio específico. A nivel de software, dentro de un sistema operativo , un puerto es una construcción lógica que identifica un proceso específico o un tipo de servicio de red . Un puerto a nivel de software se identifica para cada combinación de protocolo de transporte y dirección por el número de puerto asignado a él. Los protocolos de transporte más comunes que utilizan números de puerto son el Protocolo de control de transmisión (TCP) y el Protocolo de datagramas de usuario (UDP); esos números de puerto son números sin signo de 16 bits .
Un número de puerto siempre está asociado con una dirección de red de un host , como una dirección IP , y el tipo de protocolo de transporte utilizado para la comunicación. Completa la dirección de origen o de destino de un mensaje. Los números de puerto específicos se reservan para identificar servicios específicos, de modo que un paquete que llega se pueda reenviar fácilmente a una aplicación en ejecución. Para este propósito, los números de puerto inferiores a 1024 identifican los servicios históricamente utilizados con mayor frecuencia y se denominan números de puerto conocidos . Los puertos con números más altos están disponibles para uso general por parte de las aplicaciones y se conocen como puertos efímeros .
Los puertos proporcionan un servicio de multiplexación para múltiples servicios o múltiples sesiones de comunicación en una dirección de red. En el modelo de arquitectura de aplicaciones cliente-servidor , se pueden iniciar múltiples sesiones de comunicación simultáneas para el mismo servicio.
Para TCP y UDP, un número de puerto es un entero sin signo de 16 bits, por lo que varía de 0 a 65535. Para TCP, el puerto número 0 está reservado y no se puede utilizar, mientras que para UDP, el puerto de origen es opcional y un valor de cero significa que no hay puerto . Un proceso asocia sus canales de entrada o salida a través de un socket de Internet , que es un tipo de descriptor de archivo , asociado con un protocolo de transporte , una dirección de red como una dirección IP y un número de puerto. Esto se conoce como enlace . Un proceso utiliza un socket para enviar y recibir datos a través de la red. El software de red del sistema operativo tiene la tarea de transmitir datos salientes desde todos los puertos de la aplicación a la red y reenviar los paquetes de red que llegan a los procesos haciendo coincidir la dirección IP y el número de puerto del paquete con un socket. Para TCP, solo un proceso puede vincularse a una combinación específica de dirección IP y puerto. Los fallos comunes de la aplicación, a veces llamados conflictos de puerto , ocurren cuando varios programas intentan utilizar el mismo número de puerto en la misma dirección IP con el mismo protocolo.
Las aplicaciones que implementan servicios comunes a menudo utilizan números de puerto conocidos específicamente reservados para recibir solicitudes de servicio de los clientes. Este proceso se conoce como escucha e implica la recepción de una solicitud en el puerto conocido que potencialmente establece un diálogo servidor-cliente uno a uno, utilizando este puerto de escucha. Otros clientes pueden conectarse simultáneamente al mismo puerto de escucha; esto funciona porque una conexión TCP se identifica por una tupla que consta de la dirección local, el puerto local, la dirección remota y el puerto remoto. [1] Los puertos conocidos se definen por convención supervisada por la Autoridad de Números Asignados de Internet (IANA). En muchos sistemas operativos se requieren privilegios especiales para que las aplicaciones se vinculen a estos puertos porque a menudo se los considera críticos para el funcionamiento de las redes IP. Por el contrario, el extremo del cliente de una conexión normalmente utiliza un número de puerto alto asignado para uso a corto plazo, por lo tanto, llamado puerto efímero .
La IANA es responsable de la coordinación global de la raíz del DNS, el direccionamiento IP y otros recursos de protocolo. Esto incluye el registro de números de puerto TCP y UDP de uso común para servicios de Internet conocidos.
Los números de puerto se dividen en tres rangos: los puertos conocidos , los puertos registrados y los puertos dinámicos o privados .
Los puertos conocidos (también llamados puertos del sistema ) son aquellos numerados del 0 al 1023. Los requisitos para nuevas asignaciones en este rango son más estrictos que para otros registros. [2]
Número | Asignación |
---|---|
20 | Transferencia de datos mediante protocolo de transferencia de archivos (FTP) |
21 | Control de comandos del protocolo de transferencia de archivos (FTP) |
22 | Inicio de sesión seguro con Secure Shell (SSH) |
23 | Servicio de inicio de sesión remoto Telnet , mensajes de texto sin cifrar |
25 | Entrega de correo electrónico mediante Protocolo simple de transferencia de correo (SMTP) |
53 | Servicio de Sistema de nombres de dominio (DNS) |
67, 68 | Protocolo de configuración dinámica de host (DHCP) |
80 | Protocolo de transferencia de hipertexto (HTTP) utilizado en la World Wide Web |
110 | Protocolo de correos (POP3) |
119 | Protocolo de transferencia de noticias en red (NNTP) |
123 | Protocolo de tiempo de red (NTP) |
143 | Protocolo de acceso a mensajes de Internet (IMAP) Gestión del correo digital |
161 | Protocolo simple de administración de red (SNMP) |
194 | Chat de retransmisión por Internet (IRC) |
443 | HTTP seguro (HTTPS) HTTP sobre TLS/SSL |
546, 547 | DHCPv6 Versión IPv6 de DHCP |
Los puertos registrados son los del 1024 al 49151. La IANA mantiene la lista oficial de rangos conocidos y registrados. [3]
Los puertos dinámicos o privados son aquellos del 49152 al 65535. Un uso común para este rango es para puertos efímeros .
Los protocolos de la capa de transporte , como el Protocolo de control de transmisión (TCP) y el Protocolo de datagramas de usuario (UDP), transfieren datos utilizando unidades de datos de protocolo (PDU). Para TCP, la PDU es un segmento y para UDP es un datagrama . Ambos protocolos utilizan un campo de encabezado para indicar los números de puerto de origen y destino. Los números de puerto están codificados en el encabezado del paquete del protocolo de transporte y pueden ser interpretados fácilmente no solo por los hosts de envío y recepción sino también por otros componentes de la infraestructura de red. En particular, los firewalls se configuran comúnmente para diferenciar entre paquetes según sus números de puerto de origen o destino. El reenvío de puertos es un ejemplo de aplicación de esto.
La práctica de intentar conectarse a una serie de puertos en secuencia en un solo host se conoce comúnmente como escaneo de puertos . Esto suele estar asociado con intentos de piratería maliciosa o con administradores de red que buscan posibles vulnerabilidades para ayudar a prevenir tales ataques. Los intentos de conexión de puertos son monitoreados y registrados con frecuencia por los hosts. La técnica de " port knocking" utiliza una serie de conexiones de puerto (knocks) desde una computadora cliente para habilitar una conexión de servidor.
Un ejemplo del uso de los puertos es la entrega de correo electrónico . Un servidor utilizado para enviar y recibir correo electrónico generalmente necesita dos servicios. El primer servicio se utiliza para transportar correo electrónico hacia y desde otros servidores. Esto se logra con el Protocolo simple de transferencia de correo (SMTP). Una aplicación de servicio SMTP estándar escucha en el puerto TCP 25 las solicitudes entrantes. El segundo servicio suele ser el Protocolo de oficina postal (POP) o el Protocolo de acceso a mensajes de Internet (IMAP), que utilizan las aplicaciones cliente de correo electrónico en las computadoras personales de los usuarios para obtener mensajes de correo electrónico del servidor. El servicio POP escucha en el puerto TCP número 110. Ambos servicios pueden estar ejecutándose en el mismo equipo host, en cuyo caso el número de puerto distingue el servicio que fue solicitado por un equipo remoto, ya sea el equipo de un usuario u otro servidor de correo.
Si bien el número de puerto de escucha de un servidor está bien definido (IANA los denomina puertos conocidos), el número de puerto del cliente suele elegirse de entre el rango de puertos dinámicos (consulte a continuación). En algunas aplicaciones, los clientes y el servidor utilizan cada uno números de puerto específicos asignados por la IANA. Un buen ejemplo de esto es DHCP , en el que el cliente siempre utiliza el puerto UDP 68 y el servidor siempre utiliza el puerto UDP 67.
Los números de puerto se ven a veces en la web u otros localizadores uniformes de recursos (URL). De forma predeterminada, HTTP utiliza el puerto 80 y HTTPS utiliza el puerto 443, pero una URL como http://www.example.com:8080/path/
especifica que el navegador web se conecta en su lugar al puerto 8080 del servidor HTTP.
El concepto de números de puerto fue establecido por los primeros desarrolladores de ARPANET en cooperación informal entre autores de software y administradores de sistemas. El término número de puerto aún no se utilizaba. Fue precedido por el uso del término número de socket en las primeras etapas de desarrollo de la red. Un número de socket para un host remoto era una cantidad de 40 bits. [4] Los primeros 32 bits eran similares a la dirección IPv4 actual, pero en ese momento los 8 bits más significativos eran el número de host. La parte menos significativa del número de socket (bits 33 a 40) era una entidad llamada Another Eightbit Number (Otro número de ocho bits ), abreviado AEN. [5] Hoy, socket de red se refiere a un concepto relacionado pero distinto, es decir, la dirección interna de un punto final utilizado solo dentro del nodo.
El 26 de marzo de 1972, Vint Cerf y Jon Postel pidieron que se documentaran los usos vigentes en ese momento y que se estableciera un catálogo de números de socket en el RFC 322. Se pidió a los administradores de red que enviaran una nota o hicieran una llamada telefónica, "describiendo la función y los números de socket de los programas de servicio de red en cada HOST". [6] Este catálogo se publicó posteriormente como RFC 433 en diciembre de 1972 e incluía una lista de hosts y sus números de puerto y la función correspondiente utilizada en cada host de la red. Esta primera función de registro sirvió principalmente como documentación de uso e indicó que el uso de números de puerto era conflictivo entre algunos hosts para "servicios públicos útiles". [5] El documento prometía una resolución de los conflictos basada en un estándar que Postel había publicado en mayo de 1972 en el RFC 349, en el que propuso por primera vez asignaciones oficiales de números de puerto a servicios de red y sugirió una función administrativa dedicada, a la que llamó czar , para mantener un registro. [7] Los 256 valores del AEN se dividieron en los siguientes rangos:
Rango de números de puerto | Asignación |
---|---|
0 a 63 | Funciones estándar de toda la red |
64 a 127 | Funciones específicas del host |
128 a 239 | Reservado para uso futuro |
240 a 255 | Cualquier función experimental |
El servicio Telnet recibió la primera asignación oficial del valor 1. En detalle, el primer conjunto de asignaciones fue: [7]
Número de puerto | Asignación |
---|---|
1 | Telnet |
3 | Transferencia de archivos |
5 | Entrada de trabajo remota |
7 | Eco |
9 | Desechar |
En los inicios de ARPANET, el AEN también se denominaba nombre de socket [8] y se utilizaba con el Protocolo de conexión inicial (ICP), un componente del Protocolo de control de red (NCP). [9] [10] El NCP fue el precursor de los protocolos de Internet modernos. Hoy en día, la terminología de nombre de servicio todavía está estrechamente relacionada con los números de puerto, siendo los primeros cadenas de texto utilizadas en algunas funciones de red para representar un número de puerto numérico.