Кратко

  • URG и указатель срочности не создают отдельный канал: срочная информация остаётся в обычном пространстве последовательностей TCP.
  • RFC 793 содержал две несовместимые трактовки границы. RFC 1122 выбрал «последний срочный байт», а RFC 6093 затем согласовал стандарт с распространённой практикой «байта после срочных данных».
  • RFC 9293 сохраняет современное правило и обязательную поддержку механизма, но не превращает его в полосу приоритета и не рекомендует новым приложениям зависеть от механизма срочных данных.

Когда установлен URG, 16-битный указатель срочности трактуется как положительное смещение от номера последовательности сегмента. Он относится к тому же пространству последовательностей, что и обычные данные. Получатель находится в срочном режиме, пока отмеченная точка опережает RCV.NXT, и возвращается в обычный режим, когда приём достигает её. Байты поэтому остаются внутри потока. Если сокетный API по умолчанию показывает один байт как «внеполосный», это поведение API, а не второй транспортный сервис.

Изначальное противоречие было небольшим, но существенным. Описание заголовка в RFC 793 указывало на байт после срочных данных, тогда как обработка SEND задавала SND.UP равным SND.NXT-1, то есть последнему срочному байту. RFC 1122 выбрал трактовку последнего байта и потребовал поддерживать срочную последовательность любой длины и асинхронно уведомлять приложение. Однако RFC 6093 установил, что рассмотренные широко распространённые реализации следовали трактовке следующего байта. Поэтому документ обновил RFC 793, RFC 1011 и RFC 1122 в соответствии с этой практикой. RFC 9293 сохраняет её как современное обязательное правило.

Изменение указателя, пока получатель уже находится в срочном режиме, может не вызвать нового уведомления приложения. Число срочных вызовов отправителя поэтому не обязано совпадать с числом уведомлений получателя. RFC 6093 также описал некоторые промежуточные устройства, которые очищали URG и обнуляли указатель, но не утверждал, что так делают все. Источники не устанавливают современную долю использования, текущие настройки ОС или частоту атак.

Источники