Re: [hybi] Multiplexing extension spec draft 03

Greg Wilkins <gregw@intalio.com> Wed, 29 February 2012 00:03 UTC

Return-Path: <gregw@intalio.com>
X-Original-To: hybi@ietfa.amsl.com
Delivered-To: hybi@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 73B5221E806F for <hybi@ietfa.amsl.com>; Tue, 28 Feb 2012 16:03:21 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.543
X-Spam-Level:
X-Spam-Status: No, score=-2.543 tagged_above=-999 required=5 tests=[AWL=0.433, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-1]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Y0km2jn4INqQ for <hybi@ietfa.amsl.com>; Tue, 28 Feb 2012 16:03:20 -0800 (PST)
Received: from mail-tul01m020-f172.google.com (mail-tul01m020-f172.google.com [209.85.214.172]) by ietfa.amsl.com (Postfix) with ESMTP id 7CA4C21E8051 for <hybi@ietf.org>; Tue, 28 Feb 2012 16:03:20 -0800 (PST)
Received: by obbeh20 with SMTP id eh20so3958632obb.31 for <hybi@ietf.org>; Tue, 28 Feb 2012 16:03:20 -0800 (PST)
Received-SPF: pass (google.com: domain of gregw@intalio.com designates 10.60.5.138 as permitted sender) client-ip=10.60.5.138;
Authentication-Results: mr.google.com; spf=pass (google.com: domain of gregw@intalio.com designates 10.60.5.138 as permitted sender) smtp.mail=gregw@intalio.com
Received: from mr.google.com ([10.60.5.138]) by 10.60.5.138 with SMTP id s10mr2537349oes.66.1330473800211 (num_hops = 1); Tue, 28 Feb 2012 16:03:20 -0800 (PST)
MIME-Version: 1.0
Received: by 10.60.5.138 with SMTP id s10mr2209728oes.66.1330473800107; Tue, 28 Feb 2012 16:03:20 -0800 (PST)
Received: by 10.60.55.166 with HTTP; Tue, 28 Feb 2012 16:03:20 -0800 (PST)
In-Reply-To: <CAH9hSJb1ewPO3EBgD78anD+=4XouToGR4X7C1wvWqonc2nYB6g@mail.gmail.com>
References: <CAH9hSJb1ewPO3EBgD78anD+=4XouToGR4X7C1wvWqonc2nYB6g@mail.gmail.com>
Date: Wed, 29 Feb 2012 11:03:20 +1100
Message-ID: <CAH_y2NFrvg-cjGAT-AsGS0B6+UvAjpvhhzwYa7jBQwQ+pVFOog@mail.gmail.com>
From: Greg Wilkins <gregw@intalio.com>
To: Takeshi Yoshino <tyoshino@google.com>
Content-Type: multipart/alternative; boundary="e89a8ff252ce3d075804ba0f120d"
X-Gm-Message-State: ALoCoQk1+I9tit3JhFav02CUj+niK2KpMmHJwHCcg99gysgBrZZdCFa+6sT3SqE6ZxO2UW3YvKdC
Cc: hybi@ietf.org
Subject: Re: [hybi] Multiplexing extension spec draft 03
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.12
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, 29 Feb 2012 00:03:21 -0000

Some comments


3.

   If WebSocket payload data is masked by a per-frame key, such masking
   is applied to frames for each logical channel separately.


I'm not sure what it means to apply masking to a logical channel
separately?  Surely a mask is applied to the frame that carries it before
the MUX extension interprets the payload?

5.  Flow Control   Each logical channel, including the implicitly
created channel 1, is
   initially given a quota of bytes that may be transmitted in each
   direction without acknowledgement.  It is illegal to send more bytes
   than the remaining send quota, and the receiver MUST _Fail the
   Logical Channel_ for any sender that does so.

Should this not be a failure of the physical channel as it indicates a
failure of the other ends MUX implementation?

   This send quota is
   replenished via control frames as the receiver processes the data.

s/This/The/

7.  Multiplex Control Frames

nice clarifications in this section! - specifically "Objectve channel ID"

Is the text diagram a standard?  I find the + - - - - - + lines confusing
and would prefer to see:

      0 1 2 3 4 5 6 7
     +---------------+
     | Objective     |
     : channel ID    :
     | (8-32)        |
     +-----+---------+
     | Opc | Opcdata |
     +-----+---------+
     | Additional    |
     : data          :
     | (0-?          |
     +---------------+


7.1.  Multiplex Control Opcodes   0 - AddChannel request (only from client)
      Create a new logical channel, exactly as if a new connection were
      received on a separate transport connection,

s/exactly //
s/a new logical channel/the objective channel/

probably need to state somewhere that it is an error to add and already
added channel.


      0 - uncompressed

This is a bad name for this encoding scheme as it implies there is a
compressed scheme (OK delta encoding is a compression... but you know what
I mean).   How about calling this "absolute" or "complete" or "plain" ?

      The initial quota for the new logical channel is 0, so the client
      may not send any data for this connection until the AddChannel
      response is received.

Does this mean that control frames can be sent for a channel before the add
channel response is received?

   3 - DropChannel

Can a dropped channel be readded later?

11.  Fairness

   A multiplexing implementation MUST ensure reasonable fairness among
   the logical channels.  This is accomplished in several ways:

   Receiver side

   o  The receiver MAY limit the other peer's send quota of a logical
      channel by not replenishing the send quota to make sure that any
      logical channel cannot dominate its buffer space on the sender.

s/on the sender//   as it is the buffer space on the receiver that is of
concern

Also we should say that the receiver does not need to process frames from
different logical channels serially.  ie the processing of a message from a
logical channel should not defer the processing of messages on other
logical channels.

   o  The sender MUST fragment a message into smaller frames when it's
      too big so that that logical channel will occupy the connection
      and the other logical channels get stuck for long time.

Cumbersome.  How about: The sender MUST fragment a large message into
smaller frames to prevent a large message in a logical channel occupying
the physical channel and thus delaying messages in other logical channels.

   o  Logical channel frames that are sent SHOULD be limited in size
      (such as by refragmenting) when there is contention for the
      physical channel to minimize head-of-line blocking

How is this different from the previous?



13.  Nesting

I think we should disallow nesting.  Any intermediary that wants to MUX
channels understands MUX, so it can flatten.



cheers