Comunicación de Datos y Redes de Computadores Índice I. Introducción ______________________________________________________ 1 I.1. Historia de las Redes de Computadores __________________________________ 1 I.2. Objetivos de Las Redes ________________________________________________ 1 I.3. Tipos de Redes _______________________________________________________ 2 I.4. Clasificación de las Redes de Computadores ______________________________ 2 I.5. Estructura de Red ____________________________________________________ 2 I.5.1. Red Física ______________________________________________________________ 2 I.5.2. Hosts o Sistemas Finales ___________________________________________________ 3 I.5.3. Subred _________________________________________________________________ 4 I.6. Arquitectura de Red __________________________________________________ 4 I.6.1. Capas __________________________________________________________________ 4 I.6.2. Servicio ________________________________________________________________ 5 I.6.3. Protocolo _______________________________________________________________ 5 I.6.4. Problemas de Diseño ______________________________________________________ 6 II. Ingeniería de Protocolos de Red ______________________________________ 7 II.1. Especificación Formal de Protocolos ____________________________________ 7 II.2. Validación y Verificación _____________________________________________ 8 II.3. Análisis de Prestaciones ______________________________________________ 8 II.4. Implementación _____________________________________________________ 8 II.5. Prueba_____________________________________________________________ 8 III. Modelo OSI de ISO _______________________________________________ 9 III.1. Las Capas de OSI ___________________________________________________ 9 III.2. Transmisión de Datos en OSI ________________________________________ 10 IV. Capa Física_____________________________________________________ 13 IV.1. Bases Teóricas para la Comunicación de Datos _________________________ 13 IV.1.1. Conceptos Básicos _____________________________________________________ IV.1.2. Medios de Transmisión _________________________________________________ IV.1.3. Comparación de Medios _________________________________________________ IV.1.4. Señales Ondulatorias ___________________________________________________ IV.1.5. Análisis de Fourier _____________________________________________________ IV.1.6. Espectro y Filtros ______________________________________________________ IV.1.7. Distorsión, Interferencia, Atenuación y Ruido ________________________________ IV.1.8. Velocidad de Transmisión _______________________________________________ 13 14 16 17 17 18 19 19 IV.2. Transmisión Analógica _____________________________________________ 21 IV.2.1. Sistema Telefónico _____________________________________________________ 21 IV.3. Transmisión Digital ________________________________________________ 22 IV.3.1. Modulación de Señales __________________________________________________ 22 IV.3.2. Teorema del Muestreo __________________________________________________ 23 IV.3.3. Modulación por Impulsos Codificados (MIC) ________________________________ 24 V. Capa de Enlace __________________________________________________ 25 V.1. Problemas de Diseño Capa de Enlace __________________________________ 25 V.1.1. Tipo de Servicio Suministrado _____________________________________________ V.1.2. Entramado ____________________________________________________________ V.1.3. Control de Error ________________________________________________________ V.1.4. Gestión de Enlace ______________________________________________________ V.1.5. Control de Flujo ________________________________________________________ 25 26 26 27 27 V.2. Detección y Corrección de Errores ____________________________________ 28 V.2.1. Códigos Detectores de Hamming __________________________________________ 28 V.2.2. Códigos Detectores Cíclicos ______________________________________________ 28 V.3. Gestión de Enlace___________________________________________________ 29 V.3.1. Estrategias de Gestión de Enlace ___________________________________________ V.3.2. Estándares de Gestión de Enlace (IEEE 802) _________________________________ V.3.3. Protocolos Aloha _______________________________________________________ V.3.4. Protocolos CSMA (802.3) ________________________________________________ V.3.5. Rendimiento: Aloha y CSMA _____________________________________________ V.3.6. Protocolo TokenBus (Paso de Testigo en Bus) (802.4) _________________________ V.3.7. Protocolo TokenRing (Paso de Testigo en Anillo) (802.5) ______________________ V.3.8. Distributed Queue Dual Bus (DQDB, 802.6)__________________________________ V.3.9. Fiber Distributed Data Interface (FDDI, 802.8) _______________________________ V.3.10. ISDN, BISDN (ATM) __________________________________________________ 30 31 32 33 35 35 36 38 38 39 V.4. Control de Flujo ____________________________________________________ 40 V.4.1. Definiciones ___________________________________________________________ V.4.2. Protocolos sin Memoria __________________________________________________ V.4.3. Protocolos de Ventana Deslizante __________________________________________ V.4.4. Rendimiento del Canal de Enlace __________________________________________ 40 42 44 47 VI. Capa de Red ____________________________________________________ 49 VI.1. Problemas de Diseño de la Capa de Red _______________________________ 49 VI.1.1. Tipo de Servicios Suministrados __________________________________________ VI.1.2. Encaminamiento _______________________________________________________ VI.1.3. Interconexión de Redes _________________________________________________ VI.1.4. Control de Congestión __________________________________________________ 49 49 49 49 VI.2. Servicios Proporcionados por la Capa de Red __________________________ 50 VI.2.1. Servicio con Conexión __________________________________________________ 50 VI.2.2. Servicio Sin Conexión __________________________________________________ 50 VI.2.3. Diferencias entre los Servicios Suministrados ________________________________ 50 VI.3. Primitivas OSI para la Capa de Red __________________________________ 50 VI.4. Organización Interna de la Capa de Red _______________________________ 51 VI.4.1. Circuitos Virtuales _____________________________________________________ 51 VI.4.2. Datagramas ___________________________________________________________ 53 VI.4.3. Comparación: Circuitos Virtuales vs. Datagramas _____________________________ 53 VI.5. Algoritmos de Encaminamiento ______________________________________ 54 VI.5.1. Encaminamiento Estático ________________________________________________ 54 VI.5.2. Encaminamiento Adaptativo _____________________________________________ 55 VI.6. Control de Congestión ______________________________________________ 56 VI.6.1. Preasignación de Memorias ______________________________________________ VI.6.2. Descarte de Paquetes ___________________________________________________ VI.6.3. Control Isarítmico de Congestión __________________________________________ VI.6.4. Control de Congestión por Control de Flujo _________________________________ VI.6.5. Paquetes Reguladores ___________________________________________________ VI.6.6. Resolución de Bloqueos _________________________________________________ 56 56 57 57 57 58 VI.7. Ejemplos de Capa de Red ___________________________________________ 58 VI.7.1. Protocolo de Red IP (Internet Protocol) _____________________________________ 58 VI.7.2. Protocolo ARP (Address Resolution Protocol) _______________________________ 59 VII. Interconexionado de Redes _______________________________________ 60 VII.1. Conexión de Redes ________________________________________________ 60 VII.1.1. Capa Física: Repetidores (Hub) __________________________________________ VII.1.2. Subcapa de Acceso al Medio: Puentes (Bridges) _____________________________ VII.1.3. Capa de Enlace: Switch _________________________________________________ VII.1.4. Capa de Red: Encaminador (Router) _______________________________________ VII.1.5. Resumen de Características ______________________________________________ 60 60 60 61 61 VII.2. Diseño de Topologías de Redes ______________________________________ 62 VIII. Capa de Aplicación _____________________________________________ 63 VIII.1. Conceptos Básicos ________________________________________________ 63 VIII.2. Aplicaciones Estándar más Comunes ________________________________ 63 VIII.2.1. Transferencia y Acceso Remoto de Archivos _______________________________ 63 VIII.2.2. Correo Electrónico ____________________________________________________ 64 VIII.2.3. Terminales Virtuales __________________________________________________ 65 IX. Capa de Presentación ____________________________________________ 66 IX.1. Teoría de la Información y Codificación de Fuentes _____________________ 66 IX.1.1. Teoría de la información_________________________________________________ IX.1.2. Entropía: Información Media _____________________________________________ IX.1.3. Codificación de la Fuente ________________________________________________ IX.1.4. Códigos ______________________________________________________________ IX.1.5. Análisis de Códigos Unívocos ____________________________________________ IX.1.6. Codificación de Huffmann (Instantáneo y Óptimo) ____________________________ IX.1.7. Otros Métodos ________________________________________________________ 67 68 69 69 70 71 73 IX.2. Criptografía, Seguridad y Protección de los Datos _______________________ 73 IX.2.1. Criptología ___________________________________________________________ IX.2.2. Criptografía __________________________________________________________ IX.2.3. Criptoanálisis _________________________________________________________ IX.2.4. Problemas Típicos de Seguridad __________________________________________ 73 74 74 75 IX.3. Representación en Formatos de Red __________________________________ 77 X. Capa de Sesión ___________________________________________________ 78 X.1. Servicios del Nivel de Sesión __________________________________________ 78 X.2. Interconexión de Procesos ____________________________________________ 78 X.3. Sincronización de Procesos ___________________________________________ 78 X.4. Administración de Actividades ________________________________________ 78 X.5. Notificación de Excepciones __________________________________________ 78 X.6. Llamada a Procedimiento Remoto (RPC) _______________________________ 79 XI. Capa de Transporte ______________________________________________ 80 XI.1. Calidad del Servicio ________________________________________________ 80 XI.2. Servicios de la Capa de Transporte ___________________________________ 81 XI.3. Primitivas de Transporte ____________________________________________ 81 XI.4. Administración de Conexión _________________________________________ 83 XI.4.1. Direccionamiento ______________________________________________________ XI.4.2. Pérdida de Mensajes ____________________________________________________ XI.4.3. Establecimiento de la Conexión ___________________________________________ XI.4.4. Liberación de la Conexión _______________________________________________ 84 84 85 86 XI.5. Control de Flujo ___________________________________________________ 88 XI.6. Multiplexación ____________________________________________________ 88 XI.7. Recuperación de Caídas ____________________________________________ 88 XI.8. Los Paquetes TCP _________________________________________________ 89 XII. Anexos ________________________________________________________ 90 XII.1. Protocolos de Ventana Deslizante ____________________________________ 90 XII.1.1. Repetición No Selectiva ________________________________________________ 90 XII.1.2. Repetición Selectiva ___________________________________________________ 92 XIII. Bibliografía ___________________________________________________ 95 I. Introducción I.1. Historia de las Redes de Computadores Antes de existir las redes de Computadores, los usuario de debían viajar hacia los computadores, que eran muy grandes (físicamente) y caros, para utilizarlos. Más adelante se crearon sistemas con terminales, los que permitían, a cierta distancia, utilizar de forma remota un computardor, evitando la conglomeración de personas alrededor de él. Luego apareció como una forma de utilizar terminales más alejadas de los computadores, el uso de las conexiones telefónicas existentes para ello. Cuando se hacía necesario que la velocidad y/o fiabilidad del canal de datos fuera mejor, se podían contratar caros enlaces dedicados, los cuales eran implementados por empresas privadas. Las terminales ya no sólo eran consolas tontas de despliega e ingreso de información, sino que se hacían cada vez más inteligentes, aportando su grano de arena al problema de computación. Esto último derivó en el modelo actual de redes de computadores, en el cual las “terminales” no son más que otros computadores conectados a la red. Así, cada uno de ellos puede hacer de cliente y de servidor simultáneamente, proveyendo una gran capacidad de resolución de problemas de computación y de comunicaciones. En algunas partes aún subsisten las antiguas terminales, las que se utilizan conectadas a uno de estos computadores conectados a la red (hosts). Al masificarse esta manera de utilizar los computadores, aparecieron empresas dedicadas a satisfacer la necesidad de canales portadores más rápidos y baratos, con lo cual los costos bajaron rápidamente. Estas empresas son las que hoy en día se conocen como portadores públicos, y son responsables de la explosión de las comunicaciones en los últimos años. I.2. Objetivos de Las Redes Compartir Recursos: El objetivo fundamental de las redes es el compartir información, dispositivos físicos (procesadores, memorias, impresoras) y/o la carga de trabajo (programas distribuidos) Aumentar Confiabilidad: Al compartirse los recursos, éstos se hacen más confiables, ya que es inherente a la compartición de recursos el duplicarlos (programas y datos). En el caso de recursos físicos, éstos deben estar duplicados para soportar la compartición anterior. Facilidad de Comunicación: Proveen un medio de comunicación entre personas muy efectivo a través de correo, paneles de discusión, etc. Disminuir Costos: Las redes de computadores tienen mejor relación mejor relación costo/rendimiento que los grandes computadores antiguos. I.3. Tipos de Redes Existen a grandes rasgos dos tipos de redes de computadores, los cuales son: Redes de Computadores: Se componen de una serie de computadores interconectados que proveen un medio de compartir recursos de manera explícita, esto es, los usuarios deben especificar explícitamente dónde desea realizar una cierta tarea, con qué máquina se comunica, dónde guarda sus archivos, etc. Sistemas Distribuidos: Son sistemas en los cuales la red es transparente al usuario, el cual la ve como un sólo gran computador virtual, y tiene acceso a todos los recursos como si fueran locales a su computador. La decisión de dónde realizar las tareas es realizada automáticamente por el sistema. I.4. Clasificación de las Redes de Computadores Las redes se clasifican de manera general en tres tipos según las distancias entre los computadores que interconectan: Redes Locales (LAN, Local Area Network) (hasta 1km): Son redes que permiten la interconexión de computadores dentro de un cuarto, edificio o terreno. Redes Metropolitanas (MAN, Metropolitan Area Network) (hasta 100km): Son redes que permiten la interconexión de computadores de toda una ciudad o región. Redes Mundiales (WAN, Wide Area Network) (hasta 10.000km): Son redes que permiten la interconexión de computadores de todas partes del mundo. I.5. Estructura de Red Una red de computadores está organizada en una serie de redes físicas, las cuales permiten la comunicación entre ellos. Veamos: I.5.1. Red Física Es un conjunto de nodos de la red, interconectados mediante un solo medio físico o canal de comunicación, sin traductores intermedios. Un canal de comunicación es un ambiente donde es posible establecer una comunicación. Los medios físicos más comunes para establecer canales de comunicación son: el sonido en el aire, la luz viajando a través de algún medio (aire, fibras ópticas), la electricidad por cables (par trenzado, paralelo, líneas telefónicas), ondas de radio (radio, televisión), etc. Los nodos son elementos que son capaces de transmitir y/o recibir información a través de uno o más canales de comunicación iguales o diferentes entre sí. Existen dos tipos de redes físicas, las con canales punto-a-punto y las con canales de difusión: Canal Punto a Punto: Tiene sólo dos nodos conectados a él, y cuando uno transmite sólo el otro puede recibir la información transmitida (ej.: llamadas por teléfono). Canal de Difusión: Poseen muchos nodos conectados al mismo canal, y cuando uno de ellos transmite todos pueden recibir. El mensaje enviado incluye un identificador que el receptor analiza para saber si fue enviado a él o no. a) b) c) d) e) Topologías de Red Física Punto-a-Punto: a) Estrella; b) Anillo; c) Completa; d) Irregular; e) Arbol; a) b) c) Topologías de Red Física de Difusión: a) Bus de Datos; b) Radiodifusión; c) Anillo; I.5.2. Hosts o Sistemas Finales Son los computadores conectado a la red, que proveen y/o utilizan servicios a/de ella. Los usuarios deben utilizar hosts para tener acceso a la red. En general, los hosts son computadores mono o multiusuario que ofrecen servicios de transferencia de archivos, conexión remota, servidores de base de datos, servidores WWW, etc. Los usuarios que hacen uso de los hosts pueden a su vez pedir los mismos servicios a otras máquinas conectadas a la red. I.5.3. Subred Es una red que sólo contiene enlaces, no contiene hosts, y que posibilita las comunicaciones entre hosts distancia. SUBRED Relación entre hosts y la subred Los hosts conectados a una subred deben hacerlo a través de uno o más nodos de ella, de manera que todo el tráfico que va y viene desde la subred al host debe pasar por estos nodos. I.6. Arquitectura de Red Conjunto de capas y protocolos que definen el comportamiento de una red. I.6.1. Capas Las redes se construyen en base a una serie de capas o niveles, de manera de reducir su complejidad. El número de capas, sus nombres y sus funciones varían de gran manera de una red a otra, por lo que la estandarización se hace necesaria. Sin embargo, en toda red, el propósito de una capa es proveer una servicios a la capa siguiente, encapsulando los detalles de cómo se llevan a cabo las tareas. Tenemos entonces que: Arquitectura basada en capas; Cada capa utiliza servicios de la capa inferior; Cada capa provee servicio a la capa superior, encapsulando los detalles; La capa n de una máquina A se comunica de forma transparente con la capa n de una máquina B (protocolo); La transparencia en capas n se implementa mediante servicios en las capas n 1 de cada máquina (interfase); La implementación de un nivel en un sistema particular se llama entidad; Capa n Protocolo de Capa n Capa n Interfase Capas n/ n 1 Capa n 1 Protocolo de Capa n 1 Capa n 1 Interfase Capas n/ n 2 Capa n 2 Protocolo de Capa n 2 Capa n 2 … … … Capa 2 Protocolo de Capa 2 … Capa 2 Capa 1 Protocolo de Capa 1 Capa 1 Interfase Capas 2/1 Uso directo del Canal Medio Físico o Canal de Comunicación I.6.2. Servicio Capacidad suministrada por un nivel n y los anteriores al nivel siguiente n+1, a través de las entidades del nivel n. El conjunto de servicios suministrados por la capa n constituye la interfaz n / n+1. La interfaz entre dos capas, vista de arriba hacia abajo, constituye una interfaz cliente / servidor. I.6.3. Protocolo Conjunto de Algoritmos y Formatos que gobiernan la comunicación entre entidades de un mismo nivel, utilizando los servicios del nivel anterior. Un protocolo es un mecanismo de control de la relación entre entidades pares (misma capa) ubicadas en puntos físicos distintos de la red. I.6.4. Problemas de Diseño Los problemas de diseño de redes aparecen por lo general también al diseñar cada capa, y son en general: Establecer Conexión: Debe existir un mecanismo para establecer una conexión, y específicamente, debe poderse especificar con qué proceso de que host se desea establecer la conexión. Terminar Conexión: Debe existir un mecanismo para terminar una conexión, lo que parece ser trivial pero no lo es en absoluto. Reglas de Transferencia: La comunicación puede ser unilateral (simplex), bilateral alternada (semiduplex) o bilateral simultánea (duplex). Control de Errores: Debe existir un mecanismo de control y recuperación de errores, además de una manera de asegurar el ordenamiento de la información (no todos los canales mantienen el orden de la información). Velocidad: Se debe controlar tanto la velocidad de transferencia de datos en el canal como la velocidad a la cual un emisor o receptor es capas de procesarlos. Largo de los Mensajes: Deben haber mecanismos de segmentación de mensajes largos y de reunión de mensajes muy cortos. Uso Concurrente de Canales: Una capa puede utilizar la misma conexión para realizar conversaciones múltiples sin que éstas tengan relación alguna. Encaminamiento: Se debe poder establecer un camino entre dos máquinas. La decisión de cuál camino seguir se puede hacer de manera automática o explícita en una o más capas de la red. II. Ingeniería de Protocolos de Red El diseño de protocolos ha ido evolucionando gradualmente desde las originales aplicaciones de comunicaciones independientes, totalmente incompatibles unas de otras (años 60 y 70). La necesidad de la unificación de las redes implicó el implantar protocolos iguales en máquinas diferentes, lo que con el tiempo llevó a protocolos complejos (años 70 y 80). Surge así la necesidad de utilizar lenguajes formales de descripción de protocolos no ambiguos y precisos, que permitan establecer normas sin dobles interpretaciones y la verificación de sus propiedades. Aparecen así diversas normas, como la ISO, la SNA de IBM, SDL de CCITT, etc., las cuales utilizan diversas técnicas de representación formal. Tradicionalmente existen cuatro maneras de representar formalmente los protocolos: Autómatas; Grafos; Redes de Petri; Diagramas de Tiempo. Los pasos a seguir para especificar un protocolo son los siguientes: II.1. Especificación formal; Validación y Verificación; Análisis de Prestaciones; Implementación; Prueba; Especificación Formal de Protocolos La descripción formal consiste en una descripción abstracta del comportamiento de un sistema, sin especificar ningún detalle de su implementación (recordar interfaz de los tipos abstractos de datos, TAD). La especificación puede ser de dos tipos: Constructiva: Se describe el comportamiento del sistema usando un lenguaje de muy alto nivel (LOTOS por ej.). Es un enfoque operacional, orientado a las operaciones que el sistema realiza. Descriptiva: Se describen las propiedades que debe cumplir el sistema, las cuales lo definen. Es un enfoque axiomático que utiliza lógica matemática para describirlo. II.2. Validación y Verificación Validación: Consiste en la comprobación de las propiedades del protocolo. Dentro de ellas encontramos: Ausencia de Bloqueos; Ausencia de Lazos Improductivos (trabajo inútil); Capacidad de Recuperación y Sincronización; Verificación: Consiste en la demostración de que el protocolo provee los servicios que de él se esperan. Esto implica: Explorar el árbol de estados (autómatas); Equivalencias algebraicas (descripciones observacionales); Verificación lógica (descripciones axiomáticas); II.3. Análisis de Prestaciones Consiste en modelar estadísticamente un protocolo, con la finalidad de determinar su eficacia. Un protocolo no debe ser sólo lógicamente correcto, sino que además debe realizar sus funciones eficientemente. Se debe estimar el caudal eficaz, el uso de recursos y los tiempos de respuesta, bajo los supuestos de tráficos característicos del nivel. La complejidad de los protocolos actuales no permite hacer modelos analíticos, por lo que se recurre a la simulación. II.4. Implementación Se trata de la implementación final del protocolo especificado en una máquina en particular, de manera de realizar algún nivel de la arquitectura de la red. Para ello se debe traducir la especificación a algún lenguaje de programación, lo que debe ser automatizado dentro de lo posible para evitar errores. II.5. Prueba Se debe finalmente comprobar que la realización del nivel se ajusta a la norma (prueba de conformidad), para lo cual existen centros certificadores y homologadores. Se debe recurrir a asesoramiento por problemas legales y/o incompatibilidades. La prueba generalmente se automatiza total o parcialmente, para hacer más fácil un trabajo tedioso que por lo general se puede hacer sólo parcialmente debido a la complejidad de los protocolos y a la gran cantidad de posibilidades que permiten. III. Modelo OSI de ISO La ISO (International Standard Organization) ha creado un estándar de referencia para la arquitectura de redes. Este estándar se conoce como OSI (Open Systems Interconnection), y pretende establecer un estándar para comunicaciones entre sistemas diferentes entre sí. III.1. Las Capas de OSI Capas se crean donde se necesite un nivel diferente de abstracción; Cada capa debe efectuar una función bien definida; Función de cada capa elegida orientada al establecimiento de protocolos internacionales; Límites entre capas se establecen de acuerdo a la minimización del flujo de información entre ellas (por interfaces); Número de capas debe ser suficientemente grande para que funciones diferentes no se deban poner en la misma capa, y lo suficientemente pequeño para que la arquitectura no se torne difícil de manejar. Unidad de Información. 7. Aplicación Protocolo de Aplicación Aplicación APDU 6. Presentación Protocolo de Presentación Presentación PPDU 5. Sesión Protocolo de Sesión Sesión SPDU 4. Transporte Protocolo de Transporte Transporte TPDU 3. Red Red Red Red Paquete 2. Enlace Enlace Enlace Enlace Trama Física Bit Protocolos Internos de Subred 1. Física HOST A Física Física Límite de Subred Protocolo de Enlace del Host Protocolo Físico del Host Protocolo de Red del Host HOST B Las funciones básicas de cada capa son: Capa Función Aplicación Servicios de Apoyo a las Aplicaciones Administración de Redes. Conversión e Interpretación a Formatos Estándares. Interconexión y Sincronización de Procesos Conexiones Lógicas Punto-a-Punto (abstraídas del sistema técnico) Encaminamiento y Control de Flujo Conexiones Lógicas con Paquetes de Datos Detección Elemental de Errores Presentación Sesión Transporte Red Enlace Física Utilización Directa del Medio Físico Ayuda Comunicacional a la Transmisión Física Unidad Estándares de Info. APDU X.400, FTAM PPDU ASN.1 SPDU TPDU ISO 8326/27 ISO 8072/73 Paquete X.25 WAN Trama X.25 WAN, ISO 8802 LAN Bit X.25 WAN, ISO 8802 LAN La explicación detallada de las funciones se hace en el resto de este curso y el curso de Comunicación de Datos. Transmisión de Datos en OSI1 III.2. La transmisión de datos se realiza, desde un proceso a otro a través de toda la torre de entidades hacia abajo en el host que alberga el proceso emisor y hacia arriba en el que alberga el receptor. En el emisor, cada capa recibe de la capa superior la información a transferir (Datos) junto con información de control de la interfase (ICI), conjunto que se denomina Unidad de Datos (IDU). La capa inferior toma el ICI y decide qué hacer con los Datos, luego le agrega un encabezado (xH) y/o terminador (xT) a ellos y los pasa como nuevos Datos a la capa inferior junto con un nuevo ICI, constituyendo la IDU para la capa inferior. En el receptor se produce el proceso inverso, y cada capa toma los datos recibidos desde la capa inferior, reconociendo el encabezado y/o terminador creados por la entidad par en el emisor, y pasando los datos restantes hacia la capa superior. 1 El análisis que sigue es válido para toda arquitectura de red que utilice capas, pero la terminología utilizada es la OSI, por lo que este capítulo se verá con relación al estándar OSI. La siguiente figura muestra el proceso de emisión de datos dentro de una entidad de una capa cualquiera: mICI Nivel m (n-1) SAP (Service Access Point) IDU (Interface Data Unit) SDU (Service Data Unit) PDU (Protocol Data Unit) ICI (Interface Control Information) IDU mSDU SAP mICI Nivel n nICI nH mSDU SAP nICI Nivel n+1 nSDU La siguiente figura muestra la composición de datos que se hace en cada nivel: Proceso Emisor Aplicación AH Presentación PH Sesión Enlace Física NH DH Aplicación Presentación Datos TH Red Datos Datos SH Transporte Datos Proceso Receptor Sesión Datos Transporte Datos Datos Bits Red DT Enlace Física La siguiente es una lista comparativa de los estándares de tres tipos de redes comunes: Capa ISO / OSI DoD (TCP / IP) Novell Aplicación X.400, FTAM SMTP Compilador Btrieve HMS Presentación ASN.1 FTP Telnet Kernel Netware DNS / NSP Sesión ISO 8326/27 Transporte ISO 8072/73 TCP ICMP Red Enlace Física UDP EGP IPX SPX NetBios X.25 WAN X.25 WAN, ISO 8802 LAN X.25 WAN, ISO 8802 LAN IP, ARP. RARP Arpanet Ethernet Token Ring ArcNet X.25 PDN Cualquiera de 80 LAN IV. Capa Física El propósito de la capa física es el de llevar un flujo de bits desde una máquina a otra, utilizando para ello algún medio físico. Su estructura fundamental es la que sigue: Mensaje Entrada Señal de Entrada Transductor Entrada Canal: Señal Enviada Señal Recibida Tx Canal Interferencia Ruido Atenuación Señal de Salida Rx Mensaje Salida Transductor Salida Distorsión Medio físico de conexión entre el transmisor y el receptor; Transmisor (Tx): Dispositivo que acopla el mensaje en el canal, en forma de la señal transmitida; Receptor (Rx): Dispositivo que extrae la señal del canal, y entrega al transductor de salida; Transductor: Dispositivo que convierte una magnitud física a otra de naturaleza diferente; IV.1. Bases Teóricas para la Comunicación de Datos La comunicación de información a distancia se logra haciendo llegar al receptor cambios perceptibles, generados por el emisor, a través de algún medio físico, como el aire (sonido, luz), cables (electricidad), etc. Para modelar mejor lo anterior se hace uso de modelos matemáticos, los cuales permiten representar el fenómeno del transporte de información de manera determinista, facilitando además del entendimiento del comportamiento físico de los medios. IV.1.1. Conceptos Básicos Medio Físico: Es el material o conjunto de materiales que permiten la comunicación debido su capacidad de modificarse alguna propiedad física de él. También se le llama canal; Estados del Medio: Son los estados diferentes en que se puede encontrar el medio físico. Deben existir a lo menos dos estados diferenciables. Señal: Secuencia de estados sucesivos del medio físico, que constituyen un mensaje; Intervalo de Señalización: Tiempo que debe durar cada estado del medio para que se constituya una unidad de información. IV.1.2. Medios de Transmisión Los medios físicos de transmisión son los materiales y ambientes utilizados para acarrear información. Pueden ser tan simples como el aire o tan sofisticados como una fibra óptica. a) Medios Magnéticos Son los discos magnéticos removibles, los cuales pueden ser transportados físicamente desde una máquina hasta otra. Puede sorprender quizá que se incluya este medio en esta descripción, pero considere una camioneta que demora 1 hora en ir de una máquina a otra, transportando 200 cintas magnéticas de 180Mb c/u. La velocidad de transmisión es entonces de 80Mbs!! Ninguna LAN actual posee esta capacidad de transporte de datos. Además, es un medio que no se compara en costo con los demás. b) Cable Par Trenzado Es un cable de dos hilos gruesos, enroscados el uno sobre el otro para evitar interferencias externas. Se usan para transmisión analógica (telefónica, por ej.) y digital en distancias medias, y tienen un costo bastante bajo. La codificación se hace utilizando la ausencia de voltaje como valor 0, y la presencia (generalmente unos 5V) como valor 1. c) Cable Coaxiales Es un cable con un hilo grueso en el centro y una malla alrededor de él, aislados por una capa de plástico intermedio. Existen de dos tipos: banda base (60 Ohm) y banda ancha (75 Ohm). La diferencia entre ellos radica en su configuración, ya que el primero no necesita de repetidores periódicos para distancias menores de 1km, proveyendo de velocidades de hasta 10 Mbps. El segundo, en cambio, no puede pasar de los 100m si repetidores, pero provee una velocidad de hasta 150 Mbps. La codificación en el primer tipo es similar al par trenzado, pero para el segundo similar a la utilizada por el sistema de televisión, de modo que es bastante más complejo el proceso de codificación o decodificación. d) Fibras Opticas El medio de transmisión es una fibra muy delgada de vidrio o silicio fundido, y se necesita de un LED o diodo láser para la transmisión, y de un detector de luz para la recepción. Debido a que la frecuencia de la luz visible es del orden de 108 Mhz, se pueden lograr velocidades de hasta 1000 Mbps en una distancia de 1km. La codificación se asocia a la presencia o ausencia de luz, existiendo sistemas por colores sólo en etapa experimental. Existe un límite en la distancia que puede cubrir una fibra óptica, debido al ruido inherente al canal. Este se produce por Dispersión Internodal (distinta distancia recorrida por distintos rayos de luz dentro de la fibra). Así, a mayor distancia, menor velocidad se puede lograr. Para solucionar este problema se han creado repetidores electrónicos (los impulsos luminosos se transforman a eléctricos y luego nuevamente a luminosos), que eliminan el ruido, y las llamadas Fibras de Bombeo, que son capaces de amplificar la señal luminosa sin transformarla a electrónica. Existen tres tipos de fibras ópticas: Multinodo, Multinodo Gradual y Mononodo. Las primeras son más baratas pero con mayor ruido, y las últimas mas caras y casi sin ruido. Las Mononodo requieren de diodos láser (note que las curvas de la fibra no inciden en el ruido). Multinodo Multinodo Gradual Mononodo El uso de fibras ópticas es en general simplex (en una sola dirección), y se tienden de a pares bidireccionales o en anillos cerrados para lograr comunicación mutua. e) Trayectorias Opticas a través de la Atmósfera Existe la posibilidad de utilizar la atmósfera como medio de transmisión, utilizándose luz infrarroja, microondas, ondas de radio, etc. para la transmisión de información. f) Uso de Satélites Los satélites reciben señales de microondas desde la tierra y las repiten de vuelta hacia ella, alcanzando lugares imposibles de alcanzar visualmente desde el emisor debido a la curvatura de la tierra. Sin embargo, el uso de satélites implica un retardo de 250 a 300 ms, debido a la distancia que recorre la señal, y muchas veces una conexión por tierra es más rápida. Aún así, cuando existe la necesidad de difusión, como la televisión, por ejemplo, el satélite es mucho más barato. IV.1.3. Comparación de Medios A continuación se muestra una comparación de los diferentes medios de transmisión basados en ondas electromagnéticas (luz, electricidad, radio): Tipo Línea Telefónica Par Trenzado Coaxial BB Coaxial BA Fibras Opticas Microondas Simbología: 3KHz 30KHz 300KHz 3MHz 30MHz 300MHz 3GHz 30GHz 300GHz >> > 0 < << Dist. Máx. Ancho Banda Nº Canales Atenuación Ruido Costo Segurid ad Cant. Nodos 3km 10m 10km 50km 10km 50km < 60 KHz 1 Mbps 10 Mbps < 50 MHz < 400 MHz > 500 MHz > 100 MHz 1 1 Alta Alta >> >> << < M M M M 1 cientos miles cientos 6-60dB/km 6-60dB/km 1-8dB/km ???? > > 0 > > > >> > B B MB B B(100) MB(1000) M B : : : : : muy alto alto cero bajo muy bajo Miriamétricas Kilométricas Difusión Radio Navegación MF Hectométricas Difusión AM Cable Coaxial HF Decamétricas Radio Telefonía Onda Corta Difusión FM VHF Métricas Televisión Radio Móvil Televisión UHF Decimétricas Troposfera Microondas Radar Satélite SHF Centimétricas Microondas Radar Telefonía Multicanal EHF Milimétricas Guías de Onda Corriente Alterna VLF LF Rayos Infrarrojos Rayos Ultravioleta Rayos Gamma 101 102 103 104 105 106 107 108 109 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 Ondas de Radio Luz Visible Rayos X IV.1.4. Señales Ondulatorias Las señales ondulatorias utilizan materiales como medios físicos de propagación de onda, como electricidad, microondas, luz, sonido, etc. Veamos algunas definiciones: Frecuencia (f): Cantidad de oscilaciones por unidad de tiempo (1/s = Hz); Período (T): Duración de una oscilación; Amplitud (A): Ancho de la onda, su tamaño. A T Se tiene: f y x t 1 T es la señal en el tiempo. IV.1.5. Análisis de Fourier Supongamos que se representan los cambios perceptibles del medio mediante una onda, que representa por ejemplo cambios en la intensidad o color de una luz, en el tono o volumen de un sonido, o en el voltaje o corriente proveniente de una fuente eléctrica. Así, podemos considerar esta onda como función del tiempo: f t . Jean Fourier demostró que cualquier función matemática f t razonablemente periódica, de período T, se puede representar como una serie de la forma f t 1 2 a0 2 n a n sen T n 1 t b n 1 n 2 n cos T t con an bn 2 T 2 T T 0 T 0 2 n f ( t ) sen t dt T 2 n f ( t ) cos T t dt que se conoce como Serie de Fourier de f t . Cada par de coeficientes, para un n dado, se llama componente armónica n. Por ejemplo, supongamos que se desea transmitir el caracter ASCII “b”, cuyo patrón de bits es 01100010, a través de un cable, utilizando la variación en el voltaje con corriente continua para representar ceros y unos (0V a 3V es 0, 3V a 5V es 1), usando un intervalo de señalización dado. Los siguientes gráficos muestran cómo se vería V vs. t con diferente cantidad de coeficientes considerados en la Serie de Fourier asociada: Representación de Onda Binaria Cuadrada Representación de Fourier 1 Armónico Representación de Fourier 2 Armónicos Representación de Fourier 4 Armónicos Representación de Fourier 8 Armónicos IV.1.6. Espectro y Filtros Una señal dada puede estar compuesta de múltiples armónicos, de diferentes frecuencias. Se puede graficar A vs. f para una señal dada, obteniéndose el llamado espectro de la señal, que muestra cuáles armónicos son los más relevantes. En la naturaleza las señales (sonido, luz, olas en el agua, etc.) poseen infinitas componentes, por lo cual se han construido filtros de banda de señales, que eliminan todos los armónicos de la señal, salvo los de cierto rango o algunos específicos. Espectro: Gráfico A vs. f para una señal dada; Ancho de Banda (B): señal; Es el ancho del rango de frecuencias que posee una Filtro de Banda: componente que elimina armónicos de una señal, salvo los de cierto rango. IV.1.7. Distorsión, Interferencia, Atenuación y Ruido Distorsión: Deformación de la señal debida a imperfecciones del sistema o del canal mismo. La distorsión se produce debido a las propiedades físicas del medio, como por ejemplo, el largo de un cable eléctrico, o los cerros en el caso de la transmisión por radio. Interferencia: Deformación de la señal debida a otras señales. Generalmente es posible evitar la interferencia mediante arreglos especiales, dependiendo del medio físico utilizado. Por ejemplo, los cables tipo Par Trenzado evitan la interferencia enroscando los hilos conductores unos sobre otros, anulándose así el efecto de señales externas. Atenuación: Debilitamiento progresivo de la señal debido a la distancia recorrida; La atenuación es una baja en la intensidad de la señal debido a la pérdida de energía a través del medio físico que recorre. Por ejemplo, las olas en el mar disminuyen en tamaño a medida que avanzan por su superficie. Ruido: Deformación de la señal debida a causas aleatorias, externas o internas al medio; El ruido se produce la mayoría de los casos debido a imperfecciones del medio. En el caso de los cables conductores pueden ser pequeñas irregularidades del material, y en el caso del aire basta con cambios de temperatura, presión o humedad a lo largo del recorrido de la señal. El siguiente análisis matemático permite modelar el comportamiento del ruido, en os casos en que este es predecible. Considere la representación de Fourier para las señales. Analíticamente, el canal es un filtro de armónicos, produciendo diferentes niveles de ruido y atenuación de la señal para cada armónico. Sea x t la señal transmitida, y t la señal recibida, y n t el ruido del canal. Se tienen entonces la relación: y t c t x t IV.1.8. Velocidad de Transmisión La velocidad de transmisión depende del método de codificación (cantidad de símbolos posibles, esto es, cantidad de estados diferentes del medio) y de la velocidad de la señal (cantidad de estados por unidad de tiempo, o baudios). La velocidad de transmisión se define como la cantidad de bits de datos que se pueden transferir por unidad de tiempo (generalmente bytes por segundo, bps), y su máximo depende de las posibilidades del medio y de las velocidades de emisión o recepción en los extremos, cualquiera sea el más lento. Por ejemplo, a través de una línea telefónica no se pueden transferir frecuencias de sonido de más de 3000Hz, que es un límite artificial impuesto para asegurar la correcta transmisión bajo él. Así, para las velocidades de datos de mayor uso por líneas telefónicas se tiene las siguientes características: Vel. (bps) periodo T (ms) 1er Arm. (Hz) Cant. Arm. Vel. (bps) periodo T (ms) 1er Arm. (Hz) Cant. Arm. 300 600 1200 2400 26.6667 13.3333 6.6667 3.3333 37.5 75 150 300 80 40 20 10 4800 9600 19200 38400 1.6667 0.8333 0.4166 0.2083 600 1200 2400 4800 5 2 1 0 La velocidad máxima de transmisión está limitada además por el ancho de banda máximo permitido por el canal, límite impuesto generalmente para asegurar la compatibilidad de equipos. Se tienen entonces las siguientes propiedades de velocidad para canales de datos: a) Velocidad en Canal sin Ruido (Nyquist): V m ax 2 B log 2 M b p s donde: M es la cantidad de estados diferentes del medio; y B es el ancho de banda máximo posible. b) Velocidad en Canal con Ruido (Shanon): S V m ax B log 2 N bps donde: S es la potencia de la señal; N es la potencia del ruido; y B es el ancho de banda máximo posible. En la práctica, el valor S/N se le conoce como relación señal-ruido, y se mide indirectamente a través de la expresión 1 0 lo g 1 0 S / N d B . IV.2. Transmisión Analógica Es la utilización de una magnitud física que varía de forma continua en el tiempo, y que puede tomar infinitos valores dentro de un rango predeterminado, para trasmitir una señal. Durante 100 años fue la transmisión analógica la dominante en el mundo, empezando por el teléfono y luego la televisión. La excepción es el telégrafo en clave morse, aunque era muy rudimentario, ya que la codificación y decodificación no estaba automatizada. IV.2.1. Sistema Telefónico El sistema telefónico es una red de conmutadores análogos automáticos o manuales, los cuales se encargan de unir las conexiones de manera apropiada para conectar dos teléfonos entre sí. Los conmutadores locales (oficinas, edificios, barrios, etc.) con una línea directa hacia cada teléfono. Los conmutadores locales están conectados entre sí y con centrales interurbanas, que cubren pueblos pequeños o comunas enteras, con conexiones capaces de llevar muchas líneas telefónicas. Estas a su vez se conectan con centrales mayores, que cubren las necesidades de conexión entre ciudades enteras y/o países. Así, si se llama al vecino, sólo se utilizara el conmutador local, pero si se llama a otro país, se utilizarán varios conmutadores. Cabe destacar, que el sistema se puede saturar cuando existen muchas llamadas con mismo origen y destino, pero esto rara vez ocurre. Como las líneas telefónicas son baratas y cubren grandes distancias, son una alternativa atractiva a la hora de conectar dos computadores entre sí. Para ello se debe utilizar este medio analógico como base para uno digital, que es necesario para la conexión de computadores. Para este fin se crearon los módems, que permiten lo anterior. Debido a que las líneas telefónicas están limitadas a frecuencias entre 300Hz y 3KHz, no se puede utilizar todo el potencial del medio físico. Además, cuando las distancias son largas, existen dispositivos de supresión de ecos, los que evitan que ambos extremos “hablen” a la vez. Ultimamente se han mejorado estos supresores, de modo que mientras exista una frecuencia dada, se mantienen cerrados, de modo que pueda realizarse comunicación bilateral simultánea. IV.3. Transmisión Digital Es la utilización de una magnitud física que varía de forma discreta en el tiempo, y que puede tomar valores dentro de un rango finito predeterminado, para trasmitir una señal. La transmisión digital se basa en los principios de los sistemas digitales, y por esto tiene las mismas ventajas que estos: la recuperación de la señal digital es exacta y se pueden multiplexar varias señales (voz, vídeo, sonido, etc. por un mismo canal). Además se puede sacar mayor provecho de las líneas de comunicación actuales. IV.3.1. Modulación de Señales Un modulador (módem) trabaja utilizando un sonido base estable y constante, que es transmitido todo el tiempo por ambos extremos, manteniendo inactivos los supresores de eco. Esta señal es modificada de alguna forma, de manera que son las modificaciones las que indican los cambios de estado del medio. Al proceso de modificar la señal se le llama modulación. Existen diferentes tipos de modulación: Modulación de Amplitud: Modulación de Frecuencia: Modulación de Fase: Modulaciones Combinadas: Usa dos niveles de voltaje de la señal (AM); Se utilizan dos o mas tonos (FM); Se usan desplazamientos de fase (QM); Alguna combinación de las anteriores. Señal Base Señal Moduladora Digital Modulación Digital de Amplitud Modulación Digital de Frecuencia La señal moduladora puede ser análoga, pero aquí estudiamos las digitales, que son nuestro interés primordial para la comunicación de datos. Modulaciones Combinadas: Las modulaciones combinadas poseen varios estados, que se logran mediante pares frecuencia/amplitud. Así, se puede enviar más de un bit de información por baudio. El siguiente ejemplo corresponde a QAM (Quadrature Amplitude Modulation), donde se representan (en coordenadas polares) la amplitud y el desfase de la señal (cercanía al origen y ángulo, respectivamente): 8 combinaciones 3 bits/ baud 16 combinaciones 4 bits/ baud Así, según la forma de modulación, podemos calcular la velocidad de transmisión en señales moduladas (tasa binaria), de la siguiente manera: V 1 T log 2 M bps donde: M es la cantidad de estados diferentes del medio; y T es el intervalo de señalización. Los módems son entonces dispositivos que permiten enviar señales digitales a través de canales analógicos. Cabe destacar que casi todos los medios físicos se utilizan como medios analógicos. Quizá la única excepción sean, por ahora, las fibras ópticas. IV.3.2. Teorema del Muestreo ¿Cómo recuperar la señal digital a partir de la analógica recibida? Sean: x a t la señal analógica recibida, con ancho de banda B; ws la frecuencia de muestreo; x s t la señal de muestreo de x a t . La señal de muestreo se obtiene tomando muestras de x a t con frecuencia ws, y reconstruyendo la señal. Si se analizan los espectros x t de ambas señales se tiene que el espectro de x s t es idéntico al de -B B x a t , salvo que se repite periódicamente cada ws unidades x t de frecuencia. a s ws -B B ws Se puede construir entonces un filtro que aísle el rango de frecuencias central, recuperándose íntegramente la señal original, sólo si los espectros periódicos no se entrecruzan. Por lo anterior, debe elegirse una frecuencia de muestreo que cumpla con la siguiente característica: Teorema del Muestreo Sea w es la frecuencia de muestreo para una señal de ancho de banda B, entonces para poder recuperar íntegramente la señal original, se debe cumplir: ws 2B Corolario: A menor ancho de banda, se pueden tomar muestras más seguidas, lo que implica la posibilidad de una mayor velocidad de transferencia; IV.3.3. Modulación por Impulsos Codificados (MIC) Los MIC son dispositivos que permiten la transmisión de impulsos mediante la codificación digital de ellos. Funcionan en base al teorema del muestreo, de manera que las muestras suficientes para poder reconstruir la señal original de manera aceptable. Qué es aceptable depende de la aplicación particular (sonido de teléfono, sonido de CD, vídeo, etc.). La estructura de un MIC es la siguiente: Muestreador w2B Señal Analógica xa(t) Cuantizador de q niveles Muestras Analógicas de xa(t) Codificador de n bits Muestras Digitales de xa(t) Palabras de n bits por muestra Muestreador: toma muestras analógicas discretas de la señal, con frecuencia suficiente para reconstruir la señal aceptablemente (según teorema del muestreo); Cuantizador: Digitaliza las muestras, llevando cada muestra analógica al valor digital (valor cuántico) más cercano. Se toma una cantidad q de niveles. El error introducido en el cuantizador es constante y conocido, y no depende del ruido de ningún medio utilizado. A mayor q menor error; Codificador: Codifica las muestras digitales en palabras de n bits. Se debe tener n q 2 . V. Capa de Enlace Hasta ahora hemos visto cómo enviar bits individuales a través de un medio físico, pero ¿qué hay del envío de palabras de varios bits? El objetivo de la capa de enlace es el correcto envío de palabras entre máquinas conectadas al mismo medio físico. V.1. Problemas de Diseño Capa de Enlace V.1.1. Tipo de Servicio Suministrado Se pueden proveer servicios sin conexión con y sin asentimiento, y servicios con conexión, a la capa superior de la torre de protocolos (capa de red). a) Servicio sin Conexión y sin Asentimiento Consiste en enviar información de una máquina a otra, sin que el receptor envíe un asentimiento de regreso para indicar que la información enviada llegó con éxito. Es útil cuando la tasa de error es baja y se delega esta responsabilidad a la capa superior, o cuando se tiene necesidad de transferencia en tiempo real y no importan algunos errores (teléfonos); b) Servicio sin Conexión y con Asentimiento Consiste en enviar información de una máquina a otra, y el receptor debe enviar un asentimiento de regreso para indicar que la información enviada llegó con éxito. Si una información no llega bien, no se envía asentimiento, y luego de un tiempo razonable el emisor puede retransmitir. Note que puede perderse un asentimiento, y las tramas enviadas pueden ser recibidas varias veces; c) Servicio Orientado a Conexión Se establecen conexiones entre las máquinas, y se enumeran las unidades de información individuales. Así, se puede asegurar que las unidades son recibidas, en el mismo orden que se envían y sin repetir ninguna. Para el servicio orientado a conexión el estándar OSI define cuatro primitivas de comunicación para el paso de mensajes con asentimiento, las cuales se muestran en el dibujo (Emisor a la izquierda, receptor a la derecha, capa física en medio). re q u e st in d ica tio n re sp o n se co n firm V.1.2. Entramado TRAMA Es una secuencia de bits que constituye la unidad de información utilizada en la comunicación entre entidades de la capa de enlace. La capa física sólo provee un flujo de bits inseguro (puede haber errores), y la capa de enlace debe detectar y, si es necesario, corregir los errores. Para ello, se envían tramas de bits, los cuales se verifican usando algún código de redundancia sencillo para poder detectar (e incluso corregir) errores. Es necesario entonces que las entidades de capa de enlace en dos máquinas distintas se sincronicen, de manera que se identifiquen claramente los comienzos y finales de las tramas. Los métodos más comunes son: a) Cuenta de Caracteres Cada trama contiene al inicio un campo con el largo de la trama. El problema es que si se produce un error en este campo, es muy difícil volver a sincronizar las entidades. Por ello casi nunca se utiliza; b) Caracteres de Inicio y Fin, con Inserción de Caracter Cada trama comienza con DLE STX y termina con DLE ETX 2. Cuando el receptor detecta un error, sólo debe buscar la secuencia DLE ETX ó DLE STX para saber dónde comienza la siguiente trama. Cuando el contenido de una trama contiene un DLE, se inserta otro DLE adicional al transmitirla, para indicar que este DLE es un dato. Este método está muy ligado al código ASCII; c) Banderas de Inicio y Final, con Inserción de Bit Cada trama comienza y termina con un patrón de bits especial, como 0111110 por ejemplo. Cuando el transmisor detecta que la información enviada contiene el patrón, inserta un bit 1 adicional, y transmite 01111110. El receptor detecta esta secuencia y elimina el bit adicional. El receptor sólo debe buscar el patrón dado cuando pierde la sincronización. Este método permite cualquier largo de bits para las tramas; d) Violación de Código Físico Si no se desea utilizar inserción alguna, se puede utilizar un valor de código no válido en la capa física para marcar el comienzo y final de las tramas; Como se ha visto, el problema de mantener sincronizados al transmisor y receptor se maneja a través de alguno de estos algoritmos, los que permiten diferenciar claramente una trama de otra. V.1.3. Control de Error En todos los métodos de entramado vistos, cuando se detecta un error, la trama errónea se descarta. Se debe proveer entonces un mecanismo que permite al transmisor saber que se ha perdido una trama dada para volver a transmitirla. 2 DLE, STX, ETX son caracteres ASCII (escape de enlace, inicio de trama, fin de trama) En general, los protocolos de enlace identifican con un número de secuencia cada trama enviada, y esperan que el receptor envíe de regreso un asentimiento de llegada para cada trama enviada (salvo para los asentimientos mismos). Así, si se recibe un asentimiento positivo, se tiene la certeza que la trama se recibió correctamente. Si se recibe un asentimiento negativo, o no se recibe asentimiento alguno, se sabe que hubo algún problema y que se debe retransmitir la trama. Uno de los peligros de este protocolo es que, cuando se pierde el asentimiento, una trama puede ser enviada y recibida varias veces. Por esto, el protocolo de enlace debe ser capaz de descartar tramas que se reciben repetidas. V.1.4. Gestión de Enlace Cuando existen más de dos máquinas conectadas al mismo medio físico, debe proveerse algún mecanismo para evitar que dos o más de ellas transmitan al mismo tiempo, ya que esto llevaría a la pérdida de toda la información transmitida. Cuando hay manejo de conexiones, se deben proveer mecanismos para establecer y liberar conexiones, así como para enviar y recibir datos a través de una conexión. V.1.5. Control de Flujo Se trata de manejar la situación de un transmisor rápido y un receptor lento. Se debe evitar sobrecargar al receptor, haciendo que el transmisor no envíe tramas a velocidad mayor que la que puede manejar el receptor. Normalmente el receptor es capaz de indicar al transmisor cuándo está listo a recibir una trama y cuando no. V.2. Detección y Corrección de Errores La detección de errores puede hacerse utilizando los siguientes mecanismos: V.2.1. Códigos Detectores de Hamming Son códigos que no utilizan todas las combinaciones posibles de caracteres, de manera que si se recibe una combinación que está fuera del código, se detecta un error. Se puede corregir el error suponiendo que ha habido un mínimo de errores, esto es, la palabra que se quiso enviar es la más cercana a la recibida, en los términos que siguen. Hamming determinó las capacidades de detección y corrección de códigos binarios, de la siguiente forma: Peso Hamming de un vector: w r = cantidad de 1’s del vector Distancia Hamming: d r , s w r XO R s = cantidad de discrepancias Indica la distancia binaria entre dos palabras. Esta función se utiliza para determinar la palabra más cercana a una incorrecta recibida. Distancia de Código: d C d m in r , s , r s Indica la distancia binaria mínima entre dos palabras del código C. 1 Cap. de Detección: d 2 d C Indica el valor máximo de errores simples (bits cambiados) que el código es capaz de detectar, esto es, antes que la palabra se transforme en otra del código. 1 t 2 d C 1 Cap. de Corrección: Indica el valor máximo de errores simples (bits cambiados) que el código es capaz de corregir en caso de error, esto es, antes que la corrección se haga hacia una palabra equivocada del código. V.2.2. Códigos Detectores Cíclicos Generalmente se utiliza además de lo anterior, un sistema de codificación llamado Código de Redundancia Cíclica, el cual permite detectar muchos tipos de errores en mensajes largos. Se basan en las matemáticas de polinomios, y aquí no se analizarán en profundidad. Sus características más importantes son: Detecta los errores dobles (2 errores simples en el mensaje); Detecta los errores impares (cantidad impar de errores simples en el mensaje); La probabilidad de no detectar errores es ½(n-2) (mensajes de largo n) ó ½(n-1) (mensajes de mayor largo), con n la cantidad de bits del código de redundancia. A continuación se muestra el algoritmo para calcular el código de redundancia de un mensaje de palabras de 8 bits (arreglo A), de largo n: 1. 2. crc16 = 0xFFFF; para j=1 hasta n 2.1. 2.2. 2.2.1. 2.2.2. 2.2.3. 2.2.4. 2.3. 3. crc16 = crc16 XOR para i=1 hasta 8 f = crc16 AND crc16 = crc16 si f entonces fin-para fin-para devuelve crc16 A[j] 0x0001 >> 1 crc16 = crc16 XOR 0xC001; En la línea 2.2.3. se utiliza el valor 0xA001, que representa un polinomio elegido de manera tal de maximizar la posibilidad de detección del código de redundancia. Los algoritmos para palabrea con otras cantidades de bits son similares, sólo que el polinomio elegido es diferente para cada caso, como muestra la siguiente tabla: n 6 8 8 V.3. Estándar CRC-12 CRC-16 CRC-CCITT (16) Polinomio x12 + x11 + x3 + x2 + x + 1 x16 + x15 + x2 + 1 x16 + x15 + x5 + 1 Valor Usado 0xC07 0xC001 0xC010 Gestión de Enlace Generalmente esta función de la capa de enlace se conoce como subcapa de control de acceso al medio (MAC), ya que es independiente del control de flujo. Cuando existen más de dos máquinas conectadas al mismo medio físico, debe proveerse algún mecanismo para evitar que dos o más de ellas transmitan al mismo tiempo, ya que esto llevaría a la pérdida de toda la información transmitida. Por lo anterior se hacen necesarios mecanismos de gestión de enlace, que permiten controlar qué máquina puede transmitir en un momento dado. Colisión: Ocurre cuando dos máquinas transmiten al mismo tiempo. Existen diferentes estrategias para lograr evitar las colisiones. V.3.1. Estrategias de Gestión de Enlace a) Estrategias de Repartición (Estáticas) Estas estrategias reparten el canal según algún criterio utilizando multiplexores. La repartición se puede hacer de múltiples formas, como pueden ser: TDM (Multiplexación por División de Tiempo): Divide el tiempo de utilización del canal en segmentos, para que cada máquina transmita sólo en el tiempo asignado a ella (problema: sincronización); FDM (Multiplexación por División de Frecuencia): Utiliza múltiples frecuencias base en un mismo canal, para que cada máquina utilice una de ellas; CDM (Multiplexación por División de Código): Utiliza sólo una parte del código de transmisión del canal para cada máquina; Existen versiones directas e indirectas de cada uno de ellos. En las directas las máquinas están conectadas directamente al canal, y en las indirectas existe un concentrador intermedio que realiza el proceso de multiplexación. Conexión Directa Control Centralizado Control Distribuido TDMA, FDMA, CDMA Conexión Indirecta TDM, FDM, CDM (concentradores) b) Estrategias de Compartición (Dinámicas) Estas estrategias permiten compartir el canal, pudiendo todas las máquinas transmitir y recibir utilizando un mismo canal, y las estrategias para evitar las colisiones son implementadas mediante algún algoritmo. Conexión Directa Control Centralizado 1. Selección (Daisy Chaining) 2. Reserva Control Distribuido 1. Selección (Token-Ring, Token-Bus) 2. Reserva (DQDB) 3. Contienda (Aloha, CSMA/CD) Conexión Indirecta 1. Concentradores Estáticos 2. Concentradores Dinámicos Estas estrategias de compartición se pueden caracterizar mediante los siguientes criterios: Hipótesis del Canal Único: Se tiene un solo canal disponible para transmitir y recibir, y no se puede utilizar otro medio de comunicación; Modelo de Estaciones: Existe una cantidad finita de máquinas conectadas directamente al canal, las cuales pueden transmitir y recibir tramas en cualquier momento. Sin embargo, cuando la capa de red en una de esas máquinas desea transmitir un paquete, ésta se bloquea hasta que la capa de enlace lo transmite con éxito; Colisiones: Cuando dos tramas colisionan la información se pierde, por lo que se debe transmitir ambas nuevamente; Asignación de Tiempo: Las tramas se pueden transmitir en cualquier momento (tiempo continuo) o de acuerdo a cierta sincronización (tiempo ranurado); Detección de Uso: Las máquinas pueden o no ser capaces de detectar si el canal está siendo o no utilizado. V.3.2. Estándares de Gestión de Enlace (IEEE 802) El siguiente esquema muestra la relación de los estándares de Enlace de IEEE con respecto al estándar de capas de la ISO: IEEE ISO 802.1 Capas Superiores LLC 802.2 Capa de Enlace MAC MAC MAC MAC 802.3 802.4 …. 802.8 Capa Física 802.1: Interfaz de la Capa de Enlace con capas superiores (A), Arquitectura de las LAN (B), e Interconexionado de Redes (C); 802.2: Control de Enlace Lógico (Logic Link Control); 802.3: CSMA/CD; 802.4: Token-Bus; 802.5: Token-Ring; 802.6: Red de Area Metropolitana DQDB (Distributed Queue Dual Bus); 802.7: Red de Banda Ancha; ???? 802.8: FDDI (Fiber Distributed Data Interface). V.3.3. Protocolos Aloha a) Aloha Puro process alohaPuro transmite; end transmite inmediatamente Estrategia: Compartición distribuida, directa y de contienda; Detección de Uso: No pueden detectar si el canal está o no siendo utilizado; Asignación de Tiempo: Continuo, las estaciones pueden transmitir en cualquier momento. En este protocolo las estaciones pueden transmitir en cualquier momento sus tramas, y para detectar si hubo o no colisión deben recibir simultáneamente el canal. Si lo recibido es diferente a lo enviado es porque hubo colisión, y se debe intentar retransmitir nuevamente la trama luego de un periodo de tiempo aleatorio. b) Aloha Ranurado process alohaRanurado [no bip] alohaRanurado; [] [bip] transmite; end espera la ranura transmite en ranura Estrategia: Compartición distribuida, directa y de contienda; Detección de Uso: No pueden detectar si el canal está o no siendo utilizado; Asignación de Tiempo: Ranurado, las estaciones pueden transmitir sólo en momentos dados. Para establecer las ranuras de tiempo es necesaria una estación especial que emita una señal al inicio de cada ranura, para que así las demás estaciones puedan saber cuándo comienza cada una. En este protocolo las estaciones pueden transmitir sólo a partir del comienzo de las ranuras, de manera que la probabilidad de colisión se reduce a la mitad. Al igual que en Aloha Puro, para detectar si hubo o no colisión deben recibir simultáneamente el canal. Si lo recibido es diferente a lo enviado es porque hubo colisión, y se debe intentar retransmitir nuevamente la trama en otra ranura, siempre luego de un periodo de tiempo aleatorio. V.3.4. Protocolos CSMA (802.3) a) CSMA 1Persistente process csma1P [ocupado] csma1P; [] [libre] transmite; end espera que este desocupado transmite Estrategia: Compartición distribuida, directa y de contienda; Detección de Uso: pueden detectar si el canal está o no siendo utilizado; Asignación de Tiempo: Continuo, las estaciones pueden transmitir en cualquier momento. Este protocolo es igual al Aloha Puro, pero puede detectar si el canal está o no siendo utilizado. Así, la estación empezará a transmitir inmediatamente después de que se termine de transmitir la trama actual. Esto produce un problema, debido a que si dos estaciones están esperando, colisionarán cuando termine la trama actual. b) CSMA No Persistente process csmaNP [ocupado] delay; csmaNP; [] [libre] transmite; end espera un tiempo aleatorio transmite Estrategia: Compartición distribuida, directa y de contienda; Detección de Uso: pueden detectar si el canal está o no siendo utilizado; Asignación de Tiempo: Continuo, las estaciones pueden transmitir en cualquier momento. El CSMA No Persistente es una mejora del 1Persistente, y consiste en no verificar continuamente si el canal está ocupado o no, sino que se debe esperar un cierto periodo aleatorio de tiempo antes de la próxima verificación. Así, cuando hay dos estaciones esperando por el final de la trama actual, es muy improbable que colisionen entre ellas. c) CSMA pPersistente process csmaPP [ocupado] csmaPP; [] [libre] [prob = p] transmite; [] [prob != p] delay; csmaPP; end espera que esté desocupado transmite con probabilidad p espera un tiempo aleatorio Estrategia: Compartición distribuida, directa y de contienda; Detección de Uso: pueden detectar si el canal está o no siendo utilizado; Asignación de Tiempo: Continuo (puedes ser ranurado, con delay = tiempo de ranura), las estaciones pueden transmitir en cualquier momento. El CSMA pPersistente es otra mejora del 1Persistente, y consiste en no transmitir siempre inmediatamente después de la trama actual, sino que sólo transmite con una probabilidad p. Con esto se logra que sólo algunas de las estaciones transmitan al finalizar la trama actual. d) CSMA con Detección de Colisión (CSMA/CD) El CSMA/CD es una mejora a los protocolos CSMA no ranurados, que consiste en detener la transmisión de una trama en cuanto se detecte una colisión con otra estación. Así, no es necesario esperar por la transmisión de toda la trama para que se desocupe el canal. Esta variante es utilizada en muchos protocolos de LAN comerciales. e) Cableado de 802.3 La norma 802.3 establece los siguientes niveles de calidad de cableado: ???? ???? ???? UTP Nivel 5 (FastEthernet): ???? par trenzado (máx. 10 Mbps); 10 Base T V.3.5. Rendimiento: Aloha y CSMA Consideremos las estrategias Aloha y CSMA, para un canal con infinitas estaciones intentando transmitir tramas de largo fijo. Se tiene un tiempo de trama fijo (largo de trama / bps). Sea S el rendimiento efectivo desde el punto de vista de una estación, esto es, la probabilidad de transmitir una trama inmediatamente. Se tiene que 0 < S < 1, ya que S > 1 significa que las estaciones generan tramas a velocidad mayor que la que es capaz de llevar el canal. Sea además G la razón de tramas que se desean transmitir (en total, todas las estaciones) en un tiempo de trama, incluyendo los intentos de retransmisión. Podemos relacionar G con S para los protocolos considerados: V.3.6. Protocolo TokenBus (Paso de Testigo en Bus) (802.4) Testigo: Trama especial que es enviada por una estación que terminó de transmitir a otra para que ésta comience a transmitir. En esta estrategia existe un ordenamiento de estaciones, y se implementa un protocolo distribuido para asignar turnos de transmisión a cada estación, de forma que no existen colisiones. Estrategia: Compartición distribuida, directa y de selección; Detección de Uso: pueden detectar si el canal está o no siendo utilizado, más aún, pueden saber cuándo están autorizados para transmitir (sin colisiones); Asignación de Tiempo: Continuo, pero las estaciones pueden transmitir sólo cuando les toca. Cuando se inicializa el anillo cada estación determina a cuál estación debe pasar el testigo cuando ha terminado su turno. Esta asignación se hace generalmente basándose en los valores de las direcciones de enlace de cada una de las estaciones, de manera que cada una de ellas pasa el testigo a la estación con dirección inmediatamente menor que la propia. Para el caso de la estación con menor dirección, ésta debe pasar el testigo a la estación con dirección mayor. Se establece así un anillo lógico para el paso del testigo. Cuando una estación recibe el testigo, puede transmitir cuantas tramas desee hasta que no tenga más tramas o hasta que pase un tiempo determinado. Luego debe pasar el testigo a la siguiente estación. Además, para asegurar un ancho de banda mínimo de transmisión, se establecen en cada estación varias colas de tramas a transmitir, de manera que para la cola de prioridad mayor se tiene seguridad de una cierta velocidad de transmisión. El mecanismo para agregar y sacar estaciones del anillo lógico ha de ser especificado con exactitud, y debe considerar los casos de una estación que se salga del anillo sin previo aviso. V.3.7. Protocolo TokenRing (Paso de Testigo en Anillo) (802.5) Esta estrategia es similar a la anterior, pero en vez de un anillo lógico (SW) se utiliza un anillo físico (HW) de cableado. Lo anterior puede resultar muy engorroso a la hora de implementar la red, pero existen soluciones tipo anilloestrella. Estrategia: Compartición distribuida, directa y de selección; Detección de Uso: pueden detectar si el canal está o no siendo utilizado, más aún, pueden saber cuándo están autorizados para transmitir (sin colisiones); Asignación de Tiempo: Continuo, pero las estaciones pueden transmitir sólo cuando les toca. Retardo de 1 bit a la Estación Configuración Física Modo de Recepción a la Estación de la Estación Modo de Transmisión En el modo de recepción la estación puede recibir todas las tramas que circulen por el anillo. Hay que destacar que los nodos del anillo son activos, de forma que deben estar siempre energizados para el correcto funcionamiento del anillo. Es aquí donde son de utilidad los anillosestrella, que son capaces de detectar nodos no energizados para dejarlos fuera del anillo. En modo de transmisión la estación corta el anillo y transmite, recibiendo de regreso el mismo mensaje transmitido con un cierto atraso. Esto sirve para evitar el uso de asentimientos (vea la siguiente sección, Control de Flujo): si se recibe con errores se intenta transmitir de nuevo. El paso de testigo se hace directamente entre estaciones físicamente consecutivas, y las tramas no poseen límite de longitud. Así, se debe imponer un tiempo máximo de utilización del canal para cada estación. El funcionamiento es similar al caso de Testigo en Bus, pero el formato de la trama de TokenRing es especial (los largos son en bytes): Testigo: 1 1 1 SD AC ED Trama de Datos o de Control: 1 1 1 2ó6 SD AC FC Dir. Destino 2ó6 Dir. Origen SD: Delimitador de Comienzo AC: Control de Acceso FC: Control de Trama sin límite Datos 4 CRC 1 1 ED FS DE: Delimitador de Fin FS: Estado de Trama El byte FS se envía sólo cuando se envían datos, y contiene dos bits especiales para manejar errores en la recepción: los bits A y C. Las tramas siempre se envían con ambos bits con valor 0, pero pueden ser modificados por el destinatario de la trama. Cuando el emisor recibe de regreso la trama enviada, verifica estos bits, y pueden darse 3 casos: A=0, C=0: El destinatario no está presente (no se modificaron los bits); A=1, C=0: El destinatario está presente, pero no ha copiado la trama (falta de memoria u otro motivo); A=1, C=1: El destinatario está presente y ha copiado con éxito la trama. V.3.8. Distributed Queue Dual Bus (DQDB, 802.6) Esta estrategia se basa en una topología de doble bus, como se muestra en la figura: Estrategia: Compartición distribuida, directa y de reserva; Detección de Uso: deben reservar espacio para transmitir, por lo que pueden saber cuándo están autorizados para transmitir (sin colisiones); Asignación de Tiempo: Ranurado, y las estaciones pueden transmitir sólo cuando les toca. Las tramas en DQDB se llaman celdas, y son de 53 bytes de largo (9 de encabezado y 44 de datos). Los terminadores de bus generan celdas vacías a 125 s , lo cual equivale a una velocidad de transmisión máxima de 22Mbps (sólo datos). Cada celda transmitida llega a todas las estaciones que están más adelante en el camino, y en cada una existe un retraso de transmisión de una celda de largo. El primer byte da las celdas corresponde al campo de control de acceso (Access Control Field), el cual posee los siguientes bits (además de otros): Busy (1 bit): Indica si la celda contiene o no datos; Reserved (1 bit): Indica si esta trama (vacía) está o no reservada; Req. (4 bits): indica una cantidad de celdas que se deben dejar pasar, además de las ya reservadas con anterioridad. Cuando una estación desea transmitir, primero debe encontrar una celda por el bus en dirección opuesta, en la cual se pueda aumentar el valor Req (se evita así la congestión). En todas las estaciones, por cada celda con Req. Mayor que cero que se reciba, se deben dejar pasar las correspondientes celdas vacías en la dirección opuesta. Luego de enviar la reserva, se puede utilizar cualquier celda vacía que viaje en la dirección opuesta para enviar los datos, siempre que ya se hayan satisfecho todas las reservas que se recibieron con anterioridad. El algoritmo funciona de la misma forma para ambas direcciones de transmisión, y asegura una igualdad de oportunidades de transmisión a todas las estaciones. Las direcciones son de 6 bits, y no es necesario incluir la dirección origen en el encabezado de las celdas, debido a que se provee un servicio de red sin conexión, el cual no tiene por que asegurar que las celdas llegan a destino. V.3.9. Fiber Distributed Data Interface (FDDI, 802.8) Este protocolo MAC es similar al paso de testigo en anillo (802.), pero utiliza una topología de doble anillo y un protocolo diferente, adaptado a las fibras ópticas. Si se corta una línea, las estaciones pueden cerrar el anillo utilizando como se muestra en las figuras: Estrategia: Compartición distribuida, indirecta y de selección; Detección de Uso: pueden detectar si el canal está o no siendo utilizado, más aún, pueden saber cuándo están autorizados para transmitir (sin colisiones); Asignación de Tiempo: Continuo, pero las estaciones pueden transmitir sólo cuando les toca. La velocidad de transmisión es de 100Mbps, y el alcance es de dos kilómetros. La única diferencia práctica con Token-Passing Bus (además de la mayor velocidad) es que no se conectan las estaciones directamente sino que se usan concentradores, debido al alto costo de las interfaces ópticas. V.3.10. ISDN, BISDN (ATM) Son estándares comerciales para transmisión digital de voz, video y datos, utilizados ampliamente por las empresas portadoras privadas. Proveen servicios combinados de los siguientes tipos: Tipo B: canal de 16Kbps, se asegura este ancho de banda al cliente; Tipo D: canal de control, compartido por todos los clientes, quienes lo utilizan sólo como el proveedor indique; Otros: se pueden proveer servicios con ancho de banda variable según demanda, de forma que se cobre no por la línea dedicada, sino por la cantidad de datos transmitidos. Existen dos estándares ISDN, y son los siguientes: ISDN (Integrated Services Digital Network): provee servicios básicos, con 2B+D (16Kbps), y primarios, con 23B+D (64Kbps) en EEUU, con 30B+D (64Kbps) en Europa; BISDN (ISDN de Banda Ancha): provee servicios con banda variable según demanda, con límite predefinido. Usa tecnología ATM para implementación. ATM (Asyncronous Transfer Mode): Estrategia: Compartición distribuida, directa y de ???? (selección, reserva, contienda????); Detección de Uso: ????; Asignación de Tiempo: ????. Está definido por el estándar BISDN, y utiliza fibras ópticas para transmisión a larga distancia. Además, se definen no sólo las capas físicas y de enlace, sino que también la de red, para poder conectar varias subredes ATM entre sí. Las tramas en ATM se llaman celdas, y son de 53 bytes de largo (5 de encabezado y 48 de datos). Los terminadores de bus generan celdas vacías, a una velocidad de transmisión máxima de 155Mbps (sólo datos). Provee un servicio orientado a conexión, por lo que es difícil utilizar ATM para implementar una red LAN. V.4. Control de Flujo El protocolo de comunicaciones entre transmisor y receptor debe ser capaz de manejar la situación de un transmisor rápido y un receptor lento, así como asegurar la correcta recepción de todos los mensajes. A continuación analizaremos una serie de protocolos simples de enlace, para los cual son necesarias algunas definiciones previas: V.4.1. Definiciones a) Estructura de la Trama Una trama está constituida por cuatro campos, y los tres primeros constituyen la cabecera de la capa de enlace: Tipo: Seq: Ack: Info: Indica si hay o no datos en el campo Info; Nº de secuencia de esta trama; Nº de secuencia de asentimiento; Un paquete de capa de red transmitido. El campo Info podría ser de tamaño variable, pero debería agregarse otro campo en la cabecera para indicar su largo. b) Eventos que Recibe la Capa de Enlace Cada entidad de la torre de protocolos trabaja en base a la manipulación o reacción a eventos que recibe. Para la capa de red, los eventos básicos necesarios son los que listan a continuación: LlegóTrama: Indica que se ha recibido una trama desde la capa física; CRCerr: Indica que la trama recibida desde la capa física tiene errores; CapaRedDesocupada: Indica que la capa de red está desocupada y lista para recibir un paquete; CapaRedLista: Indica que la capa de red está lista a enviar un paquete; TimeOut: Indica que ha vencido el temporizador; c) Funciones Predefinidas para la Capa de Enlace Los protocolos que se mostrarán a continuación utilizan una serie de funciones predefinidas, que son las siguientes: Espera(): Espera a que suceda algún evento; Incrementa(): incrementa circularmente un contador. ACapaFísica(): DeCapaFísica(): Transmite una trama utilizando la capa física; Recibe una trama desde la capa física; ACapaRed(): DeCapaRed(): Envía un paquete recibido a la capa de red; Recibe paquete de la capa de red para ser transmitido; IniciaTimer(): ParaTimer(): Inicia el temporizador y activa el evento TimeOut; Detiene el temporizador y desactiva el evento TimeOut; IniciaTimerAck(): ParaTimerAck(): Inicia el temporizador auxiliar; Detiene el temporizador auxiliar y desactiva el evento CapaRedDesocupada; HabilitaCapaRed(): Habilita la capa de red para generar evento CapaRedLista; DeshabilitaCapaRed():Deshabilita la capa de red, prohibiéndole generar un evento CapaRedLista; Cuando llega una trama, el HW determina si es correcta o no. Cuando lo es, se genera el evento LlegóTrama, y si no se genera el evento CRCerr. Supondremos que el HW de la capa de enlace dedicado a la utilización de la capa física implementa los algoritmos de detección de error, utilizando código de redundancia, por ejemplo. Además, para simplificar, los algoritmos que se mostrarán para la capa de enlace no implementan ningún tipo de paralelismo, el cual es necesario en la capa de enlace. V.4.2. Protocolos sin Memoria a) Protocolo Unilateral No Restringido (U-NR) Este protocolo es el más simple, y sólo puede enviar datos en una dirección. Supondremos que ambas entidades de la capa de red siempre están listas a transmitir y recibir respectivamente. Además despreciaremos el tiempo de procesamiento, y supondremos que la capa física nunca daña la información. Emisor() { t : trama p : paquete repetir DeCapaRed(p) t.Info = p ACapaFísica(t) hasta-siempre } Receptor() { t : trama e : evento repetir Espera(e) DeCapaFísica(t) ACapaRed(t.Info) hasta-siempre } obtiene paquete a transmitir lo copia a la trama trasmite la trama único evento posible es LlegóTrama recibe la trama pasa el paquete a la capa de red b) Protocolo Unilateral de Parada y Espera (U-P/E) Este protocolo maneja la situación cuando el receptor no puede recibir más tramas debido a que no ha procesado aún las que ha recibido. Esto se hace mediante un mecanismo de retroalimentación llamado asentimiento, mediante el cual el receptor puede indicar al emisor que ya puede recibir una nueva trama. Sin embargo, este protocolo provoca una estricta alternancia, debido a que el emisor puede transmitir la siguiente trama sólo cuando ya ha recibido asentimiento de la anterior. Emisor() { t : trama p : paquete e : evento repetir DeCapaRed(p) t.Info = p AcapaFísica(t) Espera(e) hasta-siempre obtiene paquete a transmitir lo copia a la trama trasmite la trama espera único evento posible: LlegóTrama } Receptor() { s,t : trama e : evento repetir Espera(e) DeCapaFísica(t) ACapaRed(t.Info) ACapaFísica(s) hasta-siempre } único evento posible es LlegóTrama recibe la trama pasa el paquete a la capa de red envía trama de relleno como asentimiento c) Protocolo Unilateral para Canal Ruidoso (U-CR) Este protocolo agrega la capacidad de manejar las situaciones en que una trama se recibe con errores, caso en el cual es necesaria la retransmisión de ella. Para lo anterior es necesario utilizar números de secuencia asociados a cada trama transmitida, de manera que el receptor pueda saber si la trama que recibe es la siguiente esperada o no. Cabe destacar que también se pueden dañar las tramas de asentimiento, por lo que no basta con que el emisor suponga que si no se recibe asentimiento, significa la trama enviada llegó con errores al receptor. Emisor() { t : trama p : paquete e : evento inicializa secuencia de transmitidos sgte = 0 : secuencia obtiene paquete a transmitir DeCapaRed(p) repetir construye la trama a transmitir t.Info = p t.Seq = sgte transmite la trama ACapaFisica(t) inicializa Timer IniciaTimer() (LlegóTrama, CRCerr ó TimeOut) Espera(e) si e = LlegóTrama entonces obtiene paquete a transmitir DeCapaRed(p) incrementa secuencia Incrementa(sgte) fin-si hasta-siempre } Receptor() { s,r : trama e : evento inicializa secuencia de esperados sgte = 0 : secuencia obtiene paquete a transmitir DeCapaRed(p) repetir (LlegóTrama ó CRCerr) Espera(e) si e = LlegóTrama entonces obtiene paquete a transmitir DeCapaFísica(r) si r.Seq = sgte entonces se recibió trama esperada ACapaRed(t.Info) incrementa secuencia Incrementa(sgte) fin-si envía asentimiento ACapaFísica(s) fin-si hasta-siempre } En este protocolo se pueden producir dos casos de errores de transmisión: Error en Datos: El receptor recibe una trama errónea y no envía asentimiento, haciendo que en el emisor se genere el evento TimeOut y se retransmite la trama; Error en Asentimiento: El receptor recibe correctamente una trama, pero el asentimiento llega incorrecto al emisor. Se genera en él el evento TimeOut y se retransmite la trama. El receptor recibe una trama duplicada y la descarta. En resumen, cualquiera sea la situación en que una trama se recibe con errores, el protocolo es capaz de solucionar el problema. Aún así, este protocolo es muy lento, debido a que, por la alternancia estricta, se debe esperar a que se venza el temporizador para enviar la siguiente trama V.4.3. Protocolos de Ventana Deslizante El concepto de ventana deslizante permite proveer a los protocolos de enlace una gran ventaja: permite comunicación bidireccional. En los protocolos anteriores se utilizaban tramas en sentido contrario para enviar asentimientos, las cuales podrían contener además datos. Para los asentimientos de estos que viajan en dirección opuesta se puede asimismo utilizar las tramas de datos originales. Esta técnica recibe el nombre de superposición, y permite aprovechar mucho mejor el ancho de banda del canal, ya que permite enviar datos y asentimientos en una misma trama. Debe tenerse claro que siempre es posible enviar una trama con sólo asentimiento o sólo datos, ya que el asentimiento debe siempre ser recibido de vuelta antes que ocurra el evento TimeOut en el emisor, debido a que esto generaría su retransmisión. Además, las entidades de la capa de enlace, que ahora pueden enviar y recibir datos, poseen una cierta capacidad de memoria emisora y de memoria receptora (ventanas). La ventana emisora contiene una lista de las tramas que ya se han enviado pero todavía no se ha recibido el asentimiento (si está llena, no se pueden enviar más), y la ventana receptora contiene las tramas recibidas que aún no han sido procesadas por la capa de red (si está llena, no se pueden recibir más). a) Protocolo de Ventana Deslizante de 1 Bit El protocolo que sigue posee una ventana de tamaño 1, esto es, se puede almacenar sólo una trama a la vez en el emisor o receptor. Por lo anterior, este protocolo sólo acepta la recepción de tramas en orden, lo que para tamaños más grandes no es una restricción. Además, posee el problema de no aprovechar la velocidad del canal de datos de forma óptima. ProtocoloVentana1() { r,s : trama p : paquete e : evento aRecibir = 0 : sec aTransmitir = 0 : sec inicializa secuencia de recibidos (0 ó 1) inicializa secuencia de enviados (0 ó 1) DeCapaRed(p) arma trama a enviar s.info = p s.seq = aTransmitir s.ack = 1 - aRecibir transmite trama ACapaFísica(s) inicializa temporizador principal IniciaTimer() repetir (LlegóTrama, CRCerr ó TimeOut) Espera(e) si e = LlegóTrama entonces obtiene la trama DeCapaFísica(r) trama correcta si r.seq = aRecibir entonces despacha paquete ACapaRed(r.info) Incrementa(aRecibir) asent. correcto si r.ack = aTransmitir entonces obtiene paquete sgte. DeCapaRed(p) Incrementa(aTransmitir) arma trama a enviar s.info = p s.seq = aTransmitir s.ack = 1 - aRecibir transmite trama ACapaFísica(s) inicializa temporizador principal IniciaTimer() hasta-siempre } Hasta ahora se han considerado los tiempos necesarios para que una trama llegue al receptor y que un asentimiento llegue de regreso como despreciables, lo cual es una suposición absurda (considere transmisión satelital, por ej.). Debido a lo anterior, es imposible que los protocolos anteriores utilicen el ancho de banda del canal de manera siquiera buena, debido a que están obligados a esperar a que llegue el asentimiento antes de enviar otra trama. La solución es utilizar la técnica de envío continuo (pipelining), que consiste en aumentar el tamaño de las ventanas de transmisión y recepción, de manera que el emisor pueda enviar w tramas sin necesidad de esperar que lleguen los asentimientos. Se debe entonces seleccionar un w que sea capaz de contener al menos la cantidad de tramas que se pueden enviar antes que llegue el primer asentimiento de regreso. La utilización de esta técnica sobre una canal inseguro genera el problema del tratamiento de tramas con error o perdidas, ya que el receptor debe pasar a la capa de Red los paquetes en orden. Para resolver el problema se utilizan dos técnicas, que son las empleadas en los dos últimos protocolos por revisar: b) Protocolo de Ventana Deslizante - Repetición No Selectiva En esta solución el receptor tiene una ventana de tamaño 1, y en consecuencia debe desechar todas las tramas que llegan después de una trama con errores o cuando se pierde una trama (se detecta un número de secuencia incorrecto). En otras palabras, la capa de enlace se rehusa a recibir tramas fuera de orden. La siguiente figura muestra cómo trabaja la capa de enlace en este caso (el código para este protocolo se puede encontrar en el anexo del presente texto): 0 1 2 3 4 5 6 7 8 2 3 4 5 6 7 8 9 10 0 1 E D D D D D D 2 3 4 5 6 7 8 El tamaño de la ventana de transmisión para este protocolo debe ser menor o igual a l valor máximo para números de secuencia más uno. Esta solución puede parecer buena, pero cuando los errores son comunes, se desperdicia mucho ancho de banda del canal. Este protocolo no resuelve el problema de asentimientos que nunca se envían de regreso porque la capa de red en el receptor no tiene nada que transmitir al emisor. c) Protocolo de Ventana Deslizante - Repetición Selectiva En este caso el receptor debe tener una ventana de recepción de más de una trama de capacidad, y se almacenan en memoria todas las tramas correctas que lleguen después de ocurrido el error, mientras tenga espacio disponible. Cuando el emisor detecta que hay algún problema (se vence su temporizador), retransmite las tramas a partir de la perdida, pero como el receptor ya posee las siguientes, envía de regreso sólo el asentimiento de la trama con mayor número de secuencia. De esta forma, el emisor sabe que no necesita retransmitir las tramas que siguen a la del asentimiento recibido. La siguiente figura muestra cómo trabaja la capa de enlace en este caso (el código para este protocolo se puede encontrar en el anexo del presente texto): 0 1 2 3 4 5 6 7 8 2 3 4 5 6 9 10 11 12 0 1 E 3 4 5 6 7 8 2 D D D D 9 10 Se almacenan 2-8 se pasan a Capa de Red El tamaño de la ventana de transmisión para este protocolo debe ser menor o igual a M a xS eq 1 para que no surjan ambigüedades al momento de decidir qué asentimiento se recibió. Este protocolo sí resuelve el problema de los asentimientos cuando no hay tráfico de datos en la dirección opuesta, utilizando para ello temporizadores auxiliares para los asentimientos pendientes a enviar. Además, este protocolo es capaz de enviar asentimientos negativos en el caso de detectar un error, evitando así tener que esperar que venza el temporizador correspondiente en el emisor. No es necesario el manejo de error para estos asentimientos, ya que si no llegan, expira el temporizador correspondiente. (Ver código en anexo para ver cómo se implementa todo lo anterior). 1 2 Los últimos dos protocolos poseen una característica adicional, y es que ya no se hace la suposición que la capa de red siempre tiene algo para enviar. La capa de red genera un evento en la capa de enlace cuando tiene algo que transmitir, y la capa de enlace puede deshabilitar o habilitar este privilegio de la capa de red. Otra característica de estos protocolos es que necesitan de un temporizador para cada trama en la ventana de transmisión. V.4.4. Rendimiento del Canal de Enlace En este apartado haremos un análisis comparativo del rendimiento de los protocolos mostrados. Los tres primeros protocolos utilizan pobremente el canal y no solucionan muchos de los problemas de la capa de enlace. Los otros tres protocolos son todos igualmente buenos en el sentido de presentar a la capa de red un canal virtualmente libre de errores, pero su rendimiento es substancialmente distinto en términos de rendimiento (cantidad de información transmitida por unidad de tiempo), esto es, el aprovechamiento del ancho de banda del canal. Los factores que influyen en el rendimiento de un protocolo son los siguientes: Longitud de la trama: ¿cantidad de bits?, ¿largo fijo o variable?; Superposición: ¿se utiliza superposición de asentimientos?; Pipelining: ¿se envían varias tramas antes de recibir asentimientos?; Canal Duplex o Semiduplex: ¿se puede transmitir en ambos sentidos a la vez?; Proporción de Error: ¿qué fracción de las tramas se pierde o llega errónea? Los siguientes gráficos muestran cómo se comportan algunos de los protocolos mostrados con anterioridad, en términos de eficiencia. La longitud del canal se mide en términos de cuántas tramas puede enviar el emisor antes que el receptor reciba la primera trama enviada. Nótese que la eficiencia nunca es 1.0 debido a los errores producidos en el canal y a la pérdida de tramas. 1.0 1.0 0.8 0.8 0.6 0.6 0.4 Ventana Deslizante w=7 0.2 0.4 0.2 Parada y Espera 0.0 0.0 0 2 4 6 Longitud del Cable 8 10 0 2 4 6 Tamaño de la Ventana 8 10 VI. Capa de Red Con las capas Física y de Enlace se ha logrado construir la base para redes que utilizan un solo medio físico. La Capa de Red es la encargada de proveer los mecanismos para interconectar redes de varios medios físicos. VI.1. Problemas de Diseño de la Capa de Red VI.1.1. Tipo de Servicios Suministrados Existió gran controversia al momento de decidir cuáles servicios suministraría la Capa de Red a las capas superiores, y como resultado se decidió que la Capa de Red proveería servicios con y sin conexión. Todos los servicios comparten las siguientes características: Se define como subredes a las redes definidas por la capa de red, esto es, al conjunto de entidades de capa de red conectados por un mismo protocolo en la capa de enlace; Son independientes de la tecnología de las subredes; Las capas superiores desconocen el número, tipo y topología de las subredes; Las direcciones de red deben utilizar una numeración uniforme a lo largo de todos los tipos de subredes. Como la Capa de Red es la ultima capa implementable en HW, se asegura la independencia del HW con el SW de los computadores. VI.1.2. Encaminamiento La capa de red debe proveer mecanismos para encaminar los paquetes a través de las redes físicas de una misma subred. VI.1.3. Interconexión de Redes La capa de red debe proveer mecanismos para encaminar correctamente paquetes a través de subredes diferentes, esto es, con diferente protocolo de capa de enlace. En otras palabras, si las máquinas origen y destino se encuentran conectadas a subredes diferentes, la capa de red debe ser capaz de transportar el paquete de subred a subred, hasta que llegue a la subred del destino, traduciéndolos de un protocolo al otro. VI.1.4. Control de Congestión Cuando la capa de red es incapaz de satisfacer todos los requerimientos de las capas superiores, debido al volumen de tráfico demandado, se llenan los espacios de memorias temporales en los IMP´s (ver capa de enlace). Esto produce que los IMP’s sean incapaces de recibir, propagando el problema a los IMP’s que desean transmitir hacia los congestionados. La capa de red debe proveer algún mecanismo para controlar estas situaciones. VI.2. Servicios Proporcionados por la Capa de Red VI.2.1. Servicio con Conexión El servicio con conexión debe poseer las siguientes características: Inicialmente, la entidad de transporte origen establece la conexión con la entidad receptora, y en ese momento la capa de red decide qué ruta utilizará para la conexión. Esta ruta no cambia mientras dure la conexión, la cual se termina explícitamente; Al comienzo, las entidades origen y destino negocian con la capa de red la calidad del servicio suministrado; La conexión establecida es bidireccional, sin errores y con paquetes entregados secuencialmente; El control de flujo se proporciona automáticamente por la capa de red; No es necesario que los paquetes contengan la dirección completa de destino, sino que sólo una identificación del circuito virtual a utilizar, el cual es conocido por la misma subred; VI.2.2. Servicio Sin Conexión El servicio sin conexión que se provee es muy básico, sin que se provean controles de error o de flujo, y los paquetes pueden ser entregados en cualquier orden. Así, son los mismos hosts los encargados de realizar todos los controles. Además, para cada paquete se debe decidir nuevamente la ruta a utilizar, por lo cual es necesario que todo paquete contenga la dirección completa de destino. La justificación de incluir un servicio tan poco confiable es la necesidad de muchas aplicaciones (interactivas o multimediales, por ejemplo) de realizar transmisiones individuales de poco tamaño, o que requieren gran velocidad sin una gran exactitud. VI.2.3. Diferencias entre los Servicios Suministrados La siguiente tabla muestra las diferencias entre los servicios proporcionados por la capa de red: Asunto Establecimiento inicial Indicación de dirección destino Secuencialidad de paquetes Control de error Control de Flujo Negociación de calidad Complejidad realizable en HW Criterio Preponderante Con Conexión Requerido Sólo inicialmente Garantizada Proporcionado Proporcionado Posible Mucha Exactitud Sin Conexión No es posible En cada paquete No garantizada No proporcionado No proporcionado Imposible Poca Velocidad VI.3. Primitivas OSI para la Capa de Red Las primitivas proveídas por la capa de red son las siguientes: Orientadas a Conexión N-CONNECT.request ( callee, caller, acks, exp, qos, data ) N-CONNECT.indication ( callee, caller, acks, exp, qos, data ) N-CONNECT.response ( responder, acks, exp, qos, data ) N-CONNECT.confirm ( responder, acks, exp, qos, data ) N-DISCONNECT.request ( originator, reason, data, responder ) N-DISCONNECT.indication ( originator, reason, data, responder ) N-DATA.request ( data ) N-DATA.indication ( data ) N-DATA-ACK.request ( ) N-DATA-ACK.indication ( ) N-EXPEDITED-DATA.request ( data ) N-EXPEDITED-DATA.indication ( data ) Sin Conexión N-UNITDATA.request ( callee, caller, qos, data ) N-UNITDATA.indication ( callee, caller, qos, data ) N-FACILITY.request ( originator, reason ) N-FACILITY.indication ( destination, qos, reason ) N-REPORT.indication( destination, qos, reason ) donde: callee - dirección de quien es llamado caller - dirección de quien llama acks - indicación de asentimientos deseados exp - indicación de datos acelerados qos - calidad de servicio deseada data - 0 o más datos transmitidos originator - especifica quién inició N-RESET responder - dirección NSAP de destinatario reason - razón por la cual sucedió VI.4. Organización Interna de la Capa de Red No es posible diseñar la capa de red de forma de que se satisfagan simultáneamente los requerimientos con y sin conexión deseados, sino que se debe elegir por una implementación particular que satisfaga uno de estos requerimientos, implementándose luego el otro sobre la implementación elegida. VI.4.1. Circuitos Virtuales La primera posibilidad es implementar directamente el servicio con conexión, para lo cual se utiliza el concepto de circuito virtual. La idea principal de los circuitos virtuales es evitar la toma de decisiones de encaminamiento para cada paquete enviado, sino que éstas se toman sólo al inicio de la conexión. Para lo anterior se define inicialmente una ruta o camino, el cual es utilizado para encaminar todos los paquetes de la conexión dada. Cada nodo en el camino elegido debe conocer hacia dónde enviar cada paquete recibido, y como la comunicación es bidireccional, cada nodo debe conocer su antecesor y sucesor en cada circuito virtual. Los nodos sólo pueden decidir hacia dónde redirigir los paquetes recibidos basándose en el número de circuito virtual que contienen los paquetes. Para implementar lo anterior, los nodos intermedios (IMP’s) poseen una tabla en la cual se ingresan los circuitos virtuales a los que pertenece el nodo, y los nodos antecesor y sucesor de cada uno de ellos. Se ve como necesario que los números de circuitos virtuales sean únicos en la subred, pero esto no es así, puesto que cada circuito virtual no se identifica con un valor único, sino que existe un valor diferente para cada red física del circuito virtual, el cual sólo necesita ser único en esa red física. Veamos un ejemplo: Supongamos la siguiente topología de la subred: Hb Hc B C A Ha D E Hd F He Hf y consideremos los caminos Ha-A-B-C-Hc, Ha-E-C-B-Hb, He-E-A-B-C-D-Hd y HeE-F-D-Hd. Las tablas de los nodos intermedios deben contener los siguientes valores (las flechas indican el segundo circuito definido): Nodo A In H H E Nodo B Out 0 1 0 B E B In 0 0 1 A C A Nodo D In C F H H 0 0 1 C H C In 0 0 1 B E B Nodo E Out 0 0 Nodo C Out In 0 1 A H H C A F H B D 0 0 0 Nodo F Out 0 0 1 Out 0 0 1 In 0 0 0 E Out 0 D 0 Los circuitos virtuales definidos así son unidireccionales, y para implementar circuitos bidireccionales basta definir dos circuitos unidireccionales. Note que estos circuitos inversos pueden no utilizar las mismas rutas, lo que es una ventaja en sí. Los paquetes enviados a través de un circuito virtual no necesitan acarrear consigo la dirección de destino, ya que cada nodo sabe de antemano hacia dónde encaminar el paquete, ahorrando un ancho de banda considerable para paquetes cotos. Cuando un circuito virtual no se necesita más, éste debe ser eliminado explícitamente desde las capas superiores, para eliminar cada entrada correspondiente en las tablas de los nodos intermedios. VI.4.2. Datagramas La segunda opción de implementación es sin orientación a conexión, en la cual cada paquete transmitido debe ser encaminado individualmente. Las redes de este tipo deben hacer un mayor trabajo para cada paquete, pero son más robustas en un contexto general, puesto que se responden con facilidad a fallos y congestión. Para esta solución, cada nodo debe conocer hacia qué nodo adyacente debe enviar cada paquete recibido, para lo cual es necesaria una tabla que indique lo anterior para cada destino posible. Esta tabla también es necesaria en los circuitos virtuales para el establecimiento de conexión. Además, los paquetes deben contener la dirección completa de destino, para que los nodos puedan decidir hacia dónde encaminarlos. VI.4.3. Comparación: Circuitos Virtuales vs. Datagramas La siguiente tabla muestra las diferencias entre la implementación de la subred: Asunto Direccionamiento Circuitos Virtuales Sólo número de circuito virtual Información del camino Encaminamiento Cada nodo almacena información acerca del camino Cada paquete a través de circuito virtual previamente definido Se pierden todas las conexiones Sólo se pierden paquetes que a través del nodo que falla estaban en memoria del nodo que falla Fácil Difícil En capa de red En capas superiores Servicio orientado a conexión Servicios orientados a conexión y sin conexión Efecto de fallos en nodos Control de congestión Complejidad Adecuado para Datagramas Paquetes con dirección completa La subred no almacena al camino Cada paquete independientemente VI.5. Algoritmos de Encaminamiento Existen diversos algoritmos que determinan el camino a seguir para llevar un paquete del origen al destino, los cuales se clasifican en dos grandes grupos: No Adaptativos o Estáticos: la elección de los caminos se hace a priori, antes de poner en marcha la red. EL trabajo para redes grandes o con caminos múltiples es enorme; Adaptativos: Se basan en el tráfico y topología actuales de la red para decidir cuál es el mejor camino en cada momento. Se dividen en globales, locales y distribuidos, según la información que utilizan. VI.5.1. Encaminamiento Estático La elección de caminos se hace antes de poner en marcha la red, y se programa cada uno de los nodos individualmente. a) Camino más Corto El camino se elige según el criterio del camino por el cual los paquetes llegan en el menor tiempo al destino. Para ello se consideran factores diversos, como la distancia, ancho de banda, promedio de tráfico, largo de la cola de espera, retardo, y otros. Se elige así el mejor camino desde cada origen a cada destino, y se utiliza este camino para encaminar todos los paquetes. b) Camino Múltiple Este mecanismo es aplicable cuando hay más de un camino que se considera mejor. Los nodos intermedios pueden decidir cuál de ellos se utilizará para cada paquete, utilizando para ello alguna función de probabilidad con pesos definidos antes de poner en marcha la red. Así, cuando el tráfico es grande, se utilizan los diferentes caminos para distribuir la carga evitando congestionar algún camino de la subred. c) Centralizado En vez de realizar manualmente los cálculos para encontrar los mejores caminos entre todos los nodos, se puede utilizar un programa automático que recopile información desde todos los nodos de la subred, realice los cálculos, y luego envíe una nueva configuración a cada nodo. Este mecanismo es atractivo, puesto que puede utilizarse de forma automática cada cierto tiempo para producir resultados adaptativos, pero posee grandes inconvenientes. Primero, el tráfico desde y hacia la máquina de control centralizado de encaminamiento es bastante fuerte, y puede incluso afectar los cálculos mismos. Otro problema grave es el orden en que se distribuyen las nuevas tablas a cada nodo de la subred, ya que pueden surgir inconsistencias que incluso pueden dejar aislado a algún nodo. d) Encaminamiento Aislado Se trata aquí que cada nodo de la subred decida hacia adónde enviar los paquetes recibidos, utilizando para ello sólo su información interna. Existen varias formas de hacer lo anterior: Patata Caliente: los paquetes simplemente se ponen en la cola de salida más corta del nodo, sin importar hacia adónde se dirige la línea; Patata Caliente Mejorado: se utilizan pesos estáticos asignados a cada salida, en conjunto con el largo de las colas para decidir; Aprendizaje Hacia Atrás: Se incluye en cada paquete un contador de saltos, el cual se incrementa en uno en cada nodo. Así, cada nodo puede saber, luego de un tiempo razonable, cual es el mejor camino hacia cada nodo posible. El problema surge cuando un nodo se desactiva, puesto que no hay como detectar la falla; Inundación: los paquetes se envían por todas las líneas, excepto por la cual llegó. Se incluye un contador en cada paquete, que indica el número de saltos que ha registrado, y si es mayor que cierto umbral, se desecha el paquete. Este algoritmo es muy robusto, y deseable en aplicaciones militares, por ej. VI.5.2. Encaminamiento Adaptativo a) Encaminamiento Distribuido Se utiliza alguna medida de la longitud de los caminos, y cada nodo de la subred conoce la distancia hacia sus vecinos. Cada cierto tiempo, los nodos piden a sus vecinos que les envíen sus propias tablas, de forma que si se encuentra un mejor camino, se actualiza la tabla propia. El tiempo puede ser ajustado para que los caminos elegidos permanezcan estables en o para que se adapten rápidamente, manteniendo siempre una idea del camino más corto. b) Encaminamiento Óptimo Este algoritmo sirve para realizar la búsqueda de caminos alternativos en caso de fallar algún nodo, y se basa en que para todo destino, los caminos óptimos desde todo origen forman un árbol. Así, cuando un nodo detecta que falló algún vecino que era parte de la mejor ruta hacia algún destino, pide a cada uno de sus otros vecinos que le indique alguna ruta hacia los destinos perdidos. El nodo puede elegir nuevamente la mejor ruta o detectar que no hay camino. Si un nodo recibe un requerimiento de camino para un destino específico, y no conoce ningún camino hacia él, entonces debe pedir lo mismo a sus propios vecinos, hasta que se encuentre algún camino posible o no queden más nodos a quién preguntar. VI.6. Control de Congestión La congestión en sí se produce cuando la capa de red es incapaz de satisfacer todos los requerimientos de las capas superiores, debido al volumen de tráfico demandado, se llenan los espacios de memorias temporales en los IMP´s (ver capa de enlace). Esto produce que los IMP’s sean incapaces de recibir, propagando el problema a los IMP’s que desean transmitir hacia los congestionados. El comportamiento de una subred congestionada se muestra en el siguiente gráfico: Rendimiento Perfecto Paquetes Entregados Rendimiento Deseado Rendimiento Real (por Congestión) Paquetes Transmitidos A continuación analizaremos una serie de algoritmos que permiten evitar la congestión. VI.6.1. Preasignación de Memorias Si se utilizan circuitos virtuales dentro de la subred, es posible eliminar por completo el problema de la congestión, si al establecer la conexión se pide reservar un número dado de memorias de paquetes en los espacios de almacenamiento de los nodos. Así, a lo largo de todo el circuito virtual siempre habrá lugar donde almacenar los paquetes enviados, eliminándose por completo el problema de la congestión. En el caso del protocolo de enlace de parada y espera, una memoria es suficiente, pero para otros protocolos de ventana deslizante sofisticados pueden desearse más. De esta forma, el problema ahora no es la congestión, sino que se hace un uso muy ineficiente del canal, puesto que las memorias reservadas que no están en uso no los puede utilizar ningún otro circuito virtual. Por esto, la reserva de memorias se utiliza sólo para casos críticos, como la transmisión digital de audio o vídeo, por ejemplo, en que son críticos el retardo y ancho de banda. VI.6.2. Descarte de Paquetes Se trata de una técnica totalmente opuesta a la anterior: si se recibe un paquete y no hay espacio disponible, se descarta inmediatamente. Si el servicio ofrecido es de datagrama, no es necesario nada más, pero si se ofrecen circuitos virtuales, se debe asegurar que el paquete llegue a destino. Lo anterior se puede hacer esperando que el emisor reenvíe el paquete por vencimiento de su temporizador, o esperando que el nodo fuente del paquete (que espera un asentimiento) lo haga. Cabe destacar que cada nodo debe tener al menos una memoria reservada para entrada, de forma que pueda recibir asentimientos que permitan liberar otras memorias. Otro mecanismo es limitar el largo de las colas de salida, de forma que ninguna se acapare todas las memorias, definiendo un máximo (Irland, 1978) o mínimo (Kamoun, 1976) para la cantidad de memorias asignadas a cada salida. De esta forma se evita que exista congestión el nodo por culpa de una sola línea ocupada. Determinar los tamaños máximo y/o mínimos no es fácil. VI.6.3. Control Isarítmico de Congestión Consiste en limitar el número de paquetes que puede haber en la subred, evitando que sobrepase cierto límite. Esto se logra haciendo circular permisos en la subred, de forma que ningún nodo fuente puede transmitir si no captura primero un permiso. El nodo destino debe regenerar el permiso cuando reciba el paquete. Los permisos circulan aleatoriamente por la subred. Este método evita la congestión, tiene varios problemas graves. Primero, cuando un nodo tiene muchos paquetes a transmitir, debe capturar muchos permisos, lo que puede demorar mucho. Otro problema que surge es que para que todos los nodos tengan la misma probabilidad de recibir un permiso, éstos deben estar uniformemente distribuidos, lo cual no está para nada garantizado. Un problema grave es que los permisos pueden perderse, y no existe forma de saberlo. VI.6.4. Control de Congestión por Control de Flujo Se puede restringir el ancho de banda que cada máquina puede transmitir o recibir de la subred, lo cual evitaría la congestión, pero esto deriva en un mal servicio, aún cuando la red esté desocupada. Se puede aplicar restringiendo el ancho de banda entre pares de: Procesos de Usuario; Máquinas, sin considerar el número de circuitos virtuales en que intervienen; nodos origen y destino, sin considerar las máquinas. VI.6.5. Paquetes Reguladores Se trata aquí de programar los nodos de la subred para que detecten la congestión, enviando un paquete regulador al nodo fuente de los paquetes, el cual deberá disminuir paulatinamente su velocidad de transmisión. Si durante de un periodo de tiempo no se reciben reguladores, se puede volver a aumentar paulatinamente la velocidad. Este mecanismo controla efectivamente la congestión, pero es complicado, y el periodo de tiempo debe ajustarse estadísticamente: si es muy corto no se resuelve el problema, y si es muy largo se pierde utilización del canal. VI.6.6. Resolución de Bloqueos Los bloqueos se producen cuando los nodos de una subred están tan congestionados de forma que ninguno puede hacer algo mientras el otro no haga algo. El bloqueo más simple se da con dos nodos: supongamos que ambos tienen sus memorias de transmisión/recepción llenas con paquetes a enviar al otro nodo. Ninguno de ellos puede recibir lo que el otro está tratando de enviar, ni puede liberar una memoria porque no se pueden enviar os paquetes. Esta situación no tiene solución, y la capa de red debe evitarla a toda costa. La solución es muy simple: todos los nodos deben tener una memoria por cada línea de entrada reservada para recepción. Además, cada vez que se crea un nuevo paquete, se incluye en él la fecha y hora en que s creó. Así, para cada par de nodos adyacentes, y cada vez que la línea está libre, los nodos indican a su vecino cuál es el paquete más antiguo que desea enviar por ella, y el más antiguo es enviado. Así, se asegura que se liberen las memorias de transmisión de los nodos. VI.7. Ejemplos de Capa de Red VI.7.1. Protocolo de Red IP (Internet Protocol) El protocolo de red IP define un servicio de red sin conexión que, como se vio anteriormente, no necesita ser seguro ni fiable. Los datagramas IP son de hasta 64kb de largo, y su cabecera es de al menos 20 bytes. Un datagrama puede ser dividido en dentro de la red, para pasarlo por subredes que transportan paquetes más cortos. El formato de la cabecera es como sigue: 0 7 8 versión 15 18 largo tipo identificación D F tiempo de vida protocolo dirección fuente dirección destino opciones donde: versión largo tipo 23 24 31 largo total desplazamiento CRC cabecera - indica la versión de IP de que se trata (para compatibilidad futura) - largo de la cabecera, en palabras de 32 bits (mínimo 5) - indica a la subred el tipo de servicio suministrado (rápido no confiable, seguro, secreto, o cualquier combinación) largo total - largo total del paquete, incluyendo los datos identificación - todos los fragmentos de un datagrama poseen la misma identificación D - si es 1, no se debe fragmentar el datagrama F - todos los fragmentos de un datagrama, excepto el último, deben contener un 1 en este bit desplazamiento - cada fragmento de un datagrama indica aquí el desplazamiento (en bytes) dentro del datagrama completo tiempo de vida - indica en segundos cuánto tiempo de vida le queda al paquete protocolo opciones CRC cabecera - indica a qué protocolo pertenece el datagrama. TCP es una posibilidad - parámetros particulares del protocolo que utiliza IP - código de redundancia de la cabecera El estándar de capa de red define la utilización de direcciones únicas a nivel de red, lo cual es definido por IP de la siguiente forma 1 7 24 0 subred estación 1 1 1 0 1 1 14 16 subred estación 1 1 1 0 1 1 1 1 21 8 subred estación 28 1 1 1 0 dirección multicast Se definen además los siguientes valores especiales para los campos: Valor subred = 0…0 estación = 0…0 subred = 1…1 subred = 1…1 Significado esta subred esta estación (eco a primer nodo) difusión a todas las subredes difusión a todas las estaciones de esta subred Las direcciones multicast se propagan (difusión) a todas las estaciones de la subred en la cual se encuentra la estación origen, y es recibida por todas las estaciones que deseen hacerlo (analizan la dirección). La división entre subred y estación se definió para que los nodos puedan saber si el paquete se puede enviar directamente al destino (estación en esta subred) o se debe enviar través de un router (estación en otra subred). VI.7.2. Protocolo ARP (Address Resolution Protocol) Es un protocolo que trabaja sobre IP, sirve para traducir direcciones IP lógicas en direcciones de enlace. Lo utilizan los routers para conocer las direcciones de enlace de las estaciones que están conectadas a los mismos medios físicos que él. Funciona de la siguiente manera: se envía un requerimiento ARP por difusión a todas las estaciones de la subred, y cada una que reconozca su propia dirección IP en el requerimiento, devuelve una respuesta ARP que contiene su dirección física (de enlace) y lógica (de red). La implementación de ARP considera el uso de tabla, las que disminuyen el número de mensajes ARP enviados. VII. Interconexionado de Redes En este capítulo analizaremos las diferentes maneras en que se pueden conectar las redes, ya sea de un mismo tipo o de tipos distintos. VII.1. Conexión de Redes La conexión entre diferentes redes puede realizarse de variadas maneras, dependiendo si las redes son compatibles a nivel de las capas física, de enlace o de red. En lo que sigue analizaremos los diferentes dispositivos de interconexión existentes. VII.1.1. Capa Física: Repetidores (Hub) Se utilizan para conectar redes con las mismas características físicas, generalmente para poder cubrir una distancia mayor que la permitida por el medio físico. Los repetidores son dispositivos que se conectan a más de un medio físico, y reciben todas los bits desde ellos, transmitiéndolas a todos los demás medios físicos. No poseen memoria, de forma que simplemente copian lo transmitido por las estaciones desde un medio a otro. Generalmente los medios físico son iguales, y si no lo son, deben ser por lo menos de comportamiento similar (de difusión, por ejemplo). Cuando dos estaciones transmiten desde medios distintos simultáneamente, se produce una distorsión de la señal, perdiéndose la información transmitida por ambas estaciones, lo cual constituye una colisión. VII.1.2. Subcapa de Acceso al Medio: Puentes (Bridges) Los puentes son dispositivos que repiten todas las tramas desde cada entrada a todas sus salidas. Se utilizan cuando las redes a conectar son compatibles a nivel MAC, para conectar redes con mismo protocolo de enlace pero que usan medios físicos diferentes. También se producen colisiones cuando dos estaciones en redes diferentes transmiten simultáneamente. VII.1.3. Capa de Enlace: Switch Los switch son dispositivos que son capaces de analizar las direcciones de enlace (de origen y destino) para determinar por qué salida deben transmitir las tramas que reciben. De esta forma, sólo transmiten las tramas por el medio en el cual está conectado directamente el destino. Son generalmente inteligentes, de manera que no se los necesita programar de antemano. Inicialmente no saben nada acerca de las direcciones, pero cuando comienzan a recibir, analizan las direcciones de origen y las almacenan en una tabla, asociándoles un identificador de la entrada por la cual llegan. Así, cuando se desea transmitir una trama, basta analizar l tabla buscando la dirección de destino, para saber por qué salida se la debe transmitir. Si todavía no se conoce por dónde se debe hacer, se transmite por todas ellas, salvo por la que se recibió la trama. Se utiliza para mejorar el rendimiento de las redes, debido a que elimina muchas colisiones al localizar el tráfico. VII.1.4. Capa de Red: Encaminador (Router) Son máquinas que están conectadas a más de un tipo de subred, y que son capaces de traducir protocolos de enlace diferentes, lo cual puede ser un problema muy complejo dependiendo de qué combinación protocolos se utilice. El SW traductor se encuentra como entidad de capa de red. A veces se los utiliza con otros fines, puesto que tienen control directo sobre todo lo que ocurre a nivel de la capa de red: Firewall: Es un SW de capa de red que es capaz de discriminar el paso de paquetes desde una subred a otra. Se utiliza para evitar la entrada de intrusos, controlando el acceso por medio de filtros (de direcciones, de protocolos, etc.); Gateway: Es un SW de router que además es capaz de traducir protocolos de los niveles más altos, para permitir comunicación entre subredes con protocolos de red diferentes. Puede opcionalmente traducir protocolos de aplicación de una subred que no son compatibles en la otra. Por ejemplo, se puede traducir el protocolo de correo Microsoft (basado en NetBEUI) al protocolo de correo de e-mail (basado en TCP/IP) VII.1.5. Resumen de Características Asunto Entidad Compatible Traduce Poseen Memoria Selectivo Inteligente Objetivo Hub Capa Física Bits de un medio a otros No No No Aumentar alcance Bridge Supcapa MAC Tramas Si No No Conectar diferentes medios físicos Switch Router Capa de Enlace Capa de Red Tramas Protocolo de Enlace Si Si Si Si Si (automático) Si (manual) Mejorar Conectar rendimiento subredes diferentes VII.2. Diseño de Topologías de Redes Cuando se diseña la topología de una red, se deben tener en cuenta los siguientes consejos básicos: Para conexiones entre diferentes edificios, es mejor usar fibra óptica o algún otro medio no eléctrico, para evitar el efectos dañinos por diferencias de nivel tierra (que deteriora interfaces y hace aparecer colisiones falsas); Cuando hay muchas estaciones conectadas entre sí, y el tráfico es todos con todos, es conveniente utilizar un switch a un hub, para evitar las colisiones entre estaciones que no se comunican entre sí; Si hay muchas estaciones tratando de comunicarse con una estación particular, no importa si es hub o switch, pero es conveniente que la conexión desde éste hacia la estación particular debe ser más rápida que el resto, para evitar la congestión en esa línea; En general, cuando se tienen muchas estaciones que se comunican continuamente con alguna en particular (servidor), y raras veces entre sí, conviene una topología jerárquica con el servidor conectado a un switch, utilizando hubs en los nodos más cercanos a las estaciones para abaratar costos (Ver figura 1); Cuando se usa un hub, la velocidad de transferencia se puede aumentar cambiándolo por un switch; Resto de la Red Switch Servidor Hub Hub Estaciones Estaciones Figura 1: Topología Jerárquica para muchas estaciones y un servidor VIII. Capa de Aplicación Esta capa contiene os programas de usuario o aplicaciones. Los servicios que proveen son muy variados y casi siempre dirigidos a un problema en particular. Cuando hacen uso de la red, deben hacerlo a través de los servicios que presta la capa de presentación. VIII.1. Conceptos Básicos A continuación se revisan una serie de conceptos que deben estar claros antes de entrar en materia: Proceso: Es el conjunto de código de programa en ejecución y los datos asociados a él, esto es, de cada instancia de él en ejecución. Hebra: Es cada línea de ejecución paralela de un proceso, las cuales comparten datos y/o código del programa con otras hebras de un mismo proceso. Tiempo de Tarea: Tiempo durante el cual el proceso está siendo ejecutado por el procesador. Tiempo de Interrupción: Tiempo durante el cual el proceso no está siendo ejecutado por el procesador. Comunicación de Procesos: Forma de intercambiar información entre procesos. Generalmente se usan dos técnicas: Paso de Mensajes (el Sistema Operativo se encarga de la comunicación) y Memoria Compartida (El S.O. no necesita hacer nada). VIII.2. Aplicaciones Estándar más Comunes VIII.2.1. Transferencia y Acceso Remoto de Archivos Uno de los usos más comunes de las redes es el acceso a archivos en otras máquinas, y la transferencia de ellos desde una máquina a otra. Lo anterior logra mediante dos tipos de aplicaciones: a) Transferencia de Archivos (ftp, http): Consiste en la copia de archivos a través de la red, y es una de las formas más simples de hacerlo. Consiste fundamentalmente en copiar el archivo de una máquina a la otra. Si el archivo original se actualiza frecuentemente, o es compartido por varios usuarios, no se realiza ningún tipo de control especial. b) Acceso Remoto a Archivos (NFS, Novell): Consisten en servidores virtuales de archivos, los que controlan la concurrencia de usuarios sobre ellos. Los servidores de archivos se caracterizan por tres propiedades: i) Estructura de los archivos: ii) Atributos de los archivos: dónde y de qué manera están almacenados; nombre, propietario, operaciones permitidas, fecha, etc.; iii) Operaciones sobre archivos: abrir, leer, escribir, cerrar, etc. El problema que surge en los servidores de archivos es el de la concurrencia, el cual se solucione generalmente mediante el uso de tres soluciones: i) Candado (protocolo con conexión): existen candados compartidos (para lectura) y candados exclusivos (para escritura). Así, a un usuario se le acepta un candado exclusivo sólo si el archivo no tiene candados. Se usa generalmente para el control de archivos compartidos dentro de una misma máquina; ii) Transacciones (protocolo sin conexión): cada requerimiento al servidor es atómico, por lo cual no se necesitan candados. Se usa generalmente en servidores de archivos para varias máquinas; iii) Versión más Reciente: es una solución mixta que considera el crear una nueva versión de cada archivo cuando se recibe una solicitud de escritura. Así, los requerimientos de lectura que lleguen antes de finalizar la escritura de la nueva versión son atendidos con la versión completa más reciente. Versiones anteriores son eliminadas cuando ya exista una versión más nueva y nadie más las esté utilizando. Otra variedad de servidor de archivos posee múltiples copias de los archivos en diferentes ubicaciones, para los siguientes fines: * * * * Acceso muy Remoto: mejorar la velocidad de acceso desde lugares muy alejados; Dividir Carga: división de la carga de trabajo a través de varias máquinas; Acceso Inactivo: acceso a archivos cuando un servidor no está activo; Más Fiabilidad: múltiples copias en caso de daño o pérdida. VIII.2.2. Correo Electrónico El correo electrónico es una de las aplicaciones que mayor adeptos ha ganado con la creación de las redes de computadores. Originalmente se trataba como transferencia de archivos de texto, y actualmente contienen, mediante codificación MIME, texto con formato, gráficos, sonidos, etc. Los problemas que surgen en este tipo de aplicaciones son los siguientes: i) Composición: ii) Transferencia: iii) Notificación: iv) Conversión: v) Formato: vi) Disposición: creación de la cabecera, mensaje, respuestas, etc.; cómo llevar el mensaje hasta el receptor; cómo saber si fue recibido; convertir el mensaje a representación del receptor; desplegar correctamente el mensaje; qué hacer con los mensajes recibidos; VIII.2.3. Terminales Virtuales Las aplicaciones de terminales virtuales son tales que el servidor de terminal cree que son terminales físicas. Es importante entonces que el servidor sepa qué tipo de terminal se está emulando. Además, la aplicación de terminal virtual debe imitar todas las características físicas de las terminales, como son los retardos de respuesta, los formatos especiales de los paquetes transferidos por la red, etc. El programa más utilizado es telnet. IX. Capa de Presentación Los objetivos fundamentales de esta capa son: Codificación: Transferencia Eficiente: Seguridad: Encriptación de la Información: Conversión a Formatos Estándares: IX.1. Teoría de la Información y Codificación de Fuentes Para aprovechar mejor los canales de comunicación, es deseable que los datos transferidos contenga la mayor cantidad información útil posible. La manera de hacer esto es utilizar algoritmos de compresión de datos, que eliminan las redundancias de ellos, optimizando la representación y por consiguiente disminuyendo la cantidad de datos a transferir. Las ventajas de comprimir los datos son: Menor espacio de almacenamiento; Menor carga de canales de transferencia; Menor costo de comunicación; Mayor seguridad; Las desventajas de comprimir los datos son: SW o HW más complicado; Tiempo de CPU necesario; Menor portabilidad; menor fiabilidad; Las técnicas utilizadas para la compresión de datos se clasifican en: La sustitución de patrones frecuentes (“#A” en vez de “abdsodi”); La sustitución de series de caracteres repetidos (“#6v7” en vez de “777777”); Compresión de datos ordenados (“#1-6” en vez de “123456”); Diferenciación; Códigos de longitud variable (Huffmann, Extensión de Código, Adaptativos); IX.1.1. Teoría de la información La teoría actual de la información postula que: Información: Datos recibidos desde una fuente que esclarecen una duda en el receptor; Mensaje: Manifestación física de los datos transferidos; La información consiste de datos enviados de una fuente a un receptor a través de algún medio; Los datos constituyen información sólo cuando esclarecen una duda en el receptor; La duda en el receptor implica la existencia de alternativas; Las alternativas están dadas por un conjunto de símbolos (alfabeto), el cual existe tanto en la fuente como en el destino; Así, la función del emisor es seleccionar un conjunto de símbolos del alfabeto y enviarlos por un canal al receptor, pero estos datos sólo son información si dicen algo nuevo al receptor. Tenemos que: Un mensaje largo no tiene más información por ser largo; Mientras menor sea la información del mensaje, menos símbolos del alfabeto se necesitan para representarla; Mientras menor sea la información más rápido se puede transmitir por un canal de transferencia de datos; La medida de la información (intuitiva) es una medida del grado de libertad que se tiene al elegir los símbolos del alfabeto en la fuente al enviar un mensaje; Por lo tanto, podemos decir que la medida de la información comprende probabilidades de elección de símbolos de un alfabeto. Mientras menos probable sea que se elija un símbolo, más información contiene este símbolo. Veamos: Sea un alfabeto. Sean A , B dos símbolos del alfabeto. Sea P A su probabilidad de que se elija para ser transmitido, con 0 PA 1 . Sea I A f P A la información mutua del símbolo A donde f es desconocido. Intuitivamente sabemos que IA 0 y lim f P A 0 PA 1 Además, PA PB f PA f PB Cuando se recibe A se reciben unidades de información, por lo que si además se recibe B se recibe en total, si C = AB IC I A IB Si A y B son estadísticamente independientes, tenemos PC P A PB y luego I C f P A PB Igualando ambas ecuaciones tenemos f P A f PB f P A PB De aquí deducimos que 1 I A lo g b PA La ecuación anterior se dice que es la definición de la información mutua (relativa al resto del alfabeto) del símbolo A. Este valor es diferente para cada base b, y según el valor de b se tienen diversas unidades de información: si b = 2 la unidad es el bit. Para el caso de transferencias binarias, ={0,1}, se tiene que en el mejor de los casos, esto es, cuando la probabilidad de recibir cualquiera de los dos binits (bits , tradicionales) es igual a ½, la cantidad de información que lleva cada uno es 1 bit. IX.1.2. Entropía: Información Media Consideremos un alfabeto de m caracteres. Cuando se recibe el caracter j, se tiene I j 1 lo g Pj [bits] Consideremos un mensaje muy largo, con N 0 su longitud. Tenemos que el símbolo j aparece N P j veces en el mensaje. La información total en el mensaje es m IT N P Ij j [bits] j1 Se define la entropía del alfabeto como H IT N m Pj I j j 1 La entropía de un alfabeto da una medida de cuán bueno es para representar información. Mientras mayor sea la entropía de un alfabeto, menos símbolos se necesitan para representar la misma información. La entropía máxima se da cuando la probabilidad de que aparezcan es igual, y si este es el caso se tiene: H m a x lo g m IX.1.3. Codificación de la Fuente Utilizaremos la teoría mostrada para codificar los símbolos de un alfabeto fuente de manera de maximizar la entropía del alfabeto transferido. El reto es codificar un alfabeto original en otro (usualmente el binario) de la mejor manera posible, para minimizar el largo de los mensajes enviados al receptor. En los mensajes a transmitir se tiene que son de largo: m L Pi I i i que es el largo necesario para transmitir m símbolos dados. Luego se tiene que debemos minimizar L, sabiendo que (teorema de codificación de fuentes): H p L H p 1 Lo que se hace es construir códigos de longitud variable adaptados a la fuente, en el sentido de saber de antemano las probabilidades de aparición de los símbolos. IX.1.4. Códigos Sean S el alfabeto fuente y X el alfabeto código. La codificación establece una correspondencia de todas las secuencias de símbolos posibles de S en secuencias de símbolos del alfabeto código X. Los códigos se clasifican en : No Bloque Singular Códigos No Unívoco Bloque No Singular No Instantáneo Unívoco Instantáneo Códigos Bloque: Asignan a cada símbolo de S una secuencia fija de símbolos de X (pudiera no ser única); Códigos No Singulares: Código bloque con todas sus palabras distintas; Códigos Unívocos: Su extensión de orden n es no singular para todo valor de n, esto es, existe una única forma de descodificar una secuencia de símbolos de X; Códigos Instantáneos: Se puede descodificar una secuencia incompleta de símbolos de X sin necesidad de ir conociendo los símbolos que faltan; IX.1.5. Análisis de Códigos Unívocos Los códigos unívocos deben satisfacer la siguiente condición (Kraft-McMillan): ¿¿¿¿¿?????? El siguiente algoritmo permite determinar si un código es o no unívoco: 1. Sea C0 el conjunto de secuencias de X asociadas a cada símbolo de A. 2. Sea i = 0, 3. Verifíquese cada elemento de C0 en búsqueda de elementos que sean prefijos de los elementos de Ci, Sea Ci+1 el conjunto de sufijos de esos elementos (todos con todos). 4. Verifíquese cada elemento de Ci en búsqueda de elementos que sean prefijos de los elementos de C0, Agrégese a Ci+1 el conjunto de sufijos de esos elementos (todos con todos). 5. Si Ci+1 = entonces es código unívoco 6. Si Ci+1 = Cj , j i entonces es código unívoco 7. Si Ci+1 C0 entonces no es código unívoco 8. i = i + 1; 9. Volver a 3. Ejemplo: Sea S = { A, B, C, D, E, F, G } Sea X = { 0, 1, 2, 3, 4 } Sea la codificación como se muestra en la tabla: S A B C D E F G C0 0 2 03 011 103 341 11234 C1 3 11 C2 41 234 C3 34 C4 1 Como 03 está en C0, entonces no es código unívoco. C5 03 1234 IX.1.6. Codificación de Huffmann (Instantáneo y Óptimo) El método de codificación de HuffMann genera códigos óptimos e instantáneos para un alfabeto de fuente con probabilidades conocidas. Veamos: 1. 2. 3. 4. 5. 6. 7. 8. Sea S alfabeto fuente de m símbolos Sea X alfabeto código de n símbolos Ordenar alfabeto de fuente según probabilidades, de mayor a menor Hacer q = ((m-1) mod (n+1)) + 1 Sumar las menores q probabilidades, y reordenar la lista Hacer q = n Mientras queden más de n elementos en la tabla volver a 5. Asignar código hacia atrás desde la última columna de la tabla Ejemplo: Sea S = { A, B, C, D, E, F, G, H, I } Sea X = { 0, 1, 2, 3 } Sean las probabilidades de los símbolos de S como se muestran en la tabla: S A Pi 0.24 código 1 S A Pi 0.24 código 1 B C D E F G H I 0.21 0.17 0.13 0.10 0.07 0.04 0.03 0.01 2 3 00 01 02 030 031 032 B C D E F GHI 0.21 0.17 0.13 0.10 0.07 0.07 2 3 00 01 02 03 S DEFGH I A B C Pi 0.38 código 0 0.24 0.21 0.17 1 2 3 En la tercera columna tenemos el código instantáneo asociado a cada símbolo de la fuente. Existen algoritmos que, al momento de comprimir una secuencia de datos, la analizan, generan el código Huffman óptimo para la secuencia (analizando la cantidad de veces que aparece cada símbolo), y luego almacenan el código junto con los datos comprimidos. Estos son los códigos conocidos como adaptativos. A continuación se muestran los radios de compresión para dos de los más populares métodos de codificación: Fuente Texto (Inglés) Código de Programa HuffMann Adaptativo 1.6 1.7 LZW (Lempel / Ziv / Welch ) 1.8 2.3 Código Binario 1.2 1.5 IX.1.7. Otros Métodos Extensión de Código: En este método se codifican sólo los caracteres más frecuentes, y para los menos (las excepciones) se utilizan secuencias de escape simples (“ddd” -> “#d#d#d”) o con retorno (“ddd” -> “#ddd\”). Ejemplos de aplicación son el alfabeto CCITT n2 (Baudot) y el repertorio de instrucciones de los procesadores Z80 e Intel8085. Series Repetidas: Consiste en representar series de símbolos repetidos como un par (símbolo, cantidad). Es muy útil en la compresión de dibujos de pocos colores (ej.: transmisión de fax por vía telefónica). IX.2. Criptografía, Seguridad y Protección de los Datos En una red, la seguridad de la información transmitida es generalmente un factor de importancia (transacciones comerciales, por ejemplo). Por ello, desde siempre ha existido la necesidad de codificar la información de alguna manera, para hacer más difícil su utilización por parte de intrusos en la red. IX.2.1. Criptología La criptología el arte dedicado al desarrollo de crear o desbaratar métodos de ocultamiento de la información, utilizados cuando no se desea que algún intruso conozca el contenido del mensaje enviado a través de algún medio. La criptología se divide en os ramas, la criptografía y el criptoanálisis, que son el arte de crear métodos de encriptación y el de desbaratarlos, respectivamente. En general, como es difícil cambiar de un método de cifrado a otro, se utilizan métodos parametrizados, es decir, los cuales se pueden modificar fácilmente mediante el uso de una clave. Así, no es necesario que el método de cifrado sea secreto, sino que sólo es necesario que la clave lo sea. Otra ventaja es que es mucho más fácil cambiar de una clave a otra que de un método a otro, ya que la creación de métodos nuevos no es nada fácil. Consideremos un texto plano a enviar P, un método de encriptación E (que utiliza una clave k), y denotemos como C el texto cifrado, esto es, C = Ek ( P ). Además, consideremos un método de descifrado D, teniéndose entonces P = Dk ( C ). Entonces podemos representar el problema de la siguiente manera: Intruso P Emisor Receptor Método de Cifrado Método de Descifrado C = Ek ( P ) P = Dk ( C ) Los intrusos se clasifican en dos tipos: los que solamente escuchan la información que es transmitida (intrusos pasivos), y los que además modifican esta información (intrusos activos): Intrusos Pasivos Intrusos Activos IX.2.2. Criptografía Los métodos de encriptación se clasifican en tres grandes grupos: Sustitución: Códigos: son aquellos en que una unidad (letra o grupo de letras) se substituye por otra unidad; utilizan la teoría vista en el subcapítulo anterior; Transposición: no preservan el orden de los símbolos de los mensajes. Para ello se escribe el texto en una matriz, la que luego se transpone. Los diferentes métodos de cifrado se pueden combinar, resultando métodos muy complejos de cifrado. Variantes de los métodos anteriores se consiguen utilizando claves muy grandes o introduciendo basura en el texto original para hacer más difícil su descifrado. IX.2.3. Criptoanálisis El criptoanálisis consiste en crear un algoritmo D para descifrar mensajes cifrados. Generalmente se trata de encontrar primero E, ya que es más fácil y soluciona el problema. Este problema tiene tres variantes típicas, en cada una de las cuales se conoce de antemano: Sólo C: cuando sólo se tiene un texto cifrado, se debe suponer un método de cifrado y se utilizan las probabilidades de aparición de los símbolos para encontrar la clave utilizada; P y C = Ek ( P ): cuando se conocen ambos mensajes, es mucho más fácil encontrar el método de codificación, pero sigue siendo difícil encontrar la clave; C y posibilidad de utilizar E: cuando el criptoanalista tiene la posibilidad de utilizar el método de cifrado, le es aún más fácil encontrar la clave del mensaje. Cabe destacar que generalmente el método de cifrado es público, y sólo la clave es desconocida. Esto ha llevado a la creación de métodos muy complejos, que hacen casi imposible el encontrar la clave original, aún cuando el criptoanalista tenga todas las facultades mencionadas IX.2.4. Problemas Típicos de Seguridad a) Protección de Claves Otro problema común en el tema de las claves es el de hacer que ellas no sean conocidas nunca por una sola persona, para evitar abusos de autoridad, por ejemplo. Los polinomios de Shamir son una técnica muy utilizada para esto: Si se desea que de un gran conjunto de personas se necesiten k de ellas para obtener la clave, se utiliza un polinomio de grado (k-1) de la forma: p ( x ) a 0 a 1 x a 2 x a k 1 x 2 k 1 donde a0 es la clave del sistema. A cada persona se le da a conocer un punto de la curva del polinomio, esto es, un par único ( x , p ( x ) ). Así, reuniéndose los pares de k personas, se puede reconstruir la curva, esto es, calcular los coeficientes del polinomio, obteniéndose la clave a0. b) Distribución de Claves Un problema grave en criptografía de mensajes en redes es el de la distribución de las claves: para que dos entidades se comunique utilizando algún método de encriptación, es necesario que ambos utilizan la misma clave. La pregunta es ¿cómo hacer para utilizar una clave nueva, sin necesidad de ponerse de acuerdo mediante un medio que no sea la red? Una solución ingeniosa es la de los Puzzles de Merkle, que consiste en más o menos lo siguiente: 1) Inicialmente se envían n acertijos pares ( C = E ( P ) , k ) , en los cuales todos los P poseen alguna característica similar (indicada explícitamente). Además se indica qué método de encriptación E se utilizó en todos los casos; 2) El receptor selecciona uno de los acertijos y lo resuelve por fuerza bruta hasta que encuentre un texto P que cumple con la característica indicada; 3) El receptor envía de regreso el texto P del acertijo seleccionado (sin cifrar); 4) El emisor selecciona la clave k asociada al acertijo que contiene C = E ( P ); 5) Ambos comienzan a utilizar la clave k asociada al acertijo elegido (no la clave que lo resolvió). Un intruso escucha toda la conversación no sabe cuál fue el acertijo elegido, y para saber qué clave será utilizada deberá resolver a fuerza bruta en promedio ½n acertijos. Si n es un número grande, digamos 20.000, la tarea puede tomar varios años. Si este método se utiliza con una frecuencia de digamos un mes, la tarea es prácticamente imposible. Este método posee dos grandes desventajas: requiere de una cantidad bastante grande de cálculo para el punto 2), y un uso de red grande en el punto 1). c) Criptografía con Claves Públicas Diffie y Hellmann publicaron un artículo que cambió la forma de pensar de los criptógrafos y criptoanalistas, ya que anteriormente se daba por sentado que las claves debían ser secretas. Esto era así debido a que si se conoce el algoritmo de cifrado E, la especificación del algoritmo de descifrado D era trivial de obtener. Así, proponen tres requisitos para sistemas de criptografía seguros: D ( E ( P ) ) = P; Debe ser muy difícil deducir D a partir de E; E no puede descifrarse mediante un ataque basado en la aplicación de él sobre textos seleccionados. Bajo estas condiciones no existe ninguna razón por la cual se deba utilizar una clave secreta. Veamos por qué: 1) Quién desee recibir mensajes cifrados selecciona algoritmos E y D que cumplan las características anteriores; 2) El algoritmo E se hace público, de manera que cualquier persona que desee enviar algo pueda utilizarlo; 3) Cuando se reciba un mensaje cifrado E ( P ), se le aplica el algoritmo D, obteniéndose el mensaje original. Como nadie más conoce D, nadie más podrá descifrar el mensaje. Así, el problema consiste en encontrar algoritmos que satisfagan los tres requisitos planteados. Algoritmos de este tipo se basan generalmente en la teoría de números, ya que se utilizan números primos muy grandes, y claves del orden de 200 dígitos. La seguridad del sistema se basa en que para factorizar números de tal magnitud se requieren más de 4 billones de años, aún si se utilizan los mejores algoritmos sobre los mejores computadores actuales. d) Autentificación y Firmas Digitales Este problema consiste en el problema de demostrar la identidad de un usuario en la red. El fin último de esto es poder realizar transacciones comerciales a través de la red, por ejemplo. Los algoritmos que se implementen para ello deben cumplir dos características: El receptor debe poder verificar la identidad del transmisor; El transmisor no debe poder negar el mensaje luego de enviarlo. El primer problema se descompone en dos, ya que se debe poder autentificar al usuario no sólo al iniciar una sesión, sino que debe ser posible identificarlo como el emisor de cada mensaje enviado. Al Inicio de Sesión: Una solución al problema es hacer uso de una clave pública b1 (conocida por el receptor) en conjunto con una privada b2 (conocida por el usuario). Al iniciar una sesión, el receptor escoge un mensaje aleatorio, lo cifra utilizando el algoritmo Eb1 (público), y envía al usuario. El usuario debe entonces regresarlo descifrado mediante el algoritmo Db2 (privado). Note que Db2 ( Eb1 ( P ) ) = P. En Cada Mensaje: Para autentificar al usuario en cada mensaje enviado se hace que cada mensaje contenga lo siguiente: una contraseña secreta, un número de secuencia, hora y fecha de transmisión, el texto en clave utilizando la clave secreta enviada y un código de redundancia de todo el mensaje. El conjunto de esta información hace prácticamente imposible que un intruso pudiera reproducir los mensajes de manera exitosa. El segundo problema, el de evitar que se niegue el envío de algún mensaje, se resuelve utilizando dos pares de claves públicas y secretas, y la condición que: D ( E ( P ) ) = E ( D ( P ) ) = P. Así, el proceso de envío del mensaje es como sigue: Da(P) P Clave Secreta Emisor Eb(Da (P)) Clave Pública Receptor Da(P) Clave Secreta Receptor Emisor Clave Pública Emisor P Receptor El receptor puede demostrar que fue el usuario quién envió el mensaje enseñando a un tercero los mensajes Da(P) y P. Sólo el emisor pudo enviar el mensaje, ya que sólo él conoce su clave secreta. El problema potencial es que el emisor puede reclamar que su clave le fue robada de alguna manera. IX.3. Representación en Formatos de Red La capa de presentación también de be solucionar el problema de la representación de datos en formatos estándares, ya que las diferentes arquitecturas de computadores utilizan diferentes formatos de representación de datos. El estándar OSI propone un formato estándar de red (ASN.1), que permite especificar tipos de datos abstractos. ASN.1 posee tipos primitivos muy simples (enteros, booleanos, cadena de bits y cadena de bytes), y permite construir cualquier tipo de dato independientemente de su representación. Cuando se envía información a través de la red con ASN-1, se debe traducir la información a ASN.1 y enviarla junto a la descripción de su estructura, de manera que el receptor pueda reconstruir la información. X. Capa de Sesión Esta capa se encuentra fuertemente mezclada con la capa de aplicación, y considera en general las siguientes funciones: X.1. Intercambio de Datos Administración del Diálogo Sincronización de Procesos Control de Actividades Reporte de Excepciones Control de Conexión Servicios del Nivel de Sesión Básicamente, esta capa provee servicios comunes de red a los programadores de aplicaciones que la utilizan, de manera que ellos no deban volver a programar cada vez los mismos algoritmos. X.2. Interconexión de Procesos La capa de sesión provee de conexiones entre procesos, comúnmente llamadas sesiones. Estas sesiones permiten establecer, utilizar y luego terminar una conexión, lo cual resulta muy útil para una variedad de aplicaciones. El énfasis está en que se proveen algoritmos de conexión comunes, orientados a la aplicación más que al uso de la red (que es el caso de la capa de transporte). Como es de esperar, esta capa provee de primitivas para el intercambio de datos entre la aplicaciones conectadas. X.3. Sincronización de Procesos Uno de los usos más comunes de la capa de sesión es la sincronización de procesos, ya que ésta provee los mecanismos para llevarla a cabo de manera transparente al programador. Así, éste no debe preocuparse por problemas de bloqueo de procesos sincronizados, por ejemplo. X.4. Administración de Actividades Este servicio consiste en la capacidad de administrar transacciones independientes a través de la red. Depende del programador determinar qué es una actividad, pero sí deben ser independientes una de la otra. Así, la capa de sesión puede optimizar el uso de la red, pudiendo controlar el flujo de datos de cada actividad de manera independiente. X.5. Notificación de Excepciones Este servicio consiste en que los procesos pueden notificar a su entidad par de excepciones ocurridas en cualquier momento de la sesión (generalmente errores del protocolo entre los procesos). X.6. Llamada a Procedimiento Remoto (RPC) Las llamadas a procedimientos remotos son una implementación particular de un servicio de sesión, que resuelven problemas de transferencia de datos y de sincronización de procesos. El paradigma en que se basan en el modelo cliente/servidor, y lo que se pretende es hacer transparente al programador una llamada a un procedimiento o función de un proceso en otro host de la red. La idea es que existen dos procesos, presumiblemente en hosts diferentes, uno de los cuales hace de cliente que solicita algún servicio al otro, que hace de servidor. Esto se implementa de manera tal que el programador sólo debe declarar un procedimiento como remoto, especificar el host en que se encuentra, y luego puede simplemente llamar al procedimiento. La implementación del servidor es similar. A continuación se muestra cómo funciona una llamada a procedimiento remoto: Máquina del Cliente Cliente 10 Máquina del Servidor Stub Cliente 1 2 6 Stub Servidor 9 7 Entidad de Transporte Servidor 5 4 Entidad de Transporte 8 3 Los algoritmos de stub de cliente y servidor tiene como función el recolectar toda la información a enviar de un proceso al otro y utilizar los servicios de la capa de transporte para llevar a cabo la comunicación. Esta recolección debe ser muy cuidadosa (cuando se trata de un puntero, por ejemplo), por lo que el hecho que la capa de sesión provea este servicio facilita mucho el trabajo al programador. A pesar de todo, los algoritmos del servidor deben ser construidos con mucho cuidado, ya que no se puede hacer una llamada pasando parámetros por referencia con punteros, por ejemplo. Una característica notable de las RPC es que aseguran la exclusión mutua de los procesos, ya que nunca estarán simultáneamente ejecutándose el cliente y el servidor (salvo si se programa de manera explícita). El problema más común que puede surgir debido al uso de RPC es que el servidor deje de responder, produciendo que el cliente no siga nunca su ejecución. XI. Capa de Transporte Esta capa se considera el corazón de la jerarquía de protocolos, ya que tiene como objetivos los siguientes: Eficiencia en Transporte de Datos; Asegurar Confiabilidad; Uso Económico del Recurso de Red; XI.1. Calidad del Servicio Un objetivo secundario de la capa de transporte es la mejora de la calidad del servicio proveído a los usuarios de ella, la se puede medir a través de los siguientes parámetros: Retardo en Establecer la Conexión: Tiempo entre solicitud de conexión y confirmación de conexión; Probabilidad de Fallo de Establecimiento de Conexión: Probabilidad que una conexión no pueda efectuarse (por congestión, falta de capacidad de las IMP’s, etc.); Retardo en la Liberación de la Conexión: Tiempo entre desconexión y confirmación de desconexión; solicitud Probabilidad de Fallo de Liberación de Conexión: Probabilidad desconexión no se lleve a cabo en un tiempo aceptable; Caudal: que de una Cantidad de información por segundo, que puede transferir la red. Se diferencia entre caudal nominal (que es capaz de llevar la red) y caudal efectivo (que es posible de utilizar efectivamente, por capacidad de IMP’s y hosts, por ej.); Retardo de Tráfico: Tiempo desde que se envía un mensaje hasta que se recibe este mensaje; Tasa de Error: Fracción de mensajes perdidos o dañados. Debiera ser cero, ya que la capa de transporte debiera corregir estos errores que se producen en la capa de red); Tasa de Falla de Transferencia: Fracción de veces en que los tres puntos anteriores no fueron aceptables (estuvieron bajo un rango mínimo aceptable); Protección: Manera en que la capa de transporte evita que intrusos intercepten (lean y/o alteren) mensajes; Prioridad: Manera en que la capa de transporte maneja prioridades de conexiones; Resistencia: Probabilidad que la misma capa de transporte sea la que termine una conexión (debido a problemas internos, congestión o prioridades, por ej.). XI.2. Servicios de la Capa de Transporte Los servicios que provee la capa de transporte son fundamentalmente los siguientes: Primitivas de Transporte; Administración de Conexiones: Direccionamiento; Establecimiento de la Conexión; Liberación de la Conexión; Control de Flujo; Multiplexación; Recuperación de Caídas; XI.3. Primitivas de Transporte Las primitivas proveídas por la capa de transporte son las siguientes: Orientadas a Conexión T-CONNECT.request ( callee, caller, exp, qos, data ) T-CONNECT.indication ( callee, caller, exp, qos, data ) T-CONNECT.response ( qos, respond, exp, data ) T-CONNECT.confirm ( qos, respond, exp, data ) T-DISCONNECT.request ( data ) T-DISCONNECT.indication ( reason, data ) T-DATA.request ( data ) T-DATA.indication ( data ) T-EXPEDITED-DATA.request ( data ) T-EXPEDITED-DATA.indication ( data ) Sin Conexión T-UNITDATA.request ( callee, caller, qos, data ) T-UNITDATA.indication ( callee, caller, qos, data ) donde: callee caller exp qos data reason - dirección de quien es llamado - dirección de quien llama - indicación de datos acelerados - calidad de servicio deseada - 0 o más datos transmitidos - razón por la cual sucedió Las primitivas se relacionan mediante el siguiente autómata finito, el cual muestra cuáles primitivas producen cuáles transiciones de estados. Los estados son los siguientes: Inactivo: No hay conexión establecida, ni en proceso de establecerse o liberarse; Conexión Entrante: Se ha recibido un T-CONNECT.indication, pero aún no se ha aceptado ni rechazado la conexión; Conexión Saliente: Se ha hecho un T-CONNECT.request, pero aún no se ha recibido respuesta alguna; Conexión Establecida: Existe una conexión establecida. Inactivo T-DISCONNECT.request T-DISCONNECT.indication T-DISCONNECT.request T-DISCONNECT.indication T-CONNECT.request Conexión Saliente T-CONNECT.indication T-DISCONNECT.request T-DISCONNECT.indication T-CONNECT.confirm Conexión Entrante T-CONNECT.response Conexión Establecid a T-DATA.request T-DATA.indication T-EXPEDITED-DATA.request T-EXPEDITED-DATA.indication Las relaciones posibles entre las primitivas se pueden ver en los siguientes diagramas. En ellos aparece representada la capa de transporte como un espacio entre dos hosts, uno a la izquierda y otro a la derecha. El tiempo se representa hacia abajo. T-CONNECT. request T-CONNECT. request T-CONNECT. indication T-CONNECT. indication T-CONNECT. response T-DISCONNECT. request T-CONNECT. confirm T-DISCONNECT. indication Conexión Normal Conexión Rechazada por el Proceso Llamado T-CONNECT. request T-DISCONNECT. request T-DISCONNECT. indication T-DISCONNECT. indication Conexión Rechazada por Capa de Transporte T-DISCONNECT. request Desconexión Normal T-DISCONNECT. request T-DISCONNECT. indication Desconexión Simultánea T-DATA. request T-DISCONNECT. indication Desconexión iniciada por Capa de Transporte T-EXPEDITED-DATA. request T-DATA. indication Transferencia de Datos Normal T-EXPEDITED-DATA. indication Transferencia De Datos Acelerados Normal XI.4. Administración de Conexión Cuando se desea construir la capa de transporte, se debe poner atención a diversos problemas que aparecen debido a la naturaleza de las redes de computadores y a los problemas que no maneja la capa de red. A continuación se presentan los más importantes de ellos. XI.4.1. Direccionamiento Cuando un proceso desea establecer una conexión, ¿cómo se determina con cuál proceso desea establecer esta conexión? La respuesta es la utilización de direccionamiento de procesos. La capa de red provee direccionamiento de hosts, pero es necesario además direccionar los procesos dentro de cada host. Para ello se define una dirección (TSAP) de la forma: <galaxia><estrella><planeta><país><ciudad><host><proceso> Así, cada proceso se une a una TSAP fija, la cual puede utilizar para requerir conexiones o recibir requerimientos de conexión. Debido a que la mayoría de los procesos tienen vida corta, y a que la cantidad de TSAP’s es limitada, no es posible asociar cada proceso a una TSAP fija realmente, asociando una TSAP a un proceso sólo cuando éste lo requiera, y liberándola cuando ya no la utilice. ¿Cómo encontrar un proceso si no se conoce su TSAP? Se pueden utilizar dos soluciones: Servidor de Procesos: Se trata de un proceso con TSAP fija y bien conocida, el cual es capaz de crear procesos a medida que éstos sean requeridos desde la red. Así, éste servidor de procesos puede indicar al que requiere la conexión cuál es la TSAP del proceso requerido ; Base de Datos de Procesos: Se trata de un proceso con TSAO fija y bien conocida, el cual lleva un registro de los procesos del sistema y sus TSAP asociadas. Es responsabilidad de cada proceso el inscribirse y desincribirse de esta base de datos. XI.4.2. Pérdida de Mensajes La Capa de Red puede perder mensajes: ¿Cómo manejar esta situación? La solución es enviar nuevamente un mensaje si no se ha recibido confirmación de la llegada de él al destino, luego de cierto tiempo preestablecido. Esto produce la duplicación de mensajes en la red, ya que ambos pueden llegar íntegros al destino. Por esto, se deben usar números de secuencia asociados a los mensajes, los que pueden ser utilizados para verificar si un mensaje entrante es un duplicado o no. Esta solución sólo funciona para las primitivas de transferencia de datos, pero no para las de establecimiento o liberación de conexión, ya que si se recibe duplicada una solicitud de conexión, por ej., el que los números de secuencia sean los mismos no significa que sean duplicados (pueden ser solicitudes de procesos diferentes en la misma máquina y que utilizan el mismo TSAP, uno después de otro, por ej.). XI.4.3. Establecimiento de la Conexión Problema: duplicación de T-CONNECT.indication: T-CONNECT.request T-CONNECT.indication T-CONNECT.indication (duplicado) El duplicado se interpretaría como otra solicitud de conexión, por lo cual debe existir un mecanismo de control adicional. La solución es utilizar comunicación ida-vuelta-ida para validar la información recibida. Esto se hace enviando confirmaciones de recepción de confirmaciones de vuelta al receptor. Veamos: T-CONNECT.request (seq=A0) T-CONNECT.indication (seq=A0) T-CONNECT.response (seq=B0, ack=A0) (Se recibe A0, se deduce que receptos recibió C.request) T-CONNECT.confirm (seq=B0, ack=A0) T-DATA.request (seq=A1, ack=B0) T-DATA.indication (seq=A1, ack=B0) (Se recibe B0, se deduce que receptos recibió C.confirm) Veamos cómo se manejan los casos de duplicados de requerimientos de conexión o de datos. Note que se puede deducir qué ocurre realmente a partir de los ack recibidos: T-CONNECT.request (seq=A0) T-CONNECT.indication (seq=A0) T-CONNECT.response (seq=B0, ack=A0) (Se recibe A0, se deduce que receptos recibió C.request) T-CONNECT.confirm (seq=B0, ack=A0) T-DATA.request (seq=A1, ack=B0) (Se recibe A0 otra vez, se deduce que es duplicado) T-CONNECT.confirm (seq=C0, ack=A0) T-REJ.request (ack=A0) T-CONNECT.indication (seq=A0) T-CONNECT.response (seq=C0, ack=A0) (Se recibe A0 otra vez, no se sabe que es duplicado) T-DATA.indication (seq=A1, ack=B0) (Se recibe B0, se deduce que receptos recibió C.confirm) T-DATA.indication (seq=A1, ack=B0) (Se recibe B0 otra vez, se deduce que es duplicado) T-REJ.indication (ack=A0) (Se recibe REJ A0, se deduce que se termina conexión duplicada) XI.4.4. Liberación de la Conexión Problema: pérdida de T-DISCONNECT.confirm: T-CONNECT.request T-CONNECT.indication T-CONNECT.confirm Si se pierde T-DISCONNECT.confirm, el emisor nunca sabe que el receptor terminó la conexión, por lo que intentará nuevamente terminar la conexión. Pero el receptor ya no existe, y pueden surgir graves complicaciones (un nuevo proceso puede estar esperando mensajes en el mismo puerto, por ej.). El problema anterior se puede evitar con la utilización de temporizadores, esto es, relojes de cuenta regresiva, que se reinicializa cada vez que se envía un paquete. Los tiempos deben ser suficientemente grandes para permitir que el paquete enviado llegue al destino, y que se reciba el reconocimiento de la recepción (acknowledge). A continuación se muestran situaciones de desconexión con temporizador: T-DISCONNECT.request (seq=A0) T-DISCONNECT.indication (seq=A0) T-DISCONNECT.response (seq=B0, ack=A0) (Se recibe A0, se deduce que T-DISCONNECT.confirm (seq=B0, ack=A0) receptos recibió D.request) T-DATA.request (seq=A1, ack=B0) (Se elimina Conexión) T-DATA.indication (seq=A1, ack=B0) (Se recibe B0, se deduce que receptos recibió D.response) (Se elimina Conexión) Situación Normal T-DISCONNECT.request (seq=A0) T-DISCONNECT.indication (seq=A0) T-DISCONNECT.response (seq=B0, ack=A0) (Se inicia temp.) (Se recibe A0, se deduce que T-DISCONNECT.confirm receptos recibió D.request) (seq=B0, ack=A0) T-DATA.request (seq=A1, ack=B0) (Se elimina Conexión) (fin temp.) (Se elimina Conexión) Perdida de Confirmación (Se inicia temp.) T-DISCONNECT.request (seq=A0) T-DISCONNECT.indication (seq=A0) T-DISCONNECT.response (seq=B0, ack=A0) (fin temp.) T-DISCONNECT.request (seq=A1) T-DISCONNECT.indication (seq=A1) T-DISCONNECT.response (seq=B1, ack=A1) (Se recibe A0, se deduce que T-DISCONNECT.confirm receptos recibió D.request) (seq=B1, ack=A1) T-DATA.request (seq=A2, ack=B1) (Se elimina Conexión) T-DATA.indication (seq=A2, ack=B1) (Se recibe B0, se deduce que receptos recibió D.response) (Se elimina Conexión) Pérdida de T-DISCONNECT-confirm (Se inicia temp.) T-DISCONNECT.request (seq=A0) T-DISCONNECT.indication (seq=A0) T-DISCONNECT.response (seq=B0, ack=A0) (Se inicia temp.) (fin temp.) T-DISCONNECT.request (Se inicia temp.) (seq=A0) (fin temp.) (Se elimina Conexión) (n intentos) (Se elimina Conexión) Pérdida de Todo XI.5. Control de Flujo ¿Qué hacer cuando el emisor es más rápido que el receptor? Se implementan variados sistemas de retroalimentación para manejar esta situación, de modo que el emisor sólo puede enviar paquetes cuando el receptor le indique, explícita o implícitamente, que puede hacerlo. XI.6. Multiplexación La multiplexación ascendente permite que varios usuarios utilicen la misma conexión de nivel de red para usar la red, aprovechándose así con mayor eficiencia el ancho de banda de las conexiones de red. La multiplexación descendente en la capa de transporte permite que cuando un usuario desea utilizar una conexión con ancho de banda mayor que lo que es capaz una conexión de nivel de red, se utilicen varias de ellas paralelamente. XI.7. Recuperación de Caídas La capa de transporte es responsable de la recuperación ante caídas de la capa de red. Así, cuando esta última emite un N-RESET, la capa de transporte deberá comenzar algún mecanismo para establecer qué paquetes fueron recibidos y cuales no. Por ejemplo, el emisor puede preguntar al receptor por los paquetes enviados de los que aún no se recibe asentimiento, pudiendo entonces el receptor indicar cuáles faltan por llegar. La recuperación ante caídas de las máquinas es más delicada, debido a que el asentimiento sólo significa que se ha recibido el paquete, y no que se ha procesado con éxito la información contenida. Por lo tanto, serán las capa superiores las encargadas de enviar asentimientos de proceso, es decir, de indicar al emisor que se ha procesado con éxito la información contenida en el paquete. XI.8. Los Paquetes TCP El Encabezado de los paquetes (TPDU) en TCP tienen la siguiente estructura: 0 15 16 31 Puerto Fuente Puerto Destino (16 bits) (16 bits) Número de Secuencia TPDU Enviada (32 bits) Número de Secuencia Asentimiento Recibido (32 bits) URG, ACK, EOM, RST, SYN, FIN (6 bits) Largo Enc. (6 bits) Ventana (16 bits) Código Redundancia Puntero Acelerado (16 bits) (16 bits) Opciones (0 o mas palabras de 32 bits) Puerto Fuente: Identificación del puerto TSAP de origen del paquete; Puerto Destino: Identificación del puerto TSAP de destino del paquete; Número de Secuencia: Número de secuencia del paquete que se envía con el encabezado actual; Número Sec. Asentimiento: Número de secuencia para asentimiento del último paquete recibido; Largo Encabezado: Largo del encabezado completo. Es necesario debido al largo variable de las opciones; URG: Activo si se utiliza el Puntero Acelerado; ACK: Activo si se utiliza el Número de Sec. Asentimiento; EOM: Indica fin del mensaje (??); RST: Indica que se desea retomar una conexión confusa debido a T-CONNECT.request o T-CONNECT.confirm duplicados; SYN: Indica que se desea establecer una nueva conexión, esto es, para T-CONNECT.request (ACK=0) y T-CONNECT.confirm (ACK=1); FIN: Indica que se desea terminar la conexión; Ventana: Cantidad de ventanas disponibles; Código CRC: Código de redundancia de los datos del paquete para detección de errores. Se suman todos los datos como palabras de 16 bits y se complementen a 1; Puntero Acelerado: ??; Opciones: Indican otros datos dependientes del contexto, como tamaño de buffers, etc. XII. Anexos XII.1. Protocolos de Ventana Deslizante XII.1.1. Repetición No Selectiva r,s : trama p : paquete[MaxSeq] e : evento aRecibir = 0 : seq aTransmitir = 0 : seq aAckRecibir = 0 : seq nbuff = 0 : seq i : seq ventana de transmisión inicializa secuencia de recibidos inicializa secuencia de enviados inicializa secuencia de asentimientos Bool entre(a,b,c : seq) { si (ab y b<c) ó (ab y c<a) ó (c<a y b<c) entonces entre = verdadero sino entre = falso } devuelve verdadero si está en la ventana EnvíaTrama(fnum : seq) { s.info = p[fnum] s.seq = fnum s.ack = aRecibir + MaxSeq ACapaFísica(s) IniciaTimer(fnum) } ProtocoloVentanaRNS() { HabilitaCapaRed() repetir Espera(e) transmite una trama arma la trama asentimiento superpuesto transmite la trama inicializa temporizador de la trama (LlegóTrama, CRCerr, TimeOut ó CapaRedLista) si e = CapaRedLista entonces DeCapaRed(p[aTransmitir]) nbuff = nbuff + 1 EnvíaTrama(aTransmitir) Incrementa(aTransmitir) obtiene paquete agranda ventana transmite datos si e = LlegóTrama entonces recibe trama DeCapaFísica(r) recibe conforme si r.seq = aRecibir entonces ACapaRed(r.info) Incrementa(aRecibir) mientras entre(aAckRecibir, r.ack, aTransmitir) se recibió asentimiento mayor nbuff = nbuff -1 se vacía ventana ParaTimer(aAckRecibir) Incrementa(aAckRecibir) fin-mientras si e = CRCerr entonces (ignora) si e = TimeOut entonces aTransmitir = aAckRecibir para i=1 hasta nbuff EnvíaTrama(aTransmitir) Incrementa(aTransmitir) fin-para si nbuff<MaxSeq entonces HabilitaCapaRed() sino DeshabilitaCapaRed() hasta-siempre } ignora paquetes con error retransmite desde trama sin asent. XII.1.2. Repetición Selectiva const NrBuff = (MaxSex+1) div 2 const MaxBuf = NrBuff -1 tamaño de ventanas r,s : trama e : evento OutBuff, InBuff : paquete[MaxBuff] Llegó = falso : booleano[MaxBuff] aRecibir = 0 : seq aTransmitir = 0 : seq aAckRecibir = 0 : seq nbuff = 0 : seq i : seq TooFar = NrBuff : seq NoNak = verdadero : booleano Bool entre(a,b,c : seq) { si (ab y b<c) ó (ab y c<a) ó (c<a y b<c) entonces entre = verdadero sino entre = falso } trama recibida y a transmitir evento recibido ventana de transmisión todos son falsos al inicio inicializa secuencia de recibidos inicializa secuencia de enviados inicializa secuencia de asentimientos devuelve verdadero si está en la ventana EnvíaTrama(ft: tipoTrama, fnum : seq) { s.tipo = ft si ftipo = datos entonces s.info = buffOut[fnum mod NrBuff] s.seq = fnum s.ack = aRecibir + MaxSeq si ftipo = nak entonces NoNak = falso ACapaFísica(s) si ftipo = datos entonces IniciaTimer(fnum mod NrBuff) } transmite una trama arma trama de datos asentimiento superpuesto transmite la trama inicializa temporizador de la trama ProtocoloVentanaRNS() { HabilitaCapaRed() repetir Espera(e) (LlegóTrama, CRCerr, TimeOut, CapaRedDesocupada ó CapaRedLista) si e = CapaRedLista entonces { nbuff = nbuff + 1 DeCapaRed(OutBuff[aTransmitir mod NrBuff]) EnvíaTrama(datos,aTransmitir) Incrementa(aTransmitir) } agranda ventana obtiene paquete transmite datos si e = LlegóTrama entonces recibe trama { DeCapaFísica(r) recibe sólo datos si r.tipo = datos entonces { ACapaRed(r.info) no es esperada si r.seq<>aRecibir y NoNak entonces envía nak EnvíaTrama(nak,0) si entre(aRecibir, r.seq, TooFar) y llegó[aRecibir mod NrBuff] = falso entonces { llegó[r.seq mod NrBuff] = verdadero InBuff[r.seq mod NrBuff]=r.info pasa todas mientras llegó[aRecibir mod NrBuff] a ACapaRed(InBuff[aRecibir mod NrBuff]) capa de red NoNak = verdadero llegó[aRecibir mod NrBuff] = verdadero Incrementa(aRecibir) Incrementa(TooFar) IniciaTimerAck() fin-mientras } } se recibe nak si r.tipo = nak y entre(aAckRecibir, (r.ack+1) mod (MaxSeq+1), aTransmitir) entonces EnvíaTrama(ack,(r.ack+1) mod (MaxSeq+1)) reenvía asentimiento mientras entre(aAckRecibir, r.ack, aTransmitir) se recibió asentimiento mayor nbuff = nbuff -1 se vacía ventana ParaTimer(aAckRecibir) Incrementa(aAckRecibir) fin-mientras } si e = CRCerr entonces { si NoNak entonces EnvíaTrama(nak,0) } hay error envía nak si e = TimeOut entonces EnvíaTrama(datos,MásAntigua) si e = CapaRedDesocupada entonces EnvíaTrama(ack,0) si nbuff<NrBuff entonces HabilitaCapaRed() sino DeshabilitaCapaRed() hasta-siempre } retransmite trama más antigua capa de red no quiere enviar nada envía sólo asentimiento XIII. Bibliografía [Tann1] Andrew S. Tannenbaum “Redes de Computadores” Prentice Hall, 1991 [Tann2] Andrew S. Tannenbaum “Sistemas Operativos Distribuidos” Prentice Hall [Cou1] George Coulouris “Distributed Systems” Addison Wesley [Com1] Douglas E. Comer “Internetworking with TCP/IP vol.3; BCD socket Version” Prentice Hall [TAK1] Jorge López “Apuntes Curso: Comunicación de Datos” por Thomas Armstrong [TAK2] Jorge López “Apuntes Curso: Redes de Computadores” por Thomas Armstrong I.