Internet Engineering Task Force                                   RMT WG
INTERNET-DRAFT                                   M.Luby/Digital Fountain
draft-ietf-rmt-bb-lct-01.txt                         J.Gemmell/Microsoft
                                                        L.Vicisano/Cisco
                                            L.Rizzo/ACIRI and Univ. Pisa
                                                         M.Handley/ACIRI
                                                        J. Crowcroft/UCL
                                                            19 July 2001
                                                   Expires: January 2002


                       Layered Coding Transport:
            A massively scalable content delivery transport



Status of this Document

This document is an Internet-Draft and is in full conformance with all
provisions of Section 10 of RFC2026.

Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups.  Note that other groups
may also distribute working documents as Internet-Drafts.

Internet-Drafts are valid for a maximum of six months and MAY be
updated, replaced, or obsoleted by other documents at any time.  It is
inappropriate to use Internet-Drafts as reference material or to cite
them other than as a "work in progress".

The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt

To view the list Internet-Draft Shadow Directories, see
http://www.ietf.org/shadow.html.

This document is a product of the IETF RMT WG.  Comments should be
addressed to the authors, or the WG's mailing list at rmt@lbl.gov.


                                Abstract


     This document describes Layered Coding Transport, a massively
     scalable reliable content delivery and stream delivery



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft                   [Page 1]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


     transport, hereafter referred to as LCT.  LCT can be used for
     multi-rate delivery to large sets of receivers. In LCT,
     scalability and congestion control are supported through the
     use of layered coding techniques. Coding techniques can be
     combined with LCT to provide support for reliability.

     Congestion control is receiver driven, and is achieved by
     sending packets in the session to multiple ``LCT channels'',
     and having receivers join and leave LCT channels (thus
     adjusting their reception rate) in reaction to network
     conditions in a manner that is network friendly.








































Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft                   [Page 2]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


                           Table of Contents


     1. Introduction. . . . . . . . . . . . . . . . . . . . . .   4
      1.1. Related Documents. . . . . . . . . . . . . . . . . .   6
      1.2. Environmental Requirements and Considerations. . . .   6
     2. General Architecture. . . . . . . . . . . . . . . . . .   8
      2.1. Delivery service models. . . . . . . . . . . . . . .  10
      2.2. Congestion Control . . . . . . . . . . . . . . . . .  11
     3. LCT packets . . . . . . . . . . . . . . . . . . . . . .  11
      3.1. LCT packet format. . . . . . . . . . . . . . . . . .  12
      3.2. LCT packet header fields . . . . . . . . . . . . . .  13
      3.3. Header-Extension Fields. . . . . . . . . . . . . . .  16
     4. Procedures. . . . . . . . . . . . . . . . . . . . . . .  19
      4.1. Sender Operation . . . . . . . . . . . . . . . . . .  19
      4.2. Receiver Operation . . . . . . . . . . . . . . . . .  21
     5. Security Considerations . . . . . . . . . . . . . . . .  22
     6. IANA Considerations . . . . . . . . . . . . . . . . . .  22
     7. Intellectual Property Issues. . . . . . . . . . . . . .  22
     8. Acknowledgments . . . . . . . . . . . . . . . . . . . .  23
     9. Authors' Addresses. . . . . . . . . . . . . . . . . . .  24
     10. Full Copyright Statement . . . . . . . . . . . . . . .  26





























Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft                   [Page 3]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


1.  Introduction

This document describes a massively scalable reliable content delivery
and stream delivery transport, Layered Coding Transport (LCT), for
multi-rate content delivery primarily designed to be used with the IP
multicast network service, but MAY also be used with other basic
underlying network or transport services such as unicast UDP.  LCT
supports both reliable and unreliable delivery, and supports congestion
control mechanisms which conform to RFC2357.

LCT is a building block as defined in RFC3048.  Complete protocol
instantiations MAY be built by combining the LCT framework with other
components.  A complete protocol instantiation that uses LCT MUST
include a congestion control protocol that is compatible with LCT and
that conforms to RFC2357.  A complete protocol instantiation that uses
LCT MAY include a scalable reliability protocol that is compatible with
LCT, it MAY include an session control protocol that is compatible with
LCT, and it MAY include other protocols such as security protocols.

LCT is presumed to be used with an underlying network or transport
service that is a "best effort" service that does not guarantee packet
reception, packet reception order, and which does not have any support
for flow or congestion control.  For example, the Any-Source Multicast
(ASM) model of IP multicast as defined in RFC1112 is such a "best
effort" network service.  While the basic service provided by RFC1112 is
largely scalable, providing congestion control or reliability should be
done carefully to avoid severe scalability limitations, especially in
presence of heterogeneous sets of receivers.

Scalability refers to the behavior of the protocol in relation to the
number of receivers and network paths, their heterogeneity, and the
ability to accommodate dynamically variable sets of receivers.
Scalability limitations can come from memory or processing requirements,
or from the amount of packet traffic generated by the protocol.  In
turn, such limitations may be a consequence of the features that a
complete reliable content delivery or stream delivery protocol is
expected to provide.

Congestion control refers to the ability of the protocol to adapt its
throughput to the available bandwidth on the path to the receivers, and
to share bandwidth fairly with competing flows such as TCP. It is
REQUIRED that protocols implement some form of congestion control on
each session so that they not compete unfairly with existing and
adaptive protocols such as TCP.

For multi-rate protocols, the sender typically sends packets at a
constant aggregate rate to multiple channels, but individual receivers
adjust which portion of these packets they attempt to receive by



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 1.  [Page 4]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


adjusting which set of channels they are joined to at each point in time
depending on the available bandwidth between the receiver and the
sender, but independent of all other receivers.  Thus, for multi-rate
protocols, the packet reception rate of each receiver may vary
dynamically according to the available bandwidth between each receiver
and the sender, independent of the other receivers.  For single-rate
protocols, the sender typically sends packets to one channel at variable
rates over time depending on feedback from receivers, and all receivers
attempt to receive all packets transmitted by the sender at all points
in time.   Thus, for single-rate protocols, the packet reception rate of
all receivers may vary dynamically over time in exactly the same way
dependent on the feedback of other receivers to the sender.  Generally,
a multi-rate protocol is preferable to a single-rate protocol in a
heterogeneous receiver environment, but only if it can be achieved
without sacrificing scalability.

Layered coding refers to the ability to produce a coded stream that can
be split into multiple layers that can be sent to different channels.
The coded stream can be generated either from a fixed piece of content,
or from an ongoing data stream, and has the property that the quality
experienced by a receiver (in terms of quality of playout, or overall
transfer speed) is proportional to how many of the layers the receiver
is joined to.  LCT MAY be combined with a reliability protocol such as
the general class of protocols described in [7]. LCT MUST be combined
with a congestion control protocol that is compliant with RFC2357, and
this MAY be either single-rate or multi-rate congestion control over the
entire session.  It is most compelling to use LCT in conjunction with a
layered congestion control protocol such as the class of protocols
described in [9], and specified in [9], which are multi-rate congestion
control protocols.

The concept of layered coding was first introduced with reference to
audio and video streams.  For example, the information associated with a
TV broadcast can be partitioned into three layers, corresponding to
black and white, color, and HDTV quality. Receivers can experience
different quality without the need for the sender to replicate
information in the different layers.

The concept of layered coding can be naturally extended to reliable
content delivery protocols when Forward Error Correction (FEC)
techniques are used for coding the data stream [12] [10] [3] [14] [15]
[1]. By using FEC, the data stream is transformed in such a way that
reconstruction of a data object does not depend on the reception of
specific data packets, but only on the number of different packets
received.  As a result, by increasing the number of layers a receiver is
receiving from, the receiver can reduce the transfer time accordingly.
More details on the use of FEC for reliable content delivery can be
found in [6].  Reliable protocols aim at giving guarantees on the



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 1.  [Page 5]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


reliable delivery of data from the sender to the intended recipients.
Guarantees vary from simple packet data integrity to reliable delivery
of a precise copy of a data object to all intended recipients.  Several
reliable content delivery protocols have been built on top of IP
multicast, but scalability was not a design goal for many of them.  In
some cases, scalability is achieved by introducing changes to routers or
other infrastructure (see for example [13] ), an approach which has an
impact on near term deployment across the Internet.

Two of the key difficulties in scaling reliable content delivery using
IP multicast are dealing with the amount of data that flows from
receivers back to the sender, and the associated response (generally
data retransmissions) from the sender.  Protocols that avoid any such
feedback, and minimize the amount of retransmissions, can be massively
scalable.  LCT relies on the availability of FEC codes or a layered
codec to achieve reliability with little or no feedback.

In this document we present the architecture and abstract LCT packet
structure, and illustrate its support for multi-rate layered congestion
control.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC2119.


1.1.  Related Documents

A more in-depth description of the use of FEC in Reliable Multicast
Transport (RMT) protocols is given in [6]. Some of the FEC codecs that
MAY be used by LCT for reliable content delivery are specified in [7].
LCT reserves opaque header fields that can be used to transport
information related to the payload encoding.

Implementors of LCT MUST also implement congestion control in accordance
to RFC2357, where the congestion control is over the entire session.
Some possible schemes are specified in [9]. LCT reserves opaque header
fields that can be used by the congestion control scheme to transport
information related to congestion control.

It is RECOMMENDED that LCT implementors use some authentication scheme
to protect the protocol from attacks. An example of a possibly suitable
scheme is described in [11].

1.2.  Environmental Requirements and Considerations

LCT is intended for congestion controlled, multi-rate delivery of
objects and streams (both reliable content delivery and streaming of



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft     Section 1.2.  [Page 6]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


multimedia information).

LCT is most applicable for delivery of objects or streams of substantial
length, i.e., objects or streams that range in length from hundreds of
kilobytes to many gigabytes, and whose transfer time is in the order of
tens of seconds or more.

LCT is directly applicable to all multicast enabled networks, including
asymmetric networks, wireless networks, and satellite networks.  Thus,
the inherent raw scalability of LCT is unlimited.  However, when other
specific applications are built on top of LCT, then these applications
by their very nature may limit scalability.  For example, if an
application requires receivers to retrieve out of band information in
order to join a session, or an application allows receivers to send
requests back to the sender in order to extend an ongoing session, then
the scalability of the application is limited by the ability to send,
receive, and process this additional data.

LCT requires that the underlying network or transport layer can deliver
and demultiplex LCT packets for a given LCT session, and supply packet
length information to the LCT receiver. In IP networks, this is often
achieved by using UDP, or any protocol that can provide an equivalent
service, as the underlying transport protocol.

In this document, we refer to the original multicast service model
defined in RFC1112 as Any-Source Multicast, or ASM for short.  We refer
to the multicast service model defined in [5] as Source-Specific
Multicast, or SSM for short.  LCT does not require reverse multicast
connectivity, i.e. LCT receivers do not send multicast traffic.  As
such, LCT works with both ASM and SSM.

The definition of an LCT channel used throughout this document is
slightly different with ASM and with SSM.  When using ASM, a sender S
sends LCT packets to a multicast group G, and the LCT channel address
consists of the pair (S,G), where S is the IP address of the sender and
G is a multicast group address.  When using SSM, a sender S sends LCT
packets to an SSM channel (S,G), and the LCT channel address coincides
with the SSM channel address.

SSM is more attractive to deployment of LCT than ASM for several
reasons.  First, a sender may allocate and use several LCT channels in a
session, sessions may come and go dynamically. A sender can locally
allocate unique SSM channel addresses, and this makes allocation of LCT
channel addresses easy with SSM.  To allocate LCT channel addresses
using ASM, the sender must uniquely chose the ASM multicast group
address across the scope of the group, and this makes allocation of LCT
channel addresses more difficult with ASM.




Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft     Section 1.2.  [Page 7]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


In general SSM performs well even in presence of very large and
dynamically changing receiver sets.  Changes in the multicast tree
topology with SSM are light weight operations (a new branch from the
receiver towards S grows when a receiver joins, and the branch is
deleted when the receiver leaves), whereas with ASM changes can be
heavier weight (involving transitions from a (*,G)-tree rooted at an RP
to the tree rooted at S).  This efficiency is important when a
congestion control protocol is used with LCT that relies upon joining
and leaving channels to nimbly increase and decrease reception rate.

LCT channels and SSM channels coincide, and thus the receiver will only
receive packets sent to the requested LCT channel.  With ASM, the
receiver joins an LCT channel by joining a multicast group G, and all
packets sent to G, regardless of the sender, may be received by the
receiver.  In either case, receivers should use mechanisms to filter out
packets from unwanted sources.  Thus, SSM has compelling security
advantages over ASM for prevention of denial of service attacks.

LCT also requires receivers to obtain Session Description Information
before joining a session, as described in Section 4.1.  The session
description could be in a form such as SDP as defined in RFC2327, or XML
metadata, or HTTP/Mime headers as defined in RFC2068, and distributed
with SAP [4], using RCCP [8], HTTP, or in other ways.

The particular layered encoder and congestion control protocols used
with LCT have an impact on the performance and applicability of LCT.
For example, some layered encoders used for video and audio streams can
produce a very limited number of substreams, thus providing a very
coarse control in the reception rate of packets by receivers in a
session.  When LCT is used for reliable data transfer, some FEC codecs
are inherently limited in the size of the object they can encode, and
for objects larger than this size the reception overhead on the
receivers can grow substantially.

As another example, some networks are not amenable to some congestion
control protocols that could be used with LCT.  In particular, for a
satellite or wireless network, there may be no mechanism for receivers
to effectively reduce their reception rate since there may be a fixed
transmission rate allocated to the session.


2.  General Architecture

An LCT session comprises all LCT packets sent to one or more LCT
channels from a single sender, and pertaining to the transmission of one
or more objects that can be of interest for the receivers.

For example, an LCT session could be used to deliver a TV channel using



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 2.  [Page 8]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


three channels.  Receiving the first channel could allow black and white
reception, receiving the first two channels would permit color
reception, whereas receiving the set of three channels delivers HDTV
quality images.  Objects in this example could correspond to individual
programs (movies, news, commercial) being transmitted.

As another example, a reliable LCT session could be used to reliably
deliver hourly-updated weather maps (objects) using ten LCT channels at
different rates, using FEC coding.  A receiver MAY join and concurrently
receive LCT packets from subsets of these channels, until it has enough
packets in total to recover the object, then leave the session (or
remain there listening to control information only) until it is time to
receive the next object.  In this case, the quality metric is the time
required to receive each object.

Before joining a session, the receivers MUST obtain a session
description, which MUST include the relevant session parameters needed
by a receiver to participate in the session.  The session description is
determined and agreed upon by the senders, and typically communicated to
the receivers out of band. In some cases, part of the session
description MAY be included in the LCT packet.

An encoder MAY be used to generate the data that is placed in the LCT
packet payload in order to provide reliability.  A suitable decoder is
used to reproduce the original information from the payload.  There MAY
be a reliability packet header that follows the LCT packet header if
such an encoder and decoder is used.  The reliability packet header
helps to describe the encoding data carried in the payload of the
packet.  The format of the reliability packet header depends on the
coding used, and this is negotiated out-of-band.  As an example, one of
the FEC packet headers described in [7] could be used.

For LCT, when layered congestion control is used, congestion control is
achieved by sending LCT packets associated with a given session to
several LCT channels.  Individual receivers dynamically join one or more
of these channels, according to the network congestion as seen by the
receiver.  LCT packet headers include an opaque field which MUST be used
to convey congestion control information to the receivers.  The actual
congestion control scheme to use with LCT is negotiated out-of-band.
Some examples of congestion control protocols that MAY be suitable for
content delivery are described in [9]. Other congestion controls MAY be
suitable when LCT is used for a streaming application.

LCT can be used with other congestion control protocols such as the one
described in [14], or router-assisted schemes where the selection of
which packets to forward is performed by routers. This latter approach
potentially allows for finer grain congestion control and a faster
reaction to network congestion, but requires changes to the router



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 2.  [Page 9]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


infrastructure.  See [2] for a preliminary design description.  We do
not discuss this approach further in this document.


2.1.  Delivery service models

LCT can support several different delivery service models. Two examples
are briefly described here.


Push service model.

One way a push service model can be used for reliable content delivery
is to deliver a series of objects.  For example, a receiver could join
the session and dynamically adapt the number of LCT channels the
receiver is joined to until enough packets have been received to
reconstruct an object. After reconstructing the object the receiver may
stay in the session and wait for the transmission of the next object.

The push model is particularly attractive in satellite networks and
wireless networks.  In these cases, a session may consist of one fixed
rate LCT channel.


On-demand content delivery model.

For an on-demand content delivery service model, senders typically
transmit for some given time period selected to be long enough to allow
all the intended receivers to join the session and recover the object.
For example a popular software update might be transmitted using LCT for
several days, even though a receiver may be able to complete the
download in one hour total of connection time, perhaps spread over
several intervals of time.

In this case the receivers join the session, and dynamically adapt the
number of LCT channels they subscribe to (and the reception quality)
according to the available bandwidth. Receivers then drop from the
session when they have received enough packets to recover the object.

As an example, assume that an object is 50 MB.  The sender could set the
data rate on the lowest LCT channel to 50 1KB packets per second, so
that receivers using just this LCT channel could complete reception of
the object in 1,000 seconds in absence of loss, and would be able to
complete reception even in presence of some substantial amount of losses
with the use of coding for reliability.  Furthermore, the sender could
use a number of LCT channels such that the aggregate data rate when
using all LCT channels is 1,000 1KB packets per second, so that a
receiver could be able to complete reception of the object in as little



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 2.1.  [Page 10]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


50 seconds (assuming no loss and that the congestion control mechanism
immediately converges to the use of all LCT channels).


Other service models.


There are many other delivery service models that LCT can be used for
that are not covered above.  As examples, a live streaming or an on-
demand archival content streaming service model.  The description of the
many potential applications, the appropriate delivery service model, and
the additional mechanisms to support such functionalities when combined
with LCT is beyond the scope of this document.  This document only
attempts to describe the minimal common scalable elements to these
diverse applications using LCT as the delivery transport.


2.2.  Congestion Control

The specific congestion control protocol to be used for LCT sessions
depends on the type of content to be delivered. While the general
behavior of the congestion control protocol is to reduce the throughput
in presence of congestion and gradually increase it in the absence of
congestion, the actual dynamic behavior (e.g. response to single losses)
can vary.

Some possible congestion control protocols for reliable content delivery
using LCT are described in [9]. Different delivery service models might
require a different congestion control protocols.


3.  LCT packets

The type of packet used by LCT sessions is "LCT Packet".  LCT packets
are sent by senders to LCT channels.

Some instances of LCT sessions MAY require the generation of feedback
from the receivers to the sender.  However, the mechanism for doing this
is outside the scope of LCT.

The LCT packet format described in this document is intended to be used
in conjunction with the UDP transport protocol as defined in RFC768 or
other transport protocols that satisfy the requirements stated in
Section 1.2, specifically about demultiplexing and delivery of packet
size information.

LCT packets consist of an LCT packet header and an OPTIONAL LCT packet
payload, as shown in Figure 1.  When present, the LCT packet payload



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 3.  [Page 11]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


immediately follows the LCT packet header.  The LCT packet payload MAY
contain headers for other protocols, such as reliability protocols.

LCT packet headers have variable size, which is specified by a length
field in the third byte of the header.  In the LCT packet header, all
integer fields are carried in "big-endian" or "network order" format,
that is, most significant byte (octet) first.  Bits designated as
"padding" or "reserved" (r) MUST by set to 0 by senders and ignored by
receivers.  Unless otherwise noted, numeric constants in this
specification are in decimal (base 10).


3.1.  LCT packet format

The format of LCT packets is depicted in Figure 1.


  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |   V   |    r    | I |S|E|X|A|B|   HDR_LEN     | Codepoint (CP)|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |             Congestion Control Information (CCI)              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |        Transport Object Identifier (TOI, if I >= 1)           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                TOI continued  (if I >= 2)                     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                TOI continued  (if I = 3)                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                TOI continued  (if I = 3)                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               Sender Current Time (SCT, if S = 1)             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |              Expected Residual Time (ERT, if E = 1)           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                Header Extensions (if X = 1 )                  |
 |                                                               |
 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
 |                                                               |
 |                          Payload                              |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Figure 1 - LCT packet format





Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 3.1.  [Page 12]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


3.2.  LCT packet header fields

The function each field in LCT packet headers is the following.  Fields
marked as "1" mean that the corresponding bits MUST be set to "1" by the
generating agent.  Fields marked as "r" or "0" mean that the
corresponding bits MUST be set to "0" by the generating agent.


  LCT version number (V): 4 bits

      Indicates the LCT protocol version.  The LCT version number for
      this specification is 0.


  Reserved (r): 5 bits

      Reserved for future use. A sender MUST set these bits to zero and
      a receiver MUST ignore these bits.


  Transport Object Identifier flag (I): 2 bits

      I=0 indicates no Transport Object Identifier (TOI) field is
      present.
      I=1 indicates that a 32-bit TOI field is present.
      I=2 indicates that a 64-bit TOI field is present.
      I=3 indicates that a 128-bit TOI field is present.
      The TOI field indicates which object within the session this LCT
      packet pertains to.


  Sender Current Time present flag (S): 1 bit

      S = 0 indicates that the Sender Current Time (SCT) field is not
      present.
      S = 1 indicates that the SCT field is present.
      The SCT is inserted by senders to indicate to receivers how long
      the session has been in progress.


  Expected Residual Time present flag (E): 1 bit

      E = 0 indicates that the Expected Residual Time (ERT) field is not
      present.
      E = 1 indicates that the ERT field is present.
      The ERT is inserted by senders to indicate to receivers how much
      longer the session will continue.
      Senders MUST NOT set E = 1 when the ERT for the session is more



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 3.2.  [Page 13]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


      than 2^32-1 time units (approximately 49 days), where time is
      measured in units of milliseconds.


  Header extension present flag (X): 1 bit

      X = 0 indicates no Header Extensions are present.
      X = 1 indicates that Header Extensions are present.
      Header Extensions are used in LCT to accommodate OPTIONAL header
      fields which are not always used or have variable size.


  Close TOI flag (A): 1 bit

      Normally, the Close TOI flag is set to 0.  The sender MAY set the
      Close TOI flag to 1 when termination of transmission of LCT
      packets for the object identified by the TOI is imminent.  The
      Close TOI flag MAY be set to 1 in just the last LCT packet
      transmitted for the object, or it MAY be set to 1 in the last
      couple of seconds LCT packets transmitted for the object.  Once
      the sender sets the Close TOI flag to 1 in one packet for a
      particular object, the sender SHOULD set the Close TOI flag to 1
      in all subsequent packets for the object until termination of
      transmission of LCT packets for the object.  A received packet
      with the Close TOI flag set to 1 indicates to a receiver that the
      sender will immediately stop sending LCT packets for the object
      identified by the TOI.  When a receiver receives a packet with the
      Close TOI flag set to 1 then it should assume that no more LCT
      packets will be sent to the session for this object.


  Close Session flag (B): 1 bit

      Normally, the Close Session flag is set to 0.  The sender MAY set
      the Close Session flag to 1 when termination of transmission of
      LCT packets for the session is imminent.  The Close Session flag
      MAY be set to 1 in just the last LCT packet transmitted for the
      session, or it MAY be set to 1 in the last couple of seconds LCT
      packets transmitted for the session.  Once the sender sets the
      Close Session flag to 1 in one packet, the sender SHOULD set the
      Close Session flag to 1 in all subsequent packets until
      termination of transmission of LCT packets for the session.  A
      received packet with the Close Session flag set to 1 indicates to
      a receiver that the sender will immediately stop sending LCT
      packets for the session.  When a receiver receives a packet with
      the Close Session flag set to 1 then it should assume that no more
      LCT packets will be sent to the session.




Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 3.2.  [Page 14]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


  LCT packet header length (HDR_LEN): 8 bits

      Length of the LCT packet header in units of 32-bit words
      (excluding IP or UDP headers).
      This field can be used for direct access to the beginning of the
      LCT packet payload.


  Codepoint (CP): 8 bits

      An opaque identifier which is passed to the payload decoder to
      convey information on the codec being used for the payload. The
      mapping between the codepoint and the actual codec is defined on a
      per session basis and communicated out-of-band as part of the
      session description information.  The use of the CP field is
      similar to the Payload Type (PT) field in RTP headers as described
      in RFC1889.


  Congestion Control Information (CCI): 32 bits

      Used to carry congestion control information, e.g. for the
      congestion control specified in [9] or other congestion control
      schemes.  This field is opaque for the purpose of this
      specification.


  Transport Object Identifier (TOI): 32, 64 or 128 bits (OPTIONAL)

      This field indicates which object within the session this LCT
      packet pertains to.  For example, a sender might send a number of
      files in the same session, using TOI=0 for the first file, TOI=1
      for the second one, etc.  The mapping of TOI field values to
      objects MUST be done out of band.
      This field MUST NOT be present if I=0.
      This field MUST be 32 bits if I=1.
      This field MUST be 64 bits if I=2.
      This field MUST be 128 bits if I=3.


  Sender Current Time (SCT): 32 bits (OPTIONAL)

      This field represents the current clock at the sender at the time
      this packet was transmitted, measured in units of 1ms and computed
      modulo 2^32 units from the start of the session.
      This field MUST NOT be present if S=0 and MUST be present if S=1.





Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 3.2.  [Page 15]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


  Expected Residual Time (ERT): 32 bits (OPTIONAL)

      This field represents the sender expected residual transmission
      time for the current session, measured in units of 1ms.
      This field MUST NOT be present if E=0 and MUST be present if E=1.


3.3.  Header-Extension Fields

To allow for additional header fields and to extend the size of some of
the predefined fields, the LCT packet header contains an additional
header field flag, "X". If "X" is set to 0 then no additional header
fields are included within the LCT packet header beyond the predefined
fields.  When additional headers beyond the predefined fields are used,
the value of "X" within the LCT packet header MUST be set to 1.

Examples of use of Header Extensions include:

  o Extended-size version of already existing header fields.

  o Sender and Receiver authentication information.


If present, Header Extensions MUST be processed to ensure that they are
recognized before performing any congestion control procedure or
otherwise accepting an LCT packet. LCT packets with unrecognised Header
Extensions MUST be discarded by the receiving agent, hence the expected
use of extensions SHOULD be signaled out-of-band before session startup.

There are two formats for Header Extension fields, as depicted below.
The first format is used for variable-length extensions, with Header
Extension Type (HET) values between 0 and 63. The second format is used
for fixed length (one word) extension, using HET values from 64 to 127.


















Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 3.3.  [Page 16]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |L| HET (<=63)  |       HEL     |                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
 .                                                               .
 .              Header Extension Content (HEC)                   .
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |L| HET (>=64)  |       Header Extension Content (HEC)          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Figure 5 - Format of additional headers


The explanation of each sub-field is the following.


  Last Header Extension (L): 1 bit

      MUST be set to 1 in the last Header Extension field present in an
      LCT packet header, MUST be set to 0 in all the others.


  Header Extension Type (HET): 7 bits

      The type of the Header Extension. This document defines a number
      of possible types. Additional types may be defined in future
      version of this specification. HET values from 0 to 63 are used
      for variable-length Header Extensions. HET values from 64 to 127
      are used for fixed-length Header Extensions.


  Header Extension Length (HEL): 8 bits

      The length of the whole Header Extension field, expressed in
      multiples of 32-bit words. This field MUST be present for
      variable-length extensions (HET between 0 and 63) and MUST NOT be
      present for fixed-length extensions (HET between 64 and 127).


   Header Extension Content (HEC): variable length





Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 3.3.  [Page 17]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


      The content of the Header Extension. The format of this sub-field
      depends on the Header Extension type.  For fixed-length Header
      Extensions, the HEC is 24 bits.  For variable-length Header
      Extensions, the HEC field has variable size, as specified by the
      HEL field.  Note that the length of each Header Extension field
      MUST be a multiple of 32 bits.  Also note that the total size of
      the LCT packet header, including all Header Extensions and all
      OPTIONAL header fields, cannot exceed 255 32-bit words.


An LCT packet with Header Extensions MUST NOT have space between the end
of the last Header Extension and the beginning of the LCT packet
payload.

All senders and receivers of LCT packets MUST support the EXT_NOP Header
Extension.

The following Header Extension types are defined:


EXT_NOP=0     No-Operation extension.
              The information present in this extension field MUST be
              ignored by receivers.


EXT_CCI_V=1   Congestion Control Information extension, variable length.
              This extension field extends the CCI field present in the
              fixed part of the header. It is used when the congestion
              control information does not fit in the 32-bit CCI field.
              When this option is present, the concatenation of the
              32-bit CCI field in the fixed part of the header together
              with the variable length value provided in this option is
              used as the congestion control information.  The
              interpretation of the data contained in EXT_CCI_V MUST be
              negotiated out-of-band.  The use of EXT_CCI_V and
              EXT_CCI_F is mutually exclusive.


EXT_AUTH=2    Authentication extension
              Information used to authenticate the sender of the LCT
              packet.  If present, the format of this Header Extension
              and its processing MUST be communicated out-of-band as
              part of the session description.
              It is RECOMMENDED that senders provide some form of
              authentication on the LCT packets they transmit.  If
              EXT_AUTH is present, whatever authentication checks that
              can be performed immediately upon reception of the packet
              MUST be performed before accepting the packet and



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 3.3.  [Page 18]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


              performing any congestion control-related action on it.
              Some authentication schemes impose a delay of several
              seconds between when a packet is received and when the
              packet is fully authenticated.  Any congestion control
              related action that is appropriate MUST NOT be delayed by
              any such full authentication delay.


EXT_CCI_F=65  Congestion Control Information extension, fixed length.
              This extension field extends the CCI field present in the
              fixed part of the header. It is used when the congestion
              control information does not fit in the 32-bit CCI field.
              When this option is present, the concatenation of the
              32-bit CCI field in the fixed part of the header together
              with the 24-bit fixed length value provided in this option
              is used as the congestion control information.  The
              interpretation of the data contained in EXT_CCI_F MUST be
              negotiated out-of-band.  The use of EXT_CCI_V and
              EXT_CCI_F is mutually exclusive.


4.  Procedures


4.1.  Sender Operation

Before a session starts, an LCT sender MUST make available all
applicable information regarding the session.  This information could
include, but is not limited to:

  o The number of LCT channels;

  o The addresses, port numbers and data rates used for each LCT
    channel;

  o The format of the payload. For example, the payload could contain
    other protocol headers such as an FEC header.  Then for example the
    information could include the mapping of codepoints used in the
    session to FEC codec types and parameters;

  o The congestion control scheme being used;

  o The possible Header Extensions that could be used in the session;

  o The mapping of TOI value(s) to objects for the session;

  o The authentication scheme being used, and all relevant information
    which is necessary for sender authentication purposes;



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 4.1.  [Page 19]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


The session description could be in a form such as SDP as defined in
RFC2327, XML metadata, HTTP/Mime headers, etc. It might be carried in a
session announcement protocol such as SAP [4], obtained using RCCP
session control as described in [8], located on a Web page with
scheduling information, or conveyed via E-mail or other out of band
methods.  Discussion of session description format, and distribution of
session descriptions is beyond the scope of this document.

Within an LCT session, an LCT sender transmits a sequence of LCT packets
each containing a payload encoded according to one of the codecs defined
in the session description.  LCT packets are sent over one or more LCT
channels which together constitute a session.  Transmission rates MAY be
different in different channels. This document does not specify the LCT
packet payload, nor the order in which LCT packets are transmitted, nor
the organization of a session into multiple channels. Although these
issues affect the efficiency of the protocol, they do not affect the
correctness nor the inter-operability between senders and receivers.

Multiple objects can be carried within the same LCT session.  In this
case, each object is identified by a unique TOI.  Objects MAY be
transmitted sequentially, or they MAY be transmitted concurrently.

Typically, the sender(s) continues to send LCT packets in a session
until the transmission is considered complete.  The transmission MAY be
considered complete when some time has expired, a certain number of
packets have been sent, or some out of band signal (possibly from a
higher level protocol) has indicated completion by a sufficient number
of receivers.

The specification of the processing of the payload carried in LCT
packets is beyond the scope of this document.  LCT will act as a
transport layer and convey payload and associated information (Codepoint
and TOI) to the receivers and any complete protocol using LCT will
implement congestion control .

For the reasons mentioned above, this document does not pose any
restriction on LCT packet sizes. However, network efficiency
considerations recommend that the sender uses as large as possible
payload size, but in such a way that LCT packets do not exceed the
network's maximum transmission unit size (MTU), or fragmentation coupled
with packet loss might introduce severe inefficiency in the
transmission.

It is also RECOMMENDED that all LCT packets have the same or very
similar sizes, as this can have a severe impact on the effectiveness of
congestion control schemes such as the ones described in [9].  A sender
of LCT packets MUST implement the sender-side part of one of the
congestion control schemes that is in accordance with RFC2357, and the



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 4.1.  [Page 20]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


corresponding receiver congestion control scheme MUST be communicated
out of band and implemented by any receivers participating in the
session.


4.2.  Receiver Operation

Receivers can operate differently depending on the delivery service
model.  For example, for an on demand service model receivers MAY join a
session, obtain the necessary encoding symbols to reproduce the object,
and then leave the session.  As another example, for a streaming service
model a receiver MAY be continuously joined to a set of LCT channels to
download all objects in a session.

To be able to participate in a session, a receiver MUST first obtain the
relevant session description information as listed in Section 4.1.


To be able to participate in a session, a receiver MUST implement the
congestion control protocol specified in the session description. If a
receiver is not able to implement the congestion control protocol used
in the session, it MUST NOT join the session.

If sender authentication information is present in an LCT packet header,
it MUST be used as specified in Section 3.3. If a receiver is unable to
implement the authentication mechanism used by the session, it MUST NOT
join the session.

To be able to be a receiver in a session, the receiver MUST be able to
process the LCT packet header.  The receiver MUST be able to discard,
forward, store or process the LCT packet payload.  If a receiver is not
able to process a LCT packet header, it MUST either drop from the
session, or reduce the receive bandwidth to the minimum value allowed by
the congestion control protocol being used.

When the session is transmitted on multiple LCT channels, receivers MUST
do it according to the specified startup behavior of the congestion
control protocol itself. For a layered transmission on multiple
channels, this typically means that a receiver will initially join only
a minimal set of LCT channels, possibly a single one.  This rule has the
purpose of preventing receivers from starting at high data rates.

Multiple objects can be carried within the same LCT session.  In this
case, each object is identified by a unique TOI.  Note that even if a
server stops sending LCT packets for an old object before starting to
transmit LCT packets for a new object, both the network and the
underlying protocol layers can cause some reordering of packets,
especially when sent over different LCT channels, and thus receivers



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft    Section 4.2.  [Page 21]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


MUST NOT assume that the reception of an LCT packet for a new object
means that there are no more LCT packets in transit for the previous
one, at least for some amount of time.

A receiver MAY be concurrently joined to multiple LCT sessions.  The
receiver MUST perform congestion control on each such LCT session.  If
the congestion control protocol allows the receiver some flexibility in
terms of its actions within a session then the receiver MAY make choices
to optimize the packet flow performance across the multiple LCT
sessions, as long as the receiver still adheres to the congestion
control rules for each LCT session individually.


5.  Security Considerations

LCT can be subject to denial-of-service attacks by attackers which try
to confuse the congestion control mechanism, or send forged packets to
the session which would prevent successful reconstruction of large
portions of the data stream.

The same exact problems are present in TCP, where an attacker can forge
packets and either slow down or increase the throughput of the session,
or replace parts of the data stream with forged data. If the stream is
carrying compressed or otherwise coded data, even a single forged packet
could also cause incorrect reconstruction of the rest of the data
stream.

It is therefore RECOMMENDED that LCT agents implement some form of
authentication to protect themselves against such attacks.


6.  IANA Considerations

No information in this specification is subject to IANA registration.

Building blocks components used by LCT may introduce additional IANA
considerations.


7.  Intellectual Property Issues


No specific reliability protocol or congestion control protocol is
specified or referenced as mandatory in this document.

LCT MAY be used with congestion control protocols and other protocols
which are proprietary, or have pending or granted patents.




Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 7.  [Page 22]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


8.  Acknowledgments

Thanks to Vincent Roca, Bruce Lueckenhoff and Hayder Radha for detailed
comments on this document.




[1] Byers, J.W., Luby, M., Mitzenmacher, M., and Rege, A., "A Digital
Fountain Approach to Reliable Distribution of Bulk Data", Proceedings
ACM SIGCOMM '98, Vancouver, Canada, Sept 1998.

[2] Cain, B., Speakman, T., and Towsley, D., "Generic Router Assist
(GRA) Building Block, Motivation and Architecture", Internet Draft
draft-ietf-rmt-gra-arch-00.txt, a work in progress.

[3] Gemmell, J., Schooler, E., and Gray, J., "FCast Scalable Multicast
File Distribution: Caching and Parameters Optimizations", Technical
Report MSR-TR-99-14, Microsoft Research, Redmond, WA, April, 1999.

[4] Handley, M., "SAP: Session Announcement Protocol", Internet Draft,
IETF MMUSIC Working Group, Nov 1996, a work in progress.

[5] Holbrook, H., Cain, B., "Source-Specific Multicast for IP", Internet
Draft, SSM Working Group, March 2001, draft-holbrook-ssm-arch-02.txt, a
work in progress.

[6] Luby, M., Gemmell, Vicisano, L., J., Rizzo, L., Handley, M.,
Crowcroft, J., "The use of Forward Error Correction in Reliable
Multicast", Internet Draft draft-ietf-rmt-info-fec-00.txt, November
2000, a work in progress.

[7] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., Handley, M.,
Crowcroft, J., "RMT BB Forward Error Correction Codes", Internet Draft
draft-ietf-rmt-bb-fec-03.txt, July 2001.

[8] Luby, M., Hernek, D., Kushi, D., Rasmussen, L., Simu, S., Vainish,
R., "Rich Content Control Protocol: A session control protocol
instantiation", Digital Fountain document, a work in progress.

[9] Luby, M., Vicisano, L., Haken, A., "RMT BB Layered congestion
control", draft-ietf-rmt-bb-lcc-00.txt, November 2000, a work in
progress.

[10] Rizzo, L., "Effective Erasure Codes for Reliable Computer
Communication Protocols", ACM SIGCOMM Computer Communication Review,
Vol.27, No.2, pp.24-36, Apr 1997.




Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 8.  [Page 23]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


[11] Perrig, A., Canetti, R., Briscoe, B., Tygar, D., Song, D., "TESLA:
Multicast Source Authentication Transform", draft-irtf-smug-
tesla-00.txt, November, 2000, a work in progress.

[12] Rizzo, L, and Vicisano, L., "Reliable Multicast Data Distribution
protocol based on software FEC techniques", Proceedings of the Fourth
IEEES Workshop on the Architecture and Implementation of High
Performance Communication Systems, HPCS'97, Chalkidiki, Greece, June
1997.

[13] Speakman, T., Farinacci, D., Crowcroft, J., Gemmell, J., Lin, S.,
Tweedly, A., Leshchiner, D., Luby, M., Bhaskar, N., Edmonstone, R.,
Johnson, K., Montgomery, T., Rizzo, L., Sumanasekera, R., Vicisano, L.,
"PGM Reliable Transport Protocol", draft-speakman-pgm-spec-06.txt, a
work in progress.

[14] Vicisano, L., Rizzo, L., Crowcroft, J., "TCP-like Congestion
Control for Layered Multicast Data Transfer", IEEE Infocom '98, San
Francisco, CA, Mar.28-Apr.1 1998.

[15] Vicisano, L., "Notes On a Cumulative Layered Organization of Data
Packets Across Multiple groups with Different Rates", University College
London Computer Science Research Note RN/98/25, Work in Progress (May
1998).



9.  Authors' Addresses

   Michael Luby
   luby@digitalfountain.com
   Digital Fountain
   39141 Civic Center Drive
   Suite 300
   Fremont, CA, USA, 94538

   Jim Gemmell
   jgemmell@microsoft.com
   Microsoft Research
   301 Howard St., #830
   San Francisco, CA, USA, 94105

   Lorenzo Vicisano
   lorenzo@cisco.com
   cisco Systems, Inc.
   170 West Tasman Dr.,
   San Jose, CA, USA, 95134




Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 9.  [Page 24]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


   Luigi Rizzo
   luigi@iet.unipi.it
   ACIRI/ICSI,
   1947 Center St, Berkeley, CA, USA, 94704
   and
   Dip. Ing. dell'Informazione,
   Univ. di Pisa
   via Diotisalvi 2, 56126 Pisa, Italy

   Mark Handley
   mjh@aciri.org
   ACIRI,
   1947 Center St,
   Berkeley, CA, USA, 94704

   Jon Crowcroft
   J.Crowcroft@cs.ucl.ac.uk
   Department of Computer Science
   University College London
   Gower Street,
   London WC1E 6BT, UK






























Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 9.  [Page 25]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001


10.  Full Copyright Statement

Copyright (C) The Internet Society (2000).  All Rights Reserved.

This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it or
assist in its implementation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are included
on all such copies and derivative works. However, this document itself
may not be modified in any way, such as by removing the copyright notice
or references to the Internet Society or other Internet organizations,
except as needed for the purpose of developing Internet standards in
which case the procedures for copyrights defined in the Internet
languages other than English.

The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS
IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK
FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT
INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR
FITNESS FOR A PARTICULAR PURPOSE."


























Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft     Section 10.  [Page 26]


^L
INTERNET-DRAFT            Expires: January 2002                July 2001





















































Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft     Section 10.  [Page 27]