On 31/03/15 10:04, Jiri Horky wrote:
> Hi all,
> 
> continuing yesterday's IRC discussion. I would like to ask whether you
> can think of a reason why TUN_MTU_MIN is set to only 100 bytes, and
> maybe more importantly, why this value is effectively enforced in function
> 
> static void
> tls_init_control_channel_frame_parameters(const struct frame
> *data_channel_frame,
>                  struct frame *frame)
> ....
>   /* set dynamic link MTU to minimum value */
>   frame_set_mtu_dynamic (frame, 0, SET_MTU_TUN);
> 
> We were debugging slow connection establishment on links with higher RTT
> (>200ms), which takes about 7seconds. We tracked the problem down to
> certificate handshake on a control channel, where client and server need
> to exchange certificates which are about 3KiB each, and because the
> enforced low MTU during tls init, and the fact that there are at maximum
> 4 unacknowledged packets on wire (CONTROL_SEND_ACK_MAX), it takes quite
> a lot of round trips to transfer it (it is clearly visible in wireshark,
> that the openvpn fragments are exactly of 100Bytes).
> 
> I tried to increase the TUN_MTU_MIN to 1000 (which should be safe on
> nowadays Internet), which immediately helped.
> 
> Before I make the change on our servers, I would like to understand
> whether I may not break something by doing so.
> 

Just to summarize what was said on the IRC chat as well.

The frame_set_mtu_dynamic() sets the *dynamic* MTU on the *control
channel*.  That should never go below TUN_MTU_MIN.

It's good that you've found a potential bug, which is improved by
increasing the TUN_MTU_MIN.  However, I believe it is wrong to just
increase that value and be happy.  We need to understand better why the
dynamic MTU on the control channel isn't set to a higher value in the
TLS handshake process.

You mentioned you saw in your logs:

    Control Channel MTU parms [ L:1558 D:138 EF:38 EB:0 ET:0 EL:0 ]

The D: field says here the dynamic MTU is starting at 138, while the L:
is the link MTU.  Could you please enable debug logging and set
verbosity level to 7 and see if you find any "MTU DYNAMIC mtu=" messages
in your log file?  That should give an indication if the dynamic MTU is
changing at all.


-- 
kind regards,

David Sommerseth

Reply via email to