SISTEMAS DE COMUNICACIONES DE DATOS Técnicas Digitales III Ing. Gustavo Nudelman 2012
Fundamentos de Networking Subtitulo o nombre del capitulo Capitulo 1 Universidad Tecnológica Nacional
Definiciones preliminares Entorno distribuido: Conjunto de recursos distribuidos en diversas ubicaciones físicas que pueden intercambiar información y conforman un sistema con un propósito Nodo: Punto identificable donde se encuentra un recurso del entorno distribuido. Link: conexión directa entre dos nodos Red : Conjunto de nodos interconectados a través de un medio sin capacidad de enrutar la información Intertnet/Intranet: Conjunto de redes interconectadas por dispositivos inteligentes capaces de enrrutar la información a la red correcta para que alcance al nodo destino
Red LAN y WAN LAN 3 (203.157.16.0) LAN 1 (211.40.8.0) LAN 2 (200.69.8.0) router Los routers enrutan la información entre redes para alcanzar al host destino. Nodos de diferentes redes LAN no tienen link entre ellos Cada nodo tiene una dirección que lo identifica en la WAN (dirección IP) La dirección IP posee una estructura jerárquica
Red LAN Ethernet MAC: 00:1C:9A:67:41:01 IP: 192.168.1.40 MAC: 00:1C:9A:67:9A:03 IP: 192.168.1.42 MAC: 00:1C:9A:67:9C:01 IP: 192.168.1.44 MAC: 00:1C:9A:67:9A:01 IP: 192.168.1.41 Cada nodo posee una interface de comunicaciones que le permite conectarse a la LAN llamado NIC (Network interface controller) Cada NIC posee un ID de fabrica llamado MAC compuesto de 6 bytes (Ex. 00:1C:9A:67:41:01) Las interfaces de red escuchan toda la información que circula por el BUS pero filtran por la dirección MAC a menos que se trate de un broadcast (FF:FF:FF:FF:FF:FF) Usuarios y aplicaciones no se manejan con la dirección MAC. Ellos suelen utilizar la dirección IP o el nombre del host para acceder a un nodo. Esto implica que dentro de una LAN se debe tener una tabla de correspondencia entre la IP y la MAC. Esta tabla se llama ARP (Address Resolution Protocol). Si la IP indicada no se encuentra en la tabla, la trama es dirigida al default gateway MAC: 00:1C:9A:67:9A:1B IP: 192.168.1.43 MAC: 00:0C:1C:02:17:1A IP: 192.168.1.1 (default gateway)
Modelo OSI - Introducción Modelo referencial desarrollado por Open system Interconnetcion para los modelos de comunicaciones. Se trata de un modelo de capas que permite establecer un modelo ordenado de las funcionalidades intervinientes. No se trata de un modelo del sistema de comunicación sino del nivel de intervención de los protocolos, dispositivos y funcionalidades. Nos permite comprender el sistema en su totalidad así como encaminar soluciones ante problemas o incidentes
Modelo OSI Datos Aplicación Header layer Presentación Payload Presentación Header layer Sesión Payload Sesión Header layer Transporte Payload Transporte Header layer Red Payload Red Header layer Enlace Payload Enlace Físico
Modelo OSI Transmisión de la información APLICACIÓN PRESENTACIÓN SESIÓN TRANSPORTE Protocolo de aplicación Protocolo de presentación Protocolo de sesión Protocolo de transporte APLICACIÓN PRESENTACIÓN SESIÓN TRANSPORTE RED RED RED RED ENLACE ENLACE ENLACE ENLACE FÍSICO FÍSICO FÍSICO FÍSICO Máquina A Máquina B Red
Derivación de la información en redes de datos Conmutación de circuitos: Se establece un circuito permanente entre los nodos origen y destino El circuito permanece garantizado hasta que se finaliza la sesión de comunicación entre el origen y destino Conmutación de paquetes: Se divide el trafico a enviar en segmentos de tamaño acotado denominados paquetes Los paquetes se multplexan en el sistema de comunicación pudiendo establecerse diferentes circuitos para cada uno.
Medios físicos Coaxial Par trenzado Fibra Wireless Cada uno de estos medios tiene asociados sistemas de codificación y control de errores confirmando la capa 1 del modelo OSI.
Modelo OSI Capa 2 Se trata de una tecnología de conmutación de tramas desarrollada por Xerox en la década del 70 La documentación puede encontrarse en el Standard 802.3 de IEEE Se define la trama Ethernet como la unidad de transmisión en nivel 2 Preámbulo (8) Dirección dest (6) Dirección Orig (6) Tipo (2) Datos (64-1500) CRC (4) 64 bits alternados MAC address del nodo destino MAC address del nodo origen Protocolo de capa 3 Carga útil (proveniente de de capa 3) Calculo para detección de errores
Capa 2 Acceso al medio Se utiliza el método de acceso CSMA/CD (carrier sense multiple access / colission detection) (Escuchar antes de hablar) Se controla cada 9.6 us si existe portadora antes de intentar una transmisión Sin embargo 2 nodos pueden comenzar a transmitir en forma cuasi simultanea por haber detectado ausencia de portadora (tengamos en cuenta que la velocidad de un medio UTP es 0.65c). Esto produciría una colisión Si esto sucede se dice que se ha producido una colisión. Luego se dispara una demora aleatoria y se reintenta la transmisión. A medida que aumenta la cantidad de nodos, aumenta la probabilidad de que existan colisiones. Y con ello aumentan las retransmisiones provocando una baja de performance en la red.
Capa 2 Acceso al medio Inicia la transmisión Sensa portadora Progreso de la transmisión t 0 t 1 > t 0 t 2 > t 1 Inicia la transmisión Las trama Ethernet puede medirse en unidades de longitud Las especificaciones de longitud de los cables están supeditadas a la longitud de la trama.
Red LAN (Ethernet) Server switch 100 Mbit/s 1000 Mbit/s 100 Mbit/s 100 Mbit/s client client client Default gateway Para organizar el tráfico y disminuir colisiones, las redes LAN suelen segmentarse mediante dispositivos llamados switches. Un switch es un dispositivo inteligente que permite redireccionar la información al nodo correcto analizando la dirección MAC Poseen memoria con tablas de resolución que asocian una dirección MAC con un puerto del switch Esta tabla es dinámica y se va formando a medida que circula tráfico por la red. Es decir: El switch aprende.
Modelo OSI Capa 3 Así como la Mac address identifica un nodo en nivel 2, existe una dirección para identificar un nodo en una red WAN en la capa 3 del modelo OSI. Dirección IP Cada red LAN posee un rango de direcciones para sus nodos ya que en nivel 3 las direcciones poseen una estructura jerárquica. La dirección IPV4 esta compuesta por 4 bytes y se utiliza una notación separando dichos bytes por un punto. Ej.: 202.131.40.211 Siendo una dirección jerárquica podemos decir que dicha dirección se compone de la siguiente manera Dirección de red Dirección de host
Capa 3 Clases de direcciones IP El organismo internacional encargado de administrar la asignación de direcciones IP públicas para Internet (Internic), dividió el espacio de direcciones en clases. Los operadores compran estas direcciones (redes completas) para su propio uso o para asignarlas a sus clientes Clase A (/8): Pocas redes (126 ) de muchos hosts (16.777.214). Rango: 1.xxx.xxx.xxx a 126.xxx.xxx.xxx Problema: 126 redes consumen la mitad del espacio de direcciones Clase B (/16): 16.384 redes de 65.534 hosts. Rango 128.0.xxx.xxx a 191.255.xxx.xxx Clase C (/24): Muchas redes (2.097.152 ) de pocos hosts (254) Rango: 192.0.0.xxx a 223.255.255.xxx
20 bytes Capa 3 Protocolo IP Versión IP (4bits) longitud del encabezado (4bits) Tiempo de vida (time to live) (8 bits) Tipo de servicio (8 bits) Identificación (16 bits) protocolo (8 bits) 32 bits Longitud total del datagrama (en bytes) Flags Desplazam. del fragmento (13 bits) (3 bits) Secuencia de verificación: Checksum del encabezado IP (16 bits) dirección IP de origen dirección IP de destino opciones (si las hay) datos Header layer Red Payload Red Header layer Enlace Payload Enlace Físico
Capa 3 Comunicación entre nodos en WAN 128.12.17.3 197.16.30.2 128.12.17.1 197.16.30.1 08:00:20:00:00:02 08:00:20:00:00:03 08:00:20:00:00:04 08:00:20:00:00:01 Direc. Ethernet. Destino Router Direc. Ethernet. Origen Tipo Direc. IP Destino Direc. IP Origen 08:00:20:00:00:03 08:00:20:00:00:02 IP 197.16.30.2128.12.17.3 Datos Direc. Ethernet. Direc. Ethernet. Destino Origen Tipo Direc. IP Direc. IP Destino Origen 08:00:20:00:00:01 08:00:20:00:00:04 IP 197.16.30.2128.12.17.3 Datos Red Un router separa entornos de broadcast así como un switch separa entornos de colisión Enlace Los routers poseen tablas que relacionan redes con puertos del propio switch. La manera en que los routers aprenden dinámicamente para conformar estas tablas está en los protocolos de enrutamiento
Capa 3 - Subredes Hemos visto que una dirección IP se compone por la dirección de red y la dirección de host. Muchas veces la parte que identifica a la dirección de host posee un tamaño que posibilita trabajar con una cantidad muy grande de hosts pero no es posible aprovecharlo. Debido a esto se tiene la posibilidad de subdividir nuevamente la parte que identifica a la dirección de host, quitando bits de la misma y utilizándolos para separar el entorno de broadcast en subredes. La cantidad de bits que serán tomados de para dimensionar subredes esta establecido por un parámetro llamado Mascara de subred Ej: sea la IP 192.168.1.67 y sea la mascara 255.255.255.192 192.168.1.67 (01000011)67 255.255.255.192 (11000000)192 La IP especificada se interpreta como el host 3 en la subred 1
Modelo OSI Capa 4 La capa 3 nos permite llegar a un nodo destino, pero nosotros lo que queremos comunicar realmente son procesos. La capa 4 permite multiplexar diferentes servicios dentro de un mismo host gracias al concepto de PORT. Es por eso que podemos abrir 2 o mas instancias de un navegador. Es en esta capa donde se establece o no el control de flujo. En el caso de TCP (Transmission control protocol), de manera confiable y por cada paquete transmitido, se recibe un acuse de recibo ACK. Se trata de un protocolo orientado a la conexión. Cuando 2 procesos desean comunicarse, TCP establece una conexión. Cuando la comunicación se completa, la conexión se termina para liberar los recursos. Una conexión queda definida por un par [dirección IP]:[port]
Capa 4 Servicios vs Ports Por lo general, cada servicio esta relacionado con un número de port. Un port es tomado por el proceso involucrado en la comunicación y es este quien brindará el servicio relacionado con dicho port. La combinación dada por la dirección IP y el numero de puerto son suficientes para establecer un recurso del comunicación virtual entre 2 procesos llamado socket Los primeros 1024 ports se utilizan para servicios conocidos y registrados en ICANN (Internet corporation for assigned names and numbers). Se los conoce como well known ports Ejemplos Port 80 web donde escuchan los servidores web Port 21 ftp (Transmision de archivos) Port 110 pop3 post office protocol 3 Port 53 DNS nos permite trabajar por nombres en lugar de direcciones IP. Todos los host deben conocer la direccion del servidor DNS
Capa 4 Protocolo TCP
Protocolo TCP Control de flujo En esta capa del modelo OSI es donde se establece el control y validación de la llegada de los paquetes. Cada paquete es acusado con un ACK (Figura izquierda) Si no se recibe el acuse de recibo, esta capa es la encargada de retransmitir el paquete correspondiente luego de la expiración de un timer (Figura derecha)
Protocolo TCP Ventana de transmisión A fin de optimizar la línea de tiempo para la llegada de los ACK, suele utilizarse una ventana que especifica una cantidad de paquetes que se puede transmitir antes de esperar el primer ACK. Esta ventana se regula dinámicamente en función de la tasa de paquetes que se este recibiendo
Protocolo TCP Diagrama de Conexión El protocolo TCP es un protocolo orientado a la conexión. Es decir: se necesita iniciar una conexión antes de comenzar a transmitir. Durante una conexión TCP se inicia una secuencia cuyo orden estará dado por el campo propio de secuencia Al diagrama de conexión se lo conoce como Three way handshake (izquerda)
Capa 4 Protocolo UDP La capa 4 también posee un protocolo que no es orientado a la conexión ni tampoco posee control de flujo. Es un protocolo que solo lleva los valores de los ports fuente y destino para alcanzar aplicaciones y servicios entre los hosts. Como no existe acuse de recibo, es un protocolo cuya entrega no está garantizada. No es confiable para transacciones. Sin embargo, aplicaciones de streaming (audio, video, etc), cuyas perdidas no tiene sentido recuperarlas, o hearthbeats de un cluster usan UDP
Capa 4 Protocolo UDP El port Origen es un campo opcional, ya que no se espera ningun acuse de recibo Como vemos se trata de un header mucho mas liviano
Programación con Sockets Subtitulo o nombre del capitulo Capitulo 2 Universidad Tecnológica Nacional
Sockets Como habíamos mencionado, una conexión bidireccional entre procesos / servicios en internet, se establece mediante a la combinación [Direccion IP]:[port] para cada uno de los hosts. Mediante la información de los parámetros de ambos extremos, el sistema operativo puede crear un descriptor que identificará esta comunicación bidireccional. A este descriptor lo llamamos socket Sistemas como Unix, poseen bibliotecas para manejar diferentes protocolos, y una variedad de system calls para crear estas entidades de comunicación. Si bien hemos visto que existen diferentes protocolos necesarios para conformar una comunicación entre procesos dentro de una red, podremos obtener un file descriptor, que nos permita utilizar las funciones standard unix Read() y Write().
Sockets - Introducción En 1981 en la Universidad de California en Berkeley diseñaron para su sistema operativo, el BSD Unix, un interfaz para permitir a los programas acceder y comunicarse a través de una red de comunicaciones.conocido como el interfaz de sockets Luego fue adoptado por varios fabricantes de estaciones de trabajo llegando a estar disponible en gran cantidad de arquitecturas. y convirtiéndose en un estándar. Sin embargo en UNIX se trato de implementar la menor cantidad de funciones posibles. Es decir: solo las necesarias para obtener un descriptor de Archivo La interfaz de los sockets añade una nueva abstracción para la comunicación a través de la red: el socket. Cada socket activo se identifica por un entero cuyo valor representa un descriptor de socket.
Sockets - Creación Int socket (int domain, int type, int protocol) Se obtiene un file descriptor o -1 si falla AF_INET AF UNIX SOCK_STREAM SOCK_DGRAM 0
Sockets Definición de sus parámetros Hemos creado el socket desde el punto de vista funcional ya que obtuvimos el numero de file descriptor Es decir: Tenemos un file descriptor que representa a un punto terminal o enchufe al que pueden conectarse 2 procesos en nodos remotos para comunicarse entre si. Este file descriptor es Bidireccional Sin embargo el socket no está totalmente definido. (recordemos que Desde el punto de vista de networking el socket estaría definido como: [IP]+ [port] El socket se completa utilizando la función: bind Int bind (fd_socket, struct sockaddr_in, size (struct sockaddr_in) Devuelve -1 en caso de que no exitosa Descriptor del socket struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };
Conectando sockets TCP - Servidor Una vez que el socket está completo, si deseamos que el mismo resuelva pedidos de conexión TCP, debemos ponerlo en modo escucha Int listen (int fd_socket, int backlog) Devuelve -1 en caso de que no exitosa Descriptor del socket Cantidad de conexiones encoladas permitidas El tamaño máximo que puede tener la cola de peticiones estará determinado para cada sistema por el valor de la constante SOMAXCONN. NO ES LO QUE SE UTILIZA PARA LIMITAR A LA CANTIDAD DE CLIENTES!
Conectando sockets TCP - Servidor Una vez que el socket se pone en modo listen, el servidor debe bloquearse esperando hasta que un aparezca una conexión resuelta en el backlog int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) Socket de transacción Se puede usar como fd en Read y write Socket de de escucha (generado con la función socket(); Puntero a Estructura sockaddr_in vacía que será completada con los datos del cliente Tamaño de la estructura pasada en el argumento anterior TENGAMOS EN CUENTA QUE SE TRATA DE UNA FUNCION BLOQUEANTE!!!!
Conectando sockets TCP - Cliente El cliente debe conocer la dirección IP o el nombre del servidor y el puerto en el cual este está escuchando. Luego creara el socket (función socket) y hará bind con un port cliente con el que desee salir. Establecido el socket cliente, intentará conectarse mediante: int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); Devuelve -1 en caso de que no sea exitosa Socket (generado con la función socket(); Puntero a estructura sockaddr_in con los datos del servidor a conectarse
Comunicación TCP - Resumen
Comunicación de sockets tipo DGRAM (UDP) Como no existe concepto de conexión, En cada envío o recepción debe indicarse la dirección del otro interlocutor Esto se hace mediante las funciones sendto() y recvfrom()
Envío y recepción UDP ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); Socket (generado con la función socket(); Puntero al buffer con los datos Tamaño del buffer con los datos 0 Puntero a estructura sockaddr_in con los datos del host destino La función SendTo() nos devuelve la cantidad de bytes enviados ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); En este caso, los parámetros son similares a la función SendTo pero en la estructura SocAddr_In especificamos los datos de quien queremos recibir
Funciones útiles struct hostent *gethostbyname(const char *name) struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses */ } struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type)
Desarrollo de Servidores Capitulo 3 Universidad Tecnológica Nacional
Servidores Iterativos socket(...) bind(...) listen(...) Accept(...) Transacción()
Servidores Concurrentes socket(...) bind(...) listen(...) Transaccion() Accept(...) >0 fork() =0
Costo de la concurrencia Sea S tiempo de duración de la transacción n.s tiempo para resolver n servicios que se puedan encolar en el backlog Sea C tiempo para crear un proceso hijo o un thread Debe ser S >> C
Entrada/Salida asíncrona A veces es necesario que nuestro programa reciba peticiones de conexión desde más de una fuente simultáneamente. No podemos bloquear un proceso a la espera de una conexión (accept) por un puerto determinado si también debemos esperar conexiones por otro puerto También podríamos tener que esperar simultáneamente una conexión y un dato de un driver. Podemos utilizar un Accept no bloqueante mediante la system call ioctl() Podemos utilizar una función para bloquear al proceso por un set definido de file descriptors y que se desbloquee ante actividad I/O de alguno de ellos indicándonos por cual existió actividad
Función select() #include <sys/types.h> #include <sys/time.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); Descriptor de mayor valor +1 Set de lectura Set de escritura Set de excepción Tiempo de bloqueo -1: error N de descriptores listos 0 Tme out Tipo fd_set struct timeval { long tv_sec; /* segundos */ long tv_usec; /* microsegundos */ };
Tratamiento de fdset Son arrays de enteros en los que cada bit representa un file descriptor Cuando se desbloquea por uno de ellos el bit correspondiente cambia a 1 Por suerte existen macros para operar sobre estos bits. FD_ZERO( &fdset ); /* Inicializa todos los bits a cero */ FD_SET ( fd, &fdset ); /* Pone a 1 el bit indicado por fd */ FD_CLR ( fd, &fdset ); /* Pone a 0 el bit indicado por fd */ FD_ISSET( fd, &fdset ); /* Comprueba si el bit indicado por fd está a 1 */