Подтвердить что ты не робот

Номер последовательности TCP

Я пытаюсь понять, как генерируются порядковые номера заголовка TCP.

В некоторых местах я читал, что это "индекс первого байта в пакете" (ссылка здесь), на некоторых других сайтах это случайное сгенерированное 32-битное число, которое затем увеличивается.

Я действительно не знаю, что есть что, поэтому вот несколько вопросов:

  • Как генерируется начальный порядковый номер? (Пожалуйста, укажите номер RFC, если он есть)
  • Как это увеличивается?
  • Как генерируется секретный ключ?

Я читал некоторые из RFC, такие как RFC 6528, RFC 793 и RFC 1948, но я не могу понять, какой из них действительно реализован.

Я читал о статусе "std", но все же...

Заранее спасибо!

4b9b3361

Ответ 1

Каждая конечная точка TCP-соединения устанавливает начальный порядковый номер для отправленных пакетов и отправляет этот номер в пакет SYN, который он отправляет, как часть установления соединения.

Нет требования для любого конца следовать определенной процедуре при выборе стартового порядкового номера. Операционная система может свободно использовать любой механизм, который ему нравится, но обычно лучше всего выбирать случайное число, поскольку это более безопасно.

В этой начальной точке каждый пакет, посланный с любого конца, содержит два порядковых номера: один, чтобы указать, где в потоке находится пакет, и номер последовательности ACK, который обозначает количество полученных байтов. Оба числа смещаются на номер начальной последовательности.

Прочитайте все о нем в Wikipedia, конечно, ищите "порядковый номер" на этой странице, чтобы получить все детали gory.

Ответ 2

В 4.4BSD (и большинстве производных от Berkeley) при инициализации системы начальный порядковый номер отправки инициализируется 1. Эта практика нарушает RFC Host Requirements. (Комментарий в коде признает, что это неправильно.) Затем эта переменная увеличивается на 64 000 каждые полсекунды и циклически возвращается к 0 примерно каждые 9,5 часов. (Это соответствует счетчику, который увеличивается каждые 8 ​​микросекунд, не каждые 4 микросекунды.) Кроме того, каждый раз, когда соединение установлено, эта переменная увеличивается на 64 000.

Ответ 3

Это случайное число от 0 до 4 294 967 295. Но в инструменте wireshark вы можете увидеть syn как 0 (потому что он использует относительное отображение), однако вы можете сделать так, чтобы он отображал оригинальный номер seq, выполнив Edit → Preferences. и отмена проверки относительных порядковых номеров и масштабирования окна в соответствии с настройками протокола TCP. Следующий порядковый номер получит приращение на основе полученного номера ACK (a) (становится + 1). ACK увеличивается в зависимости от полезной нагрузки len (l), которую он получил (становится l + 1). Обратите внимание, что данные/полезная нагрузка не отправляются, когда флаг SYN/FIN активен (делает увеличение ACK только на единицу во время SYN и FIN).