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

Вопрос о порядковом номере TCP

Это скорее теоретический вопрос, чем реальная проблема.

Если я правильно понял, порядковый номер в заголовке TCP пакета является индексом первого байта в пакете во всем потоке, правильно? Если это так, поскольку порядковый номер представляет собой неподписанное 32-битное целое число, то что происходит после того, как передано более FFFFFFFF = 4294967295 байт? Будет ли порядковый номер обернут вокруг, или отправитель отправит SYN-пакет для перезапуска с 0?

4b9b3361

Ответ 1

Номер последовательности возвращается к 0. Источник:

alt text

порядковые номера TCP и получать окна ведут себя очень похоже на часы. Окно приема сдвигается каждый раз приемник принимает и подтверждает новый сегмент данных. Как только он запускается из порядковых номеров, последовательность число возвращается к 0.

Также см. главу 4 RFC 1323.

Ответ 2

Он обертывается. RFC 793:

Важно помнить, что фактическое пространство порядковых номеров конечно, хотя и очень велико. Это пространство колеблется от 0 до 2 ** 32 - 1. Поскольку пространство конечно, все арифметические операции с порядковыми номерами должны выполняться по модулю 2 ** 32. Эта беззнаковая арифметика сохраняет взаимосвязь порядковых номеров при повторном цикле от 2 ** 32 - 1 до 0. Существуют некоторые тонкости компьютерной арифметики по модулю, поэтому при программировании сравнения таких значений следует проявлять большую осторожность. Символ "= <" означает "меньше или равно" (по модулю 2 ** 32).

Подробнее: http://www.faqs.org/rfcs/rfc793.html#ixzz0lcD37K7J

Ответ 3

Номер последовательности на самом деле не является "индексом первого байта в пакете во всем потоке", так как порядковые номера преднамеренно начинаются со случайного значения (это должно остановить форму атаки, известную как Атака прогноза последовательности TCP).

Никакой SYN не требуется, номер последовательности просто возвращается к нулю снова, как только он достигает предела.