На каком протоколе работает мессенджер
Что проверяют
Понимаете ли вы, как устроен транспорт реального времени и что из этого меняется именно на Android. Звучит как викторина про аббревиатуры, а слушают другое: различаете ли вы транспорт, прикладной протокол и шифрование, и помните ли, что на мобильном клиенте соединение живёт не всегда.
Как отвечать
Разложите слои, а потом называйте протоколы:
- транспорт: долгоживущее TCP-соединение поверх TLS, чаще всего WebSocket, реже сырой сокет со своим бинарным кадрированием или gRPC-стрим поверх HTTP/2;
- прикладной протокол: XMPP со станзами в XML, MQTT с моделью publish/subscribe и уровнями QoS, либо собственный протокол на protobuf, что у крупных продуктов встречается чаще всего;
- доставка: у каждого сообщения свой идентификатор, клиент и сервер обмениваются подтверждениями, недоставленное лежит в очереди на сервере и досылается при переподключении, дубликаты режутся по идентификатору;
- шифрование: TLS защищает канал до сервера, сквозное шифрование это отдельный слой поверх любого из перечисленных протоколов.
Отдельно скажите про Android, это и есть специфика вакансии. Постоянный сокет держать не получится: как только приложение уходит в фон, система усыпляет процесс по Doze и лимитам фоновой работы. Поэтому сообщения при закрытом приложении приходят пушем, а сокет поднимается заново при возврате на передний план.
Где спотыкаются
Называют по памяти протокол известного мессенджера. Публичные заявления устаревают, внутри почти всегда собственный формат, и уточняющий вопрос легко ловит на неточности. Безопаснее перечислить варианты и критерии выбора.
Второе: путают сквозное и транспортное шифрование. Фраза «у нас TLS, значит переписка защищена» неверна: TLS заканчивается на сервере, и без отдельного слоя сервер видит содержимое.
Третье: забывают про keep-alive и переподключение. Мобильные сети и NAT рвут простаивающие соединения молча, без закрывающего пакета, поэтому нужен пинг с таймаутом, а переподключение делают с экспоненциальной задержкой и случайным разбросом. Иначе клиент считает себя онлайн и теряет сообщения, а после массового обрыва все клиенты приходят на сервер одновременно.