3

Если я захожу на сервер, время между, скажем, выполнением команды ls и получением результата почти ничего.

Однако если я отправлю запрос http для простой html-страницы (содержащей только слово «привет») на том же сервере в браузере, это займет не менее секунды.

Почему это?

4 ответа4

9

Ты сравниваешь яблоки с апельсинами.

Время для загрузки веб-страницы, состоящей из одного слова, в основном состоит из времени, необходимого для фактической установки соединения: поиска записи DNS для хоста, а затем установления TCP-соединения с ним и запроса документа.

Это более сравнимо со временем установки соединения ssh: поиск записи DNS для хоста, затем установление соединения TCP с ним, затем аутентификация, что на самом деле намного дольше, поскольку ssh - гораздо более сложный протокол. (и должен настроить шифрование).

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

9

Я не очень много знаю о том, как работает SSH, но насколько я понимаю, он в основном берет ваш ввод с клавиатуры и направляет его в оболочку удаленной консоли. Довольно легкий, как только соединение установлено и ключи обменены.

HTTP - это совершенно другой протокол. Это работает примерно так, если предположить, что это просто статическая HTML-страница:

  • Установить сеанс TCP/IP (это может включать поиск DNS)
  • Отправить заголовки HTTP
  • Тело отправки HTTP-запроса (GET, POST, PUT и т.д.)
  • Веб-сервер получает HTTP-запрос
  • Веб-сервер проверяет свои сопоставления обработчиков, чтобы выяснить, как обрабатывать запрос
  • Веб-сервер забирает статический HTML-файл
  • Веб-сервер формулирует заголовки ответа и отправляет их по проводам
  • Веб-сервер проталкивает статический HTML-файл по проводам
  • Ваш браузер получает заголовки
  • Ваш веб-браузер получает ответ
  • Ваш веб-браузер ожидает закрытия соединения
  • Ваш веб-браузер затем анализирует HTML
  • Ваш веб-браузер затем отображает HTML на мониторе

Это действительно базовый обзор, но в HTTP происходит гораздо больше. Это не «легкий» протокол, в отличие от SSH.

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

8

Я только что рассчитал SSH соединение и wget.

$ time ssh (host) echo "" > /dev/null

real        0m0.461s
user        0m0.004s
sys         0m0.012s

$ time wget (host)

(deletia)
real        0m0.013s
user        0m0.008s
sys         0m0.000s

"Быстрее" относительно.

0

Не забывайте, что интерактивный SSH устанавливает параметр сокета TCP NODELAY сокета, чтобы уменьшить задержку за счет используемой пропускной способности, поэтому практически каждое нажатие клавиши отправляется на сервер немедленно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .