Кратко

  • TCP неявно выделяет SYN и FIN по одной позиции, чтобы повторная передача не стала вторым событием.
  • SYN находится перед первым байтом данных, а FIN — после последнего байта данных своего сегмента.
  • Это логические позиции, а не байты приложения; ACK, PSH и RST сами по себе длину SEG.LEN не увеличивают.

Номер для события

RFC 793 включил некоторые управляющие сведения в пространство последовательности. RFC 9293 сохранил эту логику: SYN и FIN можно подтверждать и передавать повторно без путаницы, поэтому обрабатывается только одно событие. Физического байта в области данных при этом не появляется.

Если установлен SYN, поле SEG.SEQ содержит ISN, а первый байт данных получает номер ISN+1. Для сегмента с N байтами данных и SYN логическая длина равна N+1. FIN занимает позицию сразу после данных. Поскольку подтверждение сообщает следующий ожидаемый номер, подтверждение SYN или FIN сдвигает границу на единицу даже при нулевой полезной нагрузке.

SEG.LEN включает байты данных, SYN и FIN. При повторной передаче используется исходная позиция. У каждого направления своё пространство последовательности: FIN означает, что его отправитель больше не передаёт данные, но не завершает обратное направление. RST пространства не занимает, как не добавляют позицию ACK и PSH.

Источники