Введение в IP-телефонию (немного теории для понимания процесса)
IP-телефония (она же VoIP (Voice over IP – Голос через IP) - это совокупность протоколов и технологий, которые позволяют передавать голос через сети, поддерживающие протокол IP.
Суть преобразования голоса для передачи по сети заключается в том, что с помощью микрофона и аналого-цифрового преобразователя голос сначала преобразуется в цифровой формат, затем полученный бинарный поток разбивается на части (по временным интервалам), компрессируется специальными алгоритмами (кодеками), вкладывается в пакет под-протокола IP (обычно это UDP) и передаётся по сети получателю. У получателя процесс происходит в обратном направлении: извлечение данных из пакета UDP, декомпрессия, склеивание частей, преобразование из цифрового формата в аналоговый и воспроизведение через колонки или наушники. Так как одновременно работают два процесса – каждый передаёт и воспроизводит то, что говорит собеседник, то реализуется постоянная голосовая связь в режиме полного дуплекса.
Первые попытки стандартизировать протоколы, используемые в VoIP, закончились в 1996 году принятием протокола H.323, который стандартизировал правила взаимодействия оборудования для IP-телефонии. Однако протокол H.323 был слишком сложен в реализации и настройке, что и привело к тому, что его применение практически ограничилось использованием в сетях сервис-провайдеров и крупных предприятий.
В 2000 году был стандартизирован протокол SIP, который изначально разрабатывался с расчетом на использование средними и мелкими фирмами и самими пользователями.
На данный момент протокол SIP – безусловный лидер по поддержке со стороны оборудования и программ для конечных пользователей. В продаже присутствуют следующие типы терминалов с его поддержкой:
1. Программные телефоны (Softphones). Это программы, которые, будучи установлены на компьютере, могут использовать микрофон и наушники вместо телефонной трубки, интерфейс компьютера в качестве номеронабирателя и сетевую плату в качестве средства передачи голосовых данных. На данный момент это, пожалуй, самый популярный и доступный тип SIP-терминала;
2. Адаптеры для работы аналоговых телефонов в сетях VoIP. Это специальные устройств, которые эмулируют телефонную линию (FXS) и позволяют подключать к ним обычные телефоны. С другой стороны к такому устройству подключается обычно кабель Ethernet;
3. Шлюзы. Устройства, которые предназначены для интеграции VoIP в существующие сети аналоговой телефонии. Как правило, содержат аналоговые голосовые порты, которые эмулируют работу телефона (FXO) или телефонной линии (FXS). Отличаются от адаптеров тем, что изначально предназначены для интеграции сетей, а не адаптации работы одного аналогового устройства к сети VoIP.
4. Аппаратные телефоны с непосредственной поддержкой VoIP. Выполняются в виде обычного телефона, но являются полностью цифровыми устройствами и подключаются непосредственно к сети Ethernet. Часто содержат второе гнездо для подключения компьютера, что позволяет вообще исключить телефонную проводку, поскольку, и для работы телефона и для работы компьютера используется одна розетка Ethernet. Этот тип устройств является, на данный момент, самым перспективным, а в дальнейшем практически полностью вытеснит аналоговые телефоны;
5. Гибридные сетевые устройства. Как правило, являются маршрутизаторами, которые содержат как порты для передачи данных (Ethernet), так и голосовые порты (FXS или FXO). Фактически являются гибридом маршрутизатора и адаптера или шлюза.
Помимо терминалов, которые, собственно и используют пользователи или которые подключаются к сетям аналоговой телефонии, существуют так же и сервисы управления. К сервисам управления относятся:
1. SIP-сервер (он же SIP-прокси). Ведёт список подключенных к нему и зарегистрированных клиентов с тем, чтобы участвовать в поиске абонента для соединения и управления сеансом соединения.
2. Прокси для исходящих соединений (outbound proxy). Используется для обхода клиентом ограничений накладываемых использованием в его сети трансляции адресов (NAT);
3. STUN-сервер. Специальный сервис, который позволяет клиенту определить используемый тип трансляции адресов с тем, чтобы попытаться обойти его ограничения без использования прокси для исходящих соединений. В определённых случаях позволяет использовать VoIP даже из-за NAT.
4. DNS (Domain Name Service). Известный всем протокол, который в SIP используется для нахождения SIP-сервера для заданного домена путём публикации специальных DNS-записей в зоне этого домена.
Отдельным типом сервиса является SIP-агент. Это программа, которая непосредственно занимается приёмом и совершением звонков. Она содержит в себе кодеки и взаимодействует с конечным пользователем. SIP-агент встроен в каждый SIP-терминал – будь то программный телефон, шлюз или аппаратный VoIP-телефон. SIP-агенты взаимодействуют между собой напрямую (в случае использования технологии SIP Peer to Peer), либо через SIP-серверы и прокси для исходящих соединений.
Здесь уместно внести ясность, что, собственно, сам протокол SIP голос не передаёт. Он используется только для установки сеанса связи и управления им. Сами голосовые данные передаёт протокол RTP (RealTime Protocol – протокол работы в режиме реального времени). То есть, для сеанса связи VoIP с использованием протокола SIP, используется не только сам SIP, но и RTP. Причём, работают они параллельно, но по разным портам – SIP координирует сессию, а RTP передаёт голос.
Без использования RTP, SIP не может передавать голос, а без SIP, RTP не сможет установить сеанс связи.
Помимо этого, для передачи по RTP существует множество кодеков, т.е. математических алгоритмов компрессии-декомпрессии голоса, которые между собой несовместимы. Важно понимать, что не все SIP-совместимые устройства совместимы между собой. Помимо поддержки протокола SIP они ещё должны поддерживать и общие кодеки – тогда и только тогда, эти устройства смогут не только связаться между собой, но и передавать голос так, чтобы его услышал пользователь.
Многообразие кодеков возникло из-за того, что в разное время были разработаны алгоритмы компрессии под различные применения. Количественно кодеки различаются по требованиям к полосе пропускания, качественно – по качеству передачи голоса. В данном случае уместна некоторая аналогия с форматом MP3 – можно сжать песню с битрейтом 32 кбит в сек., она станёт занимать в 4 раза меньше места, чем песня с битрейтом 128 кбит в сек, но и качество её ощутимо снизится.
Говоря о качестве работы кодеков нужно уточнить, что оно зависит как от частоты дискретизации (т.е. точности преобразования голоса в цифровой поток), так и от алгоритма работы самого кодека. Дело в том, что при передаче через IP-сети часть кадров, как правило, теряется, что требует от кодека способности максимально сгладить такие "провалы". Т.е. кодек для передачи голоса по IP должен не только максимально хорошо и близко к оригиналу сжимать битовый поток, но и сглаживать провалы, вызванные потерями пакетов.
В приведённой таблице перечислены самые распространённые кодеки и их важнейшие параметры:
* Полоса потока без учёта размера заголовков сетевых пакетов.
*** Реально требуемая полоса рассчитывается по общей формуле:
Bt=Fp*Otr+Fp*Ortp+Bc
где Fp – частота пакетов кодека, Bc – поток генерируемый кодеком, Otr – суммарный размер заголовков пакетов уровней ниже IP (по OSI), а Ortp – размер заголовков протокола RTP (320 бит). Например, для кодека G.711 при использовании ADSL: Bt=50*40+50*320+64000=82000 бит в сек.
** Здесь следует заметить, что параметр Fp*Otr следует учитывать только в том случае, если есть ограничение скорости на уровне транспортного протокола ниже IP. Например, если провайдер предоставляет вам канал передачи данных шириной 128 килобит в сек. и ограничивает его скорость на уровне протокола IP (обычно т.н. шейпером), то параметр Fp*Otr учитывать не нужно, поскольку шейпер не учитывает размер Otr.
Но если ограничение в 128 килобит в сек. устанавливается при соединении модемов, то учитывать Otr нужно, поскольку при таком ограничении размер Otr важен. В этой связи, лучше договорится с провайдером, чтобы он ограничивал ширину канала IP-шейпером, а т.н. скорость "сцепки" модемов (фактическую битовую скорость соединения модемов) устанавливал в два раза выше ограничения на шейпере.
Немаловажным фактором при использовании VoIP является обеспечением качестве обслуживания IP-пакетов (QoS). Прежде всего, это важно на каналах, которые бывают перегружены – в этом случае перед внедрением VoIP нужно обеспечить для SIP- и RTP-трафика приемлемые условия. В противном случае могут происходить постоянные "выпадения" слов из разговора или вовсе его прерывание. Эффект этот очень похож на некачественную сотовую связь. Кстати, GSM в этом смысле родственен VoIP, поскольку тоже использует пакетную передачу данных полученных с кодеков, а кодеки GSM используются в VoIP и поддерживаются многим оборудованием.