2013-11-11 2 views
12

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

+3

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

+0

Знает ли сервер, подключен ли клиент или нет? Означает ли это что-то из прошлого в ожидании следующего пакета (например, TCP-последовательность)? – sinelaw

+0

А как насчет протокола HTTPS, он также является апатридом как HTTP? –

ответ

32

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

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

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

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

+1

Я не думаю, что кто-то определял состояние TCP-совместимости, «просто глядя на другие протоколы в стеке». Другие протоколы упоминались только как точка сравнения. Вы делаете правильный вывод о том, что состояние не зависит от протоколов, расположенных ниже или выше в стеке. –

6

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

Википедия:

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

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

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

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

0

Here хорошее объяснение:

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

1

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

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

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

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

Смежные вопросы