Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

SIP_513_MESSAGE_TOO_LARGE IP-Телефония и СКУД

SIP 513 Message Too Large: превышение MTU, фрагментация UDP и переход на TCP

Обновлено: 24.08.2026 · Официальная документация ↗

Случайные или постоянные сбои при установлении сложных сессий вызовов:

  • Сервер или пограничный маршрутизатор возвращает ответ SIP/2.0 513 Message Too Large.
  • Вызов отбивается при включении большого числа кодеков, длинных списков маршрутизации Record-Route или передачи сертификатов/токенов безопасности.
  • Размер сигнального UDP-пакета превышает стандартный лимит MTU (1500 байт) или порог 1300 байт, определенный RFC 3261.
  • Потеря фрагментов IP-пакетов на промежуточных маршрутизаторах интернета.

1. Архитектурное требование RFC 3261 (Раздел 18.1.1)

Согласно стандарту, если размер SIP-сообщения в ненадежном транспорте UDP превышает величину Path MTU минус 200 байт (при неизвестном MTU — более 1300 байт), клиентский терминал или прокси ОБЯЗАН переключиться на использование протокола TCP.

2. Перевод транков и абонентов на TCP / TLS

Для гарантированного устранения ошибки 513 включите транспорт TCP в pjsip.conf:

; Настройка TCP транспорта:
[transport-tcp]
type=transport
protocol=tcp
bind=0.0.0.0:5060

; Привязка транспорта к транку оператора:
[provider-endpoint]
type=endpoint
transport=transport-tcp
media_address=203.0.113.10
context=from-trunk

3. Очистка и минимизация размера заголовков в Asterisk / Kamailio

Если переключение на TCP невозможно со стороны оператора, уменьшите размер UDP-пакета:

  • Сократите список кодеков: Оставьте только 1–2 используемых кодека (например, alaw и g729), удалив тяжелые видеокодеки и избыточные профили.
  • Удалите лишние кастомные заголовки: Исключите громоздкие заголовки X-CRM-*, User-Agent и неиспользуемые P-Header.

Пример оптимизации в диалплане:

[macro-clean-headers]
exten => s,1,NoOp(Removing custom headers)
same => n,Set(PJSIP_HEADER(remove,X-Long-Data)=)
same => n,Return()

4. Проверка и увеличение MTU на сетевых интерфейсах

Если в инфраструктуре используются VPN-туннели (IPsec, WireGuard, GRE), где заголовок туннеля уменьшает полезный размер MTU:

# Проверка текущего MTU:
ip link show eth0

# Включение фрагментации в iptables TCPMSS (для TCP):
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
💡 Практика специалистов: Для любых транков с поддержкой видео, передачи файлов (MSRP) или шифрования SDES/DTLS всегда по умолчанию используйте только TCP или TLS (порт 5061) в качестве транспортного протокола.

Частые вопросы (FAQ)

Почему размер UDP-пакета в SIP критичен?

При превышении размера стандартного MTU (1500 байт) IP-пакет фрагментируется на уровне операционной системы. Потеря даже одного маленького фрагмента делает невозможной сборку всего SIP-сообщения, приводя к 'тихому' сбросу звонка.

Что должен сделать клиент при получении ответа 513?

Клиентский стек (UAC) должен повторить тот же самый запрос INVITE, автоматически переключив транспортный протокол с UDP на TCP.

Может ли включение WebRTC вызывать ошибку 513?

Да. SDP-оферы WebRTC содержат огромный объем данных (ICE кандидаты, DTLS отпечатки, криптографические атрибуты) и их размер часто достигает 2-4 КБ, что делает невозможным их передачу через стандартный UDP.

Как в Kamailio принудительно переключать большие сообщения на TCP?

Используйте модуль corex и функцию msg_apply_changes(): if (msg_size > 1300 && proto == UDP) { t_relay_to_tcp(); exit; }.

Полезные материалы
Рекомендуем