Кратко

  • Data Offset считает весь заголовок TCP в 32-битных словах и указывает начало данных.
  • EOL прекращает разбор параметров, но последующее заполнение остаётся частью заголовка.
  • NOP может помогать выравниванию, однако выравнивание не обязательно.

Минимальный заголовок TCP занимает пять 32-битных слов, то есть двадцать октетов. Параметры увеличивают его длину, поэтому получателю нужна внешняя граница, не зависящая от того, знаком ли он с конкретным параметром. Четырёхбитное поле Data Offset содержит число слов во всём заголовке. Умножение этого значения на четыре даёт октет, с которого начинаются данные. Значение пять описывает базовый заголовок; большие значения включают параметры и заполнение. Максимум, непосредственно задаваемый полем, — пятнадцать слов, или шестьдесят октетов.

Если Data Offset больше пяти, RFC 9293 выражает область параметров как (DOffset-5)*32 бит. В это значение входит и заполнение после фактических параметров.

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

Data Offset задаёт предел разбора. Параметры и заполнение учитываются в контрольной сумме TCP, но не являются данными приложения. Некорректную длину необходимо обрабатывать; RFC 9293 предлагает среди возможных процедур сброс соединения и запись причины в журнал.

Источники