Networking

IP-телефония

Телефонная связь поверх IP-сетей: голос оцифровывается, сжимается кодеком и передаётся пакетами вместо аналоговой линии.

Что такое IP-телефония

IP-телефония (VoIP, Voice over IP, «айпи телефония») — передача голоса через компьютерные сети вместо традиционных телефонных линий. Микрофон оцифровывает звук, кодек сжимает его, а дальше голос летит теми же IP-пакетами, что и веб-трафик.

Разница с обычной телефонией — в том, чего у IP-телефонии нет. Аналоговая связь выделяла под каждый разговор физический канал: занятая линия принадлежала вам целиком. В IP-сети выделенного канала нет — пакеты с голосом конкурируют за полосу со всем остальным трафиком. Отсюда и плюсы (звонок стоит копейки, номер не привязан к проводу), и главная сложность — качество зависит от того, как ведёт себя сеть.

Как устроен звонок

Работают два протокола, и это важно понимать при отладке:

SIP  — сигнализация: найти абонента, дозвониться, положить трубку
RTP  — сам голос, поток пакетов каждые 20 мс

Абонент A ──SIP INVITE──▶ АТС ──SIP INVITE──▶ Абонент B
Абонент A ◀════ RTP: голос идёт напрямую ════▶ Абонент B

SIP только договаривается о звонке, голос он не несёт. Поэтому классическая жалоба «звонок соединяется, но собеседника не слышно» — это всегда RTP: сигнализация прошла, а медиапоток заблокирован файрволом или NAT.

Протокол Порт Транспорт Что делает
SIP 5060 UDP/TCP сигнализация
SIPS 5061 TLSшифрованная сигнализация
RTP диапазон, часто 10000–20000 UDP голосовой поток

RTP работает поверх UDP намеренно: переспрашивать потерянный кусок голоса бессмысленно — пока он придёт, разговор уйдёт вперёд. Лучше пропустить 20 мс, чем ждать.

Кодеки

Кодек Полоса на звонок Замечание
G.711 ~64 кбит/с без сжатия, эталонное качество, стандарт на стыках
G.729 ~8 кбит/с сильное сжатие, экономит канал
Opus адаптивно широкополосный, подстраивается под сеть

С заголовками звонок по G.711 занимает около 85–100 кбит/с. Считать полосу надо на пиковое число одновременных разговоров, а не на число сотрудников.

Что реально ломает качество

Голосу не нужна широкая полоса — ему нужна предсказуемость. Три параметра решают всё:

  • Задержка. Выше ~150 мс в одну сторону — собеседники начинают перебивать друг друга.
  • Джиттер — разброс задержки. Пакеты, идущие через равные 20 мс, приходят рванно; сглаживает jitter buffer, но он же добавляет задержку.
  • Потери. Даже 1–2% слышны как выпадение слогов.

Практический вывод: QoS — не роскошь, а условие работы. Голос помечают DSCP EF (46) и пропускают вперёд остального трафика. Чаще всего виновата не полоса, а bufferbloat: заливка большого файла забивает буфер роутера, задержка улетает до сотен миллисекунд, и звонок рассыпается при формально свободном канале.

Вторая типовая беда — NAT. SIP передаёт адреса внутри тела сообщения, а NAT их не переписывает: сервер пытается слать голос на приватный адрес 192.168.x.x. Лечится настройкой внешнего адреса на АТС, STUN или SBC на границе сети.

Своя АТС

Софтовая АТС ставится на обычный VPS — самые известные Asterisk и FreeSWITCH, оба open source.

; Asterisk: внутренний номер и внешний адрес за NAT
[101]
type=friend
context=internal
host=dynamic
secret=СЛОЖНЫЙ_ПАРОЛЬ
nat=force_rport,comedia

Что учесть при размещении:

  • Ресурсы скромные. Сигнализация почти ничего не стоит; процессор нужен, только если АТС перекодирует потоки между кодеками — этого лучше избегать.
  • Регион важнее мощности. Задержку не купить: сервер берут ближе к абонентам.
  • SIP сканируют постоянно. Открытый в интернет порт 5060 находят ботами за часы, а взлом означает счёт за международные звонки. Ограничивайте доступ по IP, ставьте fail2ban, никогда не используйте простые пароли и номер в качестве логина.
  • Шифруйте. SIPS и SRTP — иначе разговор читается на любом узле по пути.

Связанные термины

  • QoS — приоритизация, без которой голос страдает
  • TCP и UDP — почему RTP идёт по UDP
  • latency — ключевая метрика качества связи
  • NAT — источник проблемы «звоню, но не слышно»
  • Сетевые порты — 5060, 5061 и диапазон RTP
  • VPS — типичное место для софтовой АТС

Готовы запустить GPU-задачу?

Запустить GPU-сервер