Re: [middisc] TCP middlebox option requirements

Ron Frederick <ronf@bluecoat.com> Thu, 27 May 2010 21:43 UTC

Return-Path: <ron.frederick@bluecoat.com>
X-Original-To: middisc@core3.amsl.com
Delivered-To: middisc@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id D712A3A6891 for <middisc@core3.amsl.com>; Thu, 27 May 2010 14:43:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.776
X-Spam-Level:
X-Spam-Status: No, score=-0.776 tagged_above=-999 required=5 tests=[AWL=-0.778, BAYES_50=0.001, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HGuv-7FRYCXo for <middisc@core3.amsl.com>; Thu, 27 May 2010 14:43:45 -0700 (PDT)
Received: from whisker.bluecoat.com (whisker.bluecoat.com [216.52.23.28]) by core3.amsl.com (Postfix) with ESMTP id 280463A6999 for <middisc@ietf.org>; Thu, 27 May 2010 14:43:45 -0700 (PDT)
Received: from exchfront1.internal.cacheflow.com (exchfront1 [10.2.2.114]) by whisker.bluecoat.com (8.14.2/8.14.2) with ESMTP id o4RLhZvB015707 for <middisc@ietf.org>; Thu, 27 May 2010 14:43:35 -0700 (PDT)
Received: from ronfred.sv.bluecoat.com ([10.2.15.99]) by exchfront1.internal.cacheflow.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 27 May 2010 14:43:30 -0700
Mime-Version: 1.0 (Apple Message framework v1078)
Content-Type: multipart/alternative; boundary="Apple-Mail-7-336665641"
From: Ron Frederick <ronf@bluecoat.com>
In-Reply-To: <B583FBF374231F4A89607B4D08578A4303EB17F3@bcs-mail03.internal.cacheflow.com>
Date: Thu, 27 May 2010 14:43:28 -0700
Message-Id: <ECD8F3EA-A5DB-4B47-B33F-E8952A6D2B4E@bluecoat.com>
References: <0C53DCFB700D144284A584F54711EC5809BD740A@xmb-sjc-21c.amer.cisco.com> <4BF6CF8A.5030707@bluecoat.com> <AF3CDDFAE1BB6C41B8F9EF3F4ADA9D11ADAB3597@MAILBOXES2.nbttech.com> <4BFC6B29.1080706@bluecoat.com> <2A7D4A79-0E08-480F-A67B-35338D226E14@bluecoat.com> <AF3CDDFAE1BB6C41B8F9EF3F4ADA9D11ADB9D3D6@MAILBOXES2.nbttech.com> <93730462-B3C5-4ACA-8C0A-C69F52BF0822@bluecoat.com> <B583FBF374231F4A89607B4D08578A4303EB17F3@bcs-mail03.internal.cacheflow.com>
To: "Knutsen, Andrew" <andrew.knutsen@bluecoat.com>
X-Mailer: Apple Mail (2.1078)
X-OriginalArrivalTime: 27 May 2010 21:43:30.0332 (UTC) FILETIME=[A5BB15C0:01CAFDE5]
Cc: middisc@ietf.org
Subject: Re: [middisc] TCP middlebox option requirements
X-BeenThere: middisc@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: "Discussions on TCP option for middlebox discovery." <middisc.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/middisc>, <mailto:middisc-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/middisc>
List-Post: <mailto:middisc@ietf.org>
List-Help: <mailto:middisc-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/middisc>, <mailto:middisc-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 27 May 2010 21:43:47 -0000

On May 27, 2010, at 10:18 AM, Knutsen, Andrew wrote:
> Just clarifying something for Ron...
>  
> The single byte I'm proposing would be just the vendor.  There would probably be a type in the vendor-specific info.
>  
> Reserving a vendor code for a following OUI sounds good.  Hopefully never needed, since I hope all this is standardized before there are that many players.

This runs the risk of creating two tiers of vendors (those who get in early and get one-byte assignments and those who don't and are forced to use the OUI escape hatch vendor ID). However, I agree that this would be one way to save space. If we assume that there's still a vendor-specific type code and we pack both the request/response flag and the type into a single byte rather than two bytes, we could basically save 3 bytes total. This would give us 254 vendors if we keep one vendor value for standard options and one for the OUI escape. Each vendor could have 127 options if they used the 'R' bit. Vendors would also be free to exclude the type code if they only wanted a single option, exclude the 'R' bit if they didn't need that, or even go up to a multi-byte type code if they needed more space (unlikely, I admit). The main question is how this vendor registration will be handled (see more below on this).

I'm also not sure I like the idea of trying to mix both vendor codes and standard option type codes into the same byte. While that would be a further 1 byte space savings for the standard options, that really seems to be overloading that single field too much.

Andrew also wrote:
> One issue I just remembered with the OUI, and I can't remember who brought it up, is that it opens the option to "safe" (but unsanctioned) use for arbitrary purposes by anyone with an OUI. With vendor codes, we can specify criteria for assignment, so the vendor would be breaking their agreement if they used it for other purposes.
> 
> It seems like this might be an IESG policy issue.  Lars, are you still here?


Who would perform this oversight? This gets into the points Anantha was raising:

> OUI as exists today is standardized and managed and provides unquiness. If we were to define a 1 byte vendor it, it has all issues which Ron mentioned below + the need for standardizing that space, I don't know who is going to manage allocation and maintenance of that field. I don't think IANA would do that.

I could potentially see IANA handling the registrations here, but I wouldn't expect them to be able to handle the approvals or do any checking on whether vendors were "breaking their agreement" in the way they used the option. To be honest, I'm not even sure I know what that means. What sort of criteria would we be looking for here? This doesn't seem like something we necessarily want to burden this process with.

Anantha also asked:
> I also wanted to understand the use case of having this option sent in the middle of the connection. FWIW TCP options as exisits today are either "negotiated" one time in the initial 3 way handshake (MSS, Window scale, SACK permitted etc.,) or sent on every packet (TCP MD5,  TIMESTAMP etc.,) On demand sendind of the option is something new, so is the concept of variable length TCP option (with the exception of SACK, which itself needs to agreed upon using SACK PERMITTED option during the 3 way HS.

Variable length options are nothing new. With the exception of the kind 0 & 1 single octet options representing the end of list and no-op, all TCP options have a "kind" byte and a "length" byte. While most options may happen to be a fixed length today, the length byte should allow us to support a variable length option with no additional effort.

Regarding sending options in the middle of a stream, I must admit that I'm still nervous about that, especially around how the middleboxes doing this will handle retransmissions of data packets originally sent with the option. However, I can see legitimate use cases for doing this, and I can see how an implementation could work if the options were just treated as essentially best-effort delivery with it being up to the specific middlebox implementation to handle any reliability concerns when sending such mid-stream options.
-- 
Ron Frederick
ronf@bluecoat.com