Введение

Протокол связи, в котором ни отправитель, ни получатель не сохраняют информацию. Протокол без состояния – это протокол связи, при котором получатель не должен хранить состояние сеанса от предыдущих запросов. Отправитель передает соответствующее состояние сеанса получателю таким образом, чтобы каждый запрос можно было понять изолированно, то есть без обращения к состоянию сеанса из предыдущих запросов, сохраненному получателем. В отличие от него, протокол с состоянием – это протокол связи, при котором получатель может хранить состояние сеанса от предыдущих запросов. В компьютерных сетях примерами протоколов без состояния являются Интернет-протокол (IP), являющийся основой Интернета, и протокол передачи гипертекста (HTTP), являющийся основой Всемирной паутины. Примерами протоколов с состоянием являются протокол управления передачей (TCP) и протокол передачи файлов (FTP). Протоколы без состояния улучшают такие характеристики, как наблюдаемость, надежность и масштабируемость. Наблюдаемость улучшается, поскольку системе мониторинга не требуется анализировать больше одного запроса для определения его полной сути. Надежность улучшается, поскольку упрощается восстановление после частичных сбоев. Масштабируемость улучшается, поскольку отсутствие необходимости хранить состояние сеанса между запросами позволяет серверу быстро освобождать ресурсы и упрощает реализацию. Недостатком протоколов без состояния является то, что они могут снизить производительность сети за счет увеличения объема повторяющихся данных, передаваемых в серии запросов, поскольку эти данные нельзя хранить на сервере для повторного использования.

Примеры

HTTP-сервер может обрабатывать каждый запрос независимо. В отличие от этого, традиционный FTP-сервер осуществляет интерактивное взаимодействие с пользователем. В ходе этого взаимодействия пользователю предоставляется возможность аутентифицироваться и задавать различные параметры (рабочий каталог, режим передачи), которые все сохраняются на сервере как часть состояния сессии.

Складывание протокольных слоев без состояния и состояния

Между протоколами с состоянием и без состояния могут возникать сложные взаимодействия на разных уровнях сетевого стека. Например, HTTP, протокол без состояния, работает поверх TCP, протокола с состоянием, который, в свою очередь, работает поверх IP, еще одного протокола без состояния. IP-пакеты маршрутизируются по сети, использующей BGP – протокол с состоянием – для определения маршрута. Эта иерархия слоев продолжается и выше HTTP. Чтобы компенсировать отсутствие сохраненного состояния сеанса, HTTP-серверы реализуют различные методы управления сеансами, как правило, используя идентификатор сеанса в HTTP-cookie, который ссылается на состояние сеанса, хранящееся на сервере, фактически создавая протокол с состоянием поверх HTTP. HTTP-cookie нарушают архитектурный стиль REST, поскольку, даже не ссылаясь на состояние сеанса, хранящееся на сервере, они зависят от состояния сеанса (влияют на предыдущие страницы одного и того же веб-сайта в истории браузера) и не имеют четко определенной семантики.