Detección y Corrección de Errores Comunicación de datos Realizado por: Antonio Russoniello 11-01-16. V1.0 1 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES Las técnicas de control de errores son necesarias para la prevención frente a pérdidas y daños en los datos y la información de control. El control de errores se implementa generalmente como dos funciones separadas Detección de errores y Retrasmisión. Para conseguir la detección de errores el emisor inserta una código de detección de errores en la PDU transmitida, este código es una función de otros bits en la PDU. El receptor comprueba el valor del código en la PDU recibida. Si se detecta un error, el receptor descarta la PDU. En caso de no recibir el acuse de recibo de la PDU en un tiempo razonable, el emisor la retransmite. Algunos protocolos emplean también un código de Corrección de Errores que permite que el receptor no solo detecte si no que además pueda corregir los errores en algunos casos. 11-01-16. V1.0 2 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES Tipos de Errores: Error de bits: significa que únicamente un bit de una unidad de datos determinada (tal como byte, carácter o paquete) cambia de 0 a 1 o de 1 a 0. Enviado: 00000010 Recibido: 00001010 Error de ráfaga: significa que dos o más bits de la unidad de datos han sido modificados. La longitud del error de ráfaga se mide desde el primero hasta el último bit errado Enviado: 0100010001000011 Recibido: 0101110101100011 Longitud del error de ráfaga = 8 bits En una transmisión el número de bits afectados depende de la tasa de datos y la duración del ruido. Por ejemplo: si se están enviando datos a 1Kbps, un ruido de 1/100 seg puede afectar a 10 bits, si se envían datos a 1Mbps el mismo ruido podría afectar a 10.000 bits. 11-01-16. V1.0 3 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES Detección vs Corrección: • Detección: solo determina si ocurre un error o no. • Corrección: permite que el receptor no solo detecte si no que pueda corregir los errores en algunos casos, para esto se necesita saber el número exacto de bits que se han dañado y su posición dentro del mensaje. Redundancia: para poder detectar o corregir errores, es necesario enviar algunos bits extra junto con los datos. Estos bits redundantes son añadidos en el emisor y eliminados en el receptor. Su presencia permite al receptor detectar o corregir los bits con errores. 11-01-16. V1.0 4 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES Codificación de Bloques: Es una técnica en donde se divide un mensaje en bloques de k bits, denominados palabras de datos. Se añaden r bits redundantes a cada bloque hasta conseguir una longitud de n = k + r. Los bloques resultantes de n bits se denominan palabras código. Nomenclatura C(n,k). Con k bits se puede crear una combinación de 2k palabras de datos; con n bits, se puede crear una combinación de 2n palabras de código, como n > k el número posible de palabras código es mayor que el número posible de palabras de datos. Todas las palabras de código asociadas a cada palabra de dato es conocido como código bloque. El proceso de codificación de bloques es uno a uno; la misma palabra de datos siempre se codifica como la misma palabra código. Esto significa que se tienen 2n - 2k palabras código que no se utilizan. Estos códigos no utilizados son denominados inválidos o ilegales. Para que un código bloque sea útil todas las palabras códigos deben ser distintas. Códigos lineales: un código es lineal por bloques cuando la combinación de palabras código da otra palabra código válida. 11-01-16. V1.0 5 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES Codificación de Bloques: Ejemplo: la codificación de bloques 4B/5B k = 4 y n = 5. por lo tanto hay 2k = 16 palabras de datos y 2n = 32 palabras de código, 16 palabras de código se utilizan para la transferencia de mensajes y el resto se utilizan para otros objetivos o no se utilizan. ¿Cómo pueden detectarse errores utilizando codificación de bloques? Deben cumplirse dos condiciones para detectar un cambio en la palabra código original: • El receptor tiene una lista de palabras código válidas • La palabra código original ha cambiado a una inválida 11-01-16. V1.0 6 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES Proceso de detección de errores en la codificación de bloques 11-01-16. V1.0 7 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES Pasos para detección de errores en la codificación de bloques: 1. El emisor crea las palabras código a partir de las palabras de datos utilizando un generador que aplica las reglas y procedimientos de la codificación. 2. Cada palabra código puede cambiar durante la transmisión (si ocurre un error). 3. Si la palabra código recibida es la misma que una de las palabras código válidas se acepta la palabra código y la palabra datos se extrae para su uso. 4. Si la palabra recibida no es válida, se descarta. 5. Si la palabra recibida coincide con una palabra código válida, el error no podrá ser detectado. Este tipo de detección puede solo detectar errores en un único bit. 11-01-16. V1.0 8 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES Proceso de detección de errores en la codificación de bloques: Método del bit de paridad: se agrega un bit 1 a la palabra de datos para que la suma de bits 1 de como resultado un número par. Ejemplo: asuma k = 2 y n = 3 (23 = 8 posibles códigos, se usan solo 4). Asumir que se envía la palabra 01 como 011 y la envía al receptor. 1. El receptor recibe 011. Es un código válido, el receptor extrae la palabra 01 2. El código se daña y se recibe 111 (se daña el bit de la izquierda, el código no es válido y se descarta. 3. El código se daña y se recibe 000 (se dañan dos bits de la derecha) el código recibido es válido, el receptor extrae la palabra 00. Palabras de datos Palabras código 00 000 01 011 10 101 11 110 Inconvenientes: errores en dos bits no hacen posible que el error sea detectado y por lo tanto pueden tomarse códigos errados como válidos 11-01-16. V1.0 9 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES Corrección de errores en la codificación de bloques : se agregan más bits redundantes para la corrección de errores que para la detección. El proceso de comprobación realiza la corrección 11-01-16. V1.0 10 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES Corrección de errores en la codificación de bloques Ejemplo: asuma k = 2 (22 = 4 posibles datos) y n = 3 (23 = 8 posibles códigos, se usan solo 4, asuma las palabras código dadas en el ejemplo, luego se estudiará como estas son generadas). Se añaden 3 bits redundantes (n) a cada palabra código de 2 bits obteniendo códigos de 5 bits. Se envía la palabra dato 01 y se transmite su correspondiente palabra código 01011, en la transmisión ocurre un error y la palabra cambia a 01001 (ocurre un error en el segundo bit de la derecha). El receptor al recibir el código verifica que no está en su tabla y por lo tanto detecta que hubo un error. El receptor asume que solo se ha dañado un bit y ejecuta los siguientes pasos: 1. 2. Se compara el código recibido con el primer código de la tabla hay dos bits diferentes , entonces no es el código, esto ocurre para la tercera y cuarta opción de la tabla (cambian dos bits) La palabra código recibida solo tiene un bit diferente a la segunda opción de la tabla por lo tanto procede a realizar la corrección. 01001 01011 11-01-16. V1.0 Palabras de datos Palabras código 00 00000 01 01011 10 10101 11 11110 11 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES Distancia Hamming La distancia Hamming entre dos palabras (del mismo tamaño) es el número de diferencias entre los bits correspondientes. La distancia Hamming entre dos palabras x e y se indica como d(x,y). La distancia se puede calcular fácilmente aplicando la operación XOR (OR exclusiva) sobre las dos palabras y contar el número de 1 resultantes. La distancia es un valor mayor que 0. Ejemplo: Código enviado 00000 código recibido 01101, hay tres bits con errores y la distancia Hamming entre las dos es d(00000,01101) = 3. 11-01-16. V1.0 12 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES Mínima distancia Hamming para detección de errores Si se deseada detectar hasta S errores se requiere una distancia mínima dmin = S + 1 de forma que el código recibido no coincida con un código válido. Mínima distancia Hamming para la corrección de errores Para la corrección de S errores se requiere una dmin = 2S + 1. Ejemplo: Suponga que se quiere transmitir un bloque de datos con longitud k bits. En lugar de transmitir cada bloque de k bits se asigna cada secuencia de entrada a una única palabra codificada de n bits. Para k = 2 y n = 5 se puede realizar la siguiente asignación: Palabras de datos Palabras código 00 00000 01 00111 10 11001 11 11110 11-01-16. V1.0 13 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES Palabras de datos Palabras código 00 00000 01 00111 10 11001 11 11110 Ahora asuma que se recibe una palabra código con el patrón de bits 00100. Esto no es una palabra código válida por lo que el receptor detecta el error. Calculemos la distancia Hamming: d(00000,00100) = 1; d(00111,00100) = 2; d(11001,00100) = 4; d(11110,00100) =3 Se selecciona la distancia mínima: d(00000,00100) = 1 => se deduce que la palabra código más probable enviada fue 000000, por lo tanto la palabra de dato enviada es 00. 11-01-16. V1.0 14 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Códigos de Paridad: Es un código de detección de errores. Una palabra de k bits se convierte en un código de n bits con n = k + 1. El bit extra, denominado bit de paridad se selecciona de forma que el número de 1 en el código sea par (paridad par). La mínima distancia Hamming para esta categoría es dmin = 2, es decir el código puede detectar errores en 1 bit no puede corregir cualquier error. Existe otro método en donde la paridad es impar, en este método un número impar de errores no se puede detectar. Desventaja: en paridad par un número par de errores no se puede detectar y en paridad impar no podrán detectarse un número impar de errores. Algoritmo de código de paridad par: 1. El emisor al enviar el código agrega un 1 (bit de paridad) a la palabra dato si la cantidad de unos del dato es impar, si la cantidad de unos es par el bit de paridad se coloca en 0, es decir se realiza la operación r0 = d3 + d2 + d1 + d0. 2. El receptor recibe palabra código (dato + bit de paridad) c = d3d2d1d0r0 (d: datos y r: bit de paridad) y realiza la operación So = d3 + d2 + d1 + d0 + r0 (S es un bit que lleva el nombre de Síndrome). Si S = 0 entonces no hay error en el código el dato se acepta, si S = 1 entonces hay un error, el dato se descarta. 11-01-16. V1.0 15 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Código Hamming - técnica FEC (forward error correction) ¿cómo manipular los bits para descubrir en que estado se ha producido el error? Explicación del código Se tienen r: redundancia m: datos m + r : código De la siguiente ecuación se obtiene r: 2𝑟 ≥ 𝑚 + 𝑟 + 1 𝑅𝑒𝑙𝑎𝑐𝑖ó𝑛 𝑒𝑛𝑡𝑟𝑒 𝑚 𝑦 𝑟 Ejemplo: si m = 1 bit 2𝑟 ≥ 𝑚 + 𝑟 + 1 Se busca un valor de r que cumpla con la ecuación: 21 ≥ 1 + 1 + 1 (𝑝𝑎𝑟𝑎 𝑟 = 1; 2 ≥ 3 ⇒ 𝑙𝑎 𝑒𝑐𝑢𝑎𝑐𝑖ó𝑛 𝑛𝑜 𝑠𝑒 𝑐𝑢𝑚𝑝𝑙𝑒) 22 ≥ 1 + 2 + 1 (𝑝𝑎𝑟𝑎 𝑟 = 2; 4 ≥ 4 ⇒ 𝑙𝑎 𝑒𝑐𝑢𝑎𝑐𝑖ó𝑛 𝑠𝑖 𝑠𝑒 𝑐𝑢𝑚𝑝𝑙𝑒) Entonces para m = 1 bit, r = 2 bits Para m = 7 bits se obtiene r = 4 bits. 11-01-16. V1.0 16 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Algoritmo del Código de Hamming Obtener r: 2𝑟 ≥ 𝑚 + 𝑟 + 1 Luego los bits de redundancia se intercalan en la palabra dato en las posiciones que son potencia de 2, es decir en las posiciones 1, 2, 4, 8, 16, 32, … donde d: datos y r: redundancia Las combinaciones usadas para calcular cada uno de los cuatro valores de r para cada una de la secuencia de datos es: r1: posición de bit -> 3,5,7,9,11 r2: posición de bit -> 3,6,7,10,11 r4: posición de bit -> 5,6,7 r8: posición de bit -> 9,10,11 Los bits utilizados para calcular r1 son aquellos cuya representación binaria incluye un 1 más a la derecha, para r2 los que tienen un 1 en el segundo bit, etc. Para calcular el valor de los r se calcula el valor de paridad de cada combinación de bit que le corresponda. 11-01-16. V1.0 17 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Algoritmo del Código de Hamming Regla “visual” general para construcción de la tabla: 11-01-16. V1.0 18 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Código de Hamming – Ejemplo 1. Construcción del código (asuma dato: 1001101) r1 = d3 + d5 + d7 + d9 + d11 = 1+0+1+0+1=1 11-01-16. V1.0 19 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Código de Hamming – Ejemplo 2. Detección y corrección de error Se envía el dato y ocurre un error en un bit: S1 = r1+d3+d5+d7+d9+d11 = 1+1+0+0+0+1 = 1 S8 S4 S2 S1 11-01-16. V1.0 Se calculan los Síndrome sumando los bit (esto es equivalente a calcular el valor de paridad) 20 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Verificación de Redundancia Cíclica (CRC): Técnica muy potente de verificación de redundancia. Está basada en división binaria. A diferencia otros métodos que suman bits para conseguir paridad, en este método se añade una secuencia de bits redundantes denominados CRC ó resto CRC al final de la unidad de datos de forma que los datos resultantes sean divisibles exactamente por un número binario predeterminado. En el destino la unidad de datos recibida es dividida por este mismo número, si en la operación no hay resto quiere decir la unidad de datos es correcta, en otro caso los datos han sufrido daño y son rechazados y el receptor podría solicitar retransmisión. Algoritmo de CRC: 1. Se añade una tira de n ceros a la unidad de datos. El número n es uno menos que el número de bits en el divisor predefinido (el divisor tiene n + 1 bits) 2. La nueva unidad de datos se divide por el divisor usando un proceso denominado división binaria. El resto resultante de esta división es la CRC. 3. La CRC de n bits obtenida sustituye a los ceros añadidos al final de la unidad de datos. Nota: una CRC podría estar conformada por ceros. 4. La unidad de datos llega al receptor con su CRC, toda la tira (dato + CRC) es tratada como una unidad y es dividida por el mismo divisor que se usó para hallar el resto CRC. 5. Si la tira llega sin error el comprobador obtiene un resto 0 y la unidad de datos se acepta, en otro caso la división arrojaría un resto no nulo y por lo tanto los datos han sido dañados. 11-01-16. V1.0 21 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Ejemplo CRC: Calcular CRC usando divisor igual a 1101 y dato 100100 En la sustracción usamos la resta binaria sin acareo, esto es equivalente a aplicar el operador XOR 11-01-16. V1.0 22 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Generación del divisor (CRC) El generador CRC (el divisor) no se suele representar como una tira de unos y ceros sino como un polinomio algebraico. Existe una relación entre el polinomio y su representación binaria, cada potencia presente en el polinomio es equivalente a un 1 binario y aquellas potencias no presentes son equivalentes a 0 binario. 𝑥8 + 𝑥5 + 𝑥3 + 𝑥 + 1 = 1 0 0 1 0 1 0 1 1 En el ejemplo anterior las potencias que no aparecen 𝑥 7 , 𝑥 6 , 𝑥 4 , 𝑥 2 son interpretadas como un bit 0. La selección del polinomio debe cumplir al menos las siguientes propiedades: 1. No debería ser divisible por x (esto garantiza detección de todos los errores de ráfaga de longitud igual al grado del polinomio) 2. Debería ser divisible por x +1 (garantiza que se detectan todos los errores de ráfaga que afectan a un número impar de bits) Por ejemplo no podemos elegir polinomio x (binario 10) o 𝑥 2 + 𝑥 (binario 110) como polinomios porque son divisibles por x. Si se puede elegir x + 1 (binario 11) porque es divisible por x+1 y no por x. 11-01-16. V1.0 23 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Generación del divisor (CRC) Ejemplo: calcular el Resto por notación polinomial. Palabra dato = 1001 => 𝑥 3 + 1 Divisor= 1011 => 𝑥 3 + 𝑥 + 1 La palabra dato aumentada (agregar la tira de n – 1 bits ceros donde n es la cantidad de bits del divisor) se obtiene desplazando a la izquierda la palabra 3 bits (tira de ceros), polinomiálmente esto se logra multiplicando el polinomio de la palabra dato por 𝑥 3 , dando domo resultado 𝑥 6 + 𝑥 3 𝑥 6 + 0𝑥 5 + 0𝑥 4 + 𝑥 3 + 0𝑥 2 + 0𝑥 + 0 𝑥3 + 𝑥 + 1 𝑥3 + 𝑥 𝑥 6 + 0𝑥 5 + 𝑥 4 + 𝑥 3 𝑥4 𝑥 4+ 𝑥 2+ 𝑥 𝑥 2 +𝑥 𝑥 2 + 𝑥 = 𝑥 2 +𝑥 + 0 = 110 (Resto = CRC). Palabra código = 𝑥 6 + 𝑥 3 + 𝑥 2 + 𝑥 11-01-16. V1.0 24 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Algunos polinomios utilizados para CRC: Utilizado en redes Ethernet Los números 8, 12, 16, 32 hacen referencia al tamaño del resto CRC 11-01-16. V1.0 25 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Suma de Comprobación de Errores (Checksum) Usados en protocolos alto nivel, no utilizado en el nivel de enlace. Pasos en el Emisor: 1. La unidad se divide en k secciones, cada una de ellas de n bits. 2. Todas las secciones se suman juntas usando suma binaria (debe considerarse el acarreo) 3. La suma obtenida en 2 se complementa, esta es conocida como la suma de comprobación (checksum) 4. La suma de comprobación es enviada con los datos. Pasos en el Receptor: 1. La unidad se divide en k secciones, cada una de ellas de n bits. 2. Todas las secciones se suman juntas usando complemento a uno para obtener la suma. 3. Se complementa la suma. 4. Si el resultado es 0, se aceptan los datos; en otro caso, se rechazan Operaciones usadas para el cálculo del Checksum: Suma binaria: ( A + B) 1 10011000 (A) 00010101 (+B) ------------10101101 11-01-16. V1.0 Complemento a Uno: el complemento a uno de cualquier número es otro número de manera tal que si sumamos los dos el resultado es igual a cero. Para complementar un número binario se invierte un 1 en 0 y un 0 en 1. En la aritmética de complemento a uno la suma de dos números de n bits da como resultado otro número de n bits. 26 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Suma de Comprobación de Errores (Checksum) Ejemplo: 11-01-16. V1.0 27 Comunicación de Datos DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES Suma de Comprobación de Errores (Checksum) Ejemplo: 11-01-16. V1.0 28