Re: [hybi] Is it important to know frame length at the start of frame? (was: Re: Discontinuation of mux ...)

Joakim Erdfelt <joakim@intalio.com> Wed, 12 February 2014 16:13 UTC

Return-Path: <joakim@intalio.com>
X-Original-To: hybi@ietfa.amsl.com
Delivered-To: hybi@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0ED5F1A08D1 for <hybi@ietfa.amsl.com>; Wed, 12 Feb 2014 08:13:25 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.977
X-Spam-Level:
X-Spam-Status: No, score=-1.977 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VA5mL7Z8OO6q for <hybi@ietfa.amsl.com>; Wed, 12 Feb 2014 08:13:20 -0800 (PST)
Received: from mail-ee0-f42.google.com (mail-ee0-f42.google.com [74.125.83.42]) by ietfa.amsl.com (Postfix) with ESMTP id 18F151A0335 for <hybi@ietf.org>; Wed, 12 Feb 2014 08:13:19 -0800 (PST)
Received: by mail-ee0-f42.google.com with SMTP id b15so4470372eek.29 for <hybi@ietf.org>; Wed, 12 Feb 2014 08:13:18 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=2NYckJ4zbkIAEzS/hDWV9kMF9yBUcD6cqjtrjsdgnUI=; b=XsYrroAn5R37Jg2zG0t6VsF3/T0N07tfYlNYPqK5g7jcLL5dXRiFtyQONIKN34Jh2w YG7tZfWSOqtv/RIZfl9ouqJCUiPWWIlrw7bkqpVr79EwYkb40YGM7xK1RXeS7RhNtVSK XBbg/6os/GztlNVNaG5kIqSBcAl1L8IDTvMd3ndDP9q3hdfH6RI23Zf9aDUcbWZ72Q5k XFpYaE9hWDS1n2RhI9WWl88UKgc1uXTTIRwvstkV+NLXmrymkHMX9DXLY6iZet4FE/Wg uMX5ssPrcZiiuKiwu07/51K/4fV0YgP/d5942L5Kvcpqjs8caCXVU54+wa5pZC715VTo ty0Q==
X-Gm-Message-State: ALoCoQlyO5QRmB7iXdO1C3NKZq9zq0wen9bLuqQe1IdDFmwOE9NtSHI835Ywilhs50uOfds9xm9I
MIME-Version: 1.0
X-Received: by 10.14.9.134 with SMTP id 6mr4937761eet.70.1392221598762; Wed, 12 Feb 2014 08:13:18 -0800 (PST)
Received: by 10.14.152.202 with HTTP; Wed, 12 Feb 2014 08:13:18 -0800 (PST)
In-Reply-To: <CACuKZqEcA1Pv8RpWfmThMjTzi2BbVMMKXqujs6BxVfxRPZJ9NQ@mail.gmail.com>
References: <CAH9hSJbf_ABT7ECL9eS=_ADrncX8qBtxZv=uLcdu9_6GUv23Uw@mail.gmail.com> <CACuKZqEcA1Pv8RpWfmThMjTzi2BbVMMKXqujs6BxVfxRPZJ9NQ@mail.gmail.com>
Date: Wed, 12 Feb 2014 09:13:18 -0700
Message-ID: <CAG4zZZCr4aTfVpw2coX2g0qw++4kdgNCFVze6tHKZ+fJNqb0aQ@mail.gmail.com>
From: Joakim Erdfelt <joakim@intalio.com>
To: Zhong Yu <zhong.j.yu@gmail.com>
Content-Type: multipart/alternative; boundary="001a11c2951cd7de1904f237d92f"
Cc: "hybi@ietf.org" <hybi@ietf.org>
Subject: Re: [hybi] Is it important to know frame length at the start of frame? (was: Re: Discontinuation of mux ...)
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/hybi>, <mailto:hybi-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/hybi/>
List-Post: <mailto:hybi@ietf.org>
List-Help: <mailto:hybi-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 12 Feb 2014 16:13:25 -0000

Scenario:
  Sending side uses a message stream based API to write out 1 websocket
message.
  The sending side's API is configured/implemented to buffer only 16k at a
time, writing out a frame of 16k for each buffer filled.
  The sending side writes out a 600k message.
  The receiving side is using a different API, one that is based on
complete messages.
  The receiving side is configured to not accept messages over 100k.
  The receiving side's API/implementation tosses a close code 1009 to the
sending side, per API.
  The receiving side's endpoint receives an error and close notification
indicating a protocol closure due to excessive message size from sending
side.



--
Joakim Erdfelt <joakim@intalio.com>
webtide.com <http://www.webtide.com/> - intalio.com/jetty
Expert advice, services and support from from the Jetty & CometD experts
eclipse.org/jetty - cometd.org


On Wed, Feb 12, 2014 at 9:00 AM, Zhong Yu <zhong.j.yu@gmail.com> wrote:

> Why not send the message in one frame? The frame length is then the
> message length.
>
> One argument for fragmentation is to insert control frames while
> transmitting a long message. However that reasoning is not very
> convincing:
>
> PONG - as long as we are writing data, any data, the peer should see
> that the connection is alive. It's unreasonable for the peer to think
> that our end is unresponsive while it is receiving data from us.
>
> PING - not necessary while we are writing data. If peer is
> unresponsive, we'll learn that from TCP layer.
>
> CLOSE - closing the connection in the middle of a message is abnormal
> anyway, it's probably not important to do the close handshake.
>
> Zhong Yu
>
>
> On Fri, Feb 7, 2014 at 1:30 AM, Takeshi Yoshino <tyoshino@google.com>
> wrote:
> > I remember that in early days of the standardization, somebody was
> proposing
> > (*) that we should have a message length field in the first fragment to
> > allow for allocating buffer for full message at the beginning.
> >
> > On Thu, Jan 16, 2014 at 3:27 PM, "Martin J. Dürst" <
> duerst@it.aoyama.ac.jp>
> > wrote:
> >>
> >> On 2014/01/16 15:05, Yutaka Hirano wrote:
> >>>
> >>> Hi Joakim,
> >>>
> >>> Thanks for the comment.
> >>>
> >>> Knowing the size of a frame at the start of the frame, traditional
> >>>>
> >>>> websocket behavior, is desired, as it allows us to fast fail for the
> >>>> 1009
> >>>> (message too big) use case.
> >>>
> >>>
> >>> Do you know how effective it is?
> >>>
> >>> Having no prior knowledge of frame size is undesirable to us.
> >>>
> >>> On the other hand, the frame sender have more freedom because they
> don't
> >>> have to know the size of the frame in front.
> >>
> >>
> >> My understanding of why messages are split into frames was that this
> would
> >> allow to start a message without knowing its length. But if you don't
> know
> >> the size of a frame before sending it, then the right solution is to
> make it
> >> smaller. Frames are just arbitrary pieces of a message.
> >
> >
> > We should be clear if we want to make it able to
> > (a) know the length of WebSocket frame on receiving the header of each
> > fragment
> > (b) know the length of WebSocket message on receiving the first fragment
> >
> > As the proposal (*) has been rejected and not in the RFC6455 header, (b)
> is
> > not true even in RFC6455. What Joakim said should be to keep (a) which is
> > true now in RFC6455.
> >
> > But if a message is fragmented into smaller frames, we cannot reject (and
> > send 1009) the message on receiving the first frame. "Whether we can
> > fast-reject a big message on receiving some non-final frame" depends on
> how
> > the peer fragments a message.
> >
> > In some plans discussed in the main thread, it's planned to drop frame
> > length info for efficiency. But something else such as the length field
> of
> > HTTP/2.0 DATA frame tells how much data the fragment (when multiple DATAs
> > convey a WebSocket frame, each DATA would be called fragments of a frame)
> > contains. So, we won't be able to know the length of fragments
> > (original/encapsulated WebSocket frames) on receiving each of them, but
> > still be able to know the length of sub-fragments (e.g. HTTP/2.0 data
> > frames).
> >
> > I think this change is acceptable and shouldn't be considered as
> breaking of
> > RFC6455 semantics. Even in the mux extension I was editing
> > (http://tools.ietf.org/html/draft-ietf-hybi-websocket-multiplexing-11),
> I
> > made the same change. The length of the encapsulated frame is unknown
> until
> > receiving all the fragments of the encapsulating message. No one was
> > objecting to that when we were discussing the spec, IIRC.
> >
> >
> > _______________________________________________
> > hybi mailing list
> > hybi@ietf.org
> > https://www.ietf.org/mailman/listinfo/hybi
> >
>
> _______________________________________________
> hybi mailing list
> hybi@ietf.org
> https://www.ietf.org/mailman/listinfo/hybi
>