Dmitry Astapov (_adept_) wrote,
Dmitry Astapov
_adept_

Categories:

Почему плохо ходят SMS-ы?

Отвечаю на вопрос: "Мне часто приходится писать смс в другую страну (из Украины в Белоруссию и обратно), и я замечаю, что иногда (один-два дня в неделю) они доходят очень плохо: нет отчёта о доставке на протяжении часа-двух днём, или смс задерживаются, а потом приходят все кучей.

Также заметил, что новое смс может "спровоцировать" доставку, и все предыдущие будут доставлены вместе с ним.

Ночью бывает нормальная связь до 2 часов, а после этого - все новые смс не доставляются, или доставляются уже утром. Иногда (редко) есть отчёт о доставке, а смс не доходит.

Со звонками проблем нет вообще, всё соединяется сразу, но это дорого и не так удобно.

Если это важно, то в Украине оператор Киевстар, а в Белоруссии Velcom. Впрочем, примерно аналогичная картина и с Билайном у нас - Life у них.

С чем это всё может быть связано? Как найти причину, и кто поможет решить вопрос?
"

Попробую ответить.

Я уже когда-то писал о том, как устроены "внутренности" системы доставки SMS - почитать об этом можно тут: http://users.livejournal.com/_adept_/77752.html.

Краткий пересказ:
1)С мобильного телефона (пусть будет Билайн) отсылается SMS. Он попадает на SMSC Билайна.
2)SMSC Билайна смотрит, что получатель у нас - клиент белорусского Life. SMSC контачит базу абонентов (HLR) белорусского Life и спрашивает:"где ошивается такой-то оболтус?". На что HLR отвечает: "ошивается он в зоне нашего коммутатора #13".
3)SMSC Билайна контачит коммутатор #13 белорусского Life и говорит: "доставляй SMS"
4)Коммутатор доставляет SMS. В обратном порядке начинают передаваться подтверждения о доставке.

Если на шаге (2) получен ответ о том, что абонента нет в сети, то SMSC Билайна говорит HLR-у Life: "когда появится, пни меня". После регистрации абонента в сети немедленно срабатывает уведомление и происходит попытка доставки.

Если облом происходит на шаге (4), то SMSC будет повторять доставку в соответствии со своими настройками (как правило, увеличивая паузы между попытками). В процессе SMSC всегда готов принять "встречное предложение" - если HLR Life скажет ему, что теперь уже снова можно пытаться доставлять, то SMSC это и сделает. Впрочем, сбои при доставке SMS "живому" абоненту в работающей сети редко имеют системный характер.

Что же происходит у автора вопроса? Точно утверждать сложно, но самым вероятным предположением выглядит такое: у получателя SMS-ок банально заканчивается место в SMS inbox на телефоне.

При этом происходит следующее: при попытке доставки очередного SMS телефон получателя говорит: "в меня больше не лезет". Информация об этом доставляется SMSC Билайна, который переходит в режим "будем пытаться еще через какое-то время". Кроме того, по стандарту телефон получателя может (насколько я помню, не обязан) после появления места в inbox уведомить HLR своей сети, который, в свою очередь, уведомит все SMSC, которые "подписались" на получение информации об этом событии.

Похоже, что уведомление об очистке inbox либо не генерируется, либо SMSC сети отправителя не информируется об этом событии. Кроме того, иногда абонент просто спит (указано, что проблемы начинаются ночью) и очищает inbox только к утру.

Так как SMSC сети отправителя не получает информации, что уже можно повторять доставку, он делает это сам только по истечении определенного таймаута. Так как речь идет о доставке в чужую сеть, сигнальный траффик тоже может быть платным, и SMSC может быть настроен таким образом, чтобы не пытаться слишком часто - например, не чаще раза в несколько часов.

Допустим, было послано несколько SMS-ов. При доставке первого (второго, третьего, ... N-ного) выяснилось, что inbox полон, и все они стали в очередь на retry. В это время получатель почистил inbox. Дальше происходит одно из двух:
1)Либо приходит еще одна SMS-ка, которая сходу доставляется и запускает процесс доставки все накопленной очереди
2)Проходит несколько часов, одна из SMS-ок доставляется при retry и запускает процесс доставки всей очереди.

ИМХО, очень похоже на описание симптомов из вопроса.

Напоследок хотелось бы добавить пару слов про SMS inbox. Не знаю, как сейчас, а раньше он мог быть только на SIM-карте (т.к. SIM рулит процессом приема SMS-ов) и размер его был достаточно скромным - например, 16 позиций. Конечно, телефоны достаточно быстро научились копировать SMS-ки из памяти SIM-карты в память телефона прозрачным для пользователя образом, но прием SMS-ов все равно происходил в SMS inbox на SIM-карте, используемый как буффер. Кроме того, в SMS inbox на SIM-карте могли помещаться SMS-ки, помеченные пользователем как "saved SMS", "keep on SIM SMS" и т.п. (конкретные слова могут отличаться в зависимости от модели телефона).

Дальше - мои домыслы. Если у человека на телефоне/SIM-карте SMS inbox размером в 16 позиций, и 15 из них заняты сохраненными SMS-ами, то шансы получить "inbox full" при активной переписке по SMS достаточно велики. Если после этого не отправляется уведомление о появлении места в inbox (а оно появляется, когда телефон сам копирует SMS из inbox в свою память), то может возникать спонтанное "залипание" SMS-диалога. Впрочем, я не дам зуб, что этот сценарий реально может реализоваться в реальной жизни.

PS
Disclaimer. Я не настоящий сварщик, я просто нашел на стройке маску много читал про то, как устроен SMSC. Я никогда их не настраивал и не эксплуатировал лично, хотя и много общался с теми, кто это делает. Я знаю, что меня читают люди, у которых есть непосредственный опыт борьбы с SMSC - поругайте версию, а?

UPD
Даже если у вас телефон, в который влазит 100500 тыщь SMS, прием их все равно ведется в SMS inbox, который находится на SIM-карте, а телефон непосредственно после приема вычитывает их оттуда и размещает в своей необъятной памяти.

UPD2
Еще одна реалистичная версия из комментария magicprinc:
"1) У MSC есть ограничение на количество алертов и вам его не достается т.е. абонент появляется в сети, а ваш смсц не уведомляют - поэтому он пробует через некоторое время сам по retry timeout
2) количество узлов сети растет, а квалификация сотрудников падает - где-то что-то недопрописано (маршруты, разрешения)"

UPD3
От qwe13: "Хех, все совсем забыли про GPRS. Думаю не у многих операторов есть Gs. Как следствие при активной пердачи данных over GPRS абонент не отвечает на пейджинг через "CS". По окончанию передачи GPRS данных абонент ничего не знает о том, что его ждут смски, как врочем VLR тоже не знает, что абонент появился в сети.

Итого смски доходят тогда, когда абонента позвонит/отправит sms или когда входящая смска поймает его не за активной пердачей данных."
Tags: gsm
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 61 comments