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.
Puertos TCP
TCP usa el concepto de número de puerto para identificar a
las aplicaciones emisoras y receptoras. Cada lado de la conexión TCP tiene
asociado un número de puerto (de 16 bits sin signo, con lo que existen 65536
puertos posibles) asignado por la aplicación emisora o receptora. Los puertos
son clasificados en tres categorías: bien conocidos, registrados, y dinámicos/privados.
Los puertos bien conocidos son asignados por la Internet
Assigned Numbers Authority (IANA), van del 0 al 1023 y son usados normalmente
por el sistema o por procesos con privilegios.3 Las aplicaciones que usan este
tipo de puertos son ejecutadas como servidores y se quedan a la escucha de
conexiones. Algunos ejemplos son: FTP (21), SSH (22), Telnet (23), SMTP (25) y
HTTP (80).
Los puertos registrados son normalmente empleados por las
aplicaciones de usuario de forma temporal cuando conectan con los servidores,
pero también pueden representar servicios que hayan sido registrados por un
tercero (rango de puertos registrados: 1024 al 49151).
Los puertos dinámicos/privados también pueden ser usados por
las aplicaciones de usuario, pero este caso es menos común. Los puertos
dinámicos/privados no tienen significado fuera de la conexión TCP en la que
fueron usados (rango de puertos dinámicos/privados: 49152 al 65535, recordemos
que el rango total de 2 elevado a la potencia 16, cubre 65536 números, del 0 al
65535).
¿QUÉ ES UN SOCKET?
Un socket es un punto de comunicación por el cual un proceso puede emitir o recibir información. En el interior de un proceso, un socket se identifica por un descriptor de la misma naturaleza que los que identifican los archivos, al igual que todos los procesos del sistema UNIX de Berkeley.
La comunicación mediante sockets es una interfaz (o servicio) con la capa de transporte (nivel 4) de la jerarquía OSI. La filosofía de la división por capas de un sistema es encapsular, dentro de cada una de ellas, detalles que conciernen sólo a cada capa, y presentársela al usuario de tal forma que este pueda trabajar con ella sin necesidad de conocer sus detalles de implementación. La interfaz de acceso a la capa de transporte del sistema UNIX de Berkeley no está totalmente aislada de las capas inferiores, por lo que a la hora de trabajar con sockets, es necesario conocer algunos detalles sobre esas capas. En concreto, a la hora de establecer una conexión mediante sockets, es necesario conocer la familia o dominio de la conexión, y el tipo de conexión.
La creación de un socket se realizará por la primitiva socket, la cual veremos con más detenimiento más adelante, cuyo valor de vuelta es un descriptor sobre el cual es posible realizar operaciones de escritura y lectura. Un socket permite la comunicación en los dos sentidos (conexión full-dúplex).
Sockets
Por lo tanto 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.
Dominios de comunicación
Los sockets se crean dentro de lo que se denomina dominio de
comunicación, al igual que un archivo se crea dentro de un sistema de ficheros.
El dominio de comunicación permite definir el lugar donde se encuentran los
procesos que se van comunicar. Los dominios que se definen en el lenguaje C son
los siguientes:
http://man7.org/linux/man-pages/man2/socket.2.html
Nombre Objetivo
AF_UNIX, AF_LOCAL Local communication
AF_INET IPv4 Internet
protocols
AF_INET6 IPv6 Internet
protocols
AF_IPX IPX - Novell protocols
AF_NETLINK Kernel
user interface device
AF_X25 ITU-T X.25 / ISO-8208 protocol
AF_AX25 Amateur
radio AX.25 protocol
AF_ATMPVC Access
to raw ATM PVCs
AF_APPLETALK AppleTalk
AF_PACKET Low
level packet interface
AF_ALG Interface
to kernel crypto API
De todos
los mencionados, los más usados son:
AF_UNIX:
representa el dominio característico de los procesos que se comunican dentro en
un mismo sistema UNIX.
AF_INET: es el dominio que utilizan los procesos que se
comunican a través de cualquier red TCP/IP.
Otros.
El dominio AF-INET
En el dominio AF_INET se definen los siguientes tipos de
sockets:
http://man7.org/linux/man-pages/man2/socket.2.html
- SOCK_STREAM Provides sequenced, reliable, two-way, connection-based byte streams. An out-of-band data transmission mechanism may be supported.
- SOCK_DGRAM Supports datagrams (connectionless, unreliable messages of a fixed maximum length).
- SOCK_RAW Provides raw network protocol access.
- SOCK_SEQPACKET Provides a sequenced, reliable, two-way connection-based data transmission path for datagrams of fixed maximum length; a consumer is required to read an entire packet with each input system call.
- SOCK_RDM Provides a reliable datagram layer that does not guarantee ordering.
- SOCK_PACKET Obsolete and should not be used in new programs.
El tipo SOCK_STREAM hace uso del protocolo TCP (protocolo de
la capa de transporte) que provee un flujo de datos bidireccional, orientado a
conexión, secuenciado, sin duplicación de paquetes y libre de errores.
El tipo SOCK_DGRAM hacen uso del protocolo UDP (protocolo de
la capa de transporte), el cual provee un flujo de datos bidireccional, no
orientado a conexión, en el cual los paquetes pueden llegar fuera de secuencia,
puede haber pérdidas de paquetes o pueden llegar con errores.
El tipo SOCK_RAW permiten un acceso a más bajo nivel,
pudiendo acceder directamente al protocolo IP del nivel de Red. Su uso está
mucho más limitado ya que está pensado principalmente para desarrollar nuevos
protocolos de comunicación, o para obviar los protocolos del nivel de
transporte.
No hay comentarios:
Publicar un comentario