Puertos
Cada proceso que se comunica con otro proceso se identifica a sí mismo a la familia de protocolos TCP/IP por uno o más puertos. Un puerto es un número de 16 bits, usado por el protocolo host-a-host para identificar a qué protocolo de más alto nivel o programa de aplicación (proceso) debe entregar los mensajes de entrada.
Como algunos programas de más alto nivel son protocolos por sí mismos, estandarizados en la familia de protocolos TCP/IP, tales como telnet y ftp, usan el mismo número de puerto en todas las realizaciones de TCP/IP. Aquellos números de puerto "asignados" se denominan puertos bien-conocidos y las aplicaciones estándares servicios bien-conocidos.
Los puertos "bien-conocidos" los controla y asigna la Autoridad de Números Asignados de Internet (IANA) y en la mayoría de los sistemas sólo pueden usarlo los procesos del sistema o programas ejecutados con privilegios de usuario. Los puertos "bien-conocidos" asignados ocupan números de puerto en el rango de 0 a 1023. Los puertos con números dentro del rango 1024-65535 no los controla la IANA y la mayor parte de los sistemas únicamente usan programas desarrollados por usuarios.
La confusión debida a que dos aplicaciones diferentes intentan usar los mismos números de puerto sobre un host se evita escribiendo esas aplicaciones para pedir un puerto TCP/IP disponible. Puesto que este número de puerto se asigna dinámicamente, debe diferir de una invocación de una aplicación a la próxima.
Sockets
Consideremos la terminología siguiente:
Un socket es un tipo especial de manejador de fichero que utiliza un proceso para pedir servicios de red al sistema operativo.
Una dirección de socket es la tripleta: {protocolo, dirección-local, proceso-local}
En la familia TCP/IP, por ejemplo: {tcp, 193.44.234.3, 12345}
Una conversación es el enlace de comunicación entre dos procesos.
Una asociación es la quíntupla que especifica completamente los dos procesos que comprende una conexión:
{protocolo, dirección-local, proceso-local, dirección-externa, proceso-externo}
En la familia TCP/IP, por ejemplo:
{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}
podría ser una asociación válida.
Una media-asociación es:
{protocolo, dirección-local, proceso-local}
o
{protocolo, dirección-externa, proceso-externo}
que especifica cada mitad de una conexión.
La media-asociación se denomina también socket o dirección de transporte. Esto es, un socket es un punto terminal para comunicación que puede nombrarse y direccionarse en una red.
La interfaz socket es una de las muchas APIs para los protocolos de comunicación. Diseñada para ser una interfaz de programación de comunicación, fue introducida primero por el sistema UNIX 4.2BSD. Aunque no se ha estandarizado, ha llegado a ser un estándar en la industria.
4.2BSD permitía dos dominios de comunicación diferentes: Internet y UNIX. 4.3BSD ha añadido los protocolos del Sistema de Red de Xerox (XNS) y 4.4BSD añadirá una interfaz extendida para dar soporte a los protocolos ISO OSI.
En el modelo TCP/IP los puertos y los sockets.
En el modelo TCP/IP, los puertos y los sockets se utilizan para permitir que diferentes aplicaciones se comuniquen a través de una red. Un puerto es un número de identificación de 16 bits que se utiliza para direccionar un proceso específico en una computadora a través de una red. Un socket es una combinación de una dirección IP y un número de puerto que se utiliza para establecer una conexión entre dos procesos en diferentes computadoras.
Cuando una aplicación en una computadora envía un mensaje a otra aplicación en otra computadora a través de la red, utiliza un número de puerto específico para identificar el proceso que se debe recibir el mensaje. El sistema operativo de la computadora que recibe el mensaje utiliza ese número de puerto para determinar a qué proceso debe entregar el mensaje.
Los puertos TCP/IP se dividen en tres rangos: los puertos bien conocidos, los puertos registrados y los puertos dinámicos o privados. Los puertos bien conocidos van desde el número 0 hasta el número 1023 y se asignan a servicios de red comunes, como HTTP (puerto 80), FTP (puerto 21) y SSH (puerto 22). Los puertos registrados van desde el número 1024 hasta el número 49151 y están disponibles para que los utilicen aplicaciones específicas. Los puertos dinámicos o privados van desde el número 49152 hasta el número 65535 y se utilizan por los sistemas operativos para asignar temporalmente puertos a aplicaciones en ejecución.
En resumen, los puertos y los sockets TCP/IP son fundamentales para permitir que diferentes aplicaciones se comuniquen a través de una red. Al utilizar un número de puerto específico, el sistema operativo puede determinar a qué proceso debe entregar un mensaje entrante y permitir una comunicación más eficiente y confiable entre los dispositivos de red.