RFC1889.txt
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:184k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1.    subtype: 5 bits
  2.         May be used as a subtype to allow a set of APP packets to be
  3.         defined under one unique name, or for any application-dependent
  4.         data.
  5.    packet type (PT): 8 bits
  6.         Contains the constant 204 to identify this as an RTCP APP
  7.         packet.
  8.    name: 4 octets
  9.         A name chosen by the person defining the set of APP packets to
  10.         be unique with respect to other APP packets this application
  11.         might receive. The application creator might choose to use the
  12.         application name, and then coordinate the allocation of subtype
  13.         values to others who want to define new packet types for the
  14.         application.  Alternatively, it is recommended that others
  15.         choose a name based on the entity they represent, then
  16.         coordinate the use of the name within that entity. The name is
  17.         interpreted as a sequence of four ASCII characters, with
  18.         uppercase and lowercase characters treated as distinct.
  19. Schulzrinne, et al          Standards Track                    [Page 38]
  20. RFC 1889                          RTP                       January 1996
  21.    application-dependent data: variable length
  22.         Application-dependent data may or may not appear in an APP
  23.         packet. It is interpreted by the application and not RTP itself.
  24.         It must be a multiple of 32 bits long.
  25. 7.  RTP Translators and Mixers
  26.    In addition to end systems, RTP supports the notion of "translators"
  27.    and "mixers", which could be considered as "intermediate systems" at
  28.    the RTP level. Although this support adds some complexity to the
  29.    protocol, the need for these functions has been clearly established
  30.    by experiments with multicast audio and video applications in the
  31.    Internet. Example uses of translators and mixers given in Section 2.3
  32.    stem from the presence of firewalls and low bandwidth connections,
  33.    both of which are likely to remain.
  34. 7.1 General Description
  35.    An RTP translator/mixer connects two or more transport-level
  36.    "clouds".  Typically, each cloud is defined by a common network and
  37.    transport protocol (e.g., IP/UDP), multicast address or pair of
  38.    unicast addresses, and transport level destination port.  (Network-
  39.    level protocol translators, such as IP version 4 to IP version 6, may
  40.    be present within a cloud invisibly to RTP.) One system may serve as
  41.    a translator or mixer for a number of RTP sessions, but each is
  42.    considered a logically separate entity.
  43.    In order to avoid creating a loop when a translator or mixer is
  44.    installed, the following rules must be observed:
  45.         o Each of the clouds connected by translators and mixers
  46.          participating in one RTP session either must be distinct from
  47.          all the others in at least one of these parameters (protocol,
  48.          address, port), or must be isolated at the network level from
  49.          the others.
  50.         o A derivative of the first rule is that there must not be
  51.          multiple translators or mixers connected in parallel unless by
  52.          some arrangement they partition the set of sources to be
  53.          forwarded.
  54.    Similarly, all RTP end systems that can communicate through one or
  55.    more RTP translators or mixers share the same SSRC space, that is,
  56.    the SSRC identifiers must be unique among all these end systems.
  57.    Section 8.2 describes the collision resolution algorithm by which
  58.    SSRC identifiers are kept unique and loops are detected.
  59. Schulzrinne, et al          Standards Track                    [Page 39]
  60. RFC 1889                          RTP                       January 1996
  61.    There may be many varieties of translators and mixers designed for
  62.    different purposes and applications. Some examples are to add or
  63.    remove encryption, change the encoding of the data or the underlying
  64.    protocols, or replicate between a multicast address and one or more
  65.    unicast addresses. The distinction between translators and mixers is
  66.    that a translator passes through the data streams from different
  67.    sources separately, whereas a mixer combines them to form one new
  68.    stream:
  69.    Translator: Forwards RTP packets with their SSRC identifier intact;
  70.         this makes it possible for receivers to identify individual
  71.         sources even though packets from all the sources pass through
  72.         the same translator and carry the translator's network source
  73.         address. Some kinds of translators will pass through the data
  74.         untouched, but others may change the encoding of the data and
  75.         thus the RTP data payload type and timestamp. If multiple data
  76.         packets are re-encoded into one, or vice versa, a translator
  77.         must assign new sequence numbers to the outgoing packets. Losses
  78.         in the incoming packet stream may induce corresponding gaps in
  79.         the outgoing sequence numbers. Receivers cannot detect the
  80.         presence of a translator unless they know by some other means
  81.         what payload type or transport address was used by the original
  82.         source.
  83.    Mixer: Receives streams of RTP data packets from one or more sources,
  84.         possibly changes the data format, combines the streams in some
  85.         manner and then forwards the combined stream. Since the timing
  86.         among multiple input sources will not generally be synchronized,
  87.         the mixer will make timing adjustments among the streams and
  88.         generate its own timing for the combined stream, so it is the
  89.         synchronization source. Thus, all data packets forwarded by a
  90.         mixer will be marked with the mixer's own SSRC identifier. In
  91.         order to preserve the identity of the original sources
  92.         contributing to the mixed packet, the mixer should insert their
  93.         SSRC identifiers into the CSRC identifier list following the
  94.         fixed RTP header of the packet. A mixer that is also itself a
  95.         contributing source for some packet should explicitly include
  96.         its own SSRC identifier in the CSRC list for that packet.
  97.    For some applications, it may be acceptable for a mixer not to
  98.    identify sources in the CSRC list. However, this introduces the
  99.    danger that loops involving those sources could not be detected.
  100.    The advantage of a mixer over a translator for applications like
  101.    audio is that the output bandwidth is limited to that of one source
  102.    even when multiple sources are active on the input side. This may be
  103.    important for low-bandwidth links. The disadvantage is that receivers
  104.    on the output side don't have any control over which sources are
  105. Schulzrinne, et al          Standards Track                    [Page 40]
  106. RFC 1889                          RTP                       January 1996
  107.    passed through or muted, unless some mechanism is implemented for
  108.    remote control of the mixer. The regeneration of synchronization
  109.    information by mixers also means that receivers can't do inter-media
  110.    synchronization of the original streams. A multi-media mixer could do
  111.    it.
  112.          [E1]                                    [E6]
  113.           |                                       |
  114.     E1:17 |                                 E6:15 |
  115.           |                                       |   E6:15
  116.           V  M1:48 (1,17)         M1:48 (1,17)    V   M1:48 (1,17)
  117.          (M1)-------------><T1>-----------------><T2>-------------->[E7]
  118.           ^                 ^     E4:47           ^   E4:47
  119.      E2:1 |           E4:47 |                     |   M3:89 (64,45)
  120.           |                 |                     |
  121.          [E2]              [E4]     M3:89 (64,45) |
  122.                                                   |        legend:
  123.    [E3] --------->(M2)----------->(M3)------------|        [End system]
  124.           E3:64        M2:12 (64)  ^                       (Mixer)
  125.                                    | E5:45                 <Translator>
  126.                                    |
  127.                                   [E5]          source: SSRC (CSRCs)
  128.                                                 ------------------->
  129.  Figure 3: Sample RTP network with end systems, mixers and translators
  130.    A collection of mixers and translators is shown in Figure 3 to
  131.    illustrate their effect on SSRC and CSRC identifiers. In the figure,
  132.    end systems are shown as rectangles (named E), translators as
  133.    triangles (named T) and mixers as ovals (named M). The notation "M1:
  134.    48(1,17)" designates a packet originating a mixer M1, identified with
  135.    M1's (random) SSRC value of 48 and two CSRC identifiers, 1 and 17,
  136.    copied from the SSRC identifiers of packets from E1 and E2.
  137. 7.2 RTCP Processing in Translators
  138.    In addition to forwarding data packets, perhaps modified, translators
  139.    and mixers must also process RTCP packets. In many cases, they will
  140.    take apart the compound RTCP packets received from end systems to
  141.    aggregate SDES information and to modify the SR or RR packets.
  142.    Retransmission of this information may be triggered by the packet
  143.    arrival or by the RTCP interval timer of the translator or mixer
  144.    itself.
  145.    A translator that does not modify the data packets, for example one
  146.    that just replicates between a multicast address and a unicast
  147.    address, may simply forward RTCP packets unmodified as well. A
  148. Schulzrinne, et al          Standards Track                    [Page 41]
  149. RFC 1889                          RTP                       January 1996
  150.    translator that transforms the payload in some way must make
  151.    corresponding transformations in the SR and RR information so that it
  152.    still reflects the characteristics of the data and the reception
  153.    quality. These translators must not simply forward RTCP packets. In
  154.    general, a translator should not aggregate SR and RR packets from
  155.    different sources into one packet since that would reduce the
  156.    accuracy of the propagation delay measurements based on the LSR and
  157.    DLSR fields.
  158.    SR sender information:  A translator does not generate its own sender
  159.         information, but forwards the SR packets received from one cloud
  160.         to the others. The SSRC is left intact but the sender
  161.         information must be modified if required by the translation. If
  162.         a translator changes the data encoding, it must change the
  163.         "sender's byte count" field. If it also combines several data
  164.         packets into one output packet, it must change the "sender's
  165.         packet count" field. If it changes the timestamp frequency, it
  166.         must change the "RTP timestamp" field in the SR packet.
  167.    SR/RR reception report blocks:  A translator forwards reception
  168.         reports received from one cloud to the others. Note that these
  169.         flow in the direction opposite to the data.  The SSRC is left
  170.         intact. If a translator combines several data packets into one
  171.         output packet, and therefore changes the sequence numbers, it
  172.         must make the inverse manipulation for the packet loss fields
  173.         and the "extended last sequence number" field. This may be
  174.         complex. In the extreme case, there may be no meaningful way to
  175.         translate the reception reports, so the translator may pass on
  176.         no reception report at all or a synthetic report based on its
  177.         own reception. The general rule is to do what makes sense for a
  178.         particular translation.
  179.    A translator does not require an SSRC identifier of its own, but may
  180.    choose to allocate one for the purpose of sending reports about what
  181.    it has received. These would be sent to all the connected clouds,
  182.    each corresponding to the translation of the data stream as sent to
  183.    that cloud, since reception reports are normally multicast to all
  184.    participants.
  185.    SDES:  Translators typically forward without change the SDES
  186.         information they receive from one cloud to the others, but may,
  187.         for example, decide to filter non-CNAME SDES information if
  188.         bandwidth is limited. The CNAMEs must be forwarded to allow SSRC
  189.         identifier collision detection to work. A translator that
  190.         generates its own RR packets must send SDES CNAME information
  191.         about itself to the same clouds that it sends those RR packets.
  192. Schulzrinne, et al          Standards Track                    [Page 42]
  193. RFC 1889                          RTP                       January 1996
  194.    BYE:  Translators forward BYE packets unchanged. Translators with
  195.         their own SSRC should generate BYE packets with that SSRC
  196.         identifier if they are about to cease forwarding packets.
  197.    APP:  Translators forward APP packets unchanged.
  198. 7.3 RTCP Processing in Mixers
  199.    Since a mixer generates a new data stream of its own, it does not
  200.    pass through SR or RR packets at all and instead generates new
  201.    information for both sides.
  202.    SR sender information:  A mixer does not pass through sender
  203.         information from the sources it mixes because the
  204.         characteristics of the source streams are lost in the mix. As a
  205.         synchronization source, the mixer generates its own SR packets
  206.         with sender information about the mixed data stream and sends
  207.         them in the same direction as the mixed stream.
  208.    SR/RR reception report blocks:  A mixer generates its own reception
  209.         reports for sources in each cloud and sends them out only to the
  210.         same cloud. It does not send these reception reports to the
  211.         other clouds and does not forward reception reports from one
  212.         cloud to the others because the sources would not be SSRCs there
  213.         (only CSRCs).
  214.    SDES:  Mixers typically forward without change the SDES information
  215.         they receive from one cloud to the others, but may, for example,
  216.         decide to filter non-CNAME SDES information if bandwidth is
  217.         limited. The CNAMEs must be forwarded to allow SSRC identifier
  218.         collision detection to work. (An identifier in a CSRC list
  219.         generated by a mixer might collide with an SSRC identifier
  220.         generated by an end system.) A mixer must send SDES CNAME
  221.         information about itself to the same clouds that it sends SR or
  222.         RR packets.
  223.    Since mixers do not forward SR or RR packets, they will typically be
  224.    extracting SDES packets from a compound RTCP packet. To minimize
  225.    overhead, chunks from the SDES packets may be aggregated into a
  226.    single SDES packet which is then stacked on an SR or RR packet
  227.    originating from the mixer. The RTCP packet rate may be different on
  228.    each side of the mixer.
  229.    A mixer that does not insert CSRC identifiers may also refrain from
  230.    forwarding SDES CNAMEs. In this case, the SSRC identifier spaces in
  231.    the two clouds are independent. As mentioned earlier, this mode of
  232.    operation creates a danger that loops can't be detected.
  233. Schulzrinne, et al          Standards Track                    [Page 43]
  234. RFC 1889                          RTP                       January 1996
  235.    BYE:  Mixers need to forward BYE packets. They should generate BYE
  236.         packets with their own SSRC identifiers if they are about to
  237.         cease forwarding packets.
  238.    APP:  The treatment of APP packets by mixers is application-specific.
  239. 7.4 Cascaded Mixers
  240.    An RTP session may involve a collection of mixers and translators as
  241.    shown in Figure 3. If two mixers are cascaded, such as M2 and M3 in
  242.    the figure, packets received by a mixer may already have been mixed
  243.    and may include a CSRC list with multiple identifiers. The second
  244.    mixer should build the CSRC list for the outgoing packet using the
  245.    CSRC identifiers from already-mixed input packets and the SSRC
  246.    identifiers from unmixed input packets. This is shown in the output
  247.    arc from mixer M3 labeled M3:89(64,45) in the figure. As in the case
  248.    of mixers that are not cascaded, if the resulting CSRC list has more
  249.    than 15 identifiers, the remainder cannot be included.
  250. 8.  SSRC Identifier Allocation and Use
  251.    The SSRC identifier carried in the RTP header and in various fields
  252.    of RTCP packets is a random 32-bit number that is required to be
  253.    globally unique within an RTP session. It is crucial that the number
  254.    be chosen with care in order that participants on the same network or
  255.    starting at the same time are not likely to choose the same number.
  256.    It is not sufficient to use the local network address (such as an
  257.    IPv4 address) for the identifier because the address may not be
  258.    unique. Since RTP translators and mixers enable interoperation among
  259.    multiple networks with different address spaces, the allocation
  260.    patterns for addresses within two spaces might result in a much
  261.    higher rate of collision than would occur with random allocation.
  262.    Multiple sources running on one host would also conflict.
  263.    It is also not sufficient to obtain an SSRC identifier simply by
  264.    calling random() without carefully initializing the state. An example
  265.    of how to generate a random identifier is presented in Appendix A.6.
  266. 8.1 Probability of Collision
  267.    Since the identifiers are chosen randomly, it is possible that two or
  268.    more sources will choose the same number. Collision occurs with the
  269.    highest probability when all sources are started simultaneously, for
  270.    example when triggered automatically by some session management
  271.    event. If N is the number of sources and L the length of the
  272.    identifier (here, 32 bits), the probability that two sources
  273. Schulzrinne, et al          Standards Track                    [Page 44]
  274. RFC 1889                          RTP                       January 1996
  275.    independently pick the same value can be approximated for large N
  276.    [20] as 1 - exp(-N**2 / 2**(L+1)). For N=1000, the probability is
  277.    roughly 10**-4.
  278.    The typical collision probability is much lower than the worst-case
  279.    above. When one new source joins an RTP session in which all the
  280.    other sources already have unique identifiers, the probability of
  281.    collision is just the fraction of numbers used out of the space.
  282.    Again, if N is the number of sources and L the length of the
  283.    identifier, the probability of collision is N / 2**L. For N=1000, the
  284.    probability is roughly 2*10**-7.
  285.    The probability of collision is further reduced by the opportunity
  286.    for a new source to receive packets from other participants before
  287.    sending its first packet (either data or control). If the new source
  288.    keeps track of the other participants (by SSRC identifier), then
  289.    before transmitting its first packet the new source can verify that
  290.    its identifier does not conflict with any that have been received, or
  291.    else choose again.
  292. 8.2 Collision Resolution and Loop Detection
  293.    Although the probability of SSRC identifier collision is low, all RTP
  294.    implementations must be prepared to detect collisions and take the
  295.    appropriate actions to resolve them. If a source discovers at any
  296.    time that another source is using the same SSRC identifier as its
  297.    own, it must send an RTCP BYE packet for the old identifier and
  298.    choose another random one. If a receiver discovers that two other
  299.    sources are colliding, it may keep the packets from one and discard
  300.    the packets from the other when this can be detected by different
  301.    source transport addresses or CNAMEs. The two sources are expected to
  302.    resolve the collision so that the situation doesn't last.
  303.    Because the random identifiers are kept globally unique for each RTP
  304.    session, they can also be used to detect loops that may be introduced
  305.    by mixers or translators. A loop causes duplication of data and
  306.    control information, either unmodified or possibly mixed, as in the
  307.    following examples:
  308.         o A translator may incorrectly forward a packet to the same
  309.          multicast group from which it has received the packet, either
  310.          directly or through a chain of translators. In that case, the
  311.          same packet appears several times, originating from different
  312.          network sources.
  313.         o Two translators incorrectly set up in parallel, i.e., with the
  314.          same multicast groups on both sides, would both forward packets
  315.          from one multicast group to the other. Unidirectional
  316. Schulzrinne, et al          Standards Track                    [Page 45]
  317. RFC 1889                          RTP                       January 1996
  318.          translators would produce two copies; bidirectional translators
  319.          would form a loop.
  320.         o A mixer can close a loop by sending to the same transport
  321.          destination upon which it receives packets, either directly or
  322.          through another mixer or translator. In this case a source
  323.          might show up both as an SSRC on a data packet and a CSRC in a
  324.          mixed data packet.
  325.    A source may discover that its own packets are being looped, or that
  326.    packets from another source are being looped (a third-party loop).
  327.    Both loops and collisions in the random selection of a source
  328.    identifier result in packets arriving with the same SSRC identifier
  329.    but a different source transport address, which may be that of the
  330.    end system originating the packet or an intermediate system.
  331.    Consequently, if a source changes its source transport address, it
  332.    must also choose a new SSRC identifier to avoid being interpreted as
  333.    a looped source. Loops or collisions occurring on the far side of a
  334.    translator or mixer cannot be detected using the source transport
  335.    address if all copies of the packets go through the translator or
  336.    mixer, however collisions may still be detected when chunks from two
  337.    RTCP SDES packets contain the same SSRC identifier but different
  338.    CNAMEs.
  339.    To detect and resolve these conflicts, an RTP implementation must
  340.    include an algorithm similar to the one described below. It ignores
  341.    packets from a new source or loop that collide with an established
  342.    source. It resolves collisions with the participant's own SSRC
  343.    identifier by sending an RTCP BYE for the old identifier and choosing
  344.    a new one. However, when the collision was induced by a loop of the
  345.    participant's own packets, the algorithm will choose a new identifier
  346.    only once and thereafter ignore packets from the looping source
  347.    transport address. This is required to avoid a flood of BYE packets.
  348.    This algorithm depends upon the source transport address being the
  349.    same for both RTP and RTCP packets from a source. The algorithm would
  350.    require modifications to support applications that don't meet this
  351.    constraint.
  352.    This algorithm requires keeping a table indexed by source identifiers
  353.    and containing the source transport address from which the identifier
  354.    was (first) received, along with other state for that source. Each
  355.    SSRC or CSRC identifier received in a data or control packet is
  356.    looked up in this table in order to process that data or control
  357.    information.  For control packets, each element with its own SSRC,
  358.    for example an SDES chunk, requires a separate lookup. (The SSRC in a
  359.    reception report block is an exception.) If the SSRC or CSRC is not
  360. Schulzrinne, et al          Standards Track                    [Page 46]
  361. RFC 1889                          RTP                       January 1996
  362.    found, a new entry is created. These table entries are removed when
  363.    an RTCP BYE packet is received with the corresponding SSRC, or after
  364.    no packets have arrived for a relatively long time (see Section
  365.    6.2.1).
  366.    In order to track loops of the participant's own data packets, it is
  367.    also necessary to keep a separate list of source transport addresses
  368.    (not identifiers) that have been found to be conflicting. Note that
  369.    this should be a short list, usually empty. Each element in this list
  370.    stores the source address plus the time when the most recent
  371.    conflicting packet was received. An element may be removed from the
  372.    list when no conflicting packet has arrived from that source for a
  373.    time on the order of 10 RTCP report intervals (see Section 6.2).
  374.    For the algorithm as shown, it is assumed that the participant's own
  375.    source identifier and state are included in the source identifier
  376.    table. The algorithm could be restructured to first make a separate
  377.    comparison against the participant's own source identifier.
  378.        IF the SSRC or CSRC identifier is not found in the source
  379.           identifier table:
  380.        THEN create a new entry storing the source transport address
  381.             and the SSRC or CSRC along with other state.
  382.             CONTINUE with normal processing.
  383.        (identifier is found in the table)
  384.        IF the source transport address from the packet matches
  385.           the one saved in the table entry for this identifier:
  386.        THEN CONTINUE with normal processing.
  387.        (an identifier collision or a loop is indicated)
  388.        IF the source identifier is not the participant's own:
  389.        THEN IF the source identifier is from an RTCP SDES chunk
  390.                containing a CNAME item that differs from the CNAME
  391.                in the table entry:
  392.             THEN (optionally) count a third-party collision.
  393.             ELSE (optionally) count a third-party loop.
  394.             ABORT processing of data packet or control element.
  395.        (a collision or loop of the participant's own data)
  396.        IF the source transport address is found in the list of
  397.          conflicting addresses:
  398.        THEN IF the source identifier is not from an RTCP SDES chunk
  399.                containing a CNAME item OR if that CNAME is the
  400.                participant's own:
  401. Schulzrinne, et al          Standards Track                    [Page 47]
  402. RFC 1889                          RTP                       January 1996
  403.             THEN (optionally) count occurrence of own traffic looped.
  404.                  mark current time in conflicting address list entry.
  405.                  ABORT processing of data packet or control element.
  406.        log occurrence of a collision.
  407.        create a new entry in the conflicting address list and
  408.        mark current time.
  409.        send an RTCP BYE packet with the old SSRC identifier.
  410.        choose a new identifier.
  411.        create a new entry in the source identifier table with the
  412.          old SSRC plus the source transport address from the packet
  413.          being processed.
  414.        CONTINUE with normal processing.
  415.    In this algorithm, packets from a newly conflicting source address
  416.    will be ignored and packets from the original source will be kept.
  417.    (If the original source was through a mixer and later the same source
  418.    is received directly, the receiver may be well advised to switch
  419.    unless other sources in the mix would be lost.) If no packets arrive
  420.    from the original source for an extended period, the table entry will
  421.    be timed out and the new source will be able to take over. This might
  422.    occur if the original source detects the collision and moves to a new
  423.    source identifier, but in the usual case an RTCP BYE packet will be
  424.    received from the original source to delete the state without having
  425.    to wait for a timeout.
  426.    When a new SSRC identifier is chosen due to a collision, the
  427.    candidate identifier should first be looked up in the source
  428.    identifier table to see if it was already in use by some other
  429.    source. If so, another candidate should be generated and the process
  430.    repeated.
  431.    A loop of data packets to a multicast destination can cause severe
  432.    network flooding. All mixers and translators are required to
  433.    implement a loop detection algorithm like the one here so that they
  434.    can break loops. This should limit the excess traffic to no more than
  435.    one duplicate copy of the original traffic, which may allow the
  436.    session to continue so that the cause of the loop can be found and
  437.    fixed. However, in extreme cases where a mixer or translator does not
  438.    properly break the loop and high traffic levels result, it may be
  439.    necessary for end systems to cease transmitting data or control
  440.    packets entirely. This decision may depend upon the application. An
  441.    error condition should be indicated as appropriate. Transmission
  442.    might be attempted again periodically after a long, random time (on
  443.    the order of minutes).
  444. Schulzrinne, et al          Standards Track                    [Page 48]
  445. RFC 1889                          RTP                       January 1996
  446. 9.  Security
  447.    Lower layer protocols may eventually provide all the security
  448.    services that may be desired for applications of RTP, including
  449.    authentication, integrity, and confidentiality. These services  have
  450.    recently been specified for IP. Since the need for a confidentiality
  451.    service is well established in the initial audio and video
  452.    applications that are expected to use RTP, a confidentiality service
  453.    is defined in the next section for use with RTP and RTCP until lower
  454.    layer services are available. The overhead on the protocol for this
  455.    service is low, so the penalty will be minimal if this service is
  456.    obsoleted by lower layer services in the future.
  457.    Alternatively, other services, other implementations of services and
  458.    other algorithms may be defined for RTP in the future if warranted.
  459.    The selection presented here is meant to simplify implementation of
  460.    interoperable, secure applications and provide guidance to
  461.    implementors. No claim is made that the methods presented here are
  462.    appropriate for a particular security need. A profile may specify
  463.    which services and algorithms should be offered by applications, and
  464.    may provide guidance as to their appropriate use.
  465.    Key distribution and certificates are outside the scope of this
  466.    document.
  467. 9.1 Confidentiality
  468.    Confidentiality means that only the intended receiver(s) can decode
  469.    the received packets; for others, the packet contains no useful
  470.    information. Confidentiality of the content is achieved by
  471.    encryption.
  472.    When encryption of RTP or RTCP is desired, all the octets that will
  473.    be encapsulated for transmission in a single lower-layer packet are
  474.    encrypted as a unit. For RTCP, a 32-bit random number is prepended to
  475.    the unit before encryption to deter known plaintext attacks. For RTP,
  476.    no prefix is required because the sequence number and timestamp
  477.    fields are initialized with random offsets.
  478.    For RTCP, it is allowed to split a compound RTCP packet into two
  479.    lower-layer packets, one to be encrypted and one to be sent in the
  480.    clear. For example, SDES information might be encrypted while
  481.    reception reports were sent in the clear to accommodate third-party
  482.    monitors that are not privy to the encryption key. In this example,
  483.    depicted in Fig. 4, the SDES information must be appended to an RR
  484.    packet with no reports (and the encrypted) to satisfy the requirement
  485.    that all compound RTCP packets begin with an SR or RR packet.
  486. Schulzrinne, et al          Standards Track                    [Page 49]
  487. RFC 1889                          RTP                       January 1996
  488.                  UDP packet                        UDP packet
  489.    -------------------------------------  -------------------------
  490.    [32-bit ][       ][     #           ]  [    # sender # receiver]
  491.    [random ][  RR   ][SDES # CNAME, ...]  [ SR # report # report  ]
  492.    [integer][(empty)][     #           ]  [    #        #         ]
  493.    -------------------------------------  -------------------------
  494.                  encrypted                       not encrypted
  495.    #: SSRC
  496.            Figure 4: Encrypted and non-encrypted RTCP packets
  497.    The presence of encryption and the use of the correct key are
  498.    confirmed by the receiver through header or payload validity checks.
  499.    Examples of such validity checks for RTP and RTCP headers are given
  500.    in Appendices A.1 and A.2.
  501.    The default encryption algorithm is the Data Encryption Standard
  502.    (DES) algorithm in cipher block chaining (CBC) mode, as described in
  503.    Section 1.1 of RFC 1423 [21], except that padding to a multiple of 8
  504.    octets is indicated as described for the P bit in Section 5.1. The
  505.    initialization vector is zero because random values are supplied in
  506.    the RTP header or by the random prefix for compound RTCP packets. For
  507.    details on the use of CBC initialization vectors, see [22].
  508.    Implementations that support encryption should always support the DES
  509.    algorithm in CBC mode as the default to maximize interoperability.
  510.    This method is chosen because it has been demonstrated to be easy and
  511.    practical to use in experimental audio and video tools in operation
  512.    on the Internet. Other encryption algorithms may be specified
  513.    dynamically for a session by non-RTP means.
  514.    As an alternative to encryption at the RTP level as described above,
  515.    profiles may define additional payload types for encrypted encodings.
  516.    Those encodings must specify how padding and other aspects of the
  517.    encryption should be handled. This method allows encrypting only the
  518.    data while leaving the headers in the clear for applications where
  519.    that is desired. It may be particularly useful for hardware devices
  520.    that will handle both decryption and decoding.
  521. 9.2 Authentication and Message Integrity
  522.    Authentication and message integrity are not defined in the current
  523.    specification of RTP since these services would not be directly
  524.    feasible without a key management infrastructure. It is expected that
  525.    authentication and integrity services will be provided by lower layer
  526.    protocols in the future.
  527. Schulzrinne, et al          Standards Track                    [Page 50]
  528. RFC 1889                          RTP                       January 1996
  529. 10.  RTP over Network and Transport Protocols
  530.    This section describes issues specific to carrying RTP packets within
  531.    particular network and transport protocols. The following rules apply
  532.    unless superseded by protocol-specific definitions outside this
  533.    specification.
  534.    RTP relies on the underlying protocol(s) to provide demultiplexing of
  535.    RTP data and RTCP control streams. For UDP and similar protocols, RTP
  536.    uses an even port number and the corresponding RTCP stream uses the
  537.    next higher (odd) port number. If an application is supplied with an
  538.    odd number for use as the RTP port, it should replace this number
  539.    with the next lower (even) number.
  540.    RTP data packets contain no length field or other delineation,
  541.    therefore RTP relies on the underlying protocol(s) to provide a
  542.    length indication. The maximum length of RTP packets is limited only
  543.    by the underlying protocols.
  544.    If RTP packets are to be carried in an underlying protocol that
  545.    provides the abstraction of a continuous octet stream rather than
  546.    messages (packets), an encapsulation of the RTP packets must be
  547.    defined to provide a framing mechanism. Framing is also needed if the
  548.    underlying protocol may contain padding so that the extent of the RTP
  549.    payload cannot be determined. The framing mechanism is not defined
  550.    here.
  551.    A profile may specify a framing method to be used even when RTP is
  552.    carried in protocols that do provide framing in order to allow
  553.    carrying several RTP packets in one lower-layer protocol data unit,
  554.    such as a UDP packet. Carrying several RTP packets in one network or
  555.    transport packet reduces header overhead and may simplify
  556.    synchronization between different streams.
  557. 11.  Summary of Protocol Constants
  558.    This section contains a summary listing of the constants defined in
  559.    this specification.
  560.    The RTP payload type (PT) constants are defined in profiles rather
  561.    than this document. However, the octet of the RTP header which
  562.    contains the marker bit(s) and payload type must avoid the reserved
  563.    values 200 and 201 (decimal) to distinguish RTP packets from the RTCP
  564.    SR and RR packet types for the header validation procedure described
  565.    in Appendix A.1. For the standard definition of one marker bit and a
  566.    7-bit payload type field as shown in this specification, this
  567.    restriction means that payload types 72 and 73 are reserved.
  568. Schulzrinne, et al          Standards Track                    [Page 51]
  569. RFC 1889                          RTP                       January 1996
  570. 11.1 RTCP packet types
  571.    abbrev.    name                   value
  572.    SR         sender report            200
  573.    RR         receiver report          201
  574.    SDES       source description       202
  575.    BYE        goodbye                  203
  576.    APP        application-defined      204
  577.    These type values were chosen in the range 200-204 for improved
  578.    header validity checking of RTCP packets compared to RTP packets or
  579.    other unrelated packets. When the RTCP packet type field is compared
  580.    to the corresponding octet of the RTP header, this range corresponds
  581.    to the marker bit being 1 (which it usually is not in data packets)
  582.    and to the high bit of the standard payload type field being 1 (since
  583.    the static payload types are typically defined in the low half). This
  584.    range was also chosen to be some distance numerically from 0 and 255
  585.    since all-zeros and all-ones are common data patterns.
  586.    Since all compound RTCP packets must begin with SR or RR, these codes
  587.    were chosen as an even/odd pair to allow the RTCP validity check to
  588.    test the maximum number of bits with mask and value.
  589.    Other constants are assigned by IANA. Experimenters are encouraged to
  590.    register the numbers they need for experiments, and then unregister
  591.    those which prove to be unneeded.
  592. 11.2 SDES types
  593.    abbrev.    name                              value
  594.    END        end of SDES list                      0
  595.    CNAME      canonical name                        1
  596.    NAME       user name                             2
  597.    EMAIL      user's electronic mail address        3
  598.    PHONE      user's phone number                   4
  599.    LOC        geographic user location              5
  600.    TOOL       name of application or tool           6
  601.    NOTE       notice about the source               7
  602.    PRIV       private extensions                    8
  603.    Other constants are assigned by IANA. Experimenters are encouraged to
  604.    register the numbers they need for experiments, and then unregister
  605.    those which prove to be unneeded.
  606. Schulzrinne, et al          Standards Track                    [Page 52]
  607. RFC 1889                          RTP                       January 1996
  608. 12.  RTP Profiles and Payload Format Specifications
  609.    A complete specification of RTP for a particular application will
  610.    require one or more companion documents of two types described here:
  611.    profiles, and payload format specifications.
  612.    RTP may be used for a variety of applications with somewhat differing
  613.    requirements. The flexibility to adapt to those requirements is
  614.    provided by allowing multiple choices in the main protocol
  615.    specification, then selecting the appropriate choices or defining
  616.    extensions for a particular environment and class of applications in
  617.    a separate profile document. Typically an application will operate
  618.    under only one profile so there is no explicit indication of which
  619.    profile is in use. A profile for audio and video applications may be
  620.    found in the companion Internet-Draft draft-ietf-avt-profile for
  621.    The second type of companion document is a payload format
  622.    specification, which defines how a particular kind of payload data,
  623.    such as H.261 encoded video, should be carried in RTP. These
  624.    documents are typically titled "RTP Payload Format for XYZ
  625.    Audio/Video Encoding". Payload formats may be useful under multiple
  626.    profiles and may therefore be defined independently of any particular
  627.    profile. The profile documents are then responsible for assigning a
  628.    default mapping of that format to a payload type value if needed.
  629.    Within this specification, the following items have been identified
  630.    for possible definition within a profile, but this list is not meant
  631.    to be exhaustive:
  632.    RTP data header: The octet in the RTP data header that contains the
  633.         marker bit and payload type field may be redefined by a profile
  634.         to suit different requirements, for example with more or fewer
  635.         marker bits (Section 5.3).
  636.    Payload types: Assuming that a payload type field is included, the
  637.         profile will usually define a set of payload formats (e.g.,
  638.         media encodings) and a default static mapping of those formats
  639.         to payload type values. Some of the payload formats may be
  640.         defined by reference to separate payload format specifications.
  641.         For each payload type defined, the profile must specify the RTP
  642.         timestamp clock rate to be used (Section 5.1).
  643.    RTP data header additions: Additional fields may be appended to the
  644.         fixed RTP data header if some additional functionality is
  645.         required across the profile's class of applications independent
  646.         of payload type (Section 5.3).
  647. Schulzrinne, et al          Standards Track                    [Page 53]
  648. RFC 1889                          RTP                       January 1996
  649.    RTP data header extensions: The contents of the first 16 bits of the
  650.         RTP data header extension structure must be defined if use of
  651.         that mechanism is to be allowed under the profile for
  652.         implementation-specific extensions (Section 5.3.1).
  653.    RTCP packet types: New application-class-specific RTCP packet types
  654.         may be defined and registered with IANA.
  655.    RTCP report interval: A profile should specify that the values
  656.         suggested in Section 6.2 for the constants employed in the
  657.         calculation of the RTCP report interval will be used.  Those are
  658.         the RTCP fraction of session bandwidth, the minimum report
  659.         interval, and the bandwidth split between senders and receivers.
  660.         A profile may specify alternate values if they have been
  661.         demonstrated to work in a scalable manner.
  662.    SR/RR extension: An extension section may be defined for the RTCP SR
  663.         and RR packets if there is additional information that should be
  664.         reported regularly about the sender or receivers (Section 6.3.3).
  665.    SDES use: The profile may specify the relative priorities for RTCP
  666.         SDES items to be transmitted or excluded entirely (Section
  667.         6.2.2); an alternate syntax or semantics for the CNAME item
  668.         (Section 6.4.1); the format of the LOC item (Section 6.4.5); the
  669.         semantics and use of the NOTE item (Section 6.4.7); or new SDES
  670.         item types to be registered with IANA.
  671.    Security: A profile may specify which security services and
  672.         algorithms should be offered by applications, and may provide
  673.         guidance as to their appropriate use (Section 9).
  674.    String-to-key mapping: A profile may specify how a user-provided
  675.         password or pass phrase is mapped into an encryption key.
  676.    Underlying protocol: Use of a particular underlying network or
  677.         transport layer protocol to carry RTP packets may be required.
  678.    Transport mapping: A mapping of RTP and RTCP to transport-level
  679.         addresses, e.g., UDP ports, other than the standard mapping
  680.         defined in Section 10 may be specified.
  681.    Encapsulation: An encapsulation of RTP packets may be defined to
  682.         allow multiple RTP data packets to be carried in one lower-layer
  683.         packet or to provide framing over underlying protocols that do
  684.         not already do so (Section 10).
  685. Schulzrinne, et al          Standards Track                    [Page 54]
  686. RFC 1889                          RTP                       January 1996
  687.    It is not expected that a new profile will be required for every
  688.    application. Within one application class, it would be better to
  689.    extend an existing profile rather than make a new one in order to
  690.    facilitate interoperation among the applications since each will
  691.    typically run under only one profile. Simple extensions such as the
  692.    definition of additional payload type values or RTCP packet types may
  693.    be accomplished by registering them through the Internet Assigned
  694.    Numbers Authority and publishing their descriptions in an addendum to
  695.    the profile or in a payload format specification.
  696. Schulzrinne, et al          Standards Track                    [Page 55]
  697. RFC 1889                          RTP                       January 1996
  698. A.  Algorithms
  699.    We provide examples of C code for aspects of RTP sender and receiver
  700.    algorithms. There may be other implementation methods that are faster
  701.    in particular operating environments or have other advantages. These
  702.    implementation notes are for informational purposes only and are
  703.    meant to clarify the RTP specification.
  704.    The following definitions are used for all examples; for clarity and
  705.    brevity, the structure definitions are only valid for 32-bit big-
  706.    endian (most significant octet first) architectures. Bit fields are
  707.    assumed to be packed tightly in big-endian bit order, with no
  708.    additional padding. Modifications would be required to construct a
  709.    portable implementation.
  710.    /*
  711.     * rtp.h  --  RTP header file (RFC XXXX)
  712.     */
  713.    #include <sys/types.h>
  714.    /*
  715.     * The type definitions below are valid for 32-bit architectures and
  716.     * may have to be adjusted for 16- or 64-bit architectures.
  717.     */
  718.    typedef unsigned char  u_int8;
  719.    typedef unsigned short u_int16;
  720.    typedef unsigned int   u_int32;
  721.    typedef          short int16;
  722.    /*
  723.     * Current protocol version.
  724.     */
  725.    #define RTP_VERSION    2
  726.    #define RTP_SEQ_MOD (1<<16)
  727.    #define RTP_MAX_SDES 255      /* maximum text length for SDES */
  728.    typedef enum {
  729.        RTCP_SR   = 200,
  730.        RTCP_RR   = 201,
  731.        RTCP_SDES = 202,
  732.        RTCP_BYE  = 203,
  733.        RTCP_APP  = 204
  734.    } rtcp_type_t;
  735.    typedef enum {
  736.        RTCP_SDES_END   = 0,
  737.        RTCP_SDES_CNAME = 1,
  738. Schulzrinne, et al          Standards Track                    [Page 56]
  739. RFC 1889                          RTP                       January 1996
  740.        RTCP_SDES_NAME  = 2,
  741.        RTCP_SDES_EMAIL = 3,
  742.        RTCP_SDES_PHONE = 4,
  743.        RTCP_SDES_LOC   = 5,
  744.        RTCP_SDES_TOOL  = 6,
  745.        RTCP_SDES_NOTE  = 7,
  746.        RTCP_SDES_PRIV  = 8
  747.    } rtcp_sdes_type_t;
  748.    /*
  749.     * RTP data header
  750.     */
  751.    typedef struct {
  752.        unsigned int version:2;   /* protocol version */
  753.        unsigned int p:1;         /* padding flag */
  754.        unsigned int x:1;         /* header extension flag */
  755.        unsigned int cc:4;        /* CSRC count */
  756.        unsigned int m:1;         /* marker bit */
  757.        unsigned int pt:7;        /* payload type */
  758.        u_int16 seq;              /* sequence number */
  759.        u_int32 ts;               /* timestamp */
  760.        u_int32 ssrc;             /* synchronization source */
  761.        u_int32 csrc[1];          /* optional CSRC list */
  762.    } rtp_hdr_t;
  763.    /*
  764.     * RTCP common header word
  765.     */
  766.    typedef struct {
  767.        unsigned int version:2;   /* protocol version */
  768.        unsigned int p:1;         /* padding flag */
  769.        unsigned int count:5;     /* varies by packet type */
  770.        unsigned int pt:8;        /* RTCP packet type */
  771.        u_int16 length;           /* pkt len in words, w/o this word */
  772.    } rtcp_common_t;
  773.    /*
  774.     * Big-endian mask for version, padding bit and packet type pair
  775.     */
  776.    #define RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
  777.    #define RTCP_VALID_VALUE ((RTP_VERSION << 14) | RTCP_SR)
  778.    /*
  779.     * Reception report block
  780.     */
  781.    typedef struct {
  782.        u_int32 ssrc;             /* data source being reported */
  783.        unsigned int fraction:8;  /* fraction lost since last SR/RR */
  784. Schulzrinne, et al          Standards Track                    [Page 57]
  785. RFC 1889                          RTP                       January 1996
  786.        int lost:24;              /* cumul. no. pkts lost (signed!) */
  787.        u_int32 last_seq;         /* extended last seq. no. received */
  788.        u_int32 jitter;           /* interarrival jitter */
  789.        u_int32 lsr;              /* last SR packet from this source */
  790.        u_int32 dlsr;             /* delay since last SR packet */
  791.    } rtcp_rr_t;
  792.    /*
  793.     * SDES item
  794.     */
  795.    typedef struct {
  796.        u_int8 type;              /* type of item (rtcp_sdes_type_t) */
  797.        u_int8 length;            /* length of item (in octets) */
  798.        char data[1];             /* text, not null-terminated */
  799.    } rtcp_sdes_item_t;
  800.    /*
  801.     * One RTCP packet
  802.     */
  803.    typedef struct {
  804.        rtcp_common_t common;     /* common header */
  805.        union {
  806.            /* sender report (SR) */
  807.            struct {
  808.                u_int32 ssrc;     /* sender generating this report */
  809.                u_int32 ntp_sec;  /* NTP timestamp */
  810.                u_int32 ntp_frac;
  811.                u_int32 rtp_ts;   /* RTP timestamp */
  812.                u_int32 psent;    /* packets sent */
  813.                u_int32 osent;    /* octets sent */
  814.                rtcp_rr_t rr[1];  /* variable-length list */
  815.            } sr;
  816.            /* reception report (RR) */
  817.            struct {
  818.                u_int32 ssrc;     /* receiver generating this report */
  819.                rtcp_rr_t rr[1];  /* variable-length list */
  820.            } rr;
  821.            /* source description (SDES) */
  822.            struct rtcp_sdes {
  823.                u_int32 src;      /* first SSRC/CSRC */
  824.                rtcp_sdes_item_t item[1]; /* list of SDES items */
  825.            } sdes;
  826.            /* BYE */
  827.            struct {
  828.                u_int32 src[1];   /* list of sources */
  829. Schulzrinne, et al          Standards Track                    [Page 58]
  830. RFC 1889                          RTP                       January 1996
  831.                /* can't express trailing text for reason */
  832.            } bye;
  833.        } r;
  834.    } rtcp_t;
  835.    typedef struct rtcp_sdes rtcp_sdes_t;
  836.    /*
  837.     * Per-source state information
  838.     */
  839.    typedef struct {
  840.        u_int16 max_seq;        /* highest seq. number seen */
  841.        u_int32 cycles;         /* shifted count of seq. number cycles */
  842.        u_int32 base_seq;       /* base seq number */
  843.        u_int32 bad_seq;        /* last 'bad' seq number + 1 */
  844.        u_int32 probation;      /* sequ. packets till source is valid */
  845.        u_int32 received;       /* packets received */
  846.        u_int32 expected_prior; /* packet expected at last interval */
  847.        u_int32 received_prior; /* packet received at last interval */
  848.        u_int32 transit;        /* relative trans time for prev pkt */
  849.        u_int32 jitter;         /* estimated jitter */
  850.        /* ... */
  851.    } source;
  852. A.1 RTP Data Header Validity Checks
  853.    An RTP receiver should check the validity of the RTP header on
  854.    incoming packets since they might be encrypted or might be from a
  855.    different application that happens to be misaddressed. Similarly, if
  856.    encryption is enabled, the header validity check is needed to verify
  857.    that incoming packets have been correctly decrypted, although a
  858.    failure of the header validity check (e.g., unknown payload type) may
  859.    not necessarily indicate decryption failure.
  860.    Only weak validity checks are possible on an RTP data packet from a
  861.    source that has not been heard before:
  862.         o RTP version field must equal 2.
  863.         o The payload type must be known, in particular it must not be
  864.          equal to SR or RR.
  865.         o If the P bit is set, then the last octet of the packet must
  866.          contain a valid octet count, in particular, less than the total
  867.          packet length minus the header size.
  868.         o The X bit must be zero if the profile does not specify that
  869.          the header extension mechanism may be used. Otherwise, the
  870. Schulzrinne, et al          Standards Track                    [Page 59]
  871. RFC 1889                          RTP                       January 1996
  872.          extension length field must be less than the total packet size
  873.          minus the fixed header length and padding.
  874.         o The length of the packet must be consistent with CC and
  875.          payload type (if payloads have a known length).
  876.    The last three checks are somewhat complex and not always possible,
  877.    leaving only the first two which total just a few bits. If the SSRC
  878.    identifier in the packet is one that has been received before, then
  879.    the packet is probably valid and checking if the sequence number is
  880.    in the expected range provides further validation. If the SSRC
  881.    identifier has not been seen before, then data packets carrying that
  882.    identifier may be considered invalid until a small number of them
  883.    arrive with consecutive sequence numbers.
  884.    The routine update_seq shown below ensures that a source is declared
  885.    valid only after MIN_SEQUENTIAL packets have been received in
  886.    sequence. It also validates the sequence number seq of a newly
  887.    received packet and updates the sequence state for the packet's
  888.    source in the structure to which s points.
  889.    When a new source is heard for the first time, that is, its SSRC
  890.    identifier is not in the table (see Section 8.2), and the per-source
  891.    state is allocated for it, s->probation should be set to the number
  892.    of sequential packets required before declaring a source valid
  893.    (parameter MIN_SEQUENTIAL ) and s->max_seq initialized to seq-1 s-
  894.    >probation marks the source as not yet valid so the state may be
  895.    discarded after a short timeout rather than a long one, as discussed
  896.    in Section 6.2.1.
  897.    After a source is considered valid, the sequence number is considered
  898.    valid if it is no more than MAX_DROPOUT ahead of s->max_seq nor more
  899.    than MAX_MISORDER behind. If the new sequence number is ahead of
  900.    max_seq modulo the RTP sequence number range (16 bits), but is
  901.    smaller than max_seq , it has wrapped around and the (shifted) count
  902.    of sequence number cycles is incremented. A value of one is returned
  903.    to indicate a valid sequence number.
  904.    Otherwise, the value zero is returned to indicate that the validation
  905.    failed, and the bad sequence number is stored. If the next packet
  906.    received carries the next higher sequence number, it is considered
  907.    the valid start of a new packet sequence presumably caused by an
  908.    extended dropout or a source restart. Since multiple complete
  909.    sequence number cycles may have been missed, the packet loss
  910.    statistics are reset.
  911.    Typical values for the parameters are shown, based on a maximum
  912.    misordering time of 2 seconds at 50 packets/second and a maximum
  913. Schulzrinne, et al          Standards Track                    [Page 60]
  914. RFC 1889                          RTP                       January 1996
  915.    dropout of 1 minute. The dropout parameter MAX_DROPOUT should be a
  916.    small fraction of the 16-bit sequence number space to give a
  917.    reasonable probability that new sequence numbers after a restart will
  918.    not fall in the acceptable range for sequence numbers from before the
  919.    restart.
  920.    void init_seq(source *s, u_int16 seq)
  921.    {
  922.        s->base_seq = seq - 1;
  923.        s->max_seq = seq;
  924.        s->bad_seq = RTP_SEQ_MOD + 1;
  925.        s->cycles = 0;
  926.        s->received = 0;
  927.        s->received_prior = 0;
  928.        s->expected_prior = 0;
  929.        /* other initialization */
  930.    }
  931.    int update_seq(source *s, u_int16 seq)
  932.    {
  933.        u_int16 udelta = seq - s->max_seq;
  934.        const int MAX_DROPOUT = 3000;
  935.        const int MAX_MISORDER = 100;
  936.        const int MIN_SEQUENTIAL = 2;
  937.        /*
  938.         * Source is not valid until MIN_SEQUENTIAL packets with
  939.         * sequential sequence numbers have been received.
  940.         */
  941.        if (s->probation) {
  942.            /* packet is in sequence */
  943.            if (seq == s->max_seq + 1) {
  944.                s->probation--;
  945.                s->max_seq = seq;
  946.                if (s->probation == 0) {
  947.                    init_seq(s, seq);
  948.                    s->received++;
  949.                    return 1;
  950.                }
  951.            } else {
  952.                s->probation = MIN_SEQUENTIAL - 1;
  953.                s->max_seq = seq;
  954.            }
  955.            return 0;
  956.        } else if (udelta < MAX_DROPOUT) {
  957.            /* in order, with permissible gap */
  958.            if (seq < s->max_seq) {
  959.                /*
  960. Schulzrinne, et al          Standards Track                    [Page 61]
  961. RFC 1889                          RTP                       January 1996
  962.                 * Sequence number wrapped - count another 64K cycle.
  963.                 */
  964.                s->cycles += RTP_SEQ_MOD;
  965.            }
  966.            s->max_seq = seq;
  967.        } else if (udelta <= RTP_SEQ_MOD - MAX_MISORDER) {
  968.            /* the sequence number made a very large jump */
  969.            if (seq == s->bad_seq) {
  970.                /*
  971.                 * Two sequential packets -- assume that the other side
  972.                 * restarted without telling us so just re-sync
  973.                 * (i.e., pretend this was the first packet).
  974.                 */
  975.                init_seq(s, seq);
  976.            }
  977.            else {
  978.                s->bad_seq = (seq + 1) & (RTP_SEQ_MOD-1);
  979.                return 0;
  980.            }
  981.        } else {
  982.            /* duplicate or reordered packet */
  983.        }
  984.        s->received++;
  985.        return 1;
  986.    }
  987.    The validity check can be made stronger requiring more than two
  988.    packets in sequence.  The disadvantages are that a larger number of
  989.    initial packets will be discarded and that high packet loss rates
  990.    could prevent validation. However, because the RTCP header validation
  991.    is relatively strong, if an RTCP packet is received from a source
  992.    before the data packets, the count could be adjusted so that only two
  993.    packets are required in sequence.  If initial data loss for a few
  994.    seconds can be tolerated, an application could choose to discard all
  995.    data packets from a source until a valid RTCP packet has been
  996.    received from that source.
  997.    Depending on the application and encoding, algorithms may exploit
  998.    additional knowledge about the payload format for further validation.
  999.    For payload types where the timestamp increment is the same for all
  1000.    packets, the timestamp values can be predicted from the previous
  1001.    packet received from the same source using the sequence number
  1002.    difference (assuming no change in payload type).
  1003.    A strong "fast-path" check is possible since with high probability
  1004.    the first four octets in the header of a newly received RTP data
  1005.    packet will be just the same as that of the previous packet from the
  1006.    same SSRC except that the sequence number will have increased by one.
  1007. Schulzrinne, et al          Standards Track                    [Page 62]
  1008. RFC 1889                          RTP                       January 1996
  1009.    Similarly, a single-entry cache may be used for faster SSRC lookups
  1010.    in applications where data is typically received from one source at a
  1011.    time.
  1012. A.2 RTCP Header Validity Checks
  1013.    The following checks can be applied to RTCP packets.
  1014.         o RTP version field must equal 2.
  1015.         o The payload type field of the first RTCP packet in a compound
  1016.          packet must be equal to SR or RR.
  1017.         o The padding bit (P) should be zero for the first packet of a
  1018.          compound RTCP packet because only the last should possibly need
  1019.          padding.
  1020.         o The length fields of the individual RTCP packets must total to
  1021.          the overall length of the compound RTCP packet as received.
  1022.          This is a fairly strong check.
  1023.    The code fragment below performs all of these checks. The packet type
  1024.    is not checked for subsequent packets since unknown packet types may
  1025.    be present and should be ignored.
  1026.        u_int32 len;        /* length of compound RTCP packet in words */
  1027.        rtcp_t *r;          /* RTCP header */
  1028.        rtcp_t *end;        /* end of compound RTCP packet */
  1029.        if ((*(u_int16 *)r & RTCP_VALID_MASK) != RTCP_VALID_VALUE) {
  1030.            /* something wrong with packet format */
  1031.        }
  1032.        end = (rtcp_t *)((u_int32 *)r + len);
  1033.        do r = (rtcp_t *)((u_int32 *)r + r->common.length + 1);
  1034.        while (r < end && r->common.version == 2);
  1035.        if (r != end) {
  1036.            /* something wrong with packet format */
  1037.        }
  1038. A.3 Determining the Number of RTP Packets Expected and Lost
  1039.    In order to compute packet loss rates, the number of packets expected
  1040.    and actually received from each source needs to be known, using per-
  1041.    source state information defined in struct source referenced via
  1042.    pointer s in the code below. The number of packets received is simply
  1043.    the count of packets as they arrive, including any late or duplicate
  1044. Schulzrinne, et al          Standards Track                    [Page 63]
  1045. RFC 1889                          RTP                       January 1996
  1046.    packets. The number of packets expected can be computed by the
  1047.    receiver as the difference between the highest sequence number
  1048.    received ( s->max_seq ) and the first sequence number received ( s-
  1049.    >base_seq ). Since the sequence number is only 16 bits and will wrap
  1050.    around, it is necessary to extend the highest sequence number with
  1051.    the (shifted) count of sequence number wraparounds ( s->cycles ).
  1052.    Both the received packet count and the count of cycles are maintained
  1053.    the RTP header validity check routine in Appendix A.1.
  1054.        extended_max = s->cycles + s->max_seq;
  1055.        expected = extended_max - s->base_seq + 1;
  1056.    The number of packets lost is defined to be the number of packets
  1057.    expected less the number of packets actually received:
  1058.        lost = expected - s->received;
  1059.    Since this number is carried in 24 bits, it should be clamped at
  1060.    0xffffff rather than wrap around to zero.
  1061.    The fraction of packets lost during the last reporting interval
  1062.    (since the previous SR or RR packet was sent) is calculated from
  1063.    differences in the expected and received packet counts across the
  1064.    interval, where expected_prior and received_prior are the values
  1065.    saved when the previous reception report was generated:
  1066.        expected_interval = expected - s->expected_prior;
  1067.        s->expected_prior = expected;
  1068.        received_interval = s->received - s->received_prior;
  1069.        s->received_prior = s->received;
  1070.        lost_interval = expected_interval - received_interval;
  1071.        if (expected_interval == 0 || lost_interval <= 0) fraction = 0;
  1072.        else fraction = (lost_interval << 8) / expected_interval;
  1073.    The resulting fraction is an 8-bit fixed point number with the binary
  1074.    point at the left edge.
  1075. A.4 Generating SDES RTCP Packets
  1076.    This function builds one SDES chunk into buffer b composed of argc
  1077.    items supplied in arrays type , value and length b
  1078.    char *rtp_write_sdes(char *b, u_int32 src, int argc,
  1079.                         rtcp_sdes_type_t type[], char *value[],
  1080.                         int length[])
  1081.    {
  1082.        rtcp_sdes_t *s = (rtcp_sdes_t *)b;
  1083.        rtcp_sdes_item_t *rsp;
  1084. Schulzrinne, et al          Standards Track                    [Page 64]
  1085. RFC 1889                          RTP                       January 1996
  1086.        int i;
  1087.        int len;
  1088.        int pad;
  1089.        /* SSRC header */
  1090.        s->src = src;
  1091.        rsp = &s->item[0];
  1092.        /* SDES items */
  1093.        for (i = 0; i < argc; i++) {
  1094.            rsp->type = type[i];
  1095.            len = length[i];
  1096.            if (len > RTP_MAX_SDES) {
  1097.                /* invalid length, may want to take other action */
  1098.                len = RTP_MAX_SDES;
  1099.            }
  1100.            rsp->length = len;
  1101.            memcpy(rsp->data, value[i], len);
  1102.            rsp = (rtcp_sdes_item_t *)&rsp->data[len];
  1103.        }
  1104.        /* terminate with end marker and pad to next 4-octet boundary */
  1105.        len = ((char *) rsp) - b;
  1106.        pad = 4 - (len & 0x3);
  1107.        b = (char *) rsp;
  1108.        while (pad--) *b++ = RTCP_SDES_END;
  1109.        return b;
  1110.    }
  1111. A.5 Parsing RTCP SDES Packets
  1112.    This function parses an SDES packet, calling functions find_member()
  1113.    to find a pointer to the information for a session member given the
  1114.    SSRC identifier and member_sdes() to store the new SDES information
  1115.    for that member. This function expects a pointer to the header of the
  1116.    RTCP packet.
  1117.    void rtp_read_sdes(rtcp_t *r)
  1118.    {
  1119.        int count = r->common.count;
  1120.        rtcp_sdes_t *sd = &r->r.sdes;
  1121.        rtcp_sdes_item_t *rsp, *rspn;
  1122.        rtcp_sdes_item_t *end = (rtcp_sdes_item_t *)
  1123.                                ((u_int32 *)r + r->common.length + 1);
  1124.        source *s;
  1125.        while (--count >= 0) {
  1126. Schulzrinne, et al          Standards Track                    [Page 65]
  1127. RFC 1889                          RTP                       January 1996
  1128.            rsp = &sd->item[0];
  1129.            if (rsp >= end) break;
  1130.            s = find_member(sd->src);
  1131.            for (; rsp->type; rsp = rspn ) {
  1132.                rspn = (rtcp_sdes_item_t *)((char*)rsp+rsp->length+2);
  1133.                if (rspn >= end) {
  1134.                    rsp = rspn;
  1135.                    break;
  1136.                }
  1137.                member_sdes(s, rsp->type, rsp->data, rsp->length);
  1138.            }
  1139.            sd = (rtcp_sdes_t *)
  1140.                 ((u_int32 *)sd + (((char *)rsp - (char *)sd) >> 2)+1);
  1141.        }
  1142.        if (count >= 0) {
  1143.            /* invalid packet format */
  1144.        }
  1145.    }
  1146. A.6 Generating a Random 32-bit Identifier
  1147.    The following subroutine generates a random 32-bit identifier using
  1148.    the MD5 routines published in RFC 1321 [23]. The system routines may
  1149.    not be present on all operating systems, but they should serve as
  1150.    hints as to what kinds of information may be used. Other system calls
  1151.    that may be appropriate include
  1152.         o getdomainname() ,
  1153.         o getwd() , or
  1154.         o getrusage()
  1155.    "Live" video or audio samples are also a good source of random
  1156.    numbers, but care must be taken to avoid using a turned-off
  1157.    microphone or blinded camera as a source [7].
  1158.    Use of this or similar routine is suggested to generate the initial
  1159.    seed for the random number generator producing the RTCP period (as
  1160.    shown in Appendix A.7), to generate the initial values for the
  1161.    sequence number and timestamp, and to generate SSRC values.  Since
  1162.    this routine is likely to be CPU-intensive, its direct use to
  1163.    generate RTCP periods is inappropriate because predictability is not
  1164.    an issue. Note that this routine produces the same result on repeated
  1165.    calls until the value of the system clock changes unless different
  1166.    values are supplied for the type argument.
  1167. Schulzrinne, et al          Standards Track                    [Page 66]
  1168. RFC 1889                          RTP                       January 1996
  1169.    /*
  1170.     * Generate a random 32-bit quantity.
  1171.     */
  1172.    #include <sys/types.h>   /* u_long */
  1173.    #include <sys/time.h>    /* gettimeofday() */
  1174.    #include <unistd.h>      /* get..() */
  1175.    #include <stdio.h>       /* printf() */
  1176.    #include <time.h>        /* clock() */
  1177.    #include <sys/utsname.h> /* uname() */
  1178.    #include "global.h"      /* from RFC 1321 */
  1179.    #include "md5.h"         /* from RFC 1321 */
  1180.    #define MD_CTX MD5_CTX
  1181.    #define MDInit MD5Init
  1182.    #define MDUpdate MD5Update
  1183.    #define MDFinal MD5Final
  1184.    static u_long md_32(char *string, int length)
  1185.    {
  1186.        MD_CTX context;
  1187.        union {
  1188.            char   c[16];
  1189.            u_long x[4];
  1190.        } digest;
  1191.        u_long r;
  1192.        int i;
  1193.        MDInit (&context);
  1194.        MDUpdate (&context, string, length);
  1195.        MDFinal ((unsigned char *)&digest, &context);
  1196.        r = 0;
  1197.        for (i = 0; i < 3; i++) {
  1198.            r ^= digest.x[i];
  1199.        }
  1200.        return r;
  1201.    }                               /* md_32 */
  1202.    /*
  1203.     * Return random unsigned 32-bit quantity. Use 'type' argument if you
  1204.     * need to generate several different values in close succession.
  1205.     */
  1206.    u_int32 random32(int type)
  1207.    {
  1208.        struct {
  1209.            int     type;
  1210.            struct  timeval tv;
  1211.            clock_t cpu;
  1212. Schulzrinne, et al          Standards Track                    [Page 67]
  1213. RFC 1889                          RTP                       January 1996
  1214.            pid_t   pid;
  1215.            u_long  hid;
  1216.            uid_t   uid;
  1217.            gid_t   gid;
  1218.            struct  utsname name;
  1219.        } s;
  1220.        gettimeofday(&s.tv, 0);
  1221.        uname(&s.name);
  1222.        s.type = type;
  1223.        s.cpu  = clock();
  1224.        s.pid  = getpid();
  1225.        s.hid  = gethostid();
  1226.        s.uid  = getuid();
  1227.        s.gid  = getgid();
  1228.        return md_32((char *)&s, sizeof(s));
  1229.    }                               /* random32 */
  1230. A.7 Computing the RTCP Transmission Interval
  1231.    The following function returns the time between transmissions of RTCP
  1232.    packets, measured in seconds. It should be called after sending one
  1233.    compound RTCP packet to calculate the delay until the next should be
  1234.    sent. This function should also be called to calculate the delay
  1235.    before sending the first RTCP packet upon startup rather than send
  1236.    the packet immediately. This avoids any burst of RTCP packets if an
  1237.    application is started at many sites simultaneously, for example as a
  1238.    result of a session announcement.
  1239.    The parameters have the following meaning:
  1240.    rtcp_bw: The target RTCP bandwidth, i.e., the total bandwidth that
  1241.         will be used for RTCP packets by all members of this session, in
  1242.         octets per second. This should be 5% of the "session bandwidth"
  1243.         parameter supplied to the application at startup.
  1244.    senders: Number of active senders since sending last report, known
  1245.         from construction of receiver reports for this RTCP packet.
  1246.         Includes ourselves, if we also sent during this interval.
  1247.    members: The estimated number of session members, including
  1248.         ourselves. Incremented as we discover new session members from
  1249.         the receipt of RTP or RTCP packets, and decremented as session
  1250.         members leave (via RTCP BYE) or their state is timed out (30
  1251.         minutes is recommended). On the first call, this parameter
  1252.         should have the value 1.
  1253. Schulzrinne, et al          Standards Track                    [Page 68]
  1254. RFC 1889                          RTP                       January 1996
  1255.    we_sent: Flag that is true if we have sent data during the last two
  1256.         RTCP intervals. If the flag is true, the compound RTCP packet
  1257.         just sent contained an SR packet.
  1258.    packet_size: The size of the compound RTCP packet just sent, in
  1259.         octets, including the network encapsulation (e.g., 28 octets for
  1260.         UDP over IP).
  1261.    avg_rtcp_size: Pointer to estimator for compound RTCP packet size;
  1262.         initialized and updated by this function for the packet just
  1263.         sent, and also updated by an identical line of code in the RTCP
  1264.         receive routine for every RTCP packet received from other
  1265.         participants in the session.
  1266.    initial: Flag that is true for the first call upon startup to
  1267.         calculate the time until the first report should be sent.
  1268.    #include <math.h>
  1269.    double rtcp_interval(int members,
  1270.                         int senders,
  1271.                         double rtcp_bw,
  1272.                         int we_sent,
  1273.                         int packet_size,
  1274.                         int *avg_rtcp_size,
  1275.                         int initial)
  1276.    {
  1277.        /*
  1278.         * Minimum time between RTCP packets from this site (in seconds).
  1279.         * This time prevents the reports from `clumping' when sessions
  1280.         * are small and the law of large numbers isn't helping to smooth
  1281.         * out the traffic.  It also keeps the report interval from
  1282.         * becoming ridiculously small during transient outages like a
  1283.         * network partition.
  1284.         */
  1285.        double const RTCP_MIN_TIME = 5.;
  1286.        /*
  1287.         * Fraction of the RTCP bandwidth to be shared among active
  1288.         * senders.  (This fraction was chosen so that in a typical
  1289.         * session with one or two active senders, the computed report
  1290.         * time would be roughly equal to the minimum report time so that
  1291.         * we don't unnecessarily slow down receiver reports.) The
  1292.         * receiver fraction must be 1 - the sender fraction.
  1293.         */
  1294.        double const RTCP_SENDER_BW_FRACTION = 0.25;
  1295.        double const RTCP_RCVR_BW_FRACTION = (1-RTCP_SENDER_BW_FRACTION);
  1296.        /*
  1297.         * Gain (smoothing constant) for the low-pass filter that
  1298. Schulzrinne, et al          Standards Track                    [Page 69]
  1299. RFC 1889                          RTP                       January 1996
  1300.         * estimates the average RTCP packet size (see Cadzow reference).
  1301.         */
  1302.        double const RTCP_SIZE_GAIN = (1./16.);
  1303.        double t;                   /* interval */
  1304.        double rtcp_min_time = RTCP_MIN_TIME;
  1305.        int n;                      /* no. of members for computation */
  1306.        /*
  1307.         * Very first call at application start-up uses half the min
  1308.         * delay for quicker notification while still allowing some time
  1309.         * before reporting for randomization and to learn about other
  1310.         * sources so the report interval will converge to the correct
  1311.         * interval more quickly.  The average RTCP size is initialized
  1312.         * to 128 octets which is conservative (it assumes everyone else
  1313.         * is generating SRs instead of RRs: 20 IP + 8 UDP + 52 SR + 48
  1314.         * SDES CNAME).
  1315.         */
  1316.        if (initial) {
  1317.            rtcp_min_time /= 2;
  1318.            *avg_rtcp_size = 128;
  1319.        }
  1320.        /*
  1321.         * If there were active senders, give them at least a minimum
  1322.         * share of the RTCP bandwidth.  Otherwise all participants share
  1323.         * the RTCP bandwidth equally.
  1324.         */
  1325.        n = members;
  1326.        if (senders > 0 && senders < members * RTCP_SENDER_BW_FRACTION) {
  1327.            if (we_sent) {
  1328.                rtcp_bw *= RTCP_SENDER_BW_FRACTION;
  1329.                n = senders;
  1330.            } else {
  1331.                rtcp_bw *= RTCP_RCVR_BW_FRACTION;
  1332.                n -= senders;
  1333.            }
  1334.        }
  1335.        /*
  1336.         * Update the average size estimate by the size of the report
  1337.         * packet we just sent.
  1338.         */
  1339.        *avg_rtcp_size += (packet_size - *avg_rtcp_size)*RTCP_SIZE_GAIN;
  1340.        /*
  1341.         * The effective number of sites times the average packet size is
  1342.         * the total number of octets sent when each site sends a report.
  1343. Schulzrinne, et al          Standards Track                    [Page 70]
  1344. RFC 1889                          RTP                       January 1996
  1345.         * Dividing this by the effective bandwidth gives the time
  1346.         * interval over which those packets must be sent in order to
  1347.         * meet the bandwidth target, with a minimum enforced.  In that
  1348.         * time interval we send one report so this time is also our
  1349.         * average time between reports.
  1350.         */
  1351.        t = (*avg_rtcp_size) * n / rtcp_bw;
  1352.        if (t < rtcp_min_time) t = rtcp_min_time;
  1353.        /*
  1354.         * To avoid traffic bursts from unintended synchronization with
  1355.         * other sites, we then pick our actual next report interval as a
  1356.         * random number uniformly distributed between 0.5*t and 1.5*t.
  1357.         */
  1358.        return t * (drand48() + 0.5);
  1359.    }
  1360. A.8 Estimating the Interarrival Jitter
  1361.    The code fragments below implement the algorithm given in Section
  1362.    6.3.1 for calculating an estimate of the statistical variance of the
  1363.    RTP data interarrival time to be inserted in the interarrival jitter
  1364.    field of reception reports. The inputs are r->ts , the timestamp from
  1365.    the incoming packet, and arrival , the current time in the same
  1366.    units. Here s points to state for the source; s->transit holds the
  1367.    relative transit time for the previous packet, and s->jitter holds
  1368.    the estimated jitter. The jitter field of the reception report is
  1369.    measured in timestamp units and expressed as an unsigned integer, but
  1370.    the jitter estimate is kept in a floating point. As each data packet
  1371.    arrives, the jitter estimate is updated:
  1372.        int transit = arrival - r->ts;
  1373.        int d = transit - s->transit;
  1374.        s->transit = transit;
  1375.        if (d < 0) d = -d;
  1376.        s->jitter += (1./16.) * ((double)d - s->jitter);
  1377.    When a reception report block (to which rr points) is generated for
  1378.    this member, the current jitter estimate is returned:
  1379.        rr->jitter = (u_int32) s->jitter;
  1380.    Alternatively, the jitter estimate can be kept as an integer, but
  1381.    scaled to reduce round-off error. The calculation is the same except
  1382.    for the last line:
  1383.        s->jitter += d - ((s->jitter + 8) >> 4);
  1384. Schulzrinne, et al          Standards Track                    [Page 71]
  1385. RFC 1889                          RTP                       January 1996
  1386.    In this case, the estimate is sampled for the reception report as:
  1387.        rr->jitter = s->jitter >> 4;
  1388. B.  Security Considerations
  1389.    RTP suffers from the same security liabilities as the underlying
  1390.    protocols. For example, an impostor can fake source or destination
  1391.    network addresses, or change the header or payload. Within RTCP, the
  1392.    CNAME and NAME information may be used to impersonate another
  1393.    participant. In addition, RTP may be sent via IP multicast, which
  1394.    provides no direct means for a sender to know all the receivers of
  1395.    the data sent and therefore no measure of privacy. Rightly or not,
  1396.    users may be more sensitive to privacy concerns with audio and video
  1397.    communication than they have been with more traditional forms of
  1398.    network communication [24]. Therefore, the use of security mechanisms
  1399.    with RTP is important. These mechanisms are discussed in Section 9.
  1400.    RTP-level translators or mixers may be used to allow RTP traffic to
  1401.    reach hosts behind firewalls. Appropriate firewall security
  1402.    principles and practices, which are beyond the scope of this
  1403.    document, should be followed in the design and installation of these
  1404.    devices and in the admission of RTP applications for use behind the
  1405.    firewall.
  1406. C. Authors' Addresses
  1407.    Henning Schulzrinne
  1408.    GMD Fokus
  1409.    Hardenbergplatz 2
  1410.    D-10623 Berlin
  1411.    Germany
  1412.    EMail: schulzrinne@fokus.gmd.de
  1413.    Stephen L. Casner
  1414.    Precept Software, Inc.
  1415.    21580 Stevens Creek Boulevard, Suite 207
  1416.    Cupertino, CA 95014
  1417.    United States
  1418.    EMail: casner@precept.com
  1419. Schulzrinne, et al          Standards Track                    [Page 72]
  1420. RFC 1889                          RTP                       January 1996
  1421.    Ron Frederick
  1422.    Xerox Palo Alto Research Center
  1423.    3333 Coyote Hill Road
  1424.    Palo Alto, CA 94304
  1425.    United States
  1426.    EMail: frederic@parc.xerox.com
  1427.    Van Jacobson
  1428.    MS 46a-1121
  1429.    Lawrence Berkeley National Laboratory
  1430.    Berkeley, CA 94720
  1431.    United States
  1432.    EMail: van@ee.lbl.gov
  1433. Acknowledgments
  1434.    This memorandum is based on discussions within the IETF Audio/Video
  1435.    Transport working group chaired by Stephen Casner. The current
  1436.    protocol has its origins in the Network Voice Protocol and the Packet
  1437.    Video Protocol (Danny Cohen and Randy Cole) and the protocol
  1438.    implemented by the vat application (Van Jacobson and Steve McCanne).
  1439.    Christian Huitema provided ideas for the random identifier generator.
  1440. D.  Bibliography
  1441.    [1] D. D. Clark and D. L. Tennenhouse, "Architectural considerations
  1442.        for a new generation of protocols," in SIGCOMM Symposium on
  1443.        Communications Architectures and Protocols , (Philadelphia,
  1444.        Pennsylvania), pp. 200--208, IEEE, Sept. 1990.  Computer
  1445.        Communications Review, Vol. 20(4), Sept. 1990.
  1446.    [2] H. Schulzrinne, "Issues in designing a transport protocol for
  1447.        audio and video conferences and other multiparticipant real-time
  1448.        applications", Work in Progress.
  1449.    [3] D. E. Comer, Internetworking with TCP/IP , vol. 1.  Englewood
  1450.        Cliffs, New Jersey: Prentice Hall, 1991.
  1451.    [4] Postel, J., "Internet Protocol", STD 5, RFC 791, USC/Information
  1452.        Sciences Institute, September 1981.
  1453.    [5] Mills, D., "Network Time Protocol Version 3", RFC 1305, UDEL,
  1454.        March 1992.
  1455. Schulzrinne, et al          Standards Track                    [Page 73]
  1456. RFC 1889                          RTP                       January 1996
  1457.    [6] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700,
  1458.        USC/Information Sciences Institute, October 1994.
  1459.    [7] Eastlake, D., Crocker, S., and J. Schiller, "Randomness
  1460.        Recommendations for Security", RFC 1750, DEC, Cybercash, MIT,
  1461.        December 1994.
  1462.    [8] J.-C. Bolot, T. Turletti, and I. Wakeman, "Scalable feedback
  1463.        control for multicast video distribution in the internet," in
  1464.        SIGCOMM Symposium on Communications Architectures and Protocols ,
  1465.        (London, England), pp. 58--67, ACM, Aug. 1994.
  1466.    [9] I. Busse, B. Deffner, and H. Schulzrinne, "Dynamic QoS control of
  1467.        multimedia applications based on RTP," Computer Communications ,
  1468.        Jan.  1996.
  1469.   [10] S. Floyd and V. Jacobson, "The synchronization of periodic
  1470.        routing messages," in SIGCOMM Symposium on Communications
  1471.        Architectures and Protocols (D. P. Sidhu, ed.), (San Francisco,
  1472.        California), pp. 33--44, ACM, Sept. 1993.  also in [25].
  1473.   [11] J. A. Cadzow, Foundations of digital signal processing and data
  1474.        analysis New York, New York: Macmillan, 1987.
  1475.   [12] International Standards Organization, "ISO/IEC DIS 10646-1:1993
  1476.        information technology -- universal multiple-octet coded
  1477.        character set (UCS) -- part I: Architecture and basic
  1478.        multilingual plane," 1993.
  1479.   [13] The Unicode Consortium, The Unicode Standard New York, New York:
  1480.        Addison-Wesley, 1991.
  1481.   [14] Mockapetris, P., "Domain Names - Concepts and Facilities", STD
  1482.        13, RFC 1034, USC/Information Sciences Institute, November 1987.
  1483.   [15] Mockapetris, P., "Domain Names - Implementation and
  1484.        Specification", STD 13, RFC 1035, USC/Information Sciences
  1485.        Institute, November 1987.
  1486.   [16] Braden, R., "Requirements for Internet Hosts - Application and
  1487.        Support", STD 3, RFC 1123, Internet Engineering Task Force,
  1488.        October 1989.
  1489.   [17] Rekhter, Y., Moskowitz, R., Karrenberg, D., and G. de Groot,
  1490.        "Address Allocation for Private Internets", RFC 1597, T.J. Watson
  1491.        Research Center, IBM Corp., Chrysler Corp., RIPE NCC, March 1994.
  1492. Schulzrinne, et al          Standards Track                    [Page 74]
  1493. RFC 1889                          RTP                       January 1996
  1494.   [18] Lear, E., Fair, E., Crocker, D., and T. Kessler, "Network 10
  1495.        Considered Harmful (Some Practices Shouldn't be Codified)", RFC
  1496.        1627, Silicon Graphics, Inc., Apple Computer, Inc., Silicon
  1497.        Graphics, Inc., July 1994.
  1498.   [19] Crocker, D., "Standard for the Format of ARPA Internet Text
  1499.        Messages", STD 11, RFC 822, UDEL, August 1982.
  1500.   [20] W. Feller, An Introduction to Probability Theory and its
  1501.        Applications, Volume 1 , vol. 1.  New York, New York: John Wiley
  1502.        and Sons, third ed., 1968.
  1503.   [21] Balenson, D., "Privacy Enhancement for Internet Electronic Mail:
  1504.        Part III: Algorithms, Modes, and Identifiers", RFC 1423, TIS, IAB
  1505.        IRTF PSRG, IETF PEM WG, February 1993.
  1506.   [22] V. L. Voydock and S. T. Kent, "Security mechanisms in high-level
  1507.        network protocols," ACM Computing Surveys , vol. 15, pp. 135--
  1508.        171, June 1983.
  1509.   [23] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, MIT
  1510.        Laboratory for Computer Science and RSA Data Security, Inc.,
  1511.        April 1992.
  1512.   [24] S. Stubblebine, "Security services for multimedia conferencing,"
  1513.        in 16th National Computer Security Conference , (Baltimore,
  1514.        Maryland), pp. 391--395, Sept. 1993.
  1515.   [25] S. Floyd and V. Jacobson, "The synchronization of periodic
  1516.        routing messages," IEEE/ACM Transactions on Networking , vol. 2,
  1517.        pp.  122-136, April 1994.
  1518. Schulzrinne, et al          Standards Track                    [Page 75]