Сегодня я внезапно понял, что написать что-то очень хочется, и хочется уже очень давно, да все как-то не хватает времени на то, чтобы сесть и в спокойной обстановке что-то написать. Но совсем не писать тоже ж нельзя - бороду-то я, допустим, сбрею, а
умище мысли для постов куда девать прикажете?
Посему будем резать хвост частями. Данный пост открывает серию постов неизвестной длины о том, как устроен сервис SMS, и каким образом разные темные и не очень личности используют лазейки в нем для честных и не очень целей.
Начнем с того, что рассмотрим, каким же путем доставляется обычный SMS с мобильного
А на мобильный
B.
Для начала - необходимая оговорка. Вместо навевающих депрессию пассажей вида:"
мобильный телефон, в который вставлена SIM-карта, в учетной записи которой в соответствующем HLR присутствует сервис "телефония", которому назначен MSISDN A" я буду писать просто: "
мобильный с телефоном А", или даже еще проще: "
мобильный А". Ну, а вы уже сами в голове достраивайте весь этот дом-который-построил-Джек, ок?
Вторая необходимая оговорка заключается вот в чем: если излагать устройство SMS в деталях и подробностях, придется пересказать половину стандартов GSM, и получится книга в 400 страниц толщиной. Чтобы этого не получилось, я все буду сильно-сильно упрощать, стараясь не растерять по пути важные детали. Я знаю, что меня читают несколько спецов по контентным услугам, програмисты SIM Toolkit-ов и прочие люди, для которых все это - ежедневный хлеб насущный. Убедительная просьба - не судите строго, и ткните пальцем, если я где-то пропущу что-то важное.

Впрочем, вернемся к SMS-ам. На картинке схематически представлен процесс прохождения SMS-а с мобильного на мобильный. Дальше следует детальное описание каждого пункта.
- Итак, с мобильного А отправляется SMS на номер B. Телефон договаривается с базовой о том, что неплохо было бы передать SMS, и довольно скоро SMS долетает по эфиру до базовой, оттуда - до контроллера базовой, а оттуда уже рукой подать до коммутатора (MSC). Как видно, в заголовке SMS указывается, через какой центр обработки SMS (так называемый SMSC) мы хотим отправить SMS. Нужный центр указывается своим адресом, который для всех практических целей выглядит точно так же, как и обычный номер телефона.
- Коммутатор, который обслуживает абонента A, получает SMS и стремится побыстрее сбыть его с рук. Для этого он посылает указанному SMS сообщение forwardSMS, передавая в нем SMS в точности в том же виде, в котором он его получил. Обратите внимание, что при этом MSC указывает свой адрес.
- SMSC получает сообщение и сохраняет его у себя в очереди. На практике, если абонент B доступен, то SMS в очередь не ставится и сразу происходит его доставка получателю. Однако мы не ищем простых путей и предположим, что абонент B в это время спустился в железобетонный подвал, чтобы проверить срок годности на запасах консервов, которые он хранит на случай ядерной войны. Адресованный ему SMS оседает в очереди SMSC. При этом SMSC отправляет сообщение в HLR абонента B о том, что SMSC не против будет узнать, когда абонент B снова появится в сети.
Идут годы SMS хранится в очереди SMSC, и занимает тем самым ценные ресурсы дорогостоящего оборудования. У SMSC есть два варианта - выкинуть сообщение или же доставить его. Выкинуть сообщение можно в том случае, если истекло максимальное время ожидание (конфигурируется на SMSC и указывается отправителем, не может быть больше 5 дней). Доставить же SMS можно тогда, когда абонент B появится в сети и будет морально и технически готов этот SMS принять - у него будет свободное место в памяти телефона или SIM-карты, уверенный прием в зоне радиопокрытия и т.п. Попытки доставить SMS происходят либо тогда, когда абонент B регистрируется в сети (HLR абонента B пошлет SMSC нотификацию, о которой тот просил в конце шага 3), либо по истечении определенного промежутка времени. Временные паузы между попытками доставки постепенно возрастают, чтобы не насиловать зря сигнальную сеть- Ура! Абонент B вылез из железобетонного подвала, и SMS может быть ему доставлен. Для этого SMSC надо узнать адрес доставки.
- Последнее известное местоположение абонента хранится в его записи в HLR, и именно туда и обращается SMSC, посылая сообщение sendRoutingInfoFor(B).
- В ответ HLR сообщает адрес коммутатора, который в настоящее время обслуживает абонента B.
- Радостный SMSC сбывает с рук SMS, отправляя коммутатору сообщение forwardSMS, При этом SMSC сообщает свой адрес (почему эта техническая подробность важна - я объясню позже).
- Коммутатор, обслуживающий абонента B, запрашивает в своем VLR более точный адрес абонента B - location area и номер соты в ее пределах.
- VLR сообщает информацию, переданную телефоном B во время последнего location update
- Коммутатор проводит
ковровое бомбометание пейджинг в указанном районе, "будит" телефон абонента B и доставляет ему SMS
Если бы вместо абонента
A сообщение отправляла бы какая-то информационная система, то схема, вобщем-то, осталась бы такой же. Единственное отличие - процесс бы начался с шага "2" и сообщение
forwardSMS отправляла бы информационная система, а не коммутатор.
Если вы знакомы с тем. как устроен протокол SMTP, то вы наверняка увидите в этой схеме мого общего с тем, как путешествует обычный email. Вместо поиска MX через систему DNS тут используется жестко заданый адрес SMSC. Механизмы
sendRoutingInfoFor и
getLocationFor напоминают работу протоколов роутинга IP. Слово "адрес" в моем тексте по смыслу очень похоже на "IP адрес" или "доменное имя".
На этом на сегодня всё, а в следующей серии - рассказ про то, как посылаются SMS-ы от имени "чужого" номера.
Вопросы? (если вы не читали мои старые посты по теме и не знаете смысла некоторых терминов - JFGI или же обратитесь к коллекции моих старых постов на сайте
"Про GSM")
Может быть, "указанному SMSC"?"