[OpenSIPS-Users] tcp_async timeouts confusion

Liviu Chircu liviu at opensips.org
Thu Jan 11 04:38:30 EST 2018


Answers below,

On 09.01.2018 22:25, Steve Brisson wrote:
>
> *** Using TCP ***
>
> After the invite is sent to the vcs, tcpdump at the opensips server 
> showed 100, 180, and 200 OK responses from the vcs arriving and ACK'd 
> correctly at the opensips server. The 100 response arrived 185ms after 
> the invite is sent. But, I don't see these responses in the branch's 
> onreply_route, the global onreply_route, or in the log at DBG level. 
> netstat -t shows the connection with the data in the recv-q that never 
> reaches 0. This implies to me that opensips is not polling that 
> connection correctly for recv data.
>
> If I disable tcp_async then the call is completed successfully. So in 
> the case that works, I have tcp_connect_timeout=3000 and tcp_async=0.
>
Just to confirm the scenario: So the signaling is broken with 
"tcp_connect_timeout=3000 and tcp_async=1" (reply routes do not get 
triggered / recv-q keeps on growing), however once you switch to 
"tcp_async=0", everything is back to working?
>
> *** Using TLS ***
>
> Running tcpdump, I see the opensips server send a Client Hello then a 
> FIN packet 100ms later. The vcs responds with a Server Hello 200ms 
> after the Client Hello and this gets RST.
>
> To workaround this case, I set tls_handshake_timeout=3000 and 
> tls_send_timeout=1000. Maybe this is the correct behavior, I'm still 
> not 100% sure how the tls parameters function.
>
This time, it's behaving as expected. Maybe there should be a diagram 
somewhere with how these parameters work together. For example, each TLS 
connection will roughly follow the below steps along with their 
corresponding parameterized timeouts:

1. TCP connect (tcp_connect_timeout)
2. TLS connect/accept handshake (tls_handshake_timeout)
3. TLS write (tls_send_timeout)
4. TLS write (tls_send_timeout)

Liviu Chircu
OpenSIPS Developer
http://www.opensips-solutions.com

> *From:*Users [mailto:users-bounces at lists.opensips.org] *On Behalf Of 
> *Liviu Chircu
> *Sent:* Tuesday, January 9, 2018 3:20 AM
> *To:* users at lists.opensips.org
> *Subject:* Re: [OpenSIPS-Users] tcp_async timeouts confusion
>
> Hi, Steve!
>
> The transport layer was heavily refactored roughly three years ago, 
> see [1], [2] and [3] for the relevant commits which, indeed, bumped 
> the default connect timeout down a lot, to a much lower value (10s -> 
> 100ms). Although 100ms might seem unnecessary (it's async! let it 
> sleep as long as it wants!), keep in mind that the TLS support isn't 
> async at all, yet it will also make use of the same, default 
> "tcp_connect_timeout" - a 10s default here is quite bad for high 
> traffic volume TLS proxies which often need to open up lots of TCP/TLS 
> connections.
>
> All in all, the "tcp_connect_timeout" should not get ignored at all. 
> The "tcp_async_local_connect_timeout" [4] is the first one that hits, 
> after which the connect waiting will be performed by a non-TCP worker, 
> up to "tcp_connect_timeout" milliseconds. If it doesn't behave like 
> this, let us know, and we'll look into it more.
>
> Best regards,
>
> [1]: https://github.com/OpenSIPS/opensips/commit/b343ca1c 
> <https://github.com/OpenSIPS/opensips/commit/b343ca1c>
> [2]: https://github.com/OpenSIPS/opensips/commit/78c84620
> [3]: https://github.com/OpenSIPS/opensips/commit/11aedc6 
> <https://github.com/OpenSIPS/opensips/commit/11aedc6>
> [4]: 
> http://www.opensips.org/html/docs/modules/2.4.x/proto_tcp.html#idp5544000
>
> Liviu Chircu
> OpenSIPS Developer
> http://www.opensips-solutions.com
>
> On 08.01.2018 22:38, Steve Brisson wrote:
>
>     Hi,
>
>     I've run into some issues related to tcp_async and tcp/tls
>     timeouts since upgrading opensips from v1.8 to v2.3.
>
>     Based on my v1.8 config, I had the tcp_connect_timeout set to 3
>     secs but this gets ignored in v2.3 because tcp_async is enabled by
>     default. As a result, calls made from a local opensips endpoint to
>     a remote registered endpoint (through a cisco vcs) were failing. I
>     then noticed that the tcp/tls timeouts were aggressively reduced
>     from 10-30s to 100ms by default with the tcp_async feature.
>
>     My main questions are:
>
>     - How is the tcp_async feature supposed to function if the
>     tcp_async_local_connect_timeout expires? The code seems to imply
>     that the socket gets put onto a tcp main thread and handled.
>
>     - 100ms seems pretty short as a default for these timeouts,
>     especially tls. Does a timeout result in the sip request getting
>     cancelled or is there still some processing that can occur after
>     because of handling on the tcp main thread.
>
>     In short, I'm a confused about what the tcp_async feature does and
>     how the timeouts should be set. Any explanations would be greatly
>     appreciated.
>
>     Thanks for your time.
>
>     steve
>
>
>
>
>     _______________________________________________
>
>     Users mailing list
>
>     Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>
>     http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20180111/81b524c2/attachment-0001.html>


More information about the Users mailing list