header - tamaño - protocolo ip
¿Por qué UDP tiene un campo de longitud en el encabezado y TCP no? (2)
Hay un pseudo encabezado de 96 bits conceptualmente prefijado al encabezado TCP que ya contiene la información.
La descripción del campo de suma de comprobación de esta fuente proporciona la respuesta:
Checksum: 16 bits
El campo de suma de comprobación es el complemento de 16 bits de la suma complementaria de una de las palabras de 16 bits en el encabezado y el texto. Si un segmento contiene un número impar de octetos de encabezado y texto para su verificación, el último octeto se rellena a la derecha con ceros para formar una palabra de 16 bits con fines de suma de comprobación. El pad no se transmite como parte del segmento. Al calcular la suma de comprobación, el campo de suma de comprobación se reemplaza con ceros.
La suma de comprobación también cubre un pseudo encabezado de 96 bits conceptualmente prefijado al encabezado TCP. Este pseudo encabezado contiene la dirección de origen, la dirección de destino, el protocolo y la longitud del TCP. Esto proporciona la protección TCP contra segmentos mal encaminados. Esta información se transmite en el Protocolo de Internet y se transfiere a través de la interfaz TCP / Red en los argumentos o resultados de las llamadas realizadas por el TCP en la IP.
+--------+--------+--------+--------+ | Source Address | +--------+--------+--------+--------+ | Destination Address | +--------+--------+--------+--------+ | zero | PTCL | TCP Length | +--------+--------+--------+--------+
La información no es necesaria en el nivel TCP ya que TCP es un protocolo basado en la transmisión.
¿Por qué UDP tiene un campo de longitud en el encabezado y TCP no?
Supongo que la longitud del segmento en TCP se deduce del encabezado IP, pero uno debería poder hacer lo mismo para un datagrama UDP
Según TCP / IP Illustrated Volume 1 , el campo de longitud es redundante. Eso es todo lo que Stevens dice al respecto.
Personalmente creo que fue para hacer que la longitud del encabezado UDP (en bits) sea divisible por 32 :)