aritmética del número de serie


Muchos protocolos y algoritmos requieren la serialización o enumeración de entidades relacionadas. Por ejemplo, un protocolo de comunicación debe saber si algún paquete viene "antes" o "después" de otro paquete. El IETF ( Grupo de trabajo de ingeniería de Internet ) RFC  1982 intenta definir la "aritmética de números de serie" con el fin de manipular y comparar estos números de secuencia .

Esta tarea es bastante más compleja de lo que podría parecer a primera vista, porque la mayoría de los algoritmos usan representaciones de tamaño fijo ( binario ) para los números de secuencia. A menudo es importante que el algoritmo no se "descomponga" cuando los números se vuelven tan grandes que se incrementan una última vez y "envuelven" sus rangos numéricos máximos (pasar instantáneamente de un número positivo grande a 0 o un número negativo grande ). Algunos protocolos optan por ignorar estos problemas y simplemente usan números enteros muy grandes para sus contadores, con la esperanza de que el programa se reemplace (o se retire) antes de que ocurra el problema (ver Y2K ).

Muchos protocolos de comunicación aplican la aritmética de números de serie a los números de secuencia de paquetes en su implementación de un protocolo de ventana deslizante . Algunas versiones de TCP usan protección contra números de secuencia envueltos (PAWS) . PAWS aplica la misma aritmética de números de serie a las marcas de tiempo de los paquetes, utilizando la marca de tiempo como una extensión de los bits de orden superior del número de secuencia. [1]

Solo se analizan la adición de un entero positivo pequeño a un número de secuencia y la comparación de dos números de secuencia. Solo se analizan las implementaciones binarias sin firmar, con un tamaño arbitrario en bits indicado en todo el RFC (y más abajo) como "SERIAL_BITS".

Agregar un entero a un número de secuencia es una simple adición de enteros sin signo, seguida de una operación de módulo sin signo para devolver el resultado al rango (generalmente implícito en la adición sin signo, en la mayoría de las arquitecturas):

La adición de un valor inferior a 0 o superior a 2 SERIAL_BITS−1 − 1 no está definida. Básicamente, agregar valores más allá de este rango hará que el número de secuencia resultante se "envuelva" y (a menudo) dará como resultado un número que se considera "menor que" el número de secuencia original.