Detección y corrección de errores: diagramas de Reed-Solomon, convolución y enrejado

Transmitir datos sin errores cuando hay mucho ruido de fondo es un desafío. El Dr. Claude E. Shannon en 1948 brindó orientación con su teoría sobre la capacidad de un canal de comunicación en presencia de ruido. Su trabajo se extendió rápidamente más allá de la comunicación a otros campos. Incluso otros aspectos del uso de la computadora se han visto afectados. Un ejemplo es la transmisión de datos de almacenamiento, como un disco duro o un CD-ROM. Estos recursos y sus sensores no son 100% fiables, por lo que se producen errores. Así como el trabajo de Shannon define la capacidad del canal de comunicación, define la tasa de transferencia de una superficie de medios al cabezal de lectura.

Shannon nos dijo cuánto es posible cruzar un canal, pero no dijo cómo. Desde 1948, muchas investigaciones han intentado detectar errores con precisión y corregirlos. Los códigos de corrección de errores (ECC) agregan bits adicionales a los mensajes, pero su costo se amortiza en su capacidad para eludir errores. Por ejemplo, sin ECC, las dos naves espaciales Voyager, que ahora abandonan nuestro sistema solar, no podrían llamar a casa con la información que han recopilado, ya que el ruido abrumaría sus señales. Normalmente, en hardware, como la memoria, una configuración de error se denomina ECC. En comunicaciones, se utiliza el término corrección de errores hacia adelante (FEC).

La comunicación sólida, o transferencia de datos, es una combinación de software de lujo y procesamiento de señales delicado. Me centraré en el lado de la programación en este artículo. Algunas de estas técnicas pueden resultarle útiles para comunicar datos entre sus dispositivos. Siempre que use la expresión comunicaciones recuerde que esto se aplica a la transmisión de datos en general.

Problemas con el error

La comunicación sólida requiere múltiples capas de protocolos. Algunas o todas estas capas pueden tener una corrección de errores, probablemente de diferentes tipos. Una capa manejará la transferencia física de datos por cable, fibra o RF. Otro puede ocuparse del enrutamiento y transmisión de mensajes a otros sistemas. El tipo de manejo de errores y qué hacer cuando ocurren errores son específicos de cada capa. Como resultado, no puedo dar una declaración definitiva sobre qué hacer cuando se detecta un error, ya que depende de las expectativas del protocolo. Para ilustrar las capas, compare el modelo de referencia / enlace de sistema abierto y el protocolo de Internet

Hay dos formas en que los errores pueden cambiar bits. Una pieza se puede invertir, es decir, 1 se convierte en 0 o 0 se convierte en 1. O se puede quitar un bit. El borrado puede ocurrir con el estándar RS-232 para dispositivos de interconexión porque define 0 como> 3V y 1 como

Tendemos a pensar en bytes para la comunicación. Generalmente, el análisis del protocolo de comunicación funciona con flujos de bits cuando se utiliza el análisis matemático. Afortunadamente, estas abstracciones pueden traducirse en operaciones de bytes para nosotros, los corredores de computadoras, pero esto se suma a sus propias complicaciones. ¿Son los procesos a pequeña o gran escala? ¿Se procesa el flujo de bits desde el primer o último bit recibido? Estos no cambian las matemáticas, pero cambian la implementación. No entraremos en detalles pero estaremos al tanto de los problemas.

Antes de entrar en detalles, echemos un vistazo al diagrama de comunicación de Shannon. Generamos información transmitida a un transmisor donde está encriptada. La información codificada pasa a través de un canal de comunicación donde se introduce ruido. El receptor recopila los datos codificados, modificados por el ruido, y los descifra con el fin de transmitir la información sin errores.

Detección de errores

Antes de que pueda corregir un error, debe saber que sucedió. Un detector de errores básico es la verificación de igualdad. Es posible que haya encontrado piezas de corbata para configurar una puerta en serie en la que debe elegir una corbata par o impar. El bit de igualdad se utiliza para la detección de errores. Si el canal cambia levemente los datos o la igualdad, la verificación de igualdad será incorrecta y marcará un error. Una desventaja de la verificación de paridad es que es posible que no detecte varios bits si se compensan entre sí.

Relacionado con el control de la igualdad es el controlar. Checkpoint hace XOR de todos los bytes en un mensaje. La suma de comprobación se agrega al mensaje. Cuando llegan los datos, el receptor también calcula la suma de comprobación y la compara con el valor recibido. Si los valores no coinciden, el mensaje tiene errores. Al igual que con la verificación de equidad, las sumas de verificación no pueden detectar múltiples errores que se compensan entre sí.

Otro uso de las sumas de comprobación comprueba la integridad de las PROM en los sistemas integrados. Una triste verdad de la vida es que los bits a veces fallan en PROM, corrompiendo el código del programa. La suma de comprobación del código válido se escribe en un extremo de la memoria PROM para su confirmación al inicio y periódicamente mientras se ejecuta el código.

La verificación de igualdad y las sumas de verificación son, de hecho, las formas más simples de control de redundancia cíclica (CRC). En términos matemáticos, CRC es el resultado de una operación modular polinomial, módulo 2 en el mensaje. Tienes que verlo para darte cuenta de que no es complicado. A continuación se muestra un ejemplo que utiliza un mensaje con los bits 0010110101010111 compartidos por el patrón de bits CRC 100101:

0 0 1 0 1 1 0 1 0 1 0 1 0 1 1 1
    1 0 0 1 0 1        
    0 0 1 0 0 0 0 1      
        1 0 0 1 0 1      
        0 0 0 1 0 0 0 1 0   
              1 0 0 1 0 1   
              0 0 0 1 1 1 1 1 1
                    1 0 0 1 0 1
                    0 1 1 0 1 0 = 0x1A

Los valores de grasa son el resultado de cada paso del proceso. El CRC de este mensaje es 0x1A. El proceso comienza en el bit 1 del extremo izquierdo y realiza la operación XOR. Cambia directamente al siguiente 1 bit y vuelve a realizar el XOR, utilizando bits adicionales del mensaje si es necesario. Esto continúa hasta que se pone en cálculo el último bit.

Las implementaciones efectivas de la CRC en realidad no hacen esta división. La mayoría usa una matriz de búsqueda que XORs el valor de la matriz con el valor del mensaje. Puede encontrar ejemplos en algunos lugares del sitio web. Si implementa un protocolo específico, probablemente haya rutinas estándar, porque el patrón de bits CRC, en realidad llamado polinomio, es específico para cada protocolo. El polinomio utilizado por un protocolo se ocupa de los tipos de errores que pueden ocurrir. Algunos polinomios tratan mejor los errores explosivos, mientras que otros tratan mejor los errores de un solo bit.

Los protocolos que se basan en CRC, equidad o sumas de verificación no brindan una corrección de errores y generalmente se usan donde el ruido no es un problema importante. Un uso típico es cuando se transmiten datos y no se critica un valor descartado, ya que la próxima copia se realizará pronto. La otra opción es donde los mensajes se pueden repetir si ocurre un error. Estos son protocolos de solicitud de repetición automática (ARQ). Se transmite un mensaje al receptor, que devuelve un acuse de recibo positivo (ACK) si no se detectan errores; de lo contrario, se envía un acuse de recibo negativo (NAK). Debido a estas abreviaturas, es posible que las escuche llamadas códigos ACK / NAK. Si se recibe un ACK, se envía el siguiente mensaje. El mensaje actual se repite si se devuelve NAK.

La desventaja con ARQ es el retraso de tiempo causado por el receptor al reconocer un mensaje y el retraso más largo causado por la repetición cuando ocurre un error. Esto llevó al desarrollo de ventanas deslizantes en las que se enviarían varios mensajes, por ejemplo, 7, sin pausa. El receptor devolvería ACK con el número consecutivo del último mensaje bueno. El transmisor continuaría enviando el siguiente mensaje después del que recibió ACK.

Error de corrección

La capacidad de corregir un error es fundamental para obtener el máximo rendimiento. La introducción de FEC puede ser equivalente a aumentar la potencia de una señal transmitida. No es raro que FEC introduzca una ganancia de 3dB, que es lo mismo que duplicar la potencia de transmisión. (DB es un decibelio, una escala logarítmica que se utiliza para representar relaciones de potencia o amplitud). Los decibelios se utilizan para determinar qué tan cerca está un protocolo del límite de Shannon.

Hay dos tipos de FEC. Convolucional los códigos funcionan con los bits a medida que se transmiten. Códigos de bloque trabajar en mensajes completos. Hay algunos códigos de ambos tipos.

El casi verdadero El estándar para códigos de bloque es Reed Solomon (RS) desarrollado por Irving S. Reed y Gustave Solomon en 1960. Encontrará códigos RS en CD y DVD, DSL y WiMax, comunicación por satélite y televisión digital. Otros códigos de bloque son Hamming y Golay.

Reed Solomon

El código RS funciona con un mensaje que contiene símbolos de datos y un conjunto de símbolos coincidentes agregados a los datos. Los detalles están especificados por {n, k} dónde norte es la longitud del mensaje y k la longitud de los datos. RS no se limita a la operación de bytes como símbolos, pero solo consideraremos ejemplos de 8 bits. Un código RS común es {255, 223} con símbolos de 8 bits. Esto crea un mensaje de 255 bytes con 223 bytes de datos y 32 bytes iguales. Con estos 32 bytes RS puede corregir errores en 16 bytes del mensaje. Esto significa que un bit, o los ocho bits, pueden ser incorrectos en 16 bytes diferentes y el RS los corregirá. El número de símbolos de igualdad, llamado 2t, es siempre el doble del número de símbolos, solo t, que puede corregirse.

Códigos covolucionados

Los códigos de convulsión funcionan en los bits de una secuencia. Pueden especificarse mediante tres parámetros similares a una especificación de código de bloque. El código {7, 3, 3} agrega 7 bits al flujo de salida basado en 3 bits de entrada usando una memoria de 3 bits. Al igual que con los códigos CRC, utilizan un polinomio para cifrar los bits de entrada para crear el flujo de salida.

Los códigos convolucionales cortos se prestan fácilmente a la codificación de hardware. Para nuestro código {7, 3, 3} usamos un registro de desplazamiento de 9 bits (para 9 bits por 3 memorias). Las salidas de los pines de registro de cambio están conectadas a una red de puertas XOR con el patrón definido por el polinomio.

Codificación convolucional del dispositivo

El flujo de bits de entrada se cambia al registro de desplazamiento de 3 bits a la vez. En cada uno de estos cambios, los bits de entrada y los bits de salida de la puerta XOR se colocan en el flujo de salida a una tasa de 7 salidas para 3 entradas cada uno. Este tipo de código usa memoria, los 6 bits anteriores, además de los 3 nuevos bits de entrada para generar la salida.

Una técnica adicional es “perforar” el código. Esto elimina algunos bits del flujo de salida para mejorar la velocidad de transferencia de mensajes. La definición del protocolo está diseñada para que estos bits se recuperen fácilmente como parte de la FEC. La eliminación de bits aumenta el rendimiento general.

Diagrama de enrejado

Un código convolucional es una máquina de estados. Como tal, uno puede construir un gráfico llamado latiso diagrama. Este diagrama muestra el tiempo a través de los estados superior y de bit a lo largo del lateral. Representa los patrones de bits legales que pueden ocurrir en el flujo de bits en momentos específicos. Se puede usar software, en lugar de hardware, para generar la corriente de salida recorriendo este gráfico. La decodificación de códigos intrincados casi siempre se realiza en programas que utilizan códigos de celosía.

La corrección de errores se produce en la decodificación porque solo hay estados legales limitados disponibles en cualquier nodo del gráfico. Cuando el flujo de bits contiene código ilegal, el decodificador sabe que se ha producido un error. Suponga un decodificador que usa 2 bits de entrada del flujo para recorrer el gráfico. Encuentra un nodo donde solo 00 u 11 es legal, pero la entrada es 10. El software especula que debe ser 11 y procede de acuerdo con esa suposición después de aumentar una calculadora de error. El proceso continúa adivinando cuándo se encuentran los estados ilegales, aumentando el contador de errores en cada intento. Cuando ocurren demasiados errores, el proceso vuelve a la suposición anterior y toma el otro camino. En nuestro ejemplo, después de rastrear hacia atrás, el decodificador tomaría la ruta dictada por la entrada 00. Cuando el decodificador llega al final de la tabla, esta parte del flujo se decodifica por completo. El decodificador se reinicia al principio de la tabla para procesar el resto del flujo.

Andrew Viterbi, fundador de Qualcomm, ha desarrollado un enfoque más complejo para la decodificación, que se mueve a través de la red de muchas maneras. Cada camino tiene un peso equilibrado y, a veces, en el proceso se descartan los caminos con poco peso.

Estos enfoques son una decisión difícil decodificación porque los bits recibidos son 0 o 1. A buena decisión El método de decodificación utiliza la probabilidad del valor del bit. En el estándar RS-232, una señal por encima de 3V sería 0 con una probabilidad del 100%, pero una señal a 2.5v podría tener una probabilidad del 80% de ser 0. Esta probabilidad guía el paso a través de la red.

Control de paridad de baja densidad

El desarrollo de los controles de igualdad de baja densidad (LDPC) es interesante. En 1996, David McKay y Radford M. Neal redescubrieron y publicaron un artículo sobre ellos. Más tarde se descubrió que Robert G. Gallager los descubrió y describió originalmente en su tesis doctoral de 1963. Dormieron durante muchos años porque las computadoras de 1963 carecían de la capacidad para procesarlos en un período de tiempo razonable. LDPC demostró ser más alto que el uso de códigos convolucionales en capas por RS, acercándose a la frontera de Shannon. El desarrollo continúa en LDPC y ahora se utilizan en sistemas de comunicación. Se cree que los LDPC son la base fundamental de todos los FEC. Los códigos RS se pueden mostrar como LDPC, por ejemplo.

Hace solo unos años, se introdujeron los códigos Turbo, un FEC similar. Estos códigos también llegaron muy cerca de la frontera de Shannon. La desventaja es que fueron patentados, pero la patente expiró en 2013.

Cálculo de LDPC Note: el tercer bit de igualdad debe ser 0, no 1

LDPC agrega una serie de piezas coincidentes a un mensaje. Por lo general, el flujo codificado es relativamente largo: 1024 bits sería un mensaje corto. Esto se debe a que LDPC es más eficaz cuanto más largo es el mensaje.

La tabla muestra un pequeño mensaje de 6 bits con 4 bits iguales. La matriz debajo de los datos muestra los bits utilizados para calcular los bits de igualdad. Los bits calculados se agregan a los datos. Como puede ver, la codificación es trivial.

La decodificación es mucho más compleja porque implica resolver ecuaciones simultáneas, una para cada línea de la matriz. Suponga que la base de datos 0, la primera base de datos, es incorrecta. Dado que el bit 0 es incorrecto, los bits 1, 3, 4 y 5 (ecuaciones de las líneas 1 y 4) se pueden calcular como incorrectos. Pero el cálculo de esos bits basado en otras líneas mostrará que son correctos. Esto significa que el bit 0 debe ser realmente el bit incorrecto.

La complejidad real de los LDPC construye la matriz que determina los resultados de igualdad. Este es el foco de la investigación para LDPC.

Entrelazado y estratificación FEC

El entrelazado y las capas son técnicas para fortalecer la FEC. Los discutiré en relación con el código RS, pero se pueden usar con todos los códigos FEC, incluidos los tipos mixtos de código FEC.

Intercalar es simplemente tomar algunos mensajes y barajar los bytes, de manera controlada, antes de que se transmitan. Un enfoque simple con RS {255, 235} sería crear un conjunto de mensajes entrelazados. Envíe el primer símbolo de todos los mensajes que el segundo símbolo, el tercero, el cuarto y así sucesivamente. En el extremo de recepción, se reasignan a su mensaje correcto.

¿Por qué hacer esto? Suponga que tiene un error explosivo que elimina 17 símbolos a la vez. Eso evitaría que este RS corrija un mensaje, ya que solo puede corregir 16 errores. Cuando los mensajes se entrelazan, los bytes defectuosos se restablecen en sus mensajes correctos. Entonces, si todos los primeros símbolos eran malos, ahora se pueden corregir cuando se colocan correctamente en sus mensajes.

El FEC en CD utiliza entrelazado y estratificación. El código corto {32, 28} se utiliza para corregir errores leídos por la pista. Todo lo que no pueda corregir se marca como eliminaciones y el resultado se entrelaza. El resultado es luego procesado por el código {28, 24}, que corrige algunas eliminaciones. Esto funciona tan bien que puede recuperarse después de una pérdida de 4.000 bits.

Envoltura

Vimos cómo Shannon, trabajando en otro trabajo, desarrolló el teorema que decía que podíamos enviar muchos más datos por canal de lo que era posible en 1948. Esto dio el ímpetu a los investigadores para desarrollar los códigos de detección y corrección erróneos discutidos aquí. Sin FEC, el mundo sería completamente diferente.

La exploración espacial, especialmente el espacio profundo, necesita absolutamente comunicaciones a través de FEC. Sin FEC aumentando la fuerza de señal efectiva de las señales diminutas de sondas espaciales y vehículos de investigación planetaria, como Voyager, Cassini o Curiosity, sabríamos poco sobre los otros planetas y los confines de nuestro sistema solar. Internet, si es que existiera, sería mucho más lento no solo en nuestras últimas millas personales, sino también en la red troncal de Internet en general. Los dispositivos de almacenamiento en nuestras computadoras serían más lentos porque usan FEC para recuperar errores en discos leídos.

Hay un elemento más importante que no se ha abordado, las señales eléctricas o de RF utilizadas para la transmisión de datos. Puede que me comunique con ellos en un artículo futuro.

  • Noah Rosamilia (@NoahRosamilia) dice:

    ¿Crees que podrías agregar un botón Leer más para no tener que desplazarte durante horas en la página principal para obtener otras publicaciones?

    • Bedfford dice:

      También estaría bien agregar botones para la versión imprimible o descargar la versión en pdf.

      • jpa dice:

        ¿Lo es? ¿Por qué querría uno esos botones separados cuando CSS maneja fácilmente la versión imprimible cuando solo presiona imprimir en su navegador? Y sobre pdf … ¿solo imprimir en pdf?

    • Dax dice:

      No entiendo el reclamo: haga clic con el botón central y abra cada artículo en su propia pestaña antes de leerlos.

  • Comedias dice:

    “Los valores de grasa”. La palabra está “incrustada”.

    • Rud Merriam dice:

      Solo en Los Simpson.

  • DV82XL dice:

    Buena explicación.

  • Garolo dice:

    Escritura maravillosa.

  • Bobbymac dice:

    El desafío me trae de vuelta, entre solo las cosas CRC del protocolo de módem RS232 en el transporte OSI, la codificación de red y enlace de datos para comunicaciones de red, y tener que interactuar con nuevo hardware de red que no tenía programas. Esta es una escuela VIEJA, excepto que realmente no podías enseñar estas cosas, así que tenías que aprenderlas mientras trabajabas duro, especialmente porque no existía Internet, por lo que era mucho más difícil conseguir estándares para estas cosas. Aunque la teoría es interesante, obviamente las cosas reales fueron mucho más divertidas.

  • Alexander Rossie dice:

    ME ENCANTA * la última tendencia en artículos. Seguid así !!

  • timrc dice:

    Artículo de Mojosa.
    Pero estoy confundido … ¿debería ser 0 el tercer bit de igualdad en la matriz LDPC?

    • Rud Merriam dice:

      Gran atención al detalle, timrc. Lo notaré en el pie de foto de la imagen.

  • Lobo dice:

    Actualmente estoy trabajando en la ingeniería inversa de las comunicaciones en serie entre el microcontrolador y los chips de equilibrio en el paquete de baterías del Sistema de Gestión de Baterías (BMS) de Nissan Leaf … Necesito restablecer el paquete de baterías y BMS para usarlos en mi Solectria E10 .

    Utilizaron un CRC8 no estándar, polinomio 0x85.

    Estos son los pasos que utilicé para aplicar ingeniería inversa al CRC.

    Gracias por ver
    Lobo

  • AlanH dice:

    “Una suma de verificación hace XOR de todos los bytes en un mensaje. La suma de verificación se agrega al mensaje. Cuando llegan los datos, el receptor también calcula la suma de verificación y la compara con el valor recibido. Si los valores no coinciden, el mensaje tiene errores “.

    Esto está mal. Piensas en CRC. Los CRC usan XOR y generalmente se confirman en la granja que usted sugiere. Una suma de comprobación es literalmente eso, una suma. Es una suma de todos los bytes de un mensaje, incluido un byte de verificación o una palabra que pretende hacer que la suma sea nula (considerando las tiradas). Si la suma de comprobación final del mensaje, incluido el valor de la suma de comprobación (byte o palabra), es cero, el mensaje (probablemente) está bien.

    • Mike Field dice:

      Recientemente descubrí una nueva (bueno para mí) forma de controlar el CRC. Digamos que tiene algunos datos hexadecimales, p. Ej. DEADBEEF El CRC16 de esto es 0xE59B. El CRC del mensaje original, con el CRC agregado (byte bajo primero) es 0x0000.

      Esto hace que mi vida sea más fácil al verificar CRC en hardware FPGA. En lugar de almacenar datos en búfer y comparar, simplemente verifica que CRC sea cero al final del mensaje.

      CRC16 (DEADBEEF9BE5) => 0x0000

      Esto también le permite hacer algunas cosas desagradables: si los CRC verifican los datos y tienen muchos ceros, puede ingresar lo que quiera, siempre que los datos de entrada tengan el CRC pegado al final.

      CRC16 (1234000000000000000000) => 0x9EC6
      CRC16 (123400DEADBEEF9BE500) => 0x9EC6

      Y aunque los CRC se basan en XOR, puede ampliar esta técnica para hacer lo que quiera con los datos. ¿Quiere parchear el binario controlado por CRC? Seguro que puede hacer eso, solo busque un lugar seguro más lejos en el archivo para equilibrar la “corrupción”.

      El resultado es que los CRC solo protegen contra errores aleatorios, no errores intencionales. ¡No confíes en ellos!

    • araneoidulo dice:

      XOR es una suma sobre GF (2). Sin embargo, el artículo está equivocado y sugiere que XOR es la única forma de calcular la suma de comprobación.

  • tz dice:

    Los códigos QR usan Reed Solomon y algunas otras cosas, incluida la forma en que organizan los datos y los bits EC. Hay cuatro niveles de EC posibles, incluido uno en el que puedes eliminar más de la mitad de las piezas (por qué puedes poner una imagen en el medio).

    • Lana dice:

      De hecho, usan un código relacionado llamado BCH, similar a la mayoría de SSD MLC.

      • Mike Field dice:

        BCH (64.56) y BCH (32.24) también se utilizan con HDMI para proteger paquetes de datos invisibles (por ejemplo, audio).

  • Roel dice:

    Solo para ver si entiendo correctamente (porque no lo encuentro tan trivial), en el ejemplo de LPDC, ¿la igualdad se calcula haciendo OR o AND en las filas de la matriz con los datos?

    • Rud Merriam dice:

      Es KA verticalmente y KOR horizontalmente.

  • Steve dice:

    Es un poco caro, pero uno de los mejores libros para comprar sobre este tema es “Error Checking Coding” de Shu Lin. Incluso incluye una implementación paso a paso para la mayoría de los algoritmos, lo que facilita la escritura de sus propias implementaciones.

    http://amzn.to/1osXuD4

  • rasz_pl dice:

    Códigos de martillo para idiotas como yo: http://datagenetics.com/blog/january42016/index.html
    ¿Alguien conoce un tutorial similar para LDPC? No entiendo esta matriz en absoluto

  • dan dice:

    Gracias, gran artículo. Daría la bienvenida a más como este.

  • Phil dice:

    Gran artículo, de nuevo Rud.
    Sin embargo, me temo que ahora tengo que compartir mi broma favorita.
    Que es esto:
    “Piezas de siete, squark. ¿Piezas de siete ”?
    Error de loro.

  • araneoidulo dice:

    El desarrollo fascinante en esta área son los códigos inalámbricos, como los códigos fuente. Estos son códigos probables que permiten a un emisor emitir una secuencia infinita de bloques; cualquier receptor puede escuchar y descifrar el mensaje original después de acumular suficientes bloques válidos, independientemente de cuándo escuchó y qué bloques se perdió.

    • Paul dice:

      Uno de los aspectos más interesantes de los códigos fuente es que pueden adaptar dinámicamente su información en una proporción igual para adaptarse a las diferentes características del canal. Si se trata de un canal ruidoso para escalar la igualdad para permitir que los receptores reconstruyan los datos, si es un canal silencioso, escalarlo para que se acerque más al número de Shannon.

      • araneoidulo dice:

        Creo que tienes que pensar en otro código; el objetivo del código fuente es que no tienes que conocer la tasa de error de tus receptores o configurarlos.

  • Interesado dice:

    ¿Qué sucede si se produce un error de código RS (es decir, 255,223) solo en uno de los 32 bytes (de datos) iguales? Supongo que todo el cuadro está perdido, ¿verdad?

  • asdf dice:

    Si alguien todavía está confundido, una excelente explicación de los temas anteriores se puede encontrar en el libro “Computer Networking” 5 editado por Andrew S. Tanenbaum, páginas 202-215.

Nora Prieto
Nora Prieto

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *