One document matched: draft-montenegro-httpbis-http2-fc-principles-01.xml
<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC0793 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0793.xml'>
<!ENTITY RFC1738 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1738.xml'>
<!ENTITY RFC1950 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1950.xml'>
<!ENTITY RFC2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY RFC2285 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2285.xml'>
<!ENTITY RFC2616 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml'>
<!ENTITY RFC2617 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2617.xml'>
<!ENTITY RFC2629 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml'>
<!ENTITY RFC2818 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2818.xml'>
<!ENTITY RFC4366 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4366.xml'>
<!ENTITY RFC4559 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4559.xml'>
<!ENTITY RFC5246 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.xml'>
<!ENTITY RFC6454 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6454.xml'>
<!ENTITY RFC6455 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6455.xml'>
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xml"?>
<?rfc toc="yes" symrefs="yes"?>
<rfc ipr="trust200902" docName="draft-montenegro-httpbis-http2-fc-principles-01">
<front>
<title abbrev="Principles for Flow Control in HTTP 2.0">HTTP 2.0 Principles for Flow Control</title>
<author initials="O." surname="Mazahir" fullname="Osama Mazahir">
<organization>Microsoft</organization>
<address>
<email>OsamaM@microsoft.com</email>
</address>
</author>
<author initials="J." surname="Padhye" fullname="Jitu Padhye">
<organization>Microsoft</organization>
<address>
<email>padhye@microsoft.com</email>
</address>
</author>
<author initials="W." surname="Chan" fullname="William Chan">
<organization>Google</organization>
<address>
<email>willchan@chromium.org</email>
</address>
</author>
<author initials="R." surname="Peon" fullname="Roberto Peon">
<organization>Google</organization>
<address>
<email>fenix@google.com</email>
</address>
</author>
<author initials="R." surname="Trace" fullname="Rob Trace">
<organization>Microsoft</organization>
<address>
<email>Rob.Trace@microsoft.com</email>
</address>
</author>
<author initials="S." surname="Loreto" fullname="Salvatore Loreto">
<organization>Ericsson</organization>
<address>
<email>salvatore.loreto@ericsson.com</email>
</address>
</author>
<author initials="G." surname="Montenegro" fullname="Gabriel Montenegro">
<organization>Microsoft</organization>
<address>
<email>Gabriel.Montenegro@microsoft.com</email>
</address>
</author>
<date month="December" year="2012" />
<area>Applications</area>
<keyword>HTTP</keyword>
<abstract>
<t>
This document states the principles for flow control in HTTP 2.0.
</t>
</abstract>
</front>
<middle>
<section anchor="intro" title="Introduction">
<t>
HTTP/2.0 introduces multiplexed streams over a given TCP connection. In HTTP 1.X,
there is no interleaving of Request/Response pairs. Thus, any flow control issues
are mostly left to the underlying TCP implementation. In HTTP 2.0, each Request/Response
pair uses a separate stream, sharing the same TCP connection with other such pairs over different
streams. All such streams will be vying for a common underlying resource of a single TCP
connection. Given that this interaction among all the streams is not visible to the
TCP implementation, handling the interaction among them has to be solved at the HTTP 2.0
multiplexing layer. There are issues of prioritization, head-of-line blocking and flow control.
Perhaps the most complex aspect is that of flow control. It may be that flow control for HTTP 2.0
multiplexing will
follow a path similar to what TCP's complex dynamics have followed throughout the years.
In particular, TCP congestion control has seen a constant progress of improved specifications
based on measurements and research of the networking community. What the TCP community recognized early
on was that this was a hard problem. Thus, the best course of action was to agree on a minimal
set of rules or principles (e.g., TCP "friendliness"). Many TCP congestion control algorithms are
then possible as a (mostly) local implementation issue giving rise to TCP Reno, Tahoe, Vegas,
CTCP, and many more.
</t>
<t>
Flow control for HTTP 2.0 multiplexing over TCP is also a complex issue. This document proposes (1) a set of
principles aimed at preventing egregious behavior, while allowing for future and ongoing improvement
of flow control algorithms, and (2) a simple flow control algorithm that could be implemented in the
absence of better schemes (TBD). Other flow control algorithms with subsequent improvements should be
specified in separate documents without encumbering
nor delaying the base HTTP 2.0 specification. This is similar to how the myriad TCP congestion algorithms
published so far have been specified separately from the base TCP documents.
</t>
<t>
The goal of this document is to propose additional text to the HTTP/2.0 specification.
The starting point for HTTP/2.0, the SPDY <xref target='I-D.mbelshe-httpbis-spdy'/>
protocol, does not have much language with respect to flow control. Hence, the
text below is offered as a new section or sections within the HTTP/2.0
document.
</t>
</section>
<section title="Principles for Flow Control in HTTP 2.0 Multiplexing"> <t>
Flow control for Multiplexing in HTTP 2.0 must follow these principles:
<list style='numbers'>
<t>
Flow control is hop by hop (where "hop" means an HTTP 2.0 hop), and not end-to-end.
</t>
<t>
Flow control is based on window update messages. It is essentially a credit-based scheme.
</t>
<t>
Flow control is directional and is determined by the receiver.
Flow control MAY be declared by the receiver and MUST be heeded by the sender.
For example, a client, a server or a proxy (in their role as a "receiver") independently
advertise their flow control preference. The other side when operating as a "sender" must
heed that preference.
</t>
<t>
Flow control in the direction towards the receiver can be OFF or ON as
determined by the receiver.
It is OFF if no flow control is advertised by the receiver, or
if the receiver declares "infinite" credit to the sender.
</t>
<t>
HTTP 2.0 should only standardize the format of the window update message
and its semantics. In particular, the algorithms used by the receiver to
decide when to send window update messages, and how much to update the window
by, are not mandated in the spec. The draft should, however, provide some illustrative examples.
</t>
</list>
</t>
<t>
NOTE: Whether flow control operates on a per-stream basis, on a
per-session (per-TCP connection) basis or on both a per-stream and a per-session
basis is TBD.
</t>
<t>
The spec will not define the algorithms the sender will use to manage priorities
among streams and to minimize head of the line blocking. This is included for
completeness, but is essentially independent of flow-control.
</t>
</section>
<section title="Acknowledgements">
<t>
This document was produced using the xml2rfc tool <xref target="RFC2629"/>.
</t>
</section>
</middle>
<back>
<references title="Normative References">
&RFC2119;
&RFC2616;
<?rfc include='reference.I-D.ietf-httpbis-p1-messaging.xml'?>
<?rfc include='reference.I-D.ietf-httpbis-p2-semantics.xml'?>
</references>
<references title="Informative References">
&RFC2629;
&RFC6455;
<?rfc include='reference.I-D.mbelshe-httpbis-spdy.xml'?>
<?rfc include='reference.I-D.montenegro-httpbis-speed-mobility.xml'?>
<?rfc include='reference.I-D.tarreau-httpbis-network-friendly.xml'?>
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-23 09:56:51 |