Практика
Когда два абонента одновременно начинают звонить друг другу, оба получают сигнал «занято». Почему телефонная сеть не распознает взаимный вызов и не соединяет их автоматически, вместо того чтобы выдавать занятость?
В традиционной телефонии (PSTN, ISDN) и даже в большинстве мобильных сетей логика такая:
Абонент A отправляет запрос на установление звонка абоненту B.
Сеть проверяет, свободен ли B.
Если в этот же момент:
Абонент B тоже посылает запрос на A,
для сети это выглядит как два одновременных входящих вызова на один и тот же номер.
Сеть не умеет «догадаться», что люди звонят друг другу.
Она видит просто конфликт за ресурс (номер).
Телефонный номер — это «одно входящее соединение за раз».
Второй вызов автоматически получает:
“busy here / user busy / line busy” → «занято».
Есть несколько причин — и все технические.
Ни в стандарте PSTN, ни в SS7, ни в SIP нет механизма:
«Если два абонента вызвали друг друга, соединить их».
Для сети это просто два независимых вызова.
Нормальная процедура:
Caller → сервер → Called
Called отвечает: звонок принят
Сервер соединяет медиа-каналы
А при встречном вызове:
А считает себя звонящим
B считает себя звонящим тоже
а сеть требует, чтобы один был Calling, а второй — Called
Иначе соединение невозможно.
Это ключевое.
В SIP, GSM и SS7 нет состояния:
«оба абонента вызывают друг друга — начать разговор»
Поддерживаются только:
Idle
Outgoing call
Incoming call
Connected
Busy
Двух OUTGOING одновременно быть не может → BUSY.
Если бы сеть пыталась соединять встречные вызовы автоматически, можно было бы создать бесконечные петли:
A ↔ B
B ↔ C
C ↔ A
Это разрушает структуру сигнализации.
Поэтому в протоколах есть жесткое правило:
«Если две стороны вызывают друг друга — оба заняты».
Это пример сигнальной петли, когда каждый вызывающий становится одновременно и вызываемым, но в разных связках.
То есть для абонентов А, B, C:
A звонит B
B звонит C
C звонит A
Получается замкнутый круг вызовов, который в сетях телефонии считается ошибочным и запрещенным состоянием.
Почему это опасно для телефонной сети?Потому что сеть начинает держать три незавершенных вызова, каждый из которых ждет ответа, но:
A не может принять вызов от C, потому что он сам звонит B
B не может принять вызов от A, потому что он звонит C
C не может принять вызов от B, потому что он звонит A
Ни один вызов не может завершиться.
Сигнальные шлюзы SS7 или SIP-серверы воспринимают такое состояние как call loop (петля вызовов).
Петли опасны, потому что:
занимают каналы связи,
вызывают бесконечные попытки дозвона,
создают нагрузку на сигнализацию,
могут приводить к перегрузке коммутатора.
Именно поэтому в стандартах телефонии введены жесткие правила:
Если абонент уже занимает линию исходящим вызовом,
при входящем — выдать BUSY.
Это гарантирует, что петли невозможны.
В реальности такой сценарий среди обычных людей маловероятен:
нужно, чтобы три человека начали звонить друг другу буквально в одну секунду.
Но сеть обязана быть защищена даже от редких случаев, поэтому:
исходящий вызов → линия занята
входящий во время исходящего → BUSY
взаимные вызовы → BUSY
любые циклы → BUSY
Потому что там нет «номеров» и древних сетевых ограничений.
Канал создает приложение, а сервер просто определяет:
если оба инициировали звонок → принять первый
второй автоматически считается «accept», а не «new call»
В телефонии так сделать нельзя без изменения стандартов всех операторов.
Оба слышат «занято», потому что:
сеть не знает, что вызовы взаимные
сигнализация PSTN/SS7/SIP не поддерживает симметричные вызовы
один номер может иметь только одно входящее состояние
второй вызов считается конфликтом → BUSY.
Комментарии
Оставить комментарий
Компьютерные сети
Термины: Компьютерные сети