TCP: как генерируются номера seq / ack?

в настоящее время я работаю над программой, которая нюхает TCP-пакеты, отправляемые и получаемые с определенного адреса. То, что я пытаюсь сделать, - это ответить с помощью пользовательских пакетов на определенные полученные пакеты. Я уже сделал анализ. Я уже могу генерировать допустимые пакеты Ethernet, IP и-по большей части-TCP.

единственное, что я не могу понять, это как определяются номера seq / ack.

хотя это может не иметь отношения к проблема в том, что программа написана на C++ с помощью WinPCap. Я прошу любые советы, статьи или другие ресурсы, которые могут мне помочь.

8 ответов


когда соединение TCP установлено, каждая сторона генерирует случайное число в качестве своего начального порядкового номера. Это сильно случайное число: есть проблемы с безопасностью, если кто-нибудь в интернете может угадать порядковый номер, так как они могут легко подделать пакеты для ввода в поток TCP.

после этого для каждого переданного байта порядковый номер будет увеличиваться на 1. Поле ACK-это порядковый номер с другой стороны, отправленный для подтверждения прием.

RFC 793 (оригинальная спецификация протокола TCP) будет иметь большую помощь.


у меня такая же работа. Во-первых, исходный seq# будет генерироваться случайным образом (0-4294967297). Затем получатель подсчитает длину полученных данных и отправит ACK seq# + length = x отправителю. Затем последовательность будет x, и отправитель отправит данные. Аналогично приемник будет считать длину x + length = y и отправьте ACK как y и так далее... Его, как генерируется seq/ack...

Если вы хотите показать его практически попробуйте понюхать пакет в Wireshark и следуйте потоку TCP и посмотрите сценарий...


Если я правильно вас понял-вы пытаетесь установить TCP SEQ прогноз атаки. Если это так, вы захотите изучить специфику вашей целевой ОС Последовательность генератор.

были широко разрекламированные уязвимости в значительной степени все основные ОС wrt их ISN генераторы предсказуемы. Я не следил за fallout внимательно, но я понимаю, что большинство поставщиков выпустили патчи для рандомизировать их приращения ISN.


кажется, что остальные ответы объясняли почти все о том, где найти подробную и официальную информацию о ACK, а именно TCP RFC

вот более практичная и" понятная " страница, которую я нашел, когда делал подобные реализации, которые также могут помочь анализ TCP-Раздел 2: Последовательность и номера подтверждения



эти значения ссылаются на ожидаемые смещения начала полезной нагрузки для пакета относительно начального порядкового номера для соединения.

ссылка

порядковый номер (32 бита) - имеет двойной роль если установлен флаг SYN, то это является начальным порядковым номером. Этот порядковый номер первым байт данных будет такой последовательностью числа плюс 1. Если флаг SYN не установить, то это последовательность число первого байта данных

подтверждение число (32 бита) - если флаг ACK установить значение этого поля следующий ожидаемый байт, который приемник ждет.


числа генерируются случайным образом с обеих сторон, а затем увеличиваются на количество октетов (байтов) отправки.


приращение порядковых номеров после установления соединения. Начальный порядковый номер на новом соединении идеально выбран случайным образом, но многие ОС имеют некоторый полуслучайный алгоритм. RFC - лучшее место, чтобы узнать больше TCP RFC.