Re: Design: Ignored Unknown Frame Types and Intermediaries

Roberto Peon <> Mon, 13 May 2013 22:09 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 1620A21F869A for <>; Mon, 13 May 2013 15:09:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -10.598
X-Spam-Status: No, score=-10.598 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-8]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id UdcHc-ePoECt for <>; Mon, 13 May 2013 15:09:23 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id ADE3A21F8630 for <>; Mon, 13 May 2013 15:09:23 -0700 (PDT)
Received: from lists by with local (Exim 4.72) (envelope-from <>) id 1Uc0vR-0000ZJ-Us for; Mon, 13 May 2013 22:08:58 +0000
Resent-Date: Mon, 13 May 2013 22:08:57 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtp (Exim 4.72) (envelope-from <>) id 1Uc0vF-0000Ux-RV for; Mon, 13 May 2013 22:08:45 +0000
Received: from ([]) by with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.72) (envelope-from <>) id 1Uc0vE-000863-SU for; Mon, 13 May 2013 22:08:45 +0000
Received: by with SMTP id wc20so7043480obb.7 for <>; Mon, 13 May 2013 15:08:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=jbYeFk9fO05sLy4uDj6+WJW5SsAXj1z5AAIfFZSHMMw=; b=kcLKM1QNbG9gu+m++Xy2tLbqSUAYnZB+Q2Y7O0WEBaP7K8MdT9tP+h6wbs8x2dPbLU ylA/Me0DNZWhne/c7+pmPI6pff0LhEmmrY34P8hdUJiuDLwvGOF8z5uxNB6v5X6BPJAF yVck8h1ufaoF3ac5FxQAxvVJ7Sxulq/2SkdV5sFOtKy/8bML+IB4BcZvcvCE3HzyEH+A MLkZgNckhE71BVcvT7caGyWCaluAeMVroUCOla17PsUkLlao9wr7BDNYlf1CahkamG9D vDVftIabiLUYX3WH9QaKJQ900YCCJe49h3UifIgJEGSsqGQ3QhWWDLzHMQT8pksyWssy orXA==
MIME-Version: 1.0
X-Received: by with SMTP id t6mr14622013oem.121.1368482898728; Mon, 13 May 2013 15:08:18 -0700 (PDT)
Received: by with HTTP; Mon, 13 May 2013 15:08:18 -0700 (PDT)
In-Reply-To: <>
References: <> <> <> <> <> <> <>
Date: Mon, 13 May 2013 15:08:18 -0700
Message-ID: <>
From: Roberto Peon <>
To: Martin Thomson <>
Cc: James M Snell <>, Yoav Nir <>, "" <>
Content-Type: multipart/alternative; boundary="089e014949720f5d9304dca0c152"
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-4.4
X-W3C-Hub-Spam-Report: AWL=-1.739, BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001
X-W3C-Scan-Sig: 1Uc0vE-000863-SU 3a3ab0265978220f95b1fff8b0ecd282
Subject: Re: Design: Ignored Unknown Frame Types and Intermediaries
Archived-At: <>
X-Mailing-List: <> archive/latest/17982
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

I believe that, if one does remove/ignore such frames the session may not
be as optimal as it might otherwise be, but the rule, by definition,
precludes the use of anything which would hinder interop if emitted, but
then ignored by the receiver.
The rule is that one MUST NOT send a frame if its removal would cause
session corruption/termination/problems.
So, can you provide an example? :)

I think the version string is the most robust way to ensure that an
intermediary does the right thing-- If an intermediary sees a version
string it doesn't recognize, it simply doesn't allow the negotiation of
that variant.
This is more simple because the lack of an explicit negotiation for this
will lead to either:
1) implementations which ignore the spec, since their mission is to provide
security and consistency
2) Clients, servers, and proxies all maintaining a heuristic and
table/history about when and why sessions were terminated when a not
standardized opcode was
 I don't want to have to have maintain a table of endpoints which have sent
me some error-code or terminated my session because I included an unknown
opcode type (that would be pretty complicated). This would have to be done
for both sides, for that matter.

I'd prefer to say that an intermediary MUST NOT touch things in the session
which it does not recognize if it doesn't know the version, but allowed the
version to be negotiated, and it MAY remove things it doesn't know from a
session when the version is one which is fully specified.

That allows the intermediary to simply not negotiate things it doesn't like
on a per-connection basis, instead of having to have this complex cache of
'this feature doesn't work when X,Y,Z'.

James has pointed out that a reverse proxy may still have some difficulties
with this, assuming it wishes to support an unknown extention, but, I think
that trade (no longer requiring clients and servers to have to worry about
this, while having the proxy continue to worry about it) is reasonable.


On Mon, May 13, 2013 at 2:13 PM, Martin Thomson <>wrote:

> On 13 May 2013 11:37, Roberto Peon <> wrote:
> > James:
> > Can you construct a case where, if you follow the rule spelled out in my
> > earlier email, you fail to achieve interop (because I can't)?
> It's trivially possible to construct a scenario where this happens,
> but only if you don't write down a "MUST ignore" rule.  Once the rule
> is in place, then you are constraining future extensibility.  A "MUST
> ignore" rule is the easiest rule to get right, but there are other
> models you can use.
> > The rule is, essentially:
> > If a party to the communication ignores (or removes) something it don't
> > understand, that must not screw up the session.
> The ignore/remove distinction is very important.  You can't
> selectively remove; it's all or nothing.  Either remove everything you
> don't know about or leave it all in.
> This consideration, along with James' hop-by-hop question does suggest
> a relatively simple way out:
> All unsupported/unknown frames that have a non-zero stream identifier
> MUST be ignored.  If a stream is forwarded by an intermediary, all
> unsupported/unknown frames MUST either be forwarded or removed; an
> intermediary MUST NOT selectively forward unsupported frame types.
> Unsupported/unknown frames with a zero stream identifier MUST be
> ignored and MUST NOT be forwarded.
> > That implies that, when you add anything that must be interpreted, it
> then
> > must be declared in the version string (i.e. new version) and thus agreed
> > upon by both parties up front, and if you don't negotiate that other
> > version, you don't get to add frames whose removal would screw up the
> > session.
> Yeah, we addressed that early on.  If you want to guarantee that the
> other guy is going to support something, either work out how to agree
> in-session (with those ignored frames) or negotiate a new protocol.