Translate

lunes, 3 de abril de 2017

2.1 Puertos / Sockets TCP/IP

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

Recién agregada

4.6 Opciones UNIX

Monitoreo de la red Unix nos puede dar mucha información con tan sólo dos comandos de monitoreo de la red, uno es el comando snoop que m...

También puedes ver: