checksum - ejemplos - ¿Cómo calcular la suma de comprobación de Internet?
checksum ejemplos (4)
Tengo algunas preguntas sobre cómo se calcula la suma de comprobación de Internet. No pude encontrar ninguna buena explicación del libro, así que la pido aquí. No estoy seguro de si este es el lugar correcto para preguntar, así que lo siento si lo he pedido en el lugar equivocado.
Si nos fijamos en el siguiente ejemplo. Los dos mensajes siguientes se envían 10101001 y 00111001. La suma de comprobación se calcula con el complemento de 1. Hasta ahora he entendido. Pero, ¿cómo se calcula la suma? Al principio pensé que tal vez era XOR, pero no parece ser el caso.
10101001
00111001
--------
Sum 11100010
Checksum: 00011101
Y luego, cuando calculan si el mensaje llegó bien. Y una vez más, ¿cómo se calcula la suma?
10101001
00111001
00011101
--------
Sum 11111111
Complement 00000000 means that the pattern is O.K.
El cálculo de la suma de comprobación de internet utiliza una aritmética complementaria. Considere que los datos que se están sumando son una secuencia de enteros de 8 bits. Primero debe agregarlos usando la aritmética del complemento y tomar el complemento del resultado.
NOTA: Al agregar números a la aritmética complementaria, se debe agregar un resultado de MSB al resultado. Considere, por ejemplo, la adición de 3 (0011) y 5 (0101).
3 ''-> 1100 5'' -> 1010 0110 con un acarreo de 1 Así tenemos, 0111 (1 representación de complemento de -8).
La suma de comprobación es el complemento de 1 del resultado obtenido en el paso anterior. Por lo tanto, tenemos 1000. Si no existe un acarreo, simplemente complementamos el resultado obtenido en la etapa de suma.
La suma de control UDP se crea en el lado de envío al sumar todas las palabras de 16 bits en el segmento, con cualquier desbordamiento envuelto y luego se realiza el complemento de 1 y el resultado se agrega al campo de suma de control dentro del segmento. en el lado del receptor, todas las palabras dentro del paquete se agregan y la suma de control se agrega sobre ellas si el resultado es 1111 1111 1111 1111, entonces el segmento es válido; de lo contrario, el segmento tiene un error. Ejemplo: 0110 0110 0110 0000 0101 0101 0101 0101
1000 1111 0000 1100
1 0100 1010 1100 0001 // hay un desbordamiento, así que lo envolvemos, significa que lo sumamos a la suma la suma = 0100 1010 1100 0010 ahora tomemos la suma de control del complemento de 1 = 1011 0101 0011 1101
en el receptor, la suma se calcula y luego se agrega a la suma de comprobación 0100 1010 1100 0010
1011 0101 0011 1101
1111 1111 1111 1111 // claramente esta debería ser la respuesta, si no lo es, entonces hay un error de referencias: las redes de computadoras son un enfoque de arriba hacia abajo [Ross-kurose]
Si por suma de control de Internet te refieres a TCP Checksum hay una buena explicación here e incluso algo de code .
Cuando esté calculando la suma de comprobación, recuerde que no es solo una función de los datos, sino también del "pseudo encabezado" que coloca la IP de origen, la IP de destino, el protocolo y la longitud del paquete TCP en los datos que se deben sumar. Esto vincula los metadatos de TCP con algunos datos en el encabezado de IP.
TCP / IP Illustrated Vol 1 es una buena referencia para esto y lo explica todo en detalle.
Utiliza la suma, de ahí el nombre "suma". 10101001 + 00111001 = 11100010.
Por ejemplo:
+------------+-----+----+----+----+---+---+---+---+--------+
| bin value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | result |
+------------+-----+----+----+----+---+---+---+---+--------+
| value 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 169 |
| value 2 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 57 |
| sum/result | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 226 |
+------------+-----+----+----+----+---+---+---+---+--------+