SISTEMAS DE COMUNICACIONES DE DATOS Técnicas Digitales III Ing. Gustavo Nudelman 2012 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Fundamentos de Networking Subtitulo o nombre del Capitulo 1 capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Red LAN y WAN LAN 3 (203.157.16.0) LAN 1 (211.40.8.0) − Los routers enrutan la información entre redes para alcanzar al host destino. LAN 2 (200.69.8.0) router − 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 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) − 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Modelo OSI Header layer Presentación Header layer Sesión Header layer Transporte Header layer Red Header layer Enlace Datos Aplicación Payload Presentación Payload Payload Payload Payload Sesión Transporte Red Enlace Físico Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 B Máquina A Red Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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) 64 bits alternados Dirección dest (6) MAC address del nodo destino Dirección Orig (6) MAC address del nodo origen Tipo (2) Protocolo de capa 3 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Datos (64-1500) Carga útil (proveniente de de capa 3) CRC (4) 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. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Capa 2 – Acceso al medio Inicia la transmisión t0 Sensa portadora t1 >t0 t 2 >t 1 Progreso de la transmisión 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. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Red LAN (Ethernet) switch Server 1000 Mbit/s client 100 Mbit/s Default gateway 100 Mbit/s 100 Mbit/s client client − 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. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad 223.255.255.xxx Regional Buenos Aires Capa 3 – Protocolo IP 32 bits Tipo de servicio (8 bits) Flags (3 bits) Identificación (16 bits) Tiempo de vida (time to live) (8 bits) Longitud total del datagrama (en bytes) protocolo (8 bits) Desplazam. del fragmento (13 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 Header layer Enlace Payload Payload Red Enlace Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Físico 20 bytes Versión IP longitud del encabezado (4bits) (4bits) Capa 3 – Comunicación entre nodos en WAN 197.16.30.2 128.12.17.3 197.16.30.1 08:00:20:00:00:04 128.12.17.1 08:00:20:00:00:02 08:00:20:00:00:03 08:00:20:00:00:01 Router Direc. Ethernet. Direc. Ethernet. Tipo Direc. IP Direc. IP Destino Origen Destino Origen 08:00:20:00:00:03 08:00:20:00:00:02 IP 197.16.30.2 128.12.17.3 Datos Direc. Ethernet. Direc. Ethernet. Tipo Direc. IP Direc. IP Destino Origen Destino Origen 08:00:20:00:00:01 08:00:20:00:00:04 IP 197.16.30.2 128.12.17.3 Datos • Un router separa entornos de broadcast así como un switch separa entornos de colisión • 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 Red Enlace Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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] Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Capa 4 – Protocolo TCP Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Programación con Sockets Subtitulo o nombre del Capitulo 2 capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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(). Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Sockets - Creación Int socket (int domain , int type , int protocol) Se obtiene un file descriptor o -1 si falla AF_INET SOCK_STREAM AF UNIX SOCK_DGRAM Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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) struct sockaddr_in { Devuelve -1 en caso de que no exitosa short sin_family; u_short sin_port; Descriptor del socket struct in_addr sin_addr; char sin_zero[8]; Universidad Tecnológica Nacional - Facultad Regional Buenos Aires }; 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! Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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!!!! Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Comunicación TCP - Resumen Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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() Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Desarrollo de Servidores Capitulo 3 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Universidad Tecnológica Nacional Servidores Iterativos socket(. . .) bind(...) listen(...) Accept(...) Transacción() Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Servidores Concurrentes socket(. . .) bind(...) listen(...) Transaccion() Accept(...) >0 fork() =0 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires 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 •-1: error Set de lectura Set de escritura Tiempo de bloqueo Set de excepción Tipo fd_set •N de descriptores listos struct timeval { •0 Tme out long tv_sec; /* segundos */ long tv_usec; /* microsegundos */ Universidad Tecnológica Nacional - Facultad Regional Buenos Aires }; 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 */ Universidad Tecnológica Nacional - Facultad Regional Buenos Aires