¿Cuál es el propósito del relleno de bits y el relleno de bytes (en la comunicación por computadora)?

Las otras dos respuestas parecen interpretar “relleno de bit / byte” como lo que yo llamaría relleno , agregando bits o bytes no utilizados para hacer que una estructura de datos sea más fácil de indexar o manipular.

Tengo una comprensión diferente del término. El relleno es un método para mantener la transparencia en un canal de comunicaciones cuando ciertas secuencias específicas de bits o bytes tienen un significado especial para los protocolos de capa inferior.

Por ejemplo, HDLC delimita tramas físicas con la secuencia de bandera de 8 bits 01111110 (hex 7e). Sin relleno, si una aplicación enviara este valor como datos, el receptor HDLC lo malinterpretaría como el final de una trama. Por lo tanto, el HDLC síncrono de bits especifica que cada vez que aparecen 5 1 consecutivos en el flujo de datos del usuario, se inserta un 0 (relleno) en el transmisor antes de que se agreguen los indicadores de trama, de modo que si los siguientes dos bits de datos de usuario son ’10’ no puede formar una “bandera falsa”. (Una ejecución de más de 7 1 en el canal anula la trama actual, por lo que el relleno de bits también evita esto).

Después de la detección del indicador en el receptor, la secuencia … 111110 se convierte en … 11111, es decir, el bit 0 relleno se elimina para restaurar la secuencia original de cinco bits de 1 usuario.

Se utiliza una forma alternativa de HDLC orientada a bytes en el protocolo punto a punto (PPP), ya que los módems de acceso telefónico para los que fue diseñado generalmente contienen bytes de 8 bits, no bits. Esto requería un tipo diferente de regla de relleno, conocida como relleno de bytes. Cuando el byte 7e hexadecimal aparece en el flujo de datos del usuario, se traduce a la secuencia de dos bytes 7d 5e: el código de “escape de control” 7d y el valor de datos original 7e OR exclusivo con 20 hexadecimal. En el receptor, se elimina el valor 7d y se asigna el siguiente byte OR exclusivo con 20 hex para restaurar el byte de datos original 7e hex. Si el usuario envía 7d como datos reales, esto se convierte en la secuencia de dos bytes 7d 5d, y el receptor vuelve de manera similar al byte de datos original de 7d.

El relleno de bits y bytes proporciona transparencia a costa de una sobrecarga adicional. Esto suele ser bastante bajo a menos que los datos del usuario activen repetidamente el mecanismo. Por ejemplo, la secuencia de datos 7e 7e 7e 7e … se duplicará en longitud cuando se rellene con bytes.

Según la respuesta de Udendran Mudaliyar a esta pregunta.

Me gustaría explicar de manera simple:

Siempre que los datos se envían a través de la red, la capa de enlace de datos se divide en cuadros. El encuadre de tamaño fijo y el encuadre de tamaño variable son formas comunes de crear marcos . En el marco de tamaño fijo, los datos se dividen en cuadros de tamaño fijo y se envían a través de los medios de transmisión. En el encuadre de tamaño variable, los datos se dividen en marcos de tamaño variable. Es vital discriminar el final de un paquete y el comienzo de otro. Para este propósito, el protocolo orientado a caracteres (que incluye relleno de bytes) y los protocolos orientados a bits (protocolo orientado a bits).

Protocolo orientado a caracteres: aquí se utilizan distintivos para distinguir el comienzo y el final de una trama, cada distintivo consta de una longitud de 8 bits. A veces, este distintivo se mezcla con los datos reales que debían enviarse. el relleno incluye un carácter especial llamado ESC (carácter de escape) agregado a los datos. Al recibir los datos, se elimina el carácter ESC.

Protocolo orientado a bits: aquí los datos se envían en bits. Por ejemplo, 011111 y 0 adicional se agrega en relleno de bits, por lo que 0111110. Al recibir, se elimina el 0 adicional y se obtienen los datos originales.

La conclusión es que el relleno de bytes agrega uno cada vez que se encuentra el carácter ESC, mientras que el relleno de bits agrega cero si hay un cero seguido de uno consecutivo.

Me gustaría explicar de manera simple:

Siempre que los datos se envían a través de la red, la capa de enlace de datos se divide en cuadros. El encuadre de tamaño fijo y el encuadre de tamaño variable son formas comunes de crear marcos . En el marco de tamaño fijo, los datos se dividen en cuadros de tamaño fijo y se envían a través de los medios de transmisión. En el encuadre de tamaño variable, los datos se dividen en marcos de tamaño variable. Es vital discriminar el final de un paquete y el comienzo de otro. Para este propósito, el protocolo orientado a caracteres (que incluye relleno de bytes) y los protocolos orientados a bits (protocolo orientado a bits).

Protocolo orientado a caracteres: aquí se utilizan distintivos para distinguir el comienzo y el final de una trama, cada distintivo consta de una longitud de 8 bits. A veces, este distintivo se mezcla con los datos reales que debían enviarse. el relleno incluye un carácter especial llamado ESC (carácter de escape) agregado a los datos. Al recibir los datos, se elimina el carácter ESC.

Protocolo orientado a bits: aquí los datos se envían en bits. Por ejemplo, 011111 y 0 adicional se agrega en relleno de bits, por lo que 0111110. Al recibir, se elimina el 0 adicional y se obtienen los datos originales.

La conclusión es que el relleno de bytes agrega uno cada vez que se encuentra el carácter ESC, mientras que el relleno de bits agrega cero si hay un cero seguido de uno consecutivo.

El uso típico del relleno de bit / byte es mantener la estructura del mensaje del protocolo de comunicación con diferente longitud de información.
La mayoría de los protocolos de comunicación están hechos de mensajes con una estructura predeterminada, con el fin de ayudar a los analizadores a ir a un campo específico buscando directamente en el bit / byte donde está presente la información, sin leer todos los bits / bytes que están antes de este último. Si tiene que completar un campo específico de 8 bytes con 5 bytes de datos, debe insertar 3 bytes de relleno para completar el campo. Cada protocolo tiene su propio método para comprender qué bits / bytes se consideran significativos y cuáles solo están rellenando datos

Hay dos buenas razones para usar relleno de bits y bytes en su protocolo

  • Para que sea más fácil analizarlo

Nunca se sabe cómo alguien querrá usar la información que está enviando, si su protocolo no repara la longitud de los datos, entonces el receptor no puede entender las partes del mensaje, necesita leer campo por campo para determinar dónde comienza cada uno. y termina, esto causaría una desaceleración importante

  • Para hacer frente a las arquitecturas de la máquina.

Eche un vistazo a cualquier encabezado de protocolo, observe que los campos siempre se crean en tamaños de base 2, esto se debe a que ayuda al programador, pero a veces requiere un relleno.

Imagínese si diseñara un protocolo donde todos los campos tienen 7 bits de largo y no hay relleno, cuando un programador reciba sus datos, será un búfer en la memoria.
Supongamos que este programador está trabajando en bajo nivel, en C, por lo que verá su mensaje como char *, llamémoslo buffer

Para asignar el primer campo a una variable, el programador deberá hacer algo como
campo1 = buffer [0] >> 1

Luego, para obtener el segundo bit, el programador deberá hacer algo como
field2 = (buffer [0] << 7 + buffer [1] >> 1) >> 1

El tercer campo sería:
field3 = (buffer [1] << 6 + buffer [2] >> 2) >> 1

Y así continúa…

¿Ves cómo cada acceso requiere alguna regla especial? Y está utilizando 2 accesos de memoria y 3 cambios de bits por campo, ahora imagine cuántos campos TCP tiene que procesar su máquina por segundo.

Y hace que las optimizaciones como cargar muchos campos a la vez sean más complejas y lentas.

Esta pesadilla sería aún peor si eliges tamaños exóticos como 25 bits

Pero si solo llena sus bits para hacer frente a la forma en que se indexa la memoria (8 bits a la vez), el programador podría hacer algo como

campo1 = buffer [0]
campo2 = buffer [1]
campo3 = buffer [2]

Este método permite que los marcos de datos contengan un número arbitrario de bits y permite códigos de caracteres con un número arbitrario de bits por carácter. Al principio y al final de cada trama hay un byte indicador que consta del patrón de bits especial 01111110. Cada vez que la capa de enlace de datos del remitente encuentra cinco 1s consecutivos en los datos, automáticamente introduce un bit cero en el flujo de bits saliente. Esta técnica se llama relleno de bits. Cuando el receptor ve cinco 1s consecutivos en el flujo de datos entrantes, seguido de un bit cero, automáticamente elimina el bit 0. El límite entre dos cuadros se puede determinar localizando el patrón de bandera.