Checksum UDP paso a paso

Suma en complemento a 1 de palabras de 16 bits: el acarreo que sale por la izquierda vuelve a sumarse por la derecha; al final se invierten todos los bits. Después lo comprueba el receptor, también con un canal que cambia bits.

Palabras del segmento

De 2 a 6 palabras de 16 bits, en hexadecimal (B53D) o binario (16 cifras). Un bit también se cambia con un clic a la derecha.

Escenarios

Canal con errores

En las pestañas del receptor, haz clic en un bit de una palabra recibida para cambiarlo. O bien:

Practicar

Un segmento nuevo con las respuestas ocultas: calcula el checksum en hexadecimal y pulsa «Comprobar». La pista muestra la suma sin complementar.

Vista

Sumas parciales (hexadecimal)

Supuestos del modelo
  • Las palabras se suman de dos en dos en complemento a 1: el acarreo que sale por la izquierda (el bit 17) no se pierde; da la vuelta y se suma al bit de menor peso (acarreo circular). Después se invierten todos los bits: ese es el checksum que viaja en la cabecera (Kurose y Ross §3.3.2; RFC 768 y RFC 1071).
  • Aquí se suman las palabras sin pseudocabecera, como en el ejemplo del libro. El checksum UDP real se calcula sobre la pseudocabecera (IP origen, IP destino, 0, protocolo 17, longitud UDP) más el segmento completo, con el campo checksum a 0: eso lo haréis en el laboratorio.
  • Con un número impar de bytes se añade al final un byte 00 de relleno para completar la última palabra. Entra en la suma, pero no se transmite: el receptor lo vuelve a añadir.
  • El receptor puede comprobarlo de dos formas equivalentes: sumar todas las palabras con el checksum recibido incluido (1111111111111111 = FFFF si no se detecta error), o guardar el checksum recibido, poner el campo a 0, recalcular y comparar.
  • Detecta cualquier error de un bit, pero no todos los de varios bits: un 0 → 1 en una palabra y un 1 → 0 en la misma columna de otra se compensan. Por eso la capa de enlace añade un CRC, más potente (Tema 5).
  • En IPv4 el campo es opcional: 0 significa «no calculado» (si el checksum calculado es 0000, se envía FFFF). En IPv6 es obligatorio. Cuando detecta un error, UDP descarta el segmento o lo pasa a la aplicación con una advertencia; el emisor no se entera.