Ingeniería de protocolos Tema 2. Estructura de un protocolo Mª del Carmen Romero mcromero@dte.us.es 1 Atribución-NoComercial-LicenciarIgual 2.5 Tu eres libre de: copiar, distribuir, comunicar y ejecutar públicamente la obra hacer obras derivadas Bajo las siguientes condiciones: Atribución. Debes reconocer y citar la obra de la forma especificada por el autor o el licenciante. No Comercial. No puedes utilizar esta obra para fines comerciales. Licenciar Igual. Si alteras o transformas esta obra, o generas una obra derivada, sólo puedes distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tienes que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor Los derechos derivados del uso legítimo, del agotamiento u otras limitaciones o excepciones reconocidas por la ley no se ven afectados por lo anterior. Esto es un resumen simple del texto legal. La licencia completa está disponible en: http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode Attribution-NonCommercial-ShareAlike 2.5 You are free: to copy, distribute, display, and perform the work to make derivative works Under the following conditions: Attribution. You must attribute the work in the manner specified by the author or licensor. Noncommercial. You may not use this work for commercial purposes. Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. For any reuse or distribution, you must make clear to others the license terms of this work. Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. This is a human-readable summary of the Legal Code. Read the full license at: http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode Estructura de un protocolo 1. Introducción 2. Los cinco elementos de un protocolo 3. Servicio y entorno 4. Vocabulario y formato de los mensajes 5. Reglas de procedimiento 6. Diseño de un protocolo estructurado 7. Mecanismos básicos de los protocolos 2 Introducción A B d Acuerdos sobre: - Inicio y final del intercambio de datos - Sincronización de emisores y receptores - Detección y corrección de errores de transmisión - Formateo y codificación de los datos 3 Introducción Niveles de abstracción señal eléctrica bits símbolos/caracteres campos de mensaje tramas/paquetes 4 Los cinco elementos de un protocolo 1. Servicio que proporciona el protocolo 2. Suposiciones sobre el entorno donde se ejecuta el protocolo 3. Vocabulario de los mensajes utilizados en el protocolo 4. Formato de los mensajes del vocabulario del protocolo 5. Reglas de procedimiento que controlan la consistencia del intercambio de mensajes 5 Los cinco elementos de un protocolo Especificación del servicio El propósito del protocolo es transferir ficheros de texto como secuencias de caracteres a través de una línea de datos mientras que en la protección frente a errores de transmisión, se asume que todos los errores pueden ser detectados. El protocolo se define para transferencias full-duplex, es decir, debería permitir transferir en ambas direcciones simultáneamente. Los acuses de recibo positivos y negativos para el tráfico desde A hasta B se envían por el canal desde B hasta A y viceversa. Cada mensaje contiene dos partes: una parte que es el mensaje en sí y una parte de control que se aplica al tráfico del canal inverso. 6 Los cinco elementos de un protocolo Suposiciones del entorno - Dos usuarios como mínimo + un canal de transmisión - Los usuarios envían una solicitud de transferencia de fichero y esperan a que finalice - Canal con distorsiones aleatorias, pero no se pierden, duplican, insertan o desordenan mensajes - Se pueden producir errores aleatorios 7 Los cinco elementos de un protocolo Vocabulario del protocolo - ack = mensaje + acuse de recibo positivo - nack= mensaje + acuse de recibo negativo V={ack, nack, err} - err = mensaje con distorsión Formato del mensaje Mensaje={etiqueta de control, dato} enum control {ack, nack, err}; struct message { enum control etiqueta; unsigned char dato; }; 8 Los cinco elementos de un protocolo Leyenda o: cola de mensajes a transmitir i: cola de mensajes a recibir Inicio de la transmisión = Esperando = Mensaje de entrada Reglas de procedimiento ste:o = Mensaje de salida = Evento interno 1. Si la recepción anterior estuvo libre de errores, el siguiente mensaje por el canal inverso debe llevar un reconocimiento positivo; en caso contrario, llevará un reconocimiento negativo. 2. Si la recepción anterior portaba un reconocimiento negativo, o si fue errónea, se retransmitirá el último mensaje; en caso contrario se transmitirá el mensaje siguiente recibiendo nack:i ack:i err:i ste:o ack:o ack:o nack:o 9 Los cinco elementos de un protocolo Defectos de diseño - No se puede transmitir en ambas direcciones simultáneamente - No se ha definido procedimientos de inicio y finalización Ö¿err? - Se aceptan todos los mensajes recibidos correctamente, incluyendo los duplicados - Si se aceptan los que llegan OK y no se aceptan los mensajes de err Ö duplicación de mensajes cuando se producen dos errores consecutivos 10 Los cinco elementos de un protocolo Comunicación sin errores A Comunicación con errores B err ste A ste err ste nack ‘z’ Aceptar ‘z’ ste B ste nack ‘z’ Aceptar ‘z’ ack ‘a’ Ö err ack ‘a’ nack ‘z’ Ö err ack ‘y’ Aceptar ‘a’ ste nack ‘a’ Aceptar ‘y’ ste Aceptar ‘a’ ack ‘b’ ack ‘x’ Aceptar ‘x’ ack ‘z’ Aceptar ‘b’ Aceptar ‘z’ ste ste ack ‘b’ 11 A inicia TX A B err ste nack ‘z’ Aceptar ‘z’ ack ‘a’ Ö err nack ‘z’ Ö err A interpreta el err como que B ha iniciado la TX A transmite su primer carácter ‘a’ +acuse de recibo del err recibido A recibe y acepta dos veces el carácter ‘z’ nack ‘a’ ste B transmite su primer carácter ‘z’ + acuse de recibo del err recibido A envía su primer carácter ‘a’ + acuse de recibo del carácter ‘z’ recibido, pero se deteriora en el camino Llega a B como err, luego B piensa que A ha iniciado una nueva TX B transmite su primer carácter ‘z’ + acuse de recibo del err recibido, pero se deteriora en el camino Aceptar ‘a’ ack ‘z’ B transmite su primer carácter ‘z’ +acuse de recibo del carácter ‘a’ recibido Aceptar ‘z’ ste ack ‘b’ 12 Servicio y entorno P1: Testeador + generador de paridad (8 bits) P2: Codificador + decodificador (7 bits) Canal virtual P2 P1 P1 P2 Envolturas de datos Pn P2 P1 Po P1 P2 Pn 13 Servicio y entorno Ventajas del diseño por niveles: - Ayuda a distinguir la estructura lógica del protocolo, al separar tareas de alto nivel de las de bajo nivel - Facilita la escalabilidad del protocolo Actores del modelo de diseño: - Un nivel o capa define un grado de abstracción de un protocolo, agrupando funciones relacionadas y separando las independientes - Un interfaz separa (y une) dos niveles distintos de abstracción Nivel N+1 Nivel N A B Protocolo par Entidad par Nivel N-1 Primitivas de servicio Servicio 14 Servicio y entorno Primitivas: Usuario de servicio (Capa N) - De petición de servicio - De indicación de servicio Suministrador del servicio (Capa N-1) Usuario de servicio (Capa N) X.request - De respuesta (de entidad par) X.indication - De confirmación (del suministrador Diagrama de correlación de primitivas X.response X.confirm del servicio) Transmisor Receptor Usuario Usuario E-DATA.request(DATO) E-DATA.indication(DATO) Enlace Enlace F-DATA.ind(SEC,DATO) F-DATA.req(SEC, DATO) F-DATA.ind(SEC,ACK) F-DATA.req(SEC, ACK) Medio físico 15 Vocabulario y formato de mensajes - Se define para cada nivel - Dos tipos de protocolos en cuanto formato de mensajes: - protocolo orientado a bit Tx datos como flujo de bits sin longitud definida (flags de inicio y fin). Ej: HDLC - protocolo orientado a carácter Tx datos en bloques de n bits (o múltiplos de n) (caracteres marcadores de inicio y fin). Ej: Carácter STX(Start of TeXt) y ETX (End of TeXt) STX c1 c2 c3 ... cn ETX Character stuffing DLE STX c1 c2 DLE DLE ... cn DLE ETX 16 Vocabulario y formato de mensajes - Formato = { cabecera, datos, cola } • cabecera = { tipo, destino, nº secuencia, longitud } » tipo = { ack, nack, err } • cola = { checksum, dirección de retorno } 17 Reglas de procedimiento - Procesos concurrentes - Necesitamos herramientas más formales: diagrama temporal, máquina de estados finitas, ESTELLE... evento0[condicion0]/accion0 evento1[condicion1]/accion1 Estado i Estado i+1 evento2[condicion2]/accion2 18 Diseño estructurado de protocolos 1. Simplicidad 2. Modularidad 3. Protocolos bien formados - NO sobre-especificado - NO incompleto - Acotado - Autoestabilizado - Autoadaptable 4. Robustez - Evolución automática con la tecnología 5. Consistencia - Bloqueos - Bucles infinitos - Terminaciones impropias 19 Diseño estructurado de protocolos Las diez reglas de diseño: 1. Asegurarse de definir bien todos los aspectos del protocolo 2. Definir el servicio a realizar por cada nivel antes de elegir estructuras 3. Diseñar antes funcionalidad externa que la interna 4. Mantener el diseño simple 5. No conectar lo que es independiente 6. Obviar aquello que es innecesario 7. Validar el diseño antes de implementarlo 8. Implementar diseño, medir su rendimiento y optimizarlo 9. Comprobar que la versión final cumple los criterios de diseño 10. Nunca saltarse las 7 primeras reglas 20 Mecanismos básicos de los protocolos 1. Control de secuencia y control de errores - Redundancia - Tipos de códigos - Códigos de paridad - Corrección de errores (varios métodos) 2. Control de flujo - protocolo simple sin control de flujo - protocolo Xon-Xoff - protocolo de parada y espera - protocolo de parada y espera con timeout - protocolo de bit alternante - protocolos de ventana 21 Control de secuencia y de errores - Mayor número de errores debido a la comunicación que al hardware P(circuitería)<10-15 P(F.O.) ≈10-9 P(coax.) ≈10 -6 P(tlf.) ≈10 -4 ó 10 -5 - Causas principales de error: - limitaciones en el ancho de banda del canal (distorsión lineal) - eco, ruido blanco, impulsos electromagnéticos... (no lineal) - El efecto de esos ruidos se puede paliar hasta cierto punto con hardware y el resto por software (no se eliminan) - El esquema de control de error debe ser adecuado a las características de la línea de comunicaciones: . Si un canal sólo tiene inserciones, no sirve un protocolo que proteja contra eliminaciones . Si un canal produce errores simples, puede ser más adecuado usar un protocolo más simple . Si el error del canal es < que el de la circuitería, el mecanismo de control sólo degrada rendimiento del sistema y disminuye 22 fiabilidad del protocolo Control de secuencia y de errores. Redundancia - Añadir información redundante a los mensajes - Dos formas de gestionar los errores: - Control de errores hacia delante Ö códigos correctores - Control de errores por realimentación Ö códigos detectores p≡probabilidad de error en la transmisión de un mensaje f ≡fracción de errores que capta el método de control error residual=p·(1-f) - Si p↓ Ö no código corrector (ralentiza las comunicaciones) Si p↑ Ö no código detector (las reTx también podrían ser erróneas) - También depende del coste: si p↓ y coste de reTx↑ Ö código corrector - Sistema mixto: el receptor corrige los errores más frecuentes y solicita reTx de los mensajes alterados por errores menos frecuentes 23 Control de secuencia y de errores. Tipos de códigos • Códigos de bloque: . palabras de código de misma longitud y codificación estática • Códigos de convolución: . palabras de código dependen del mensaje actual y de anteriores, el codificador cambia su estado con cada mensaje procesado, longitud de palabras suele ser constante Se pueden clasificar en: ¾Códigos lineales: combinación lineal de palabras válidas ¾Códigos cíclicos: rotación cíclica de código válido ¾Códigos sistemáticos: mensaje original + bits de comprobación Razón de código=d/(d+e) d ≡ nº de bits de información e ≡ nº de bits redundantes )A mejor calidad de código Ö menor razón de código 24 Control de secuencia y de errores. Corrección de errores Código válido Código alterado • Los códigos se eligen de forma que haya varios bits de diferencia entre dos palabras válidas • Rxor reconstruye mensaje, asociándole la palabra de código más cercana • Razón de código de sistema corrector < razón de código de sistema detector • Se usa sistema corrector si hay: – un retraso de transmisión alto – ausencia de canal de retorno 25 – una tasa de errores alta Control de secuencia y de errores. Código corrector basado en paridad LRC D= 1 0 0 0 1 0 0 0 A= 1 0 0 0 0 0 1 0 T= 1 0 1 0 1 0 0 1 A= 1 0 0 0 0 0 1 0 VRC 0 0 1 0 0 0 0 1 Permite la corrección de 1 bit LRC= Longitudinal Redundancy Check VRC= Vertical Redundancy Check d=28 bits e=12 bits Razón de código=28/(28+12)=0.7 26 Control de secuencia y de errores. Método Van Lint Código XX 0000 CX 1001 XC 0111 CC 1110 en transmisor Resultado en receptor Códigos válidos - A tiradas de una moneda por segundo - canal de 2A bps - tasa de errores de 2·10-2 q=0.98 p=0.02 Ö cada par de tiradas se codifica con 4 bits Ö se logra la mitad de tasa de errores Resultado 0000 1000 0100 0010 XX 1001 0001 1101 1011 CX 0111 1111 0011 0101 XC 1110 0110 1010 1100 CC P(no error)=q4+3·p·q3 P(error)= 1-P(no error) 12 de las 16 combinaciones se “desperdician” El código resiste errores en 1 bit de los 3 primeros de la palabra 27 Control de secuencia y de errores. Distancia de Hamming • Distancia de Hamming: diferencia de bits mínima entre dos palabras de un código. XOR(2 palabras de código) • Si la distancia de Hamming de un código es n, se puede: – Detectar errores de hasta n-1 bits – Corregir errores de hasta (n-1)/2 bits • ↑distancia de Hamming Ö ↑fiabilidad de protocolo • Límite de Shannon: S C = B log 2 (1 + )bps N 28 Control de secuencia y de errores. Código de Hamming • Para que un código de k bits de datos y r bits redundantes sea capaz de corregir errores simples debe cumplir: k+r+1≤ 2r • Los códigos que verifican lo anterior con r mínimo se denominan óptimos • Ejemplo: k=7 (ASCII), r mínimo / k+r+1≤ 2r Ö r=4 Ö n=11 ‘a’≡ 1 1 0 0 0 0 1 1 2 3 4 5 6 7 8 9 10 11 1 1 0 0 0 0 1 Los bits redundantes ocupan las posiciones potencia de 2 (1,2,4,8), el resto son los bits de datos 2928-2 Control de secuencia y de errores. Código de Hamming (II) C1=fp(b1,b3 ,b5 ,b7 ,b9,b11) C2=fp(b2,b3 ,b6 ,b7 ,b10,b11) C3=fp(b4,b5 ,b6 ,b7) C4=fp(b8,b9 ,b10 ,b11) XOR 1·20 +1·21 +1·23 +0·24 = 7 Ö posición del error 30 Control de secuencia y de errores. Ráfagas • La mayor parte de las veces los errores no se producen de forma aislada. • Mecanismos correctores tolerantes a ráfagas: - Códigos de interlineado - Reed-Solomon • k datos de n bits Ö matriz kxn • se Tx por columnas Ö corrige ráfagas ≤ k • CDs, DVDs, códigos de barras, comunicaciones inalámbricas, comunicaciones satélite, TV digital, modems de alta velocidad • Se ha demostrado que en la mayoría de los casos es mejor el control por realimentación (↑aprovechamiento del canal y ↓error residual). 31 Control de secuencia y de errores. Código de redundancia cíclica (CRC) • Mensajes de n bits se tratan como polinomios de grado n-1: 101 = x2 + 1. • El código de comprobación se obtiene dividiendo el polinomio del mensaje por un polinomio generador G => se halla el resto y se le añade al mensaje • El mensaje recibido es correcto si el divisible por G. No se detecta el error cuando es divisible por G. • Ejemplos de polinomios: – CRC-12: x12+x11+x3+x2+1 T=P·xr -R P·xr G – CRC-16: x16+x15+x2+1 – CRC-CCITT: x16+x12+x5+1 Detecta ráfagas ≤ r • CRC-CCITT detecta: – Cualquier número impar de errores simples – Todos los errores dobles – Todas las ráfagas de 16 o menos bits – El 99’997% de las ráfagas de 17 bits – El 99’998% de las ráfagas de 18 o más bits 32 Control de secuencia y de errores. Checksum aritmético • Método de Fletcher (1982) • Sólo sumas y módulos, es simple, pero con buena detección de errores Menor carga de procesamiento Menor latencia • Inferior al CRC, detecta ráfagas de 1 a 14 bits (excepto de 8) • Estandarizado como parte de protocolo estándar transporte (clase 4) de ISO unsigned short cksum (register unsigned char *s, register int n) { register int c0=0, c1=0; do { c0 = (c0 + *s++) % 255; c1 = (c0 + c1) % 255; }while (--n>0); return (unsigned short) (c1<<8+c0); } 33 Control de flujo • Objetivos: – Asegurarse que no se transmiten los datos más rápido de lo que se puede procesar. – Optimizar el uso del canal. – Evitar saturar el canal. – Proteger la transmisión contra borrado, inserción, duplicación y reordenamiento de mensajes. 34 Control de flujo • • • • Protocolo simple sin control de flujo Protocolo Xon-Xoff Protocolo de parada y espera Protocolo de parada y espera con timeout • Protocolo de bit alternante • Protocolo de ventana 35 Control de flujo • Protocolo simple sin control de flujo – OK si Rxor más rápido que Txor Ö se viola el principio “no hacer suposiciones de la velocidad relativa de procesos concurrentes” – Rx es más costoso que Tx • Protocolo Xon-Xoff – – – – – No requiere negociación previa Dúplex Si se pierde Xon Ö bloqueo de los cuatro procesos No se protege contra la saturación de forma efectiva No se protege contra la pérdida de mensajes 36 Control de flujo. Protocolo simple sin control de flujo Transmisor Receptor Tx Rx E-DATOS.request / F-DATOS.request F-DATOS.indication / E-DATOS.indication 37 Control de flujo. Protocolo Xon-Xoff E-DATOS.request/encolar XOFF/- Transmisor Esperando XON/- XOFF/- Transmitiendo desencolar F-DATOS.request 38 E-DATOS.request/encolar Control de flujo. Protocolo Xon-Xoff F-DATOS.indication/ encolar; preparar_ind ind_preparada[n>min]/ desencolar; E-DATOS.indication Receptor Procesando ind_preparada[n<=min]/ XON; desencolar; E-DATOS.indication F-DATOS.indication[n>=max]/ XOFF; desencolar; preparar_ind Recibiendo y Procesando F-DATOS.indication/encolar; preparar_ind es un evento interno que indica que el proceso de formación ha concluido y se puede pasar hacia el nivel superior ind_preparada/desencolar; E-DATOS.indication es una acción que inicia el proceso de formación de la primitiva de indicación que va hacia el nivel superior 39 Control de flujo. Protocolo Xon-Xoff Transmisor Xoff/ - Esperando E-DATOS.request [Xof] / - Xon/- Tx E-DATOS.request [Xon] / F-DATOS.request 40 Control de flujo. Protocolo Xon-Xoff Transmisor F-DATOS.indication(Xoff)/- Esperando E-DATOS.request [puedo_Tx=Xoff]/ - F-DATOS.indication(Xon)/- Tx puedo_Tx: variable que almacena el último mensaje de control (Xon, Xoff) que recibió el transmisor E-DATOS.request [puedo_Tx=Xon] / F-DATOS.request 41 Control de flujo. Protocolo Xon-Xoff Receptor Cola de mensajes por procesar en receptor: principio cola fin cola fin cola principio cola MÍNIMO XOFF MÁXIMO n XON n: cantidad de mensajes que quedan por procesar en la cola del receptor 42 Control de flujo. Protocolo Xon-Xoff F-DATOS.indication [n>max] / E-DATOS.indication; n-- Receptor Sólo procesando (Xoff) F-DATOS.indication [n>max] / Xoff; E-DATOS;n-- F-DATOS.indication [n<max] / Xon; E-DATOS.indication; n-- Rx y procesando mensajes F-DATOS.indication [n<max & n<min] / Xon; E-DATOS.indication; n-- F-DATOS.indication [n<max & n>min] / E-DATOS.indication; n-43 Control de flujo. Protocolo Xon-Xoff F-DATOS.indication [n≥max] / F-DATOS.request(Xoff); E-DATOS.indication; n-- [n≥max] / E-DATOS.indication; n-- Sólo procesando (Xoff) F-DATOS.indication [n<max] / F-DATOS.request(Xon); E-DATOS.indication; n-- Receptor F-DATOS.indication [n≥max] / F-DATOS.request(Xoff); E-DATOS.indication;n-- Rx y procesando mensajes F-DATOS.indication [n<max & n>min] / E-DATOS.indication; n-- F-DATOS.indication [n<min] / F-DATOS.request(Xon); E-DATOS.indication; n-- 44 Control de flujo • Protocolo de parada y espera – – – – Desaparece problema de saturación en Rxor Si se pierde un mensaje, se bloquea Se desaprovecha el canal Retraso de 2·t+a-p por cada mensaje enviado • t: tiempo de propagación • a: tiempo que tarda el receptor en aceptar el mensaje • p: tiempo que tarda el emisor en prepararlo • Protocolo de parada y espera con timeout – Protege contra la pérdida de tramas – Si tanto Txor como Rxor pueden iniciar reTx, pueden perderse ambas y asociar equivocadamente cada mensaje con otro ack – Una solución: numerar mensajes y ack’s 45 Control de flujo. Protocolo parada y espera Transmisor Esperando E-DATOS.request / F-DATOS.request F-DATOS.indication / - Tx Receptor Rx F-DATOS.indication / E-DATOS.indication; F-DATOS.request 46 Control de flujo. Protocolo parada y espera con timeout y errores de canal F-DATOS.indication [CRC no OK] / - Transmisor Timeout / F-DATOS.request Esperando E-DATOS.request / F-DATOS.request F-DATOS.indication [CRC OK] / - Tx Receptor F-DATOS.indication [CRC no OK] / - Rx F-DATOS.indication [CRC OK] / E-DATOS.indication F-DATOS.request 47 Control de flujo. Protocolo parada y espera con timeout y errores de canal Ejemplo: Duplicación de mensajes en el receptor Receptor Emisor ste Mensaje que se pierde mensaje i Retransmite de nuevo el mensaje Retransmite el último ack (del mensaje i-1) Timeout Cuando este ack llega al emisor, éste ya ha retransmitido el mensaje i, pero vuelve transmitirlo ste ste mensaje i ack i-1 ack i Timeout Acepta mensaje i Acepta mensaje i Se duplica el mensaje i en el receptor 48 Control de flujo • Protocolo de bit alternante – Timeout + nº de secuencia de 1bit – Puede fallar si se produce un retraso demasiado grande en el envío del ack desde el Rxor • Protocolo de ventana – En la fase de establecimiento de conexión se negocia tamaño de la ventana (W) – El Txor puede enviar W mensajes sin esperar acuse de recibo del Rxor – Optimiza canal en los que el tiempo de tránsito es alto – Control de error en ventana deslizante: • Los reconocimientos tienen que numerarse • ACK1 significa que se recibió correctamente la 0 • Si se pierde un mensaje y llega el siguiente: – se rechaza: vuelta a atrás – se acepta: reTx selectiva • Reconocimientos globales: ACK4 implica Rx OK de 1..3 49 Control de flujo • Protocolo de ventana (cont.) – Ventana de Tx: mensajes enviados pendientes de ack (de tamaño variable, pero limitada a W) – Ventana de Rx: nºs de secuencia que Rxor espera Rx (de tamaño fijo) – Para el rango de los nºs de secuencia debe cumplirse: • rango(nºs secuencia)<=K+N • donde K es el tamaño de la ventana de Rx y N el tamaño máximo de la ventana de Tx • en caso contrario podrían darse duplicaciones 50 Control de flujo. Protocolo bit alternante Transmisor Número de secuencia (0,1) Origen del mensaje (A, B) Receptor ReTx dato1 ReTx ack1 B0 Listo B1 A1 B1 Espera ack1 Acepta dato1 A1 A0 Espera ack0 B0 Busca ste. B1 Espera dato1 A0 transmisión A1 Listo B0 B1 A0 A1 Acepta Listo dato0 A0 ReTx dato0 B0 ReTx ack0 A y B son procesos 51 Control de flujo. Protocolo bit alternante Transmisor Receptor a(0) ack de a b(1) timeout retraso ack de b c(0) ack de b c(0) 52 Control de flujo. Protocolo de ventana Transmisor A Nº sec Nº ack Receptor B 0 3 A0 1 3 A1 2 3 A2 B0 3 3 A3 Nº sec Nº ack 0 3 A4 1 3 A5 2 3 A6 3 3 A7 Nº sec Nº ack 0 0 B1 1 1 B2 2 2 B3 3 3 Hasta que no llega el ack de A0, el emisor no puede seguir transmitiendo 53 Control de flujo. Protocolo de ventana Transmisor A Nº Nº sec ack A0 0 3 A1 Receptor B Nº Nº sec ack 1 3 A2 B0 2 3 0 3 Nº B1 B2 0 3 Nº A3 1 1 sec ack A4 B3 2 2 0 3 A5 3 3 1 3 A6 2 3 3 A7 3 timeout Se retransmite Nº Nº sec ack B1 B2 0 0 1 1 B3 2 2 3 3 B0 A los acepta y piensa que los datos de la ventana anterior han llegado bien 54 Control de flujo. Protocolo de ventana Nº Nº sec ack 0 3 Transmisor A Receptor B A0 1 3 A1 A2 2 3 3 A3 3 B0 Nº Nº sec ack B1 0 0 B2 1 1 B3 2 2 3 3 Nº Nº sec ack B1 B2 0 0 1 1 B3 2 2 3 3 timeout Se retransmite Nº Nº sec ack A0 0 3 A1 1 3 A2 2 3 3 A3 3 B0 B los acepta y piensa que son los datos de la ventana siguiente , y sin embargo, están duplicados 55 Control de flujo. Protocolo de ventana con detección de errores Transmisor 5/4 1/1 2/1 4/5 Transmitiendo 6/5 -/3 3/2 Límite ventana 3/1 4/5 5/4 2/1 1/1 Espera ack 56 Control de flujo. Protocolo de ventana con detección de errores Notación v ≡ nº de mensajes pendientes de ack w ≡ tamaño de la ventana de Tx s ≡ nº de secuencia del último mensaje enviado a ≡ nº de secuencia del mensaje más antiguo enviado y sin confirmar dato[x] ≡ almacena el dato que fue enviado con nº de secuencia x d ≡ dato que se quiere enviar p ≡ nº de secuencia recibido en ack M ≡ rango de números de secuencia disponible Acciones: pendiente[i] ≡ el mensaje con nº de sec i se apunta como enviado y pendiente de ack pendiente[i] ≡ el mensaje con nº de sec i se apunta como confirmado v+ ≡ se incrementa en uno el nº de mensajes pendientes de confirmación v- ≡ se decrementa en uno el nº de mensajes pendientes de confirmación 57 Control de flujo. Protocolo de ventana con detección de errores 1/1 Transmisor 2/1 3/2 4/3 Tx Límite ventana 4/3 6/5 3/2 5/4 Entradas 1. E-DATOS.request(d)[v< w-1] (se quieren enviar datos y caben más mensajes en la ventana) 2. E-DATOS.request(d)[v= w-1] (se quieren enviar datos y se llega al límite de la ventana) 3. F-DATOS.indication(ack,p) (llega un acuse de recibo positivo del mensaje con nº sec p) 4. F-DATOS.indication(nack,p) (llega un acuse de recibo negativo del mensaje con nº sec p) 5. F-DATOS.indication(-,p) no OK (llega una indicación errónea) 6. Timeout (expira el temporizador de retransmisión) 6/5 5/4 Salidas 1. F-DATOS.request(d,s); v+ ; pendiente[s]; dato[s]=d; s=(s+1)%M (envía dato con nº de sec s, incrementa el nº de mensajes pendientes de confirmación, apunta el nº de sec como pendiente, almacena el dato enviado con ese nº de sec y se prepara el nº de sec para el siguiente mensaje) 2. para i desde a hasta p en módulo M hacer: v-; pendiente[i] (decrementa el nº de mensajes pendiente de confirmación en función de los que se hayan confirmado y los marca como confirmados) 3. F-DATOS.request(dato[p],p) (retransmite dato con sec=p) 4. Nada 5. para i desde a hasta s en módulo M hacer: F-DATOS.request(dato[i],i) 58 (retransmite todos los datos desde el último que no fue confirmado) Control de flujo. Protocolo de ventana con detección de errores Transmisor 1/1 5/4 2/1 4/5 Tx 6/5 -/3 3/2 Límite ventana 3/1 4/5 1/1 Espera ack Entradas 1. E-DATOS.request [n<W] 2. E-DATOS.request [n=W] 3. F-DATOS.indication (dato) [CRC & Nºsec & Nºack OK] 4. F-DATOS.indication [CRC || Nºsec || Nºack KO] 5. timeout 6. F-DATOS.indication (ack) [CRC & Nºsec & Nºack OK] 2/1 5/4 Salidas 1. Toma 3-PDU, forma 2-PDU; F-DATOS.request 2. Extrae 3-PDU; E-DATOS.indication 3. Forma 2-PDU; F-DATOS.request 4. Forma 2-PDU; F-DATOS.request 5. nada Detección y corrección de errores 59 Control de flujo. Protocolo de ventana con ack global Transmisor A Nº sec Nº ack Receptor B 0 3 A0 1 3 A1 2 3 A2 B0 3 3 A3 Nº sec Nº ack 0 3 A4 1 3 A5 2 3 A6 3 3 A7 Nº sec Nº ack 0 0 B1 1 1 B2 2 2 B3 3 3 Hasta que no llega el ack de A0, el emisor no puede seguir transmitiendo 60