Cálculo de suma de comprobación UDP

La estructura de encabezado UDP definida en /usr/include/netinet/udp.h es la siguiente

struct udphdr
{
  u_int16_t source;
  u_int16_t dest;
  u_int16_t len;
  u_int16_t check;
};

¿Qué valor se almacena en el campo de verificación del encabezado? ¿Cómo verificar si la suma de comprobación es correcta? Me refiero a qué datos se calculan en la suma de comprobación? (¿Es solo el encabezado udp o el encabezado udp más la carga útil que lo sigue?)

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta