234 | | |
| 234 | Рассмотренный выше сценарий предполагал, что сообщение IAM содержит в себе полный номер вызываемого абонента (En Bloc Dialing) и, таким образом, имеющейся в нем информации достаточно для трансляции вызова в SIP сообщение INVITE. В варианте протокола ITU возможны сценарии, в которых сообщение IAM содержит только часть (одну или несколько первых цифр) номера вызываемого абонента, а иногда не содержит цифр номера вообще. В таком случае оставшиеся недостающие цифры номера передаются в последующих сообщениях SAM. |
| 235 | |
| 236 | При получении сообщения IAM с неполным номером канальное окончсание SS7 проверяет, есть ли в номере хотя бы один символ. Если номер пуст, в речевой канал передается акустический сигнал готовности к набору номера (dialtone). После этого канальное окончание переходит в состояние `Dialing` и ожидает сообщение SAM. |
| 237 | |
| 238 | При получении от вызывающего абонента сообщений SAM содержащиеся в них символы номера вызываемого абонента добавляются к ранее принятым. Сигнал готовности, если был включен, отключается. Ожидание цифр номера заканчивается либо при получении очередного сообщения SAM с признаком окончания набора номера (символ '#'), либо если в течение 6 секунд не поступило ни одного нового символа. По окончании приема номера канальное окончание передает в сторону вызывающего абонента сообщение ACM, после чего формирует и передает в сеть сообщение INVITE. Далее процесс установки соединения ничем не отличается от приведенного выше базового сценария. |
| 239 | |
| 240 | Пример сценария с overlap dialing: |
| 241 | |
| 242 | {{{#!PlantUml |
| 243 | @startuml |
| 244 | title Cценарий вызова со стороны сети TDM с overlap dialing |
| 245 | !pragma teoz true |
| 246 | skinparam ParticipantPadding 80 |
| 247 | skinparam sequenceMessageAlign center |
| 248 | participant "Абонент А (TDM)" as A |
| 249 | participant "окончание SS7" as B |
| 250 | participant "Абонент Б (IP)" as C |
| 251 | |
| 252 | A -> B: IAM (Called Party Number="") |
| 253 | B o-[#blue]> A: <font color=blue>dialtone |
| 254 | A -> B: SAM (Called Party Number="1") |
| 255 | A <-[#blue]x B: <font color=blue>dialtone off |
| 256 | A -> B: SAM (Called Party Number="2") |
| 257 | A -> B: SAM (Called Party Number="3") |
| 258 | A -> B: SAM (Called Party Number="4") |
| 259 | {start} A -> B: SAM (Called Party Number="5") |
| 260 | ||35|| |
| 261 | {end} B -> A: ACM . |
| 262 | {start} <-> {end} : 6 секунд |
| 263 | B -> C: INVITE "12345" |
| 264 | C -> B: 100 Trying |
| 265 | C -> B: 180 Ringing |
| 266 | note right: вызываемый абонент слышит звонок |
| 267 | B -> A: CPG |
| 268 | B o-[#blue]> A: <font color=blue>//КПВ// |
| 269 | ... |
| 270 | note over C: абонент ответил на вызов |
| 271 | C -> B: 200 OK |
| 272 | B <-[#0000ff]-> C: <font color=blue>//медиапоток// |
| 273 | B -> C: ACK |
| 274 | B -> A: ANM |
| 275 | note over A, C: абоненты А и Б ведут разговор |
| 276 | @enduml |
| 277 | }}} |
| 278 | |
| 279 | ==== Замена номера вызывающего абонента ==== |
| 280 | |
| 281 | При получении вызова со стороны TDM в принятом сообщении ACM, как правило, содержится номер вызывающего абонента. Встречаются ситуации, когда номер вызываемого абонента приходит не в том формате, который требуется на стороне IP (например приходит только зоновый номер без кода страны и города). Функция замены по регулярному выражению номера вызывающего абонента, приходящего со стороны TDM, позволяет исправить эту ситуацию. Для решения проблемы в конфигурации канального окончания SS7 имеется конфигурационный параметр "Преобразование Caller-ID", позволяющий выполнять замену номера по регулярному выражению. Значение параметра задается в виде строки формата `/<regexp>/<replacement>`, где `<regexp>` - регулярное выражение, на совпадение с которым проверяется полученный номер, `<replacement>` - строка, которой заменяется номер в случае совпадения с регулярным выражением. В замене могут использоваться группы из регулярного выражения, которые подставляются с помощью комбинаций \1, \2 и т.д. Например если установить параметру "Преобразование Caller-ID" значение `/^(.{7})$/7342\1`, канальное окончание SS7 будет добавлять к принятому семизначному номеру префикс "7342". |
| 285 | Отбой соединения в направлении сети TDM выполняется передачей сообщения REL на любом этапе соединения. После передачи солобщения REL канальное окончание SS7 переходит в состояние `Release` и ожидает получения ответного сообщения RLC. После получения сообщения RLC канальное окончание SS7 переходит в исходное состояние (`Idle`). Инициатором отбоя может как вызывающая, так и вызываемая сторона. |
| 286 | |
| 287 | При получении из сети TDM сообщения REL канальное окончание SS7 передает в сеть IP сообщения BYE, CANCEL или ответ с неуспешным кодом завершения в зависимости от текущего состояния траззакции SIP. В ответ на получение REL в сеть TDM передается сообщение RLC, после чего каналдьное окончание SS7 переходит в исходное состояние (`Idle`). |
| 288 | |
| 289 | Примеры сценариев отбоя на разных этапах соединения: |
| 290 | |
| 291 | {{{#!PlantUml |
| 292 | @startuml |
| 293 | title Сценарий неуспешного вызова (отбой вызываемой стороной) |
| 294 | skinparam ParticipantPadding 80 |
| 295 | skinparam sequenceMessageAlign center |
| 296 | participant "Абонент А (TDM)" as A |
| 297 | participant "окончание SS7" as B |
| 298 | participant "Абонент Б (IP)" as C |
| 299 | |
| 300 | A -> B: IAM |
| 301 | B -> C: INVITE |
| 302 | C -> B: 100 Trying |
| 303 | C -> B: 486 Busy Here |
| 304 | B -> C: ACK |
| 305 | B -> A: REL |
| 306 | A -> B: RLC |
| 307 | @enduml |
| 308 | }}} |
| 309 | |
| 310 | |
| 311 | {{{#!PlantUml |
| 312 | @startuml |
| 313 | title Сценарий неуспешного вызова (отбой вызывающей стороной) |
| 314 | skinparam ParticipantPadding 80 |
| 315 | skinparam sequenceMessageAlign center |
| 316 | participant "Абонент А (TDM)" as A |
| 317 | participant "окончание SS7" as B |
| 318 | participant "Абонент Б (IP)" as C |
| 319 | |
| 320 | A -> B: IAM |
| 321 | B -> C: INVITE |
| 322 | C -> B: 100 Trying |
| 323 | ... |
| 324 | A -> B: REL |
| 325 | B -> A: RLC |
| 326 | B -> C: CANCEL |
| 327 | C -> B: 200 OK (CANCEL) |
| 328 | C -> B: 487 Request Terminated (INVITE) |
| 329 | B -> C: ACK |
| 330 | @enduml |
| 331 | }}} |
| 332 | |
| 333 | {{{#!PlantUml |
| 334 | @startuml |
| 335 | title Отбой успешно установленного соединения со стороны TDM |
| 336 | skinparam ParticipantPadding 80 |
| 337 | skinparam sequenceMessageAlign center |
| 338 | participant "Абонент А (TDM)" as A |
| 339 | participant "окончание SS7" as B |
| 340 | participant "Абонент Б (IP)" as C |
| 341 | |
| 342 | note over A, C: абоненты А и Б ведут разговор |
| 343 | A -> B: REL |
| 344 | B -> A: RLC |
| 345 | B -> C: BYE |
| 346 | C -> B: 200 OK |
| 347 | @enduml |
| 348 | }}} |
| 349 | |
| 350 | {{{#!PlantUml |
| 351 | @startuml |
| 352 | title Отбой успешно установленного соединения со стороны IP |
| 353 | skinparam ParticipantPadding 80 |
| 354 | skinparam sequenceMessageAlign center |
| 355 | participant "Абонент А (TDM)" as A |
| 356 | participant "окончание SS7" as B |
| 357 | participant "Абонент Б (IP)" as C |
| 358 | |
| 359 | note over A, C: абоненты А и Б ведут разговор |
| 360 | C -> B: BYE |
| 361 | B -> C: 200 OK |
| 362 | B -> A: REL |
| 363 | A -> B: RLC |
| 364 | @enduml |
| 365 | }}} |
| 366 | |
| 368 | |
| 369 | Так как в системе SS7 разговорные и сигнальные каналы могут проходить различными путями, в результате ошибок в конфигурации сети или возникновения каких-либо неисправностей возможны ситуации, когда выбранный для телефонного соединения разговорный канал неисправен (не транслирует речь абонентов между двумя коммутационными станциями (SSP)), что не мешает станциям успешно установить соединение, обмениваясь сообщениями по сигнальной сети. Для предотвращения таких ситуаций служит процедура контроля целостности цепи (Continuity Check, COT). Контроль заключается в том, что на одной стороне канала (стороне A) в него подается тональная частота, на другой стороне (стороне B) либо подключается шлейф разговорного канала, либо подключается приемник тональной частоты, и при ее обнаружении в канал в обратном направлении передается эта же или другая тональная частота. Сторона A, приняв тональную частоту из канала, делает вывод об исправности разговорного канала. |
| 370 | |
| 371 | Конфигурационный параметр "Continuity check %" канального окончания SS7 определяет приблизительный процент исходящих (в направление скети TDM) вызовов, при которых выполняется контроль целостности цепи: например при значении параметра 0 контроль не выполняется никогда, при значении 100 контроль выполняется при каждом вызове, при значении 10 - при каждом десятом вызове и т.п. |
| 372 | |
| 373 | При выполнении вызова с контролем исправности разговорной цепи канальное окончание SS7 исходящей станции (A) устанавливает в поле Nature of Connection Indicator передаваемого сообщения IAM флаг "Continuity Check Required", начинает передавать в разговорный канал тональную частоту 1780 или 2010 Гц (значение передаваемой частоты определяется конфигурационным параметром "Continuity check probe Tx"), переходит в состояние `COT` и ожидает приема из разговорного канала ответной тональнйо частоты (1780 Гц или 2010 Гц). |
| 374 | |
| 375 | Канальное окончание SS7 входящей станции (B), получив сообщение IAM с установленным флагом "Continuity Check Required", подключает к разговорному каналу приемник тональной частоты и переходит в состояние `Loopback`. При получении из разговорного канала ожидаемой тональной частоты канальное окончание SS7 начинает генерировать в канал ту же самую или альтернативную частоту. Принимаемые и передаваемые частоты определяются конфигурационным параметром "Continuity check loopback". |
| 376 | |
| 377 | В случае успешного приема станцией A из разговорного канала ожидаемой тональной частоты она отключает свой передатчик, передает станции B сообщение COT с признаком успешного выполнения теста и переходит в состояние `Proceeding`. Станция B, получив сообщение COT с признаком успешного выполнения теста, отключает от разговорного канала приемник и передатчик тональных частот, переходит в состояние Calling и продолжает обработку вызова обычным образом. Далее показан пример сценария вызова с успешным контролем разговорной цепи. |
| 378 | |
| 379 | {{{#!PlantUml |
| 380 | @startuml |
| 381 | title Сценарий вызова с контролем разговорной цепи |
| 382 | skinparam ParticipantPadding 80 |
| 383 | skinparam sequenceMessageAlign center |
| 384 | |
| 385 | A -> B: IAM (Continuity Check Required) |
| 386 | A -[#blue]> B: <font color=blue>//2010 Гц// |
| 387 | B -[#blue]> A: <font color=blue>//1780 Гц// |
| 388 | A -> B: COT (success) |
| 389 | B ->]: INVITE |
| 390 | B <-]: 180 Ringing |
| 391 | B -> A: CPG |
| 392 | B <-]: 200 OK |
| 393 | B -> A: ANM |
| 394 | |
| 395 | note over A, B: абоненты А и Б ведут разговор |
| 396 | @enduml |
| 397 | }}} |
| 398 | |