Jitu Padhye <> Mon, 01 April 2013 17:52 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 39EED21E809D for <>; Mon, 1 Apr 2013 10:52:51 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -10.599
X-Spam-Status: No, score=-10.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, RCVD_IN_DNSWL_HI=-8]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id TfLjj3GuMu57 for <>; Mon, 1 Apr 2013 10:52:49 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 7F04D11E80AE for <>; Mon, 1 Apr 2013 10:52:49 -0700 (PDT)
Received: from lists by with local (Exim 4.72) (envelope-from <>) id 1UMitG-0000xt-K8 for; Mon, 01 Apr 2013 17:51:30 +0000
Resent-Date: Mon, 01 Apr 2013 17:51:30 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtp (Exim 4.72) (envelope-from <>) id 1UMitB-0000w7-0G for; Mon, 01 Apr 2013 17:51:25 +0000
Received: from ([] by with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from <>) id 1UMitA-0003YA-3t for; Mon, 01 Apr 2013 17:51:24 +0000
Received: from ( by ( with Microsoft SMTP Server (TLS) id 15.0.651.3; Mon, 1 Apr 2013 17:50:53 +0000
Received: from ( by ( with Microsoft SMTP Server (TLS) id 15.0.664.0 via Frontend Transport; Mon, 1 Apr 2013 17:50:53 +0000
Received: from ( by ( with Microsoft SMTP Server (TLS) id 14.2.318.3; Mon, 1 Apr 2013 17:50:55 +0000
Received: from ( by ( with Microsoft SMTP Server id; Mon, 1 Apr 2013 17:50:54 +0000
Received: from mail209-va3 (localhost []) by (Postfix) with ESMTP id 95A91640296 for <>; Mon, 1 Apr 2013 17:50:53 +0000 (UTC)
X-Forefront-Antispam-Report-Untrusted: CIP:; KIP:(null); UIP:(null); (null);; R:internal; EFV:INT
X-SpamScore: -16
X-BigFish: PS-16(zzdb82hzz1f42h1fc6h1ee6h1de0h1202h1e76h1d1ah1d2ahzz1033IL17326ah8275dh8275bhz31h2a8h668h839h947hd24hf0ah1288h12a5h12a9h12bdh137ah13b6h1441h1504h1537h153bh162dh1631h1758h18e1h1946h19b5h1ad9h1b0ah17ej9a9j1155h)
Received-SPF: softfail (mail209-va3: transitioning domain of does not designate as permitted sender) client-ip=;; ; ;
X-Forefront-Antispam-Report-Untrusted: SFV:SKI; SFS:; DIR:OUT; SFP:; SCL:-1; SRVR:BY2PR03MB609;; LANG:en;
Received: from mail209-va3 (localhost.localdomain []) by mail209-va3 (MessageSwitch) id 1364838615577735_9517; Mon, 1 Apr 2013 17:50:15 +0000 (UTC)
Received: from (unknown []) by (Postfix) with ESMTP id 89C07C80258 for <>; Mon, 1 Apr 2013 17:50:15 +0000 (UTC)
Received: from ( by ( with Microsoft SMTP Server (TLS) id; Mon, 1 Apr 2013 17:50:12 +0000
Received: from ( by ( with Microsoft SMTP Server (TLS) id; Mon, 1 Apr 2013 17:50:11 +0000
Received: from ( by ( with Microsoft SMTP Server (TLS) id 15.0.651.13; Mon, 1 Apr 2013 17:50:08 +0000
Received: from ([]) by ([]) with mapi id 15.00.0651.000; Mon, 1 Apr 2013 17:50:01 +0000
From: Jitu Padhye <>
To: "" <>
CC: "Brian Raymor (MS OPEN TECH)" <>, Rob Trace <>, Dave Thaler <>, Martin Thomson <>, Gabriel Montenegro <>
Thread-Topic: HTTP/2 and TCP CWND
Thread-Index: Ac4u/JrxD8HEzB3rR8CdUf/Gdhfe2w==
Date: Mon, 01 Apr 2013 17:50:00 +0000
Message-ID: <>
Accept-Language: en-US
Content-Language: en-US
x-originating-ip: [2001:4898:d8:1000:74ac:1744:413c:c8cd]
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Forefront-Antispam-Report: CIP:; CTRY:US; IPV:CAL; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(189002)(199002)(79102001)(47446002)(56816002)(5343655001)(20776003)(46102001)(47976001)(50986001)(47736001)(5343635001)(33646001)(31966008)(59766001)(51856001)(69226001)(76482001)(53806001)(4396001)(65816001)(74502001)(44976002)(77982001)(80022001)(56776001)(47776003)(561944001)(50466001)(49866001)(81342001)(15202345001)(54316002)(23756002)(6806001)(16676001)(54356001)(63696002)(74662001)(24736002)(3826001); DIR:OUT; SFP:; SCL:1; SRVR:BY2FFO11HUB033;; RD:InfoDomainNonexistent; MX:1; A:1; LANG:en;
X-Forefront-PRVS: 0803A0241F
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-0.0
X-W3C-Hub-Spam-Report: RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001
X-W3C-Scan-Sig: 1UMitA-0003YA-3t 6f107a90b12805d81cac5f0dd1b7ff12
Subject: HTTP/2 and TCP CWND
Archived-At: <>
X-Mailing-List: <> archive/latest/17189
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

In the original SPDY draft (and the current HTTP2-01 draft), there is a TCP CWND setting exposed:

         5 - SETTINGS_CURRENT_CWND allows the sender to inform the
         remote endpoint of the current TCP CWND value.

It is not clear what the client is supposed to do with this information. There was a follow up post from Mile Belshe (!topic/spdy-dev/XRkL7FlIOW4) in which he indicated that the client could persist the CWND stored by the server, and the server could later user it to "warm start" connections to the same client. This can potentially cut transfer time by several RTTs. 

I have several concerns about warm start, and if that is the only use for SETTINGS_CURRENT_CWND, then maybe we should not have the setting at all. 
First, if a cwnd value is persisted at the client, then, after the connection ends, it needs to be gradually decayed with time, and completely discarded if the client changes networks (e.g. from wifi to 3G etc.). This adds additional complexity to client implementation.  

Second, the server has to take any value reported by client with a large grain of salt, since it cannot trust the client to correctly decay/discard window. The client may even inflate the window in an attempt to get "better" service. So, at the very least, the server needs to check timeliness, which means it has to maintain additional state (e.g. remember when it last sent CWND to this client). This complicates server implementation.  

Third, The clients who implement this may be able to grab a higher share of bandwidth, which is unfair to legacy clients (e.g. normal HTTP clients). 

If the server wants to start with a higher initial cwnd, then that's already being discussed:  I am not advocating for that proposal, but at least it is better than warm start, since there is no state to maintain and clients have no influence.

In general,  SETTINGS_CURRENT_CWND violates the basic layering principle. So, unless there is a really good reason to keep it, it should be removed.