Текстовое общение занимает в нашей жизни одно из первых мест. Мы пользуемся Skype, Jabber, Gtalk, ICQ и SMS для того, чтобы обмениваться информацией со своими собеседниками не прибегая к передаче голоса. Два года назад Apple добавила в этот список еще одну службу для передачи коротких текстовых сообщений — iMessage.
Лично я, как пользователь техники Apple, очень рад такому способу общения со своими знакомыми, друзьями и близкими. Ключевым достоинством для меня является возможность приема и отправки iMessage непосредственно с Mac, iPhone и iPad. Это же здорово, вы не задумываетесь откуда вам можно отправлять сообщение. Вы просто отправляете их с того устройства, с которого это в конкретной ситуации делать удобнее всего.
И мне, как настоящему гику было интересно, как именно работает iMessage на архитектурном уровне. Потратив некоторое количество времени на поиски информации в интернете и проведя немного довольно простых экспериментов получилось для себя выстроить достаточно ясную картину того, что упрятано у iMessage под капотом.
Кому доставлять сообщения?
Прежде всего меня заинтересовал вопрос о том, как iMessage знает, куда отправлять сообщения. Вернее, как система доставки сообщений понимает какой из миллионов iPad, Mac или iPhone принадлежит именно тому человеку, которому было адресовано сообщение. Оказывается, все достаточно просто и логично. Для того, чтобы инициировать вас как уникального пользователя iMessage с уникальным устройством нужно всего три вещи:
- Аккаунт в iCloud (который по совместительству является Apple ID);
- UDID вашего устройства;
- Номер телефона или e-mail адрес, который привязан к Apple ID;
Этой информации достаточно для того, чтобы сообщение, отправленное вашим визави, было доставлено вам на ваш iPhone, iPad или Mac. Если вы покупаете себе новый iPhone, Mac или iPad меняется UDID устройства и информация о связке iCloud/UDID/телефонный номер/e-mail обновляется и сообщения будут приходить уже на новое устройство, а о старом система забудет.
Что у iMessage под капотом?
Теперь немного о том, как работает iMessage. В основе системы передачи сообщений от Apple лежит протокол XMPP. На этом же протоколе работают Jabber и Gtalk. Для доставки нотификаций используется Apple Push Notification Service. Но мне кажется, что APNS вариант iMessage значительно модифицирован хотя бы потому, что согласно документации для разработчиков максимальный размер нотификации для APNS ограничен 256 байтами, а в iMessage сообщения не ограничены по размеру и могут достигать больших размеров.
Схема инициации TLS соединения. Иллюстрация взята с developer.apple.com
Вся информация, пересылаемая при помощи iMessage шифруется. В упрощенном виде картина выглядит следующим образом. iPhone, Mac или iPad устанавливают соединение с серверами iMessage защищенное TLS шифрованием. Сервер передает свой сертификат устройству. Устройство проверяет подлинность полученного сертификата, и если проверка была успешной, то передает на сервера свой сертификат, который тоже проверяется. Если проверка сертификата устройства прошла успешно соединение устанавливается. Для тех, кто жаждет технических деталей рекомендую просмотреть вот эту статью.
Интересные особенности работы
Далее. iMessage очень избирательно подходит к выбору транспорта для отправки сообщений. Например, если вы отправляете текст вместе с каким-то вложением и во время такой отправки доступна сотовая сеть и Wi-Fi, то текст будет отправлен по каналу сотовой сети, а вложение отправиться через Wi-Fi подключение. Скорее всего эту особенность можно объяснить стремлением Apple обеспечить безопасную транспортировку текстовой информации, сохранность которой в Купертино считают более приоритетной чем, скажем, сохранность ваших фотографий, видео или аудио записей, который вы отправляете вместе с текстовой информацией.
И не удивительно. Ведь сотовая сеть оператора намного лучше защищена от взлома и проникновения злоумышленников, чем, скажем, какая нибудь открытая Wi-Fi сеть торгового центра или развлекательного центра. Однако, не исключено, что это может быть связано с тем, что Wi-Fi соединение намного быстрее, чем передача данных по сотовой сети и лучше подходит для транспортировки «тяжелых файлов».
Размеры вложений, доставленных по сотовой и Wi-Fi сети.
Вполне ожидаемо iMessage работает с файлами, которые передаются при помощи приложения, в зависимости от того, какой именно канал используется для пересылки. Например, если отправитель или получатель находятся в 3G/2G сети и Wi-Fi не доступен, то изображения сжимаются до разрешения 960х1280 пикселей и до размера примерно в 500 Кб. То же самое происходит и с аудио записями. Целевой файл для получателя конвертируется в AAC с битрейтом в 64 Кб/сек не зависимо от того, в каком формате был исходный файл. Если же оба абонента — получатель и отправитель — находятся в зоне действия Wi-Fi, то вложения остаются нетронутыми и доставляются к получателям в оригинальном виде. Изменяется ли поведение с файлами если отправитель и получатель находятся в LTE сети неизвестно. У меня не было возможности проверить это по вполне понятной причине. Стоит отметить, что все вложения, отправляемые с сообщениях посредством iMessage, сохраняются на серверах iCloud.
Одним словом, Apple удалось построить систему передачи сообщений, которая состоит из большого количества сложных составляющих элементов, связанных в единое целое не тривиальной логикой работы. Однако эта сложность внутреннего устройства никоим образом не отразилась на самом продукте. У iMessage минимум настроек и пользоваться этим мессенджером просто и удобно. Осталось только подтянуть надежность и хороший продукт станет отличным.