В чем разница между TCP и ICMP?

«В чем разница между TCP и ICMP?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TCP (Transmission Control Protocol) — протокол транспортного уровня (4-й уровень OSI), обеспечивающий надежную, упорядоченную доставку данных с установкой соединения. ICMP (Internet Control Message Protocol) — протокол сетевого уровня (3-й уровень OSI) для диагностики и управления сетью.

С точки зрения DevOps/сетевого инженера:

TCP используется для:

  • HTTP/HTTPS трафика веб-серверов
  • SSH соединений для управления серверами
  • Передачи данных между микросервисами
  • Подключения к базам данных (PostgreSQL, MySQL)

ICMP используется для:

  • Мониторинга доступности (ping)
  • Диагностики маршрутизации (traceroute/tracert)
  • Обнаружения MTU (пакеты слишком большого размера)
  • Уведомлений об ошибках (Destination Unreachable)

Практическое значение в инфраструктуре:

# Проверка доступности сервера (ICMP)
ping -c 4 web-server.prod

# Проверка открытости порта (TCP)
curl -I --connect-timeout 5 https://api.prod:443

# В правилах firewall/security groups:
# - Разрешаем ICMP echo-request для мониторинга
# - Разрешаем TCP 22 (SSH), 80 (HTTP), 443 (HTTPS) для сервисов
# - Блокируем ICMP в продакшене для security hardening (опционально)

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