техническое · ответ с источниками

SMTP работает по TCP или UDP? Технический разбор протокола

SMTP работает поверх TCP. Он опирается на протокол управления передачей (Transmission Control Protocol), чтобы письма доставлялись надёжно, в правильном порядке и без потери данных, — это критически важно для протоколов связи, где каждый байт сообщения должен прийти в целости.

Почему SMTP нужен TCP

SMTP нужен протокол с установлением соединения, потому что доставка почты не допускает потери пакетов. TCP обеспечивает тройное рукопожатие для установки сеанса, порядковые номера для упорядочивания пакетов и подтверждения получения. Если пакет теряется при передаче, TCP автоматически запрашивает его повторную отправку. UDP не устанавливает соединения и не гарантирует доставку, поэтому не подходит для структурированного обмена командами и ответами в SMTP-сеансах.

Как проходит SMTP-рукопожатие

TCP-соединение позволяет SMTP вести диалоговый обмен. После открытия TCP-сокета сервер отправляет приветствие 220. Затем клиент отправляет EHLO или HELO, чтобы начать сеанс. Это взаимодействие с сохранением состояния продолжается командами MAIL FROM и RCPT TO. Без надёжного потока, который обеспечивает TCP, сервер и клиент не смогли бы синхронизировать эти переходы состояний и эффективно обрабатывать коды ошибок.

Стандартные TCP-порты SMTP

В зависимости от сценария SMTP работает на нескольких зарегистрированных TCP-портах. Порт 25 используется для передачи между серверами. Порт 587 — стандарт для отправки писем клиентами с использованием STARTTLS. Порт 465 используется для неявного TLS. Все эти назначения регулирует IANA, и все они используют транспортный уровень TCP, чтобы сохранять целостность сеанса при передаче заголовков и тела письма.

Безопасность и транспортный уровень

Современные реализации SMTP оборачивают TCP-поток в TLS для шифрования. Это делается либо командой STARTTLS на порту 587, либо через неявный TLS на порту 465. Поскольку самому TLS нужен надёжный транспортный уровень для собственного рукопожатия и обмена ключами, TCP-соединение под ним обязательно. Разработчики могут проверить DNS-настройки для таких защищённых соединений с помощью бесплатных инструментов SendHQ.

Сравнение с протоколами на базе UDP

Хотя SMTP использует TCP, другие сервисы, связанные с почтой, например DNS, используют UDP для быстрых запросов с низкими накладными расходами. Но как только DNS-запрос по UDP определил IP-адрес почтового сервера, сама передача почты переходит на TCP. Такой гибридный подход обеспечивает быстрый поиск и надёжную доставку. UDP используется ради скорости и эффективности, а TCP — ради точности и управления сеансом.

Что спрашивают команды

Может ли SMTP вообще работать по UDP?

Нет, спецификация SMTP требует надёжного упорядоченного потока данных, а его обеспечивает только TCP. UDP не поддерживает необходимое управление сеансом.

Какой TCP-порт лучше всего подходит для отправки почты?

Для отправки писем рекомендуется порт 587, так как он поддерживает STARTTLS для защищённой передачи.

Меняет ли TLS транспортный протокол?

Нет, TLS — криптографический уровень поверх TCP. Он шифрует данные, но сама передача пакетов по-прежнему идёт через TCP.

Почему DNS использует UDP, если SMTP использует TCP?

DNS использует UDP для небольших быстрых запросов, чтобы снизить задержку. SMTP использует TCP, потому что потеря даже одного пакета может повредить всё письмо.

Первоисточники