MTProto как мобильный протокол: зачем Telegram свой
Название расшифровывается как Mobile Transport Protocol, и слово «мобильный» здесь не для красоты: протокол проектировали под нестабильный интернет в телефоне, а не под браузер.
Что не так с HTTPS для мессенджера
HTTPS — запрос-ответ: клиент спрашивает, сервер отвечает, соединение закрывается или висит в ожидании. Для мессенджера нужен постоянный двусторонний канал, где сервер может прислать сообщение в любой момент. Поверх HTTPS это делается костылями (long polling, WebSocket), которые расходуют батарею и плохо переживают смену сети. MTProto изначально — постоянное соединение с очередями сообщений в обе стороны.
Экономия трафика и батареи
Сообщения MTProto упакованы в компактный бинарный формат TL без текстовых заголовков, а несколько запросов можно склеить в один контейнер. Подтверждения доставки тоже пакуются. В сумме мессенджер отправляет в разы меньше байт, чем через JSON поверх HTTPS, а радиомодуль телефона реже просыпается.
Переподключение без потерь
Каждое сообщение получает номер и идентификатор сессии. Если телефон переключился с Wi-Fi на LTE и соединение оборвалось, клиент открывает новое и сообщает серверу, что уже получил, — сервер досылает недостающее. Ничего не теряется и не дублируется. Так работает переключение и через прокси.
Несколько дата-центров
Аккаунт привязан к одному из дата-центров, но файлы могут лежать в другом. Протокол умеет держать соединения с несколькими DC одновременно и перекидывать авторизацию между ними. Подробнее — «Дата-центры Telegram».
И побочный эффект — устойчивость к блокировкам
Свой протокол означает, что транспортный слой можно менять, не трогая остальное. Так появились обфусцированный транспорт, случайное дополнение и FakeTLS — всё это подмены нижнего слоя, о которых верхние уровни не знают. У мессенджера на HTTPS такой свободы не было бы. Что за версии протокола существуют, описано на странице «Версии MTProto».