Какие сетевые протоколы вы знаете?

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

Ответ

В своей работе я сталкивался с протоколами разных уровней стека TCP/IP:

Транспортный уровень:

  • TCP (Transmission Control Protocol) — надежный, с установкой соединения, гарантией доставки и порядком пакетов. Используется для HTTP, SSH, SMTP.
  • UDP (User Datagram Protocol) — ненадежный, без установки соединения. Быстрее, но без гарантий. Используется для DNS, VoIP, видеотрансляций.

Прикладной уровень:

  • HTTP/HTTPS — основа веба. HTTPS — это HTTP поверх TLS/SSL для шифрования.
  • WebSocket — протокол для полноценного двустороннего обмена данными поверх TCP, используется в real-time приложениях (чаты, уведомления).
  • SSH (Secure Shell) — для безопасного удаленного управления и передачи файлов (SFTP).
  • SMTP/POP3/IMAP — для отправки и получения электронной почты.
  • DNS (Domain Name System) — протокол для преобразования доменных имен в IP-адреса.
  • FTP (File Transfer Protocol) — для передачи файлов. SFTP (SSH File Transfer Protocol) — его безопасная версия.

Пример использования сокетов для TCP-клиента на Python:

import socket

# Создание TCP-сокета
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Установка соединения
client_socket.connect(('example.com', 80))
# Отправка HTTP-запроса
request = "GET / HTTP/1.1rnHost: example.comrnrn"
client_socket.send(request.encode())
# Получение ответа
response = client_socket.recv(4096)
print(response.decode())
client_socket.close()

Ключевое различие на практике: выбор между TCP и UDP определяется требованиями приложения: нужна ли надежность (TCP) или минимальная задержка (UDP).