С какими сетевыми протоколами прикладного уровня чаще всего приходится работать разработчику?

«С какими сетевыми протоколами прикладного уровня чаще всего приходится работать разработчику?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Разработчик чаще всего работает с протоколами прикладного уровня (Application Layer), которые работают поверх TCP/IP и определяют формат и семантику обмена данными между приложениями.

Основные протоколы:

Протокол Порт (по умолчанию) Назначение Ключевые особенности
HTTP/HTTPS 80 / 443 Веб-коммуникации Статус-коды, методы (GET, POST), заголовки, основа REST API.
WebSocket 80 / 443 Двусторонняя связь в реальном времени Устанавливается поверх HTTP, позволяет persistent-соединение.
gRPC Любой Высокопроизводительный RPC Использует HTTP/2 и Protocol Buffers (бинарный формат).
AMQP (RabbitMQ) 5672 Асинхронная передача сообщений Реализация брокеров сообщений, гарантированная доставка.
SMTP / IMAP / POP3 25 / 143 / 110 Отправка и получение email Работа с почтовыми сервисами.
DNS 53 Преобразование доменных имен в IP-адреса Обычно через системные вызовы или библиотеки.

Пример работы с HTTP-протоколом через Java HttpClient (Java 11+):

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/data"))
        .header("Content-Type", "application/json")
        .GET()
        .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode());
System.out.println("Body: " + response.body());