Должен ли SIP UAS / UAC прослушивать протоколы TCP и UDP на одном и том же порту? - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть freeswitch с двумя зарегистрированными подписчиками.
Например, A и B.
Но B не может одновременно прослушивать протоколы TCP и UDP на одном и том же порту.Поэтому, если я настрою B для UDP и позвоню из A в B через freeswitch.И freeswitch пытается подключиться к B через TCP, затем происходит сбой, и он отправляет 503 Service Unavailable на A.
Я знаю о пункте 8.1.3.1 в RFC3261.Но я не уверен в этом и хочу спросить, что говорит об этом стандарт SIP.Разве вы не должны пытаться отправить сообщение по UDP, если не можете установить TCP-соединение?
Я прочитал стандарт SIP, но ничего не нашел по этому поводу (может быть, я пропустил это).
Более того, я хочузнать, если это ошибка свободного переключения.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

От rfc3261:

18.2 Серверы

18.2.1 Получение запросов

Сервер ДОЛЖЕН быть готов к приему запросов на любой IP-адрес, порт и транспорткомбинация, которая может быть результатом поиска DNS по SIP или SIPS URI [4], который раздается для связи
с этим сервером.В этом контексте «раздача»
включает в себя размещение URI в поле заголовка контакта в запросе REGISTER
или ответе на перенаправление, или в поле заголовка Record-Route в
запросе или ответе.URI также можно «раздать», разместив его
на веб-странице или визитной карточке.Также РЕКОМЕНДУЕТСЯ, чтобы сервер прослушивал запросы на портах SIP по умолчанию (5060 для TCP и UDP,
5061 для TLS через TCP) на всех открытых интерфейсах.Типичным исключением
могут быть частные сети или когда несколько экземпляров сервера
работают на одном хосте.Для любого порта и интерфейса
, который сервер прослушивает для UDP, он ДОЛЖЕН прослушивать этот же порт
и интерфейс для TCP.Это связано с тем, что сообщение может быть отправлено с использованием TCP, а не UDP, если оно слишком большое.В результате обратное
неверно.Серверу не нужно прослушивать UDP для
определенного адреса и порта только потому, что он прослушивает тот же адрес и порт для TCP.Конечно, могут быть и другие причины, по которым серверу необходимо прослушивать UDP для определенного адреса и порта.

На практике служба в реальной жизни ДОЛЖНА прослушивать весь обязательный транспорт.В противном случае у пользователей возникают проблемы.

В любом случае, клиент на практике будет использовать либо UDP, либо TCP (или TLS).Но не оба.Это действительно не должно быть проблемой, если A и B используют разные виды транспорта, потому что служба (здесь свободный режим) должна взаимодействовать с UDP для A и с TCP для B. Использование разного транспорта для каждого пользователя не должно быть причиной сбоя маршрутизации.

Для завершения SIP-серверы обычно не могут отправлять сообщения SIP-клиентам без существующего соединения (из-за NAT, брандмауэра ...).Клиенты SIP обычно создают REGISTER (и, таким образом, создают повторно используемое TCP-соединение или повторно используемую привязку UDP), затем при необходимости сервер всегда будет повторно использовать это TCP-подключение или UDP-привязку (так называемый обратный путь) для пересылкиновый запрос (ПРИГЛАШЕНИЕ).

В реальном мире другого пути нет!

0 голосов
/ 14 декабря 2018

Если вы отправляете запрос REGISTER из B с транспортом TCP в заголовке контакта, то freeswitch будет связываться с TCP еще с UDP.Для вашего случая, да, это возможно.UAS / UAC может прослушивать один и тот же порт с TCP и UDP.Вы можете создать сокет с TCP и UDP в коде.Ниже UAS прослушивает UDP и TCP.enter image description here

...