Opened 8 years ago
Last modified 7 years ago
#333 closed баг
Программа не использует TCP SIP транспорт — at Version 7
Reported by: | alx | Owned by: | dimag |
---|---|---|---|
Priority: | major | Milestone: | 2 очередь |
Component: | ПО MC04-Dispatcher. Пульт диспетчера/техника | Keywords: | network |
Cc: | san |
Description (last modified by )
Сейчас в процессе работы программа не слушает ни один TCP порт, из чего следует, что она не принимает TCP соединения для SIP. Это неправильно. Необходимо принимать SIP сообщения через TCP транспорт тоже.
Change History (7)
comment:1 by , 8 years ago
follow-up: 3 comment:2 by , 8 years ago
Можно использовать следующие виды транспорта
PJSIP_TRANSPORT_UDP,
PJSIP_TRANSPORT_TCP,
PJSIP_TRANSPORT_TLS,
PJSIP_TRANSPORT_SCTP
Но в транспортной части клиента можно использовать только один из них, так что если надо добавить новую настройку во вкладку "Сеть" окна настроек с выбором транспортного протокола.
Это вопрос к Александру и Ване - вам нужен подобный функционал?
comment:3 by , 8 years ago
Replying to dimag:
Но в транспортной части клиента можно использовать только один из них,
Не понял эту часть фразы. Что Вы имеете в виду?
follow-up: 5 comment:4 by , 8 years ago
Только один в данный момент времени, это и имел в виду, который и нужно задать перед инициализацией транспортного протокола.
comment:5 by , 8 years ago
Replying to dimag:
Только один в данный момент времени,
Если имеется в виду, что SIP сервер программы слушает только UDP сокет, как я это вижу сейчас, то это неправильно. Транспорт UDP имеет ограничение на размер сообщения, и, если сообщение превышает этот размер, клиент не может отправить его через транспорт UDP, вместо этого он пытается использовать TCP. А так как наш сервер TCP не слушает, сообщение в результате вообще не будет принято, а это обидно (прервется диалог).
RFC3261 в разделе "Transport" говорит: "All SIP elements MUST implement UDP and TCP".
И там же комментарий:
Making TCP mandatory for the UA is a substantial change from RFC 2543. It has arisen out of the need to handle larger messages, which MUST use TCP, as discussed below. Thus, even if an element never sends large messages, it may receive one and needs to be able to handle them.
follow-up: 7 comment:6 by , 8 years ago
Согласно https://trac.pjsip.org/repos/wiki/Using_SIP_TCP#, PJSIP автоматически перключиться на протокол TCP, по следующему алгоритму, описанную по ссылке выше.
According to RFC 3261 section 18.1.1:
"If a request is within 200 bytes of the path MTU, or if it is larger than 1300 bytes and the path MTU is unknown, the request MUST be sent using an RFC 2914 congestion controlled transport protocol, such as TCP."
By this rule, PJSIP will automatically send the request with TCP if the request is larger than 1300 bytes. This feature was first implemented in ticket #831. The switching is done on request by request basis, i.e. if an initial INVITE is originally meant to use UDP but end up being sent with TCP because of this rule, then only that initial INVITE is sent with TCP; subsequent requests will use UDP, unless of course if it's larger than 1300 bytes. In particular, the Contact header stays the same. Only the Via header is changed to TCP.
То есть виды транспорта перечиленные в замечание 3, задают основной используемый транспортный протокол, если он чем-то не устраивает, то происходит переключение на TCP.
comment:7 by , 8 years ago
Description: | modified (diff) |
---|
Replying to dimag:
According to RFC 3261 section 18.1.1:
В процитированном фрагменте идет речь об отправке запроса клиентом. В описании же тикета идет речь вовсе не об отправке запроса клиентом, а о получении запроса сервером. - в описании тикета не случайно написано "...не слушает ни один TCP порт...", то есть речь идет о приеме входящих соединений TCP, а не об установке исходящих. В comment:5 я также прямым текстом написал, что речь идет о сервере, а не о клиенте...
Описание тикета изменил, заменив не очень понятное "не использует" на "не принимает соединения...".
По умолчанию используется UDP транспорт.