Джим Меггелен - Asterisk™: будущее телефонии Второе издание
Интернет - это зазнавшаяся система телефонной связи.
- Клиффорд Столл
Телекоммуникационная промышленность существует более 100 лет, и Asterisk объединяет в себе большинство, если не все основные технологии, применявшиеся в это последнее столетие. Чтобы максимально эффективно работать с Asterisk, не надо быть профессионалом во всех областях, но понимание разницы между разнообразными кодеками и протоколами обеспечит лучшее восприятие и осмысление системы в целом. В данной главе рассматривается технология передачи голоса по IP-про- токолу (Voice over IP, VoIP) и то, что отличает сети VoIP от традиционных коммутируемых телефонных сетей, которые были темой предыдущей главы. Мы исследуем, зачем нужны протоколы VoIP, кратко коснувшись истории и возможного будущего для каждого из них. Также мы обратим внимание на вопросы безопасности и способность этих протоколов работать в сетях, использующих технологию трансляции сетевых адресов (Network Address Translation, NAT). Остановимся на следующих протоколах VoIP (некоторые из них будут рассмотрены менее подробно, чем другие):
• IAX
• SIP
• H.323
• MGCP
• Skinny/SCCP
• UNISTIM
Кодеки - это средства, с помощью которых аналоговый голосовой сигнал может быть преобразован в цифровой сигнал и передан по Интернету. Пропускная способность любого устройства ограничена, и количество одновременных разговоров, которое может обеспечивать любое отдельно взятое соединение, напрямую зависит от типа используемого кодека. В данной главе мы также рассмотрим, чем отличаются следующие кодеки с точки зрения требований к полосе пропускания (уровень сжатия) и качества:
• G.711
• G.726
• G.729A
• GSM
• iLBC
• Speex
• MP3
Глава завершится обсуждением возможностей надежной передачи голосового трафика, причин возникновения эха и средств борьбы с ним, а также того, как Asterisk управляет аутентификацией входящих и исходящих звонков.
Зачем нужны протоколы VoIP
Основная предпосылка использования VoIP - пакетирование[84] аудиопотоков для транспортировки по сетям, использующим протокол IP (Internet Protocol). Главные сложности при этом заключаются в манере общения людей. Сигнал должен не только поступить практически в той же форме, в какой был передан, но его транспортировка должна занять не более 150 мс. Если пакеты будут утеряны или задержатся, качество связи ухудшится, то есть два человека будут испытывать трудности в ведении беседы.
Транспортные протоколы, которые объединены под общим названием «сетевые», изначально разрабатывались без реализации возможности потоковой передачи несущей в режиме реального времени. Предполагалось, что конечные точки в случае потери пакетов будут увеличивать время их ожидания, посылая запросы на повторную передачу или в некоторых случаях просто продолжать работать без потерянной информации. Для обычного голосового общения такие механизмы неприемлемы. Наши разговоры не допускают утраты букв или слов и тем более какой-либо ощутимой задержки между передачей и приемом.
Традиционная PSTN была разработана специально для передачи голоса и прекрасно подходит для выполнения этой задачи с технической точки зрения. Однако с точки зрения гибкости ее недостатки очевидны даже тем, кто слабо разбирается в этой технологии. VoIP обещает включить телефонную связь во все другие протоколы, используемые в наших сетях, но из-за особых требований к передаче разговоров для разработки, создания и обслуживания таких сетей необходимо обладать специальными навыками.
Проблема с пакетной передачей голоса заключается в том, что то, как мы говорим, абсолютно не совпадает с тем, как IP передает данные. Процесс разговора и слушания состоит из ретрансляции потока аудиосигналов, тогда как сетевые протоколы разработаны так, что они все разбивают на части, заключают единицы информации в тысячи пакетов и затем доставляют каждый пакет на дальний конец линии связи любым возможным путем. Очевидно, с этим надо что-то делать.
Протоколы VoIP
Механизм соединения по протоколу VoIP обычно состоит в сериях транзакций по передаче сигналов между конечными точками (и шлюзами, располагающимися между ними), которые оформляются в два устойчивых медиа-потока (по одному в каждом направлении), фактически передающих беседу. Есть несколько протоколов для осуществления этого. В данном разделе мы обсудим те из них, которые имеют значение для VoIP в общем и Asterisk в частности.
IAX (протокол Inter-Asterisk eXchange)
Чтобы проверить человека, который заявляет, что является знатоком Asterisk, попросите его прочитать название этого протокола. Казалось бы, оно должно звучать, как «ай-эй-экс», но так можно и язык сломать[85]. К счастью, правильно он произносится «иикс»[86]. IAX - это открытый протокол, то есть кто угодно может загружать его и вести его разработку, но он пока что не является стандартом[87]. Ожидается, что IAX2 вскоре станет IETF-протоколом. В настоящее время IAX2 находится в IETF в статусе проекта и ожидается, что он станет официальным протоколом в течение нескольких лет. В Asterisk поддержку IAX обеспечивает модуль chan_iax2.so.
История
Протокол IAX был разработан компанией Digium для обмена информацией с другими серверами Asterisk (отсюда и название: протокол Inter- Asterisk eXchange). Крайне важно отметить, что IAX не ограничен применением только в Asterisk. Этот стандарт открыт для использования и поддерживается многими телекоммуникационными проектами с открытым исходным кодом, а также несколькими производителями оборудования. IAX - это транспортный протокол (подобно SIP), который использует один порт UDP (4569) и для обмена сигналами по каналам, и для медиа-потоков. Как объясняется ниже в данной главе, это упрощает обслуживание при использовании межсетевых экранов, поддерживающих NAT.
IAX также обладает уникальной способностью объединять несколько сеансов в один поток данных, что может обеспечивать громадный выигрыш по пропускной способности при отправке множества одновременных каналов на удаленный сервер. Объединение позволяет представлять множество медиа-потоков под одним заголовком датаграммы (datagram), что сокращает издержки на отправку каждого отдельно взятого канала. Таким образом снижаются задержки и сокращаются требования к вычислительной мощности и пропускной способности, что обеспечивает возможность масштабирования протокола для поддержания большого числа активных каналов между конечными точками. Если требуется передавать большое количество IP-вызовов между двумя конечными точками, следует обратить особое внимание на способность IAX объединять каналы связи.
Будущее
Поскольку IAX был оптимизирован для передачи голоса, его критикуют за недостаточную поддержку видео, но на самом деле потенциально IAX может передавать практически любой медиа-поток. Поскольку это открытый протокол, в него, несомненно, будет включена возможность передачи любых типов медиа-данных, которые появятся в будущем, если сообществу это понадобится.
Вопросы безопасности
IAX включает возможность аутентификации тремя способами: открытый текст, хеширование MD5 и обмен ключами RSA. Конечно, это никак не касается шифрования медиа-потоков или заголовков при передаче между конечными точками. Многие решения включают использование устройства или программного обеспечения виртуальной частной сети (Virtual Private Network, VPN) для шифрования потока на другом уровне технологии, при котором от конечных точек требуется заранее установить правила, по которым будут конфигурироваться и работать эти каналы. Однако сейчас IAX также может шифровать потоки между конечными точками с использованием динамического обмена ключами при установлении соединения (за счет применения конфигурационной опции encryption=aes128), что обеспечивает возможность использования автоматического выбора ключей.
IAX и NAT
Протокол IAX2 был специально разработан для работы с устройствами, находящимися за межсетевыми экранами, которые реализуют протокол NAT. Использование одного UDP-порта и для обмена служебными сигналами, и для передачи голоса также сводит к минимуму количество каналов, которые необходимо открыть в межсетевом экране. Эти условия помогли сделать IAX одним из простейших протоколов (если не самым простым) для реализации в безопасных сетях.
Протокол Session Initiation Protocol (SIP) покорил телекоммуникационную отрасль. SIP практически низверг с пьедестала когда-то могущественный H.323 и стал предпочтительным протоколом VoIP, безусловно, в конечных точках сети. Основная идея SIP в том, что каждый конец соединения является равноправным участником сети; протокол договаривается о параметрах устанавливаемого между ними соединения. Неотразимым протокол SIP делает его относительная простота; его синтаксис подобен синтаксису многих широко известных протоколов, таких как HTTP и SMTP. Поддержку SIP в Asterisk обеспечивает модуль chan_sip.soJ.