Detección y corrección de errores Protección de los Datos.- Los datos, cuya utilidad radica en su integridad y en su confidencialidad, están sujetos a dos tipos de amenaza a) Errores.- Las causas por las que la señal eléctrica se deteriora al viajar por el canal de comunicación son: • Distorsión, Atenuación, Limitación del ancho de banda, Ruido, Interferencia, Diafonía. Esta degradación de la señal puede hacer que recibamos en el receptor un carácter distinto al que fue emitido por el extremo transmisor, diremos entonces que se ha producido un error. Si bien es imposible evitar que ocurran errores, un buen diseño los minimizará. Primero tenemos que determinar la presencia de los errores, aquí es donde aparecen las técnicas de detección de errores, y luego tratar de corregirlos, lo que da lugar a la corrección de errores, la denominación genérica de estas técnicas es Control de Errores. Detección y corrección de errores b) Acciones no autorizadas.- Sobre el valor de la información, se tiene que asegurar que esta información: • No sea vista o copiada por personas no autorizadas ó no calificadas para ello • No sea alterada en ningún sentido(modificada, destruida, alterados los equipos donde reposa)por personas ó máquinas no autorizadas • No sea creada y/o difundida engañosamente simulando fuentes reales ó inexistentes. Esto de vital importancia dado el auge de Internet y de las conexiones en red y entre redes. De ello se ocupa la Seguridad en Red Detección y corrección de errores Las redes deben ser capaces de transferir datos de un dispositivo a otro con total exactitud, si los datos recibidos no son idénticos a los emitidos, el sistema de comunicación es inútil. Sin embargo, siempre que se transmiten de un origen a un destino, se pueden corromper por el camino. Los sistemas de comunicación deben tener mecanismos para detectar y corregir errores que alteren los datos recibidos debido a múltiples factores de la transmisión. La detección y corrección de errores se implementa bien en el nivel de enlace de datos o bien en el nivel de transporte del modelo OSI Tipos de errores.-Interferencias, calor, magnetismo, etc, influyen en una señal electromagnética, esos factores pueden alterar la forma o temporalidad de una señal. Si la señal transporta datos digitales, los cambios pueden modificar el significado de los datos. Los errores posibles son: Detección y corrección de errores Error de bit .- Únicamente un bit de una unidad de datos determinada cambia de 1 a 0 o viceversa. Un error de bit altera el significado del dato. Son el tipo de error menos probable en una transmisión de datos serie, puesto que el intervalo de bit es muy breve (1/frecuencia) el ruido tiene que tener una duración muy breve. Sin embargo si puede ocurrir en una transmisión paralela, en que un cable puede sufrir una perturbación y alterar un bit de cada byte. Detección y corrección de errores Error de ráfaga.-El error de ráfaga significa que dos o más bits de la unidad de datos han cambiado. Los errores de ráfaga no significa necesariamente que los errores se produzcan en bits consecutivos. La longitud de la ráfaga se mide desde el primero hasta el último bit correcto, algunos bits intermedios pueden estar bien Los errores de ráfaga es más probable en transmisiones serie, donde la duración del ruido es normalmente mayor que la duración de un bit, por lo que afectara a un conjunto de bits. El número de bits afectados depende de la tasa de datos y de la duración del ruido Detección De Errores La detección de errores consiste en monitorear la información recibida y a través de técnicas implementadas en el Codificador de Canal , determinar si un carácter, caso asincrónico, ó un grupo de datos, caso sincrónico, presentan algún ó algunos errores. Las técnicas más comunes son: • Redundancia. • Codificación de cuenta exacta (ARQ). • Chequeo de paridad vertical (VRC). • Chequeo de paridad horizontal (LRC). • Chequeo de paridad bidimensional (VRC/LRC). • Checksum • Chequeo de redundancia cíclica (CRC). Detección de Errores Redundancia.-La redundancia significa transmitir cada carácter dos o tres veces, o si se emplea a nivel de mensaje repetir el mensaje dos o tres veces, en caso que las versiones difieran habrá error ó errores. La eficiencia con este método se reduce a ½ ó 1/3 según corresponda Codificación de cuenta exacta (ARQ).-En esta técnica de codificación de cuenta exacta, lo que se hace es configurar el código de manera que cada carácter esté representado por una secuencia de unos y ceros que contiene un número fijo de unos. Tal es el caso del Código de cuenta exacta ARQ que se muestra, en caso de recibirse un carácter cuyo número de unos no sea tres, se tratará de un error. Es claro que este método, al igual que los demás, tiene limitaciones: cuando se recibe un 0 en vez de un 1 y un 1 en vez de un 0 dentro del mismo carácter los errores no serán detectados. Detección de Errores Chequeo de paridad vertical ó paridad de carácter (VRC). Este método, como todos los que siguen, hace uso del agregado de bits de control. Se trata de la técnica más simple usada en los sistemas de comunicación digitales (Redes Digitales, Comunicaciones de Datos) y es aplicable a nivel de byte ya que su uso está directamente relacionado con el código ASCII. Como se recordará, el código ASCII utiliza 7 bits para representar los datos, lo que da lugar a 128 combinaciones distintas. Si definimos un carácter con 8 bits (un byte) quedará un bit libre para control, ese bit se denomina bit de paridad y se puede escoger de dos formas: • Paridad par • Paridad impar según que el número total de unos en esos 8 bits, incluyendo el octavo bit (el de paridad), sea par ó impar, tal como se muestra. Por sus características la técnica se denomina también paridad de carácter El uso de un bit adicional para paridad disminuye la eficiencia, y por lo tanto la velocidad en el canal, el cálculo es sencillo pasamos de 7 bits de datos a 7+1 Detección de Errores En el extremo de transmisión el Codificador de Canal calcula el bit de paridad y lo adosa a los 7 bits de datos. El Decodificador de Canal recibe los 8 bits de datos calcula la paridad y la compara con el criterio utilizado Este método tampoco asegura inmunidad a errores, basta con que dos bits cambien su valor simultáneamente para que el error no sea detectado pues la paridad será correcta y el dato no. Detección de Errores Chequeo de paridad horizontal(LRC),longitudinal ó de columna.- Este chequeo de paridad horizontal ó longitudinal (HRC ó LRC) en vez de estar orientado al carácter lo está al mensaje, y consiste en que cada posición de bit de un mensaje tiene bit de paridad. La paridad horizontal y vertical es utilizada en algunos códigos de bloque para una combinación de chequeo de (LRC / VRC) para detectar errores. El LRC: Longitudinal Redundancy Checking ("Chequeo de Redundancia Horizontal") y el VRC: Vertical Redundancy Checking ("Chequeo de Redundancia Vertical"). Detección de Errores El proceso para calcular la paridad de bloque es el siguiente : • Los caracteres a transmitir se agrupan en bloques de m filas y n columnas • Se calcula el bit de paridad de cada fila y se añade al principio (o al final, según convenio) de la fila • Se calcula el bit de paridad de cada columna y se añade al principio (o al final, según convenio) de la columna • El bloque final a transmitir tendrá por tanto una fila y una columna más que el original • El nueva columna estará formada por los bits de paridad horizontal de todas las filas • La nueva fila estará formada por los bits de paridad vertical de todas las columnas • Adicionalmente se emplea un bit de paridad cruzada que se calcula a partir de los bits de paridad de filas y columnas Los chequeos de paridad horizontal y vertical se usan para detectar y corregir los posibles errores que se puedan producir durante la transmisión de datos. A continuación se muestra un ejemplo en el que se chequea la paridad de un bloque de 48 bits, distribuido en 6 filas de 8 bits cada una. Se usa paridad par Detección de Errores Chequeo de paridad bidimensional (VRC/LRC). La combinación de los dos métodos precedentes proporciona mayor protección y no supone gran consumo de recursos y, aunque tiene la misma sencillez conceptual de los métodos de paridad lineal, es más complicado y por ello menos popular El uso simultáneo de VRC y LRC hace que pasen indetectados errores en un número par de bits que ocupan iguales posiciones en un número par de caracteres, circunstancia muy poco probable. en caso que se trate de un solo error el uso simultáneo de VRC y LRC permite determinar con precisión cual es el bit erróneo y por lo tanto corregirlo. Otras combinaciones de errores pueden ser detectadas y algunas además corregidas. Las Figuras siguiente ilustran algunas circunstancias del chequeo bidimensional Detección de Errores Checksums.- Es otro método simple orientado al mensaje, en él los valores (por ejemplo decimales) que corresponden a cada carácter en el código ASCII son sumados y la suma es enviada al final del mensaje. En el extremo receptor se repite el procedimiento de sumar los valores de los caracteres y se compara el resultado obtenido con el recibido al final del mensaje Detección de Errores Código de redundancia cíclica.- Los métodos basados en el uso de paridad son sencillos de comprender y de implementar, suministran cierto grado de protección contra los errores pero son limitados y su efectividad es cuestionable en determinadas aplicaciones. Por ello se utilizan solamente cuando resulta muy complicado ó muy costoso implementar otros métodos. Además, el de paridad vertical requiere que cada carácter lleve su protección contra errores, lo que lo hace adecuado en entornos asíncronos, en entornos síncronos el uso de tantos bits de detección de errores consume un porcentaje importante de la capacidad del canal y resulta oneroso. Por ello es necesario, en entornos síncronos, emplear métodos que tengan en cuenta dos factores importantes: 1. Detección más segura de los errores. Dado que los datos se envían en bloques un solo error corrompe toda la información contenida en él, que es considerable, además muchas veces los errores se presentan en “ráfagas”, por ello se requieren esquemas más poderosos 2. Eficiencia. No se deben consumir demasiados recursos dejando libre la mayor parte del canal para datos. Detección de Errores Un grupo de métodos que cumplen con dichos requisitos son los llamados códigos de redundancia cíclica, que se basan en propiedades matemáticas de los códigos empleados para la transmisión de datos, Deseamos transmitir al extremo receptor, mediante comunicación muy vulnerable a errores, un número. un canal de Dadas las circunstancias es muy posible que si enviamos, digamos el número 23, llegue al extremo receptor un número distinto, una solución es elegir un número clave, por ejemplo el 5. Ahora dividimos el número a transmitir entre la clave y calculamos el resto: 23/5 = 4 resto 3 y enviamos conjuntamente con el 23 el resto, o sea, transmitimos 233. En el extremo receptor se efectúa el proceso inverso, supongamos que hemos recibido 253 al dividir 25/5 el resto es 0 y 0 es distinto de 3 lo que indica error Detección de Errores se considera la cadena de bits a transmitir como el conjunto de coeficientes de un polinomio, por ejemplo si enviamos 1100100110, el polinomio equivalente P(x) es: Debemos ahora especificar la clave para efectuar la división. La selección de esta clave es esencial para la capacidad de respuesta del código frente a los diversos tipos de errores. El CCITT especifica algunas claves, que como se van a emplear para dividir un polinomio serán también polinomios, denominados polinomio generador. En el CRC denominado CRC-16 correspondiente a la norma CCITT V.41, se utiliza el siguiente polinomio generador: Detección de Errores Transmisor: • Para un bloque de k bits, el transmisor genera una trama de chequeo de secuencia de (n -k) bits • La trama resultante de n bits es exactamente divisible por un numero predeterminado Receptor: • Divide la trama que recibió por un numero predeterminado • Si el resto es 0, asume que no hubo errores. También se los conoce como códigos poligonales Detección de Errores Detección de Errores versiones ampliamente utilizadas de polinomio generador Corrección de Errores Para el caso de corrección de errores se tiene: • Requerimiento automático de repetición: (ARQ) (Automatic Request for Repeat). • Corrección de errores hacia adelante: FEC (Forward Error Correction). 1.- ARQ, Requerimiento automático de repetición.- Solicitud de repetición automática (ARQ) es un protocolo de comunicación en la que el dispositivo receptor detecta errores y pide las retransmisiones. Cuando el receptor detecta un error en un paquete, pide automáticamente el transmisor para reenviar el paquete Debe observarse que esto requiere dar al sistema de comunicación algún medio para facilitar el diálogo entre la estación emisora y la estación receptora, de donde se deduce que el extremo receptor abandona el papel pasivo en la comunicación para participar en forma activa en el proceso. Tipos de ARQ Corrección de Errores ARQ ARQ con parada y espera .- El método de Parada y espera (Stop-and-wait) es un tipo de protocolo ARQ para el control de errores en la comunicación entre dos hosts basado en el envío de tramas o paquetes, de modo que una vez se envía un paquete no se envía el siguiente paquete hasta que no se recibe el correspondiente ACK (confirmación de la recepción) y en caso de recibir un NACK (rechazo de la recepción) se reenvía el paquete anterior Corrección de Errores ARQ ARQ con vuelta atrás N .- Es casi igual al método anterior solo que esta técnica cuenta con ventana deslizante. Las tramas recibidas (bien con RRnº de la siguiente trama, bien con piggy-backing). Si el receptor detecta error, ahora puede avisar al emisor mediante un mensaje (REJect) de confirmación negativa. Nota: es una técnica de transmisión de datos bidireccional en la capa de enlace de datos (Modelo OSI). Con esta técnica, en vez de enviar ACK en un paquete individual, éste es incluido dentro del próximo paquete a enviar Corrección de Errores ARQ ARQ con rechazo selectivo .- Evita la retransmisión de tramas correctamente recibidas cuando ha habido algún error en las precedentes. Ahora cuando el receptor detecta un error en la trama recibida, en vez de enviar REJ, transmite la trama SREJ (Selective REJect) que ordena su retransmisión. El emisor obedece, pero continúa la comunicación a partir de donde la dejó, sin suponer que el resto de tramas enviadas y aún pendientes de confirmación hayan sido también erróneas. Corrección de Errores FEC Corrección de errores hacia adelante: Conocido también como Forward Error Correction (FEC).-Es una técnica de corrección de errores para detectar y corregir un número limitado de errores en los datos transmitidos sin la necesidad de retransmisión. En este método, el remitente envía un código redundante de corrección de errores junto con el marco de datos. El receptor realiza las comprobaciones necesarias en función de los bits redundantes adicionales. Si descubre que los datos están libres de errores, ejecuta un código de corrección de errores que genera el marco real. Luego elimina los bits redundantes antes de pasar el mensaje a las capas superiores. Ventajas y desventajas • Debido a que FEC no requiere un intercambio de manos entre la fuente y el destino, puede usarse para transmitir datos a muchos destinos simultáneamente desde una sola fuente. • Otra ventaja es que FEC ahorra el ancho de banda requerido para la retransmisión. Por lo tanto, se usa en sistemas de tiempo real. • Su principal limitación es que si hay demasiados errores, las tramas deben retransmitirse Corrección de Errores FEC Los códigos de corrección de errores para las correcciones de errores de reenvío se pueden clasificar en dos tipos: Códigos de bloque : el mensaje se divide en bloques de bits de tamaño fijo a los que se agregan bits redundantes para la corrección de errores. Códigos convolucionales : el mensaje se compone de flujos de datos de longitud arbitraria y los símbolos de paridad se generan mediante la aplicación deslizante de una función booleana al flujo de datos. Hay cuatro códigos de corrección de errores utilizados popularmente