Кратко

  • RFC 794 предлагает держать TCP-LISTEN открытым в процессе, обслуживающем терминал, даже когда тот уже занят: только так новый запрос поступит к тому, кто сравнит приоритеты соединений.
  • В примере с FTP принимающий сервис решает, чей обычный сеанс прервать ради запроса «flash-override»; у отправителя операционной системе может понадобиться сначала расчистить собственные ресурсы.

Между компьютерами X и Y идёт обычная передача файла. С компьютера Z к X приходит FTP-запрос особой срочности. Пакет SYN указывает на порт; право войти ещё не объясняет, куда девать уже начатую работу. В сентябре 1981 года Vint Cerf написал об этом две страницы — RFC 794. В центре документа не героический пакет, а неудобный разговор между новым пользователем и старым.

Сначала Cerf перебрал системы, в которых очередь имеет разные причины. Занятая телефонная линия удерживает полосу даже в молчании, и высокоприоритетный вызов может вытеснить низкоприоритетный. Коммутатор сообщений хранит поступившие тексты; срочный может прервать даже печать другого. Пакетная сеть при насыщении сортирует трафик на входе. «Приоритет» звучит одинаково, но отбирать приходится то канал, то время обработки, то место в потоке предложенных пакетов. Поэтому перед настройкой правила надо назвать ресурс.

На терминале AUTODIN II этим ресурсом становится доступ к пользователю. Cerf предложил, чтобы терминальный процесс THP оставлял на порту TCP-LISTEN, хотя связь с кем-то уже установлена. Тогда новый запрос дойдёт до процесса. THP сравнит приоритеты, при необходимости закроет или оборвёт самое младшее соединение, переключит пользователя на старшее и вновь выставит LISTEN. Вариант с несколькими одновременными сеансами он связывал с ограничениями безопасности. Открытая дверь нужна для оценки посетителя, а не для обещания бесконечного числа мест.

TCP в такой схеме должен показать приоритет входящего запроса использующему его процессу. Cerf не поручал транспортному протоколу самому распоряжаться терминалом. TCP обычно работает с процессами и не создаёт обслуживающий процесс по одному факту входящего вызова. Для выключенного терминала новое обслуживание вообще лишено смысла. Процесс у терминала видит и человека, и уже открытые сеансы, и последствия отключения. Здесь можно принимать решение без гадания по заголовку пакета.

FTP-сценарий нагляднее любой общей формулы. Сервис X сохраняет дополнительный LISTEN во время обычной передачи Y. Получив срочный SYN от Z, он сможет вытеснить менее важного клиента, если места больше нет, и заняться завершением прерванной работы. Процесс, который во время обслуживания совсем не слушает новые подключения, Cerf прямо относил к непрерываемым этим способом. Табличка «вне очереди» бессильна у закрытого окошка.

Затем автор перенёс взгляд к Z. Ресурсы FTP или TCP могут закончиться и там. Срочный пользователь не запустит запрос, пока местная система не выделит ему место; одним из возможных действий Cerf назвал выход пользователей более низкого ранга из системы. Приоритет можно закрепить за человеком или терминалом, а местные решения отдать TCP-реализации либо ОС. Выгнать соседа на Z не способен сервис, ожидающий запрос на X.

Эта короткая RFC показывает, как внушительное слово «прерывание» дробится на работу конкретных программ. Сначала нужна возможность принять запрос, потом сравнить ранги, затем аккуратно завершить вытесненный сеанс. С другой стороны тоже нужна свободная стартовая площадка. Приоритет проходит по сети; последствия остаются у тех, кто держит ресурс в руках.