Является ли протокол TCP безстоящим или нет?

HTTP, протокол, находящийся по протоколу TCP, не имеет аналогов, а также IP-протокол является апатридом Но как мы можем заключить, что TCP является апатридом или нет?

Ответ 1

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

Протокол TCP является протоколом с состоянием из-за того, что он есть, а не потому, что он используется по IP или потому, что HTTP построен поверх него. TCP поддерживает состояние в виде размера окна (конечные точки сообщают друг другу, сколько данных они готовы получить) и порядок пакетов (конечные точки должны быть подтверждены друг другом, когда они получают пакет от другого). Это состояние (сколько байтов, которые может получить другой парень, и независимо от того, получил ли он последний пакет), позволяет TCP быть надежным даже по неотъемлемо ненадежным протоколам. Таким образом, TCP является протоколом с сохранением состояния, поскольку для его использования требуется состояние.

Я также хотел бы отметить, что, хотя HTTP и HTTPS (которые просто являются HTTP через SSL/TLS, действительно), по сути, являются безстоящими (каждый запрос является допустимым автономным запросом в протоколе), приложения, созданные поверх HTTP и HTTPS не обязательно являются апатридами. Например, веб-сайт может потребовать, чтобы вы посетили страницу входа в систему перед отправкой сообщения. Несмотря на то, что запрос, когда клиент отправляет сообщение, является действительным автономным запросом, приложение не принимает его, если только клиент не аутентифицировал себя раньше. Это означает, что приложение реализует состояние через HTTP.

С другой стороны, состояние HTTP может быть несколько запутанным, так как несколько приложений (на явно отличающемся уровне OSI) просачивают свое состояние в HTTP. Например, если пользователь пытается просмотреть сообщение в блоге, которого не существует, приложение-блог может отправить ответ с кодом статуса 404, даже если найден файл, обрабатывающий сам поиск в блоге.

Ответ 2

Zneak верен, что вы можете использовать любую связь для целей, связанных с состоянием, но вопрос в том, является ли сам протокол состоянием.

Википедия:

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

Чтобы применить это определение, сначала мы должны понять, что такое "запрос".

  • IP - IP-пакет
  • TCP - пакет TCP
  • HTTP - HTTP-запрос/ответ

Это сделало бы TCP прогностическим с точки зрения состояния, поскольку стороны должны помнить, в каком состоянии находится другое, и какие байты у другого есть. Следовательно, диаграмма TCP state.

Ответ 3

Чтобы правильно ответить на вопрос, нам нужна концепция протокола без учета состояния, используемого для управления внешними ресурсами с сохранением состояния. Раздел 2.4 http://laurel.datsi.fi.upm.es/_media/docencia/asignaturas/ws-modelingresources.pdf относится к службе, которая реализует такой протокол:

Может быть описана служба, которая действует на ресурсы с сохранением состояния "без гражданства", если он делегирует ответственность за управление состояние к другому компоненту, такому как база данных или файловая система.... A следствием безгражданства является то, что любое динамическое состояние, необходимое для данное выполнение обмена сообщениями должно быть:

  • явно указывается в сообщении запроса, будь то по значению или по косвенной ссылке, и/или
  • поддерживается неявно в рамках других системных компонентов, с которыми может взаимодействовать веб-служба.

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

Ответ 4

Здесь - хорошее объяснение:

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