Linux Labs

Сеть / Ступень 6 из 14

От подключения к ответу приложения

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 7 · теория · 5 мин

Отказ и тайм-аут

Запрос к сайту сначала устанавливает соединение, и только потом программа получает запрос. Неудача на первом этапе бывает двух видов.

Отказ приходит сразу: ядро сервера отвечает, что на этом адресе и порту никто не слушает. curl печатает curl: (7) … Couldn't connect to server.

Тайм-аут — ожидание, которое кончилось без ответа. Узла с таким адресом нет, или пакеты к нему молча отбрасывает фильтр — о фильтрах следующий урок. curl печатает curl: (28) … Timeout was reached.

Сколько ждать соединения, задаёт --connect-timeout, сколько ждать всего запроса — --max-time, оба в секундах. Без них curl ждёт соединения до пяти минут, а ответа после соединения — сколько угодно: программа может принять подключение и замолчать.

Проверить одно подключение без HTTP можно nc: nc -zv -w 2 192.0.2.10 8080 печатает succeeded или Connection refused.

Проверь себя 1 вопрос

ping 192.0.2.10 получает ответы, а curl --connect-timeout 3 http://192.0.2.10:8080/ печатает Timeout was reached. Что вероятнее всего?

  • Без маршрута ping тоже не прошёл бы, а curl отказал бы сразу.

  • На пустой порт ядро сервера отвечает отказом сразу — Couldn't connect to server, ждать не приходится.

  • Ответ с ошибкой — это ответ: curl напечатал бы его текст или статус. Здесь соединения не было вовсе.

Узел отвечает на ping, значит он есть и путь к нему есть. Молчание на одном порту — признак фильтра, который отбрасывает пакеты; о нём следующий урок.

Главное в шаге

  • Отказ приходит сразу: на адресе и порту никто не слушает.
  • Тайм-аут — ответа не было: узла нет или пакеты отбрасываются.
  • --connect-timeout и --max-time не дают проверке висеть.
Ubuntu 24.04
Загрузка…