Введение

Многие протоколы и алгоритмы требуют сериализации или перечисления связанных сущностей. Например, протокол связи должен знать, приходит ли какой-то пакет "раньше" или "позже" другого пакета. IETF (Internet Engineering Task Force) пытается определить "арифметику серийных номеров" для манипулирования и сравнения этих номеров последовательности. Вкратце, если абсолютное значение серийного номера уменьшается более чем на половину максимального значения (например, 128 для 8-битного значения), он считается "позже" предыдущего, в то время как другие уменьшения считаются "раньше". Эта задача сложнее, чем может показаться на первый взгляд, поскольку большинство алгоритмов используют представления фиксированного размера (двоичные) для номеров последовательности. Часто важно, чтобы алгоритм не "выходил из строя", когда числа становятся настолько большими, что при последнем увеличении они "переполняются" и возвращаются к началу своего максимального числового диапазона (мгновенно переходя от большого положительного числа к 0 или большому отрицательному числу). Некоторые протоколы предпочитают игнорировать эти проблемы и просто использовать очень большие целые числа для своих счетчиков, надеясь, что программа будет заменена (или они прекратят поддержку) до возникновения проблемы (см. Y2K). Многие протоколы связи применяют арифметику серийных номеров к номерам последовательности пакетов в своей реализации протокола скользящего окна. Некоторые версии TCP используют защиту от переполнения номеров последовательности (PAWS). PAWS применяет ту же арифметику серийных номеров к временным меткам пакетов, используя временную метку как расширение старших битов номера последовательности.

Операции с порядковыми номерами

Обсуждается только добавление небольшого положительного целого числа к номеру последовательности и сравнение двух номеров последовательности. Рассматриваются только неподписанные двоичные реализации с произвольным количеством битов, которое во всем RFC (и ниже) обозначается как "SERIAL BITS".