La suma de comprobación de Internet , [1] [2] también llamada suma de comprobación del encabezado IPv4 , es una suma de comprobación utilizada en la versión 4 del Protocolo de Internet (IPv4) para detectar la corrupción en el encabezado de los paquetes IPv4. Se incluye en el encabezado del paquete IP y representa el resultado de 16 bits de la suma de las palabras del encabezado. [3]
El protocolo IPv6 no utiliza sumas de comprobación de encabezado. Sus diseñadores consideraron que la suma de comprobación de la capa de enlace de paquete completo proporcionada en protocolos, como PPP y Ethernet , combinada con el uso de sumas de comprobación en protocolos de capa superior como TCP y UDP , son suficientes. [4] De este modo, los enrutadores IPv6 se liberan de la tarea de volver a calcular la suma de comprobación cada vez que cambia el paquete, por ejemplo, mediante la reducción del contador de límite de saltos en cada salto.
La suma de comprobación de Internet es obligatoria para detectar errores en los paquetes UDP IPv6 (incluida la carga de datos).
La suma de comprobación de Internet se utiliza para detectar errores en paquetes ICMP (incluida la carga de datos).
El cálculo de la suma de comprobación se define de la siguiente manera: [5]
El campo de suma de comprobación es el complemento a uno de 16 bits de la suma del complemento a uno de todas las palabras de 16 bits del encabezado. Para calcular la suma de comprobación, el valor del campo de suma de comprobación es cero.
Si no hay corrupción, el resultado de sumar todo el encabezado IP, incluida la suma de comprobación, y luego tomar su complemento a uno debe ser cero. En cada salto, se verifica la suma de comprobación. Los paquetes con sumas de comprobación no coincidentes se descartan. El enrutador debe ajustar la suma de comprobación si cambia el encabezado IP (por ejemplo, al disminuir el TTL). [6]
El procedimiento se explica en detalle en el documento RFC 1071 "Cálculo de la suma de comprobación de Internet". [1] Se presentan optimizaciones en el documento RFC 1624 "Cálculo de la suma de comprobación de Internet mediante actualización incremental", [2] para cubrir el caso de los enrutadores que necesitan volver a calcular la suma de comprobación del encabezado durante el reenvío de paquetes cuando solo ha cambiado un único campo.
Tome el siguiente fragmento truncado de un paquete IPv4. El encabezado se muestra en negrita y la suma de comprobación está subrayada.
4500 0073 0000 4000 4011 b861 c0a8 0001
c0a8 00c7 0035 e97c 005f 279f 1e4b 8180
Para la suma en complemento a uno, cada vez que se produce un acarreo, debemos sumar un 1 a la suma. [7] Se puede realizar una comprobación y corrección del acarreo con cada suma o como un proceso posterior después de todas las sumas. Si la corrección genera otro acarreo, se suma otro 1 a la suma.
Para calcular la suma de comprobación, primero podemos calcular la suma de cada valor de 16 bits dentro del encabezado, omitiendo únicamente el campo de suma de comprobación. Tenga en cuenta que estos valores están en notación hexadecimal .
Adición inicial:4500 + 0073 + 0000 + 4000 + 4011 + c0a8 + 0001 + c0a8 + 00c7 = 2479c
La suma de acarreo se realiza entonces añadiendo el quinto dígito hexadecimal a los primeros 4 dígitos:2 + 479c = 479e
Solo es necesaria una única adición de acarreo, incluso para un encabezado IPv4 de longitud máxima, ya que la adición de acarreo nunca generará otro acarreo.
La suma de comprobación es entonces el complemento de uno ( NO bit a bit ) de este resultado:NOT 479e = b861
Este valor de suma de comprobación se muestra subrayado en el encabezado del paquete IP original arriba.
Al verificar una suma de comprobación, se utiliza el mismo procedimiento que el anterior, excepto que no se omite la suma de comprobación del encabezado original. 4500 + 0073 + 0000 + 4000 + 4011 + b861 + c0a8 + 0001 + c0a8 + 00c7 = 2fffd
Agregue los bits de acarreo: fffd + 2 = ffff
tomando el complemento a unos (invirtiendo cada bit) se obtiene 0000, lo que indica que no se detecta ningún error. La suma de comprobación del encabezado IP no verifica el orden correcto de los valores de 16 bits dentro del encabezado.