rfc8802xml2.original.xml | rfc8802.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<!-- [rfced] updated by Chris /09/04/19 --> | ||||
<!ENTITY RFC7230 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7230.xml"> | ||||
<!ENTITY RFC7231 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7231.xml"> | ||||
<!ENTITY RFC7232 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7232.xml"> | ||||
<!ENTITY RFC7233 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7233.xml"> | ||||
<!ENTITY RFC7234 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7234.xml"> | ||||
<!ENTITY RFC7235 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7235.xml"> | ||||
<!ENTITY RFC3550 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3550.xml"> | ||||
<!ENTITY RFC4566 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.4566.xml"> | ||||
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.2119.xml"> | ||||
<!ENTITY RFC3986 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3986.xml"> | ||||
<!ENTITY RFC3264 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3264.xml"> | ||||
<!ENTITY RFC4634 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.4634.xml"> | ||||
<!ENTITY RFC8017 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8017.xml"> | ||||
<!ENTITY RFC0793 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.0793.xml"> | ||||
<!ENTITY RFC0768 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.0768.xml"> | ||||
<!ENTITY RFC3550 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3550.xml"> | ||||
<!ENTITY RFC3629 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3629.xml"> | ||||
<!ENTITY RFC5322 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5322.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8174.xml"> | ||||
<!ENTITY RFC3261 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3261.xml"> | ||||
<!ENTITY RFC3649 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3649.xml"> | ||||
<!ENTITY RFC4656 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.4656.xml"> | ||||
<!ENTITY RFC5357 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5357.xml"> | ||||
]> | ||||
<rfc submissionType="independent" category="info" number="XXXX" ipr="trust200902 | ||||
"> | ||||
<!-- Generated by id2xml 1.4.4 on 2019-08-20T02:21:18Z --> | ||||
<?rfc compact="yes"?> | ||||
<?rfc text-list-symbols="oo*+-"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc sortrefs="no"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc strict="yes"?> | ||||
<?rfc toc="yes"?> | ||||
<front> | ||||
<title>The Quality for Service Protocol</title> | ||||
<author fullname="Jose Javier Garcia Aranda" initials="J." surname="Arand | ||||
a"> | ||||
<organization>Nokia</organization> | ||||
<address><postal><street>C/Maria Tubau 9</street> | ||||
<street>28050 Madrid</street> | ||||
<street>Spain</street> | ||||
</postal> | ||||
<phone>+34 91 330 4348</phone> | ||||
<email>jose_javier.garcia_aranda@nokia.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Monica Cortes" initials="M." surname="Cortes"> | ||||
<organization abbrev="Univ. Politecnica de Madrid">Universidad Politecnic | ||||
a de Madrid</organization> | ||||
<address><postal><street>Avenida Complutense 30</street> | ||||
<street>28040 Madrid</street> | ||||
<street>Spain</street> | ||||
</postal> | ||||
<email>cortesm@dit.upm.es</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Joaquin Salvachua" initials="J." surname="Salvachua"> | ||||
<organization abbrev="Univ. Politecnica de Madrid">Universidad Politecnic | ||||
a de Madrid</organization> | ||||
<address><postal><street>Avenida Complutense 30</street> | ||||
<street>28040 Madrid</street> | ||||
<street>Spain</street> | ||||
</postal> | ||||
<phone>+34 91 0672134</phone> | ||||
<email>jsalvachua@dit.upm.es</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Maribel Narganes" initials="M." surname="Narganes"> | ||||
<organization abbrev="Tecnalia">Tecnalia Research & Innovation</organ | ||||
ization> | ||||
<address><postal><street>Parque Cientifico y Tecnologico de Bizkaia</stre | ||||
et> | ||||
<street>Geldo Auzoa, Edificio 700</street> | ||||
<street>E-48160 Derio (Bizkaia)</street> | ||||
<street>Spain</street> | ||||
</postal> | ||||
<phone>+34 946 430 850</phone> | ||||
<email>maribel.narganes@tecnalia.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Inaki Martinez Sarriegui" initials="I." surname="Sarrie | ||||
gui"> | ||||
<organization>Optiva Media</organization> | ||||
<address><postal><street>Edificio Europa II,</street> | ||||
<street>Calle Musgo 2, 1G,</street> | ||||
<street>28023 Madrid</street> | ||||
<street>Spain</street> | ||||
</postal> | ||||
<phone>+34 91 297 7271</phone> | ||||
<email>inaki.martinez@optivamedia.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="September" year="2019"/> | ||||
<!-- [rfced] Please insert any keywords (beyond those that appear in | ||||
the title) for use on https://www.rfc-editor.org/search. --> | ||||
<keyword>example</keyword> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | |||
submissionType="independent" | ||||
category="info" | ||||
number="8802" | ||||
docName="draft-aranda-dispatch-q4s-10" | ||||
ipr="trust200902" | ||||
obsoletes="" | ||||
updates="" | ||||
xml:lang="en" | ||||
sortRefs="false" | ||||
symRefs="true" | ||||
tocDepth="4" | ||||
tocInclude="true" | ||||
version="3"> | ||||
<!-- xml2rfc v2v3 conversion 2.40.1 --> | ||||
<!-- Generated by id2xml 1.4.4 on 2019-08-20T02:21:18Z --> | ||||
<front> | ||||
<abstract><t> | <title>The Quality for Service (Q4S) Protocol</title> | |||
This memo describes an application level protocol for the | <seriesInfo name="RFC" value="8802"/> | |||
<author fullname="Jose Javier Garcia Aranda" initials="J.J." surname="Aranda | ||||
"> | ||||
<organization>Nokia</organization> | ||||
<address> | ||||
<postal> | ||||
<street>María Tubau 9</street> | ||||
<code>28050</code> | ||||
<city>Madrid</city> | ||||
<country>Spain</country> | ||||
</postal> | ||||
<phone>+34 91 330 4348</phone> | ||||
<email>jose_javier.garcia_aranda@nokia.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Mónica Cortés" initials="M." surname="Cortés"> | ||||
<organization>Nokia</organization> | ||||
<address> | ||||
<postal> | ||||
<street>María Tubau 9</street> | ||||
<code>28050</code> | ||||
<city>Madrid</city> | ||||
<country>Spain</country> | ||||
</postal> | ||||
<email>monica.cortes_sack@nokia.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Joaquín Salvachúa" initials="J." surname="Salvachúa"> | ||||
<organization abbrev="Univ. Politecnica de Madrid">Universidad Politecnica | ||||
de Madrid</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Avenida Complutense 30</street> | ||||
<code>28040</code> | ||||
<city>Madrid</city> | ||||
<country>Spain</country> | ||||
</postal> | ||||
<phone>+34 91 0672134</phone> | ||||
<email>Joaquin.salvachua@upm.es</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Maribel Narganes" initials="M." surname="Narganes"> | ||||
<organization abbrev="Tecnalia">Tecnalia Research & Innovation</organi | ||||
zation> | ||||
<address> | ||||
<postal> | ||||
<extaddr>Parque Científico y Tecnológico de Bizkaia</extaddr> | ||||
<street>Astondo Bidea, Edificio 700</street> | ||||
<code>E-48160</code> | ||||
<city>Derio</city> | ||||
<region>Bizkaia</region> | ||||
<country>Spain</country> | ||||
</postal> | ||||
<phone>+34 946 430 850</phone> | ||||
<email>maribel.narganes@tecnalia.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Iñaki Martínez-Sarriegui" initials="I." surname="Martínez- | ||||
Sarriegui"> | ||||
<organization>Optiva Media</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Edificio Europa II,</street> | ||||
<street>Calle Musgo 2, 1G,</street> | ||||
<street>28023 Madrid</street> | ||||
<street>Spain</street> | ||||
</postal> | ||||
<phone>+34 91 297 7271</phone> | ||||
<email>inaki.martinez@optivamedia.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="July" year="2020"/> | ||||
<keyword>quality measurement</keyword> | ||||
<keyword>measurement protocol</keyword> | ||||
<keyword>latency</keyword> | ||||
<keyword>jitter</keyword> | ||||
<keyword>bandwidth</keyword> | ||||
<keyword>packet-loss</keyword> | ||||
<abstract> | ||||
<t> | ||||
This memo describes an application-level protocol for the | ||||
communication of end-to-end QoS compliance information based on | communication of end-to-end QoS compliance information based on | |||
the Hypertext Transfer Protocol (HTTP) and the Session | the HyperText Transfer Protocol (HTTP) and the Session | |||
Description Protocol (SDP). The Quality for Service Protocol | Description Protocol (SDP). The Quality for Service | |||
(Q4S) provides a mechanism to negotiate and monitor latency, | (Q4S) protocol provides a mechanism to negotiate and monitor latency, | |||
jitter, bandwidth, and packet, and to alert whenever one of the | jitter, bandwidth, and packet loss, and to alert whenever one of the | |||
negotiated conditions is violated.</t> | negotiated conditions is violated.</t> | |||
<t> | ||||
<t> | ||||
Implementation details on the actions to be triggered upon | Implementation details on the actions to be triggered upon | |||
reception/detection of QoS alerts exchanged by the protocol are | reception/detection of QoS alerts exchanged by the protocol are | |||
out of scope of this document, it is application dependent (e.g., | out of scope of this document; it is either application dependent (e.g., | |||
act to increase quality or reduce bit-rate) or network dependent | act to increase quality or reduce bit-rate) or network dependent | |||
(e.g., change connection's quality profile).</t> | (e.g., change connection's quality profile).</t> | |||
<t> | ||||
<t> | ||||
This protocol specification is the product of research conducted | This protocol specification is the product of research conducted | |||
over a number of years, and is presented here as a permanent | over a number of years; it is presented here as a permanent | |||
record and to offer a foundation for future similar work. It does | record and to offer a foundation for future similar work. It does | |||
not represent a standard protocol and does not have IETF | not represent a standard protocol and does not have IETF | |||
consensus.</t> | consensus.</t> | |||
</abstract> | ||||
</abstract> | </front> | |||
</front> | <middle> | |||
<section anchor="sec-1" numbered="true" toc="default"> | ||||
<middle> | <name>Introduction</name> | |||
<section title="Introduction" anchor="section-1"><t> | <t> | |||
The World Wide Web (WWW) is a distributed hypermedia system | The World Wide Web (WWW) is a distributed hypermedia system | |||
which has gained widespread acceptance among Internet users. | that has gained widespread acceptance among Internet users. | |||
Although WWW browsers support other, preexisting Internet | Although WWW browsers support other, preexisting Internet | |||
application protocols, the primary protocol used between WWW | application protocols, the primary protocol used between WWW | |||
clients and servers became the HyperText Transfer Protocol (HTTP) | clients and servers became the HyperText Transfer Protocol (HTTP) | |||
(RFC 7230 <xref target="ref-1"/>, RFC 7231 <xref target="ref-2"/>, RFC 7232 < | (<xref target="RFC7230" format="default"/>, <xref target="RFC7231" format="de | |||
xref target="ref-3"/>, RFC 7233 <xref target="ref-4"/>, RFC 7234 | fault"/>, | |||
<xref target="ref-5"/>, and RFC 7235 <xref target="ref-6"/>). Since then, HT | <xref target="RFC7232" format="default"/>, <xref target="RFC7233" format="de | |||
TP over TLS (known as HTTPS | fault"/>, | |||
and described in RFC 2818 [7]) has become an imperative for | <xref target="RFC7234" format="default"/>, and <xref target="RFC7235" format | |||
="default"/>). | ||||
Since then, HTTP over TLS (known as HTTPS | ||||
and described in <xref target="RFC2818" format="default"/>) has become an imp | ||||
erative for | ||||
providing secure and authenticated WWW access. The mechanisms | providing secure and authenticated WWW access. The mechanisms | |||
described in this document are equally applicable to HTTP and | described in this document are equally applicable to HTTP and | |||
HTTPS.</t> | HTTPS.</t> | |||
<t> | ||||
<t> | ||||
The ease of use of the Web has prompted its widespread employment | The ease of use of the Web has prompted its widespread employment | |||
as a client/server architecture for many applications. Many of | as a client/server architecture for many applications. Many of | |||
such applications require the client and the server to be able to | such applications require the client and the server to be able to | |||
communicate each other and exchange information with certain | communicate with each other and exchange information with certain | |||
quality constraints.</t> | quality constraints.</t> | |||
<t> | ||||
<t> | ||||
Quality in communications at the application level consists of | Quality in communications at the application level consists of | |||
four measurable parameters: | four measurable parameters: | |||
<list style="hanging" hangIndent="6"> | </t> | |||
<t hangText="Latency:">The time a message takes to travel from source to | <dl newline="false" spacing="normal" indent="6"> | |||
destination. It may be approximated to RTT/2 (Round trip | <dt>Latency:</dt> | |||
time), assuming the networks are symmetrical. In this context | <dd>The time a message takes to travel from source to | |||
we will consider the statistical median formula.</t> | destination. It may be approximated as RTT/2 (round-trip | |||
time), assuming the networks are symmetrical. In this context, | ||||
<t hangText="Jitter:">latency variation. There are some formulas to | we will consider the statistical median formula.</dd> | |||
calculate Jitter, and in this context we will consider the | <dt>Jitter:</dt> | |||
arithmetic mean formula.</t> | <dd>Latency variation. There are some formulas to | |||
calculate jitter, and in this context, we will consider the | ||||
<t hangText="Bandwidth:">bit rate of communication. To assure quality, a | arithmetic mean formula.</dd> | |||
protocol must assure the availability of the bandwidth needed | ||||
by the application.</t> | ||||
<t hangText="Packet loss:">The percentage of packet loss is closely relat | <dt>Bandwidth:</dt> | |||
ed | <dd>Bit rate of communication. To ensure quality, a | |||
to bandwidth and jitter. Affects bandwidth because a high | protocol must ensure the availability of the bandwidth needed | |||
packet loss implies sometimes retransmissions that also | by the application.</dd> | |||
<dt>Packet loss:</dt> | ||||
<dd>The percentage of packet loss is closely related | ||||
to bandwidth and jitter. Packet loss affects bandwidth because a high | ||||
packet loss sometimes implies retransmissions that also | ||||
consumes extra bandwidth, other times the retransmissions are | consumes extra bandwidth, other times the retransmissions are | |||
not achieved (for example in video streaming over UDP) and | not achieved (for example, in video streaming over UDP), and | |||
the information received is less than the required bandwidth. | the information received is less than the required bandwidth. | |||
In terms of jitter, a packet loss sometimes is seen by the | In terms of jitter, a packet loss sometimes is seen by the | |||
destination like a larger time between arrivals, causing a | destination as a larger time between arrivals, causing a | |||
jitter growth.</t> | jitter growth.</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | Any other communication parameter, such as throughput, is not a | |||
<t> | ||||
Any other communication parameter such as throughput, is not a | ||||
network parameter because it depends on protocol window size and | network parameter because it depends on protocol window size and | |||
other implementation-dependent aspects.</t> | other implementation-dependent aspects.</t> | |||
<t> | ||||
<t> | The Q4S protocol provides a mechanism for | |||
The Quality for Service Protocol (Q4S) provides a mechanism for | ||||
quality monitoring based on an HTTP syntax and the Session | quality monitoring based on an HTTP syntax and the Session | |||
Description protocol (SDP) in order to be easily integrated in | Description Protocol (SDP) in order to be easily integrated in the | |||
WWW, but it may be used by any type of application, not only those | WWW, but it may be used by any type of application, not only those | |||
based on HTTP. Quality requirements may be needed by any type of | based on HTTP. Quality requirements may be needed by any type of | |||
application that communicates using any kind of protocol, | application that communicates using any kind of protocol, | |||
especially those with real-time constraints. Depending on the | especially those with real-time constraints. Depending on the | |||
nature of each application the constraints may be different | nature of each application, the constraints may be different, | |||
leading to different parameter thresholds that need to be met.</t> | leading to different parameter thresholds that need to be met.</t> | |||
<t> | ||||
<t> | Q4S is an application-level client/server protocol that | |||
Q4S is an application level Client/Server protocol that | ||||
continuously measures session quality for a given flow (or set of | continuously measures session quality for a given flow (or set of | |||
flows), end-to-end (e2e) and in real-time; raising alerts if | flows), end-to-end (e2e) and in real time; raising alerts if | |||
quality parameters are below a given pre-negotiated threshold and | quality parameters are below a given negotiated threshold and | |||
sending recoveries when quality parameters are restored. Q4S | sending recoveries when quality parameters are restored. Q4S | |||
describes when these notifications, alerts and recoveries, need to | describes when these notifications, alerts, and recoveries need to | |||
be sent and the entity receiving them. The actions undertaken by | be sent and the entity receiving them. The actions undertaken by | |||
the receiver of the alert are out of scope of the protocol.</t> | the receiver of the alert are out of scope of the protocol.</t> | |||
<t> | ||||
<t> | Q4S is session-independent from the application flows to minimize | |||
Q4S is session-independent from the application flows, to minimize | ||||
the impact on them. To perform the measurements, two control flows | the impact on them. To perform the measurements, two control flows | |||
are created on both communication paths (forward and reverse | are created on both communication paths (forward and reverse | |||
directions).</t> | directions).</t> | |||
<t> | ||||
<t> | ||||
This protocol specification is the product of research conducted | This protocol specification is the product of research conducted | |||
over a number of years, and is presented here as a permanent | over a number of years and is presented here as a permanent | |||
record and to offer a foundation for future similar work. It does | record and to offer a foundation for future similar work. It does | |||
not represent a standard protocol and does not have IETF | not represent a standard protocol and does not have IETF | |||
consensus.</t> | consensus.</t> | |||
<section anchor="sec-1.1" numbered="true" toc="default"> | ||||
<section title="Scope" anchor="section-1.1"><t> | <name>Scope</name> | |||
<t> | ||||
The purpose of Q4S is to measure end-to-end network quality in | The purpose of Q4S is to measure end-to-end network quality in | |||
real-time. Q4S does not transport any application data. It means | real time. Q4S does not transport any application data. This means | |||
that Q4S is designed to be used jointly with other transport | that Q4S is designed to be used jointly with other transport | |||
protocols such as Real Time Protocol (RTP)(RFC 3550 <xref target="ref-8"/>), | protocols such as Real-time Transport Protocol (RTP) <xref target="RFC3550" f | |||
Transmission Control Protocol (TCP) (RFC 793 <xref target="ref-16"/>), Quick | ormat="default"/>, | |||
UDP | Transmission Control Protocol (TCP) <xref target="RFC0793" format="default"/> | |||
Internet Connections (QUIC)<xref target="ref-9"/> , HTTP <xref target="ref-1" | , | |||
/>, etc.</t> | QUIC <xref target="I-D.ietf-quic-transport" format="default"/>, | |||
HTTP <xref target="RFC7230" format="default"/>, etc.</t> | ||||
<t> | <t> | |||
Some existent transport protocols are focused in real-time media | Some existent transport protocols are focused on real-time media | |||
transport and certain connection metrics are available, which is | transport and certain connection metrics are available, which is | |||
the case of RTP and Real Time Control Protocol (RTCP)<xref target="ref-8"/>. Other | the case of RTP and RTP Control Protocol (RTCP) <xref target="RFC3550" format ="default"/>. Other | |||
protocols such as QUIC provide low connection latencies as well as | protocols such as QUIC provide low connection latencies as well as | |||
advanced congestion control. These protocols transport data | advanced congestion control. These protocols transport data | |||
efficiently and provide lot of functionalities. However, there are | efficiently and provide a lot of functionalities. However, there are | |||
currently no other quality measurement protocols offering the same | currently no other quality measurement protocols offering the same | |||
level of function as Q4S. See <xref target="section-1.4"/> for a discussion | level of function as Q4S. See <xref target="sec-1.4" format="default"/> for | |||
of the | a discussion of the | |||
IETF's OWAMP and TWAMP quality measurement protocols.</t> | IETF's quality measurement protocols, One-Way Active Measurement Protocol (OW | |||
AMP) and | ||||
<t> | Two-Way Active Measurement Protocol (TWAMP).</t> | |||
Q4S enable applications to become reactive under e2e network | <t> | |||
Q4S enables applications to become reactive under e2e network | ||||
quality changes. To achieve it, an independent Q4S stack | quality changes. To achieve it, an independent Q4S stack | |||
application must run in parallel to target application. Then, Q4S | application must run in parallel with the target application. Then, Q4S | |||
metrics may be used to trigger actions on target application such | metrics may be used to trigger actions on the target application, such | |||
as speed adaptation to latency in multiuser games, bitrate control | as speed adaptation to latency in multiuser games, bitrate control | |||
at streaming services, intelligent commutation of delivery node at | at streaming services, intelligent commutation of delivery node at | |||
Content Delivery Networks, and whatever target application allow.</t> | Content Delivery Networks, and whatever the target application allows.</t> | |||
</section> | ||||
</section> | <section anchor="sec-1.2" numbered="true" toc="default"> | |||
<name>Motivation</name> | ||||
<section title="Motivation" anchor="section-1.2"><t> | <t> | |||
Monitoring quality of service (QoS) in computer networks is useful | Monitoring quality of service (QoS) in computer networks is useful | |||
for several reasons:</t> | for several reasons:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>Enable real-time services and applications to | <li>It enables real-time services and applications to verify whether | |||
verify whether | ||||
network resources achieve a certain QoS level. This helps | network resources achieve a certain QoS level. This helps | |||
real-time services and applications to run through the | real-time services and applications to run over the | |||
Internet, allowing the existence of Application Content | Internet, allowing the existence of Application Content | |||
Providers (ACPs) which offer guaranteed real-time services to | Providers (ACPs), which offer guaranteed real-time services to | |||
the final users.</t> | the end users.</li> | |||
<li>Real-time monitoring allows applications to adapt themselves | ||||
<t>Real-time monitoring allows applications to adapt themselves | to network conditions (application-based QoS) and/or request | |||
to network conditions (Application-based QoS) and/or request | more network quality from the Internet Service Provider (ISP) | |||
more network quality to the Internet Service Provider (ISP) | (if the ISP offers this possibility).</li> | |||
(if the ISP offers this possibility).</t> | <li>Monitoring may also be required by peer-to-peer (P2P) real-time | |||
applications for which Q4S can be used.</li> | ||||
<t>Monitoring may also be required by Peer to Peer (P2P) real-time | <li>Monitoring enables ISPs to offer QoS to any ACP or end user applic | |||
applications for which Q4S can be used</t> | ation | |||
in an accountable way.</li> | ||||
<t>Enable ISPs to offer QoS to any ACP or final user application | <li> | |||
in an accountable way</t> | <t>Monitoring enables e2e negotiation of QoS parameters, independent | |||
ly of | ||||
<t>Enable e2e negotiation of QoS parameters, independently of | the ISPs of both endpoints.</t> | |||
the ISPs of both endpoints.<vspace blankLines="1"/> | </li> | |||
</ul> | ||||
<t> | ||||
A protocol to monitor QoS must address the following issues: | A protocol to monitor QoS must address the following issues: | |||
</t> | </t> | |||
<ul spacing="normal"> | ||||
<t>Must be ready to be used in conjunction with current standard | <li>Must be ready to be used in conjunction with current standard | |||
protocols and applications, without forcing a change on them.</t> | protocols and applications, without forcing a change on them.</li> | |||
<li>Must have a formal and compact way to specify quality | ||||
<t>Must have a formal and compact way to specify quality | constraints desired by the application to run.</li> | |||
constraints desired by the application to run.</t> | <li>Must have measurement mechanisms that avoid application | |||
disruption and minimize network resources consumption.</li> | ||||
<t>Must have measurement mechanisms avoiding application | <li>Must have specific messages to alert about the violation of | |||
disruption and minimizing network resources consumption.</t> | ||||
<t>Must have specific messages to alert about the violation of | ||||
quality constraints in different directions (forward and | quality constraints in different directions (forward and | |||
reverse), because network routing may not be symmetrical, and | reverse) because network routing may not be symmetrical, and | |||
of course, quality constraints may not be symmetrical.</t> | of course, quality constraints may not be symmetrical.</li> | |||
<li>After having alerted about the violation of quality | ||||
<t>After having alerted about the violation of quality | ||||
constraints, must have specific messages to inform about | constraints, must have specific messages to inform about | |||
recovery of quality constraints in corresponding directions | the recovery of quality constraints in corresponding directions | |||
(forward and reverse).</t> | (forward and reverse).</li> | |||
<li>Must protect the data (constraints, measurements, QoS levels | ||||
<t>Must protect the data (constrains, measurements, QoS levels | ||||
demanded from the network) in order to avoid the injection of | demanded from the network) in order to avoid the injection of | |||
malicious data in the measurements.</t> | malicious data in the measurements.</li> | |||
</ul> | ||||
</list> | </section> | |||
</t> | <section anchor="sec-1.3" numbered="true" toc="default"> | |||
<name>Summary of Features</name> | ||||
</section> | <t> | |||
The Quality for Service (Q4S) protocol is a message-oriented | ||||
<section title="Summary of Features" anchor="section-1.3"><t> | ||||
The Quality for Service Protocol (Q4S) is a message-oriented | ||||
communication protocol that can be used in conjunction with any | communication protocol that can be used in conjunction with any | |||
other application-level protocol. Q4S is a measurement protocol. | other application-level protocol. Q4S is a measurement protocol. | |||
Any action taken derived from its measurements are out of scope of | Any action taken derived from its measurements are out of scope of | |||
the protocol. These actions depend on application provider and may | the protocol. These actions depend on the application provider and may | |||
be application-level adaptive reactions, may involve requests to | be application-level adaptive reactions, may involve requests to | |||
ISP, or whatever application provider decide.</t> | the ISP, or whatever the application provider decides.</t> | |||
<t> | ||||
<t> | ||||
The benefits in quality measurements provided by Q4S can be used | The benefits in quality measurements provided by Q4S can be used | |||
by any type of application that uses any type of protocol for data | by any type of application that uses any type of protocol for data | |||
transport. It provides a quality monitoring scheme for any | transport. It provides a quality monitoring scheme for any | |||
communication that takes place between the client and the server, | communication that takes place between the client and the server, | |||
not only for the Q4S communication itself.</t> | not only for the Q4S communication itself.</t> | |||
<t> | ||||
<t> | Q4S does not establish multimedia sessions, and it does not | |||
Q4S does not establish multimedia sessions and it does not | ||||
transport application data. It monitors the fulfillment of the | transport application data. It monitors the fulfillment of the | |||
quality requirements of the communication between the client and | quality requirements of the communication between the client and | |||
the server, and therefore does not impose any restrictions on the | the server; therefore, it does not impose any restrictions on the | |||
type of application, protocol or the type of usage of the | type of application, protocol, or usage of the | |||
monitored quality connection.</t> | monitored quality connection.</t> | |||
<t> | ||||
<t> | ||||
Some applications may vary their quality requirements dynamically | Some applications may vary their quality requirements dynamically | |||
for any given quality parameter. Q4S is able to adapt to the | for any given quality parameter. Q4S is able to adapt to the | |||
changing application needs modifying the parameter thresholds to | changing application needs, modifying the parameter thresholds to | |||
the new values and monitoring the network quality according to the | the new values and monitoring the network quality according to the | |||
new quality constraints. It will raise alerts if the new | new quality constraints. It will raise alerts if the new | |||
constraints are violated.</t> | constraints are violated.</t> | |||
<t> | ||||
<t> | The Q4S session lifetime is composed of four phases with different | |||
Q4S session lifetime is composed of four phases with different | purposes: Handshake, Negotiation, Continuity, and Termination. | |||
purposes: Handshake, Negotiation, Continuity and Termination. | ||||
Negotiation and Continuity phases perform network parameter | Negotiation and Continuity phases perform network parameter | |||
measurements as per a negotiated measurement procedure. Different | measurements per a negotiated measurement procedure. Different | |||
measurement procedures could be used inside Q4S, although one | measurement procedures could be used inside Q4S, although one | |||
default measurement mechanism is needed for compatibility reasons | default measurement mechanism is needed for compatibility reasons | |||
and is the one defined in this document. Basically, Q4S defines | and is the one defined in this document. Basically, Q4S defines | |||
how to transport application quality requirements and measurement | how to transport application quality requirements and measurement | |||
results between client and server and providing monitoring and | results between a client and server and how to provide monitoring and | |||
alerting too.</t> | alerting, too.</t> | |||
<t> | ||||
<t> | ||||
Q4S must be executed just before starting a client-server | Q4S must be executed just before starting a client-server | |||
application which needs a quality connection in terms of latency, | application that needs a quality connection in terms of latency, | |||
jitter, bandwidth and/or packet loss. Once client and server have | jitter, bandwidth, and/or packet loss. Once the client and server have | |||
succeeded in establishing communication under quality constraints, | succeeded in establishing communication under quality constraints, | |||
the application can start, and Q4S continues measuring and | the application can start, and Q4S continues measuring and | |||
alerting if necessary.</t> | alerting if necessary.</t> | |||
<t> | ||||
<t> | ||||
The quality parameters can be suggested by the client in the first | The quality parameters can be suggested by the client in the first | |||
message of the handshake phase, but it's the server that accepts | message of the Handshake phase, but it is the server that accepts | |||
these parameter values or forces others. The server is in charge | these parameter values or forces others. The server is in charge | |||
of deciding the final values of quality connection.</t> | of deciding the final values of quality connection.</t> | |||
</section> | ||||
</section> | <section anchor="sec-1.4" numbered="true" toc="default"> | |||
<name>Differences from OWAMP/TWAMP</name> | ||||
<section title="Differences with OWAMP/TWAMP" anchor="section-1.4"><t> | <t> | |||
OWAMP (RFC 4656) <xref target="ref-27"/> and TWAMP (RFC 5357) <xref target="r | OWAMP <xref target="RFC4656" format="default"/> and | |||
ef-28"/> are two protocols | TWAMP <xref target="RFC5357" format="default"/> are two protocols | |||
to measure network quality in terms of RTT, but has a different | to measure network quality in terms of RTT, but they have a different | |||
goal than Q4S. The main difference is the scope: Q4S is designed | goal than Q4S. The main difference is the scope: Q4S is designed | |||
to assist reactive applications, while OWAMP/TWAMP is designed | to assist reactive applications, whereas OWAMP/TWAMP is designed | |||
just to measure network delay.</t> | to measure just network delay.</t> | |||
<t> | ||||
<t> | The differences can be summarized in the following points:</t> | |||
Differences can be summarized in the following points:</t> | <ul spacing="normal"> | |||
<li>OWAMP and TWAMP are not intended for measuring availability of | ||||
<t><list style="symbols"><t>OWAMP/TWAMP is not intended for measuring ava | resources (certain bandwidth availability, for example) but | |||
ilability of | ||||
resources (certain Bandwidth availability for example) but | ||||
only RTT. However, Q4S is intended for measuring required | only RTT. However, Q4S is intended for measuring required | |||
bandwidth, packet-loss, jitter and latency in both | bandwidth, packet loss, jitter, and latency in both | |||
directions. Available bandwidth is not measured by Q4S, but | directions. Available bandwidth is not measured by Q4S, but | |||
required bandwidth for specific application.</t> | bandwidth required for a specific application is.</li> | |||
<li>OWAMP and TWAMP do not have responsivity control (which | ||||
<t>OWAMP/TWAMP does not have responsivity control (which | ||||
defines the speed of protocol reactions under network quality | defines the speed of protocol reactions under network quality | |||
changes), because this protocol is designed to measure | changes) because these protocols are designed to measure | |||
network performance, not to assist reactive applications and | network performance, not to assist reactive applications, and | |||
does not detect the fluctuations of quality in certain time | do not detect the fluctuations of quality within certain time | |||
intervals to take reactive actions. However, responsivity | intervals to take reactive actions. However, responsivity | |||
control is a key feature of Q4S.</t> | control is a key feature of Q4S.</li> | |||
<li>OWAMP and TWAMP are not intended to run in parallel with reactive | ||||
<t>OWAMP/TWAMP is not intended to run in parallel with reactive | applications, but the Q4S protocol's goal is to run in parallel and assist | |||
applications, but Q4S' goal is to run in parallel and assist | reactive applications in making decisions based on Q4S-ALERT | |||
reactive applications to take decisions based on Q4S ALERT | packets, which may trigger actions.</li> | |||
packets which may trigger actions.</t> | </ul> | |||
</section> | ||||
</list> | </section> | |||
</t> | <section anchor="sec-2" numbered="true" toc="default"> | |||
<name>Terminology</name> | ||||
</section> | <t> | |||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
</section> | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
", | ||||
<section title="Terminology" anchor="section-2"><t> | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | be | |||
described in BCP 14 RFC 2119 <xref target="ref-11"/> RFC 8174 <xref target=" | interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | |||
ref-21"/> when, and only | target="RFC8174"/> when, and only when, they appear in all capitals, as | |||
when, they appear in all capitals, as shown here.</t> | shown here. | |||
</t> | ||||
</section> | </section> | |||
<section anchor="sec-3" numbered="true" toc="default"> | ||||
<section title="Overview of Operation" anchor="section-3"><t> | <name>Overview of Operation</name> | |||
<t> | ||||
This section introduces the basic operation of Q4S using simple | This section introduces the basic operation of Q4S using simple | |||
examples. This section is of tutorial nature and does not contain | examples. This section is of a tutorial nature and does not contain | |||
any normative statements.</t> | any normative statements.</t> | |||
<t> | ||||
<t> | The first example shows the basic functions of Q4S: | |||
The first example shows the basic functions of a Q4S: | ||||
communication establishment between a client and a server, quality | communication establishment between a client and a server, quality | |||
requirement negotiations for the requested application, | requirement negotiations for the requested application, | |||
application start and continuous quality parameter measurements, | application start and continuous quality parameter measurements, | |||
and finally communication termination.</t> | and finally communication termination.</t> | |||
<t> | ||||
<t> | The client triggers the establishment of the communication by | |||
The client triggers the establishment of the communication | ||||
requesting a specific service or application from the server. This | requesting a specific service or application from the server. This | |||
first message must have a special URI (RFC 3986)<xref target="ref-12"/>, whic h may | first message must have a special URI <xref target="RFC3986" format="default" />, which may | |||
force the use of the Q4S protocol if it is implemented in a | force the use of the Q4S protocol if it is implemented in a | |||
standard web browser. This message consists of a Q4S BEGIN method, | standard web browser. This message consists of a Q4S BEGIN method, | |||
which can optionally include a proposal for the communication | which can optionally include a proposal for the communication | |||
quality requirements in an SDP body. This option gives the client | quality requirements in an SDP body. This option gives the client | |||
a certain negotiation capacity about quality requirements, but it | a certain negotiation capacity about quality requirements, but it | |||
will be the server who finally decides about the stated | will be the server who finally decides the stated | |||
requirements.</t> | requirements.</t> | |||
<t> | ||||
<t> | ||||
This request is answered by the server with a Q4S 200 OK response | This request is answered by the server with a Q4S 200 OK response | |||
letting the client know that it accepts the request. This response | letting the client know that it accepts the request. This response | |||
message must contain an SDP body with:</t> | message must contain an SDP body with the following:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>The assigned Q4S session id.</t> | <li>The assigned Q4S sess-id.</li> | |||
<li>The quality constraints required by the requested application.</li> | ||||
<t>The quality constraints required by the requested | <li>The measurement procedure to use.</li> | |||
application.</t> | <li> | |||
<t>"alerting-mode" attribute: There are two different scenarios for | ||||
<t>The measurement procedure to use.</t> | ||||
<t>The alerting mode: there are two different scenarios for | ||||
sending alerts that trigger actions either on the network or | sending alerts that trigger actions either on the network or | |||
in the application when measurements identify violated | in the application when measurements identify violated | |||
quality constraints. In both cases, alerts are triggered by | quality constraints. In both cases, alerts are triggered by | |||
the server. | the server. | |||
</t> | ||||
<list style="format (%c)"> | <ol spacing="normal" type="(%c)"> | |||
<t> Q4S-aware-network scenario: the network is Q4S aware, | <li> | |||
and reacts by itself to these alerts. In this scenario | <t>Q4S-aware-network scenario: The network is Q4S aware | |||
Q4S ALERT messages are sent by the server to the client, | and reacts by itself to these alerts. In this scenario, | |||
Q4S-ALERT messages are sent by the server to the client, | ||||
and network elements inspect and process these alert | and network elements inspect and process these alert | |||
messages. The alerting mode in this scenario is called | messages. The alerting mode in this scenario is called | |||
Q4S-aware-network alerting mode.</t> | Q4S-aware-network alerting mode.</t> | |||
</li> | ||||
<t>Reactive scenario: As shown in Figure 1, the network | <li> | |||
is not Q4S aware. In this scenario alert notifications | <t>Reactive scenario: As shown in | |||
<xref target="ref-reactive-scenario" format="default"/>, the network | ||||
is not Q4S aware. In this scenario, alert notifications | ||||
are sent to a specific node, called an Actuator, which is | are sent to a specific node, called an Actuator, which is | |||
in charge of taking decisions regarding what actions to | in charge of making decisions regarding what actions to | |||
trigger: either to change application behavior to adapt | trigger: either to change application behavior to adapt | |||
it to network conditions and/or invoke a network policy | it to network conditions and/or invoke a network policy | |||
server in order to reconfigure the network and request | server in order to reconfigure the network and request | |||
more quality for application flows.</t> | better quality for application flows.</t> | |||
<figure anchor="ref-reactive-scenario"> | ||||
</list> | <name>Reactive Scenario</name> | |||
</t> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
</list> | ||||
</t> | ||||
<figure title="Reactive scenario" anchor="ref-reactive-scenario"><artwork | ||||
><![CDATA[ | ||||
+------+ +-----------+ | +------+ +-----------+ | |||
| App |<----- app flows---------->|Application| | | App |<----- app flows---------->|Application| | |||
|Client| +-----------+ | |Client| +-----------+ | |||
+------+ A | +------+ A | |||
| | | | |||
+------+ +------+ +--------+ | +------+ +------+ +--------+ | |||
| Q4S |<----Q4S---->| Q4S |<----->|Actuator| | | Q4S |<----Q4S---->| Q4S |<----->|Actuator| | |||
|Client| |Server| +--------+ | |Client| |Server| +--------+ | |||
+------+ +------+ | | +------+ +------+ | | |||
V | V | |||
+-------------+ | +-------------+ | |||
|policy server| | |policy server| | |||
+-------------+ | +-------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t><list style="symbols"><t>The format of messages exchanged between the | <t>The format of messages exchanged between the server stack and | |||
server stack and | the Actuator doesn't follow Q4S codification rules; | |||
the Actuator, doesn't follow Q4S codification rules, but | ||||
their format will be implementation dependent. In this way, | their format will be implementation dependent. In this way, | |||
we will call the messages sent from the server stack to the | we will call the messages sent from the server stack to the | |||
Actuator "notifications" (e.g., alert notifications), and the | Actuator "notifications" (e.g., alert notifications) and the | |||
messages sent from the Actuator to the server stack in | messages sent from the Actuator to the server stack in | |||
response to notifications "acknowledges" (e.g., alert | response to notifications "acknowledges" (e.g., alert | |||
acknowledges).</t> | acknowledges).</t> | |||
</li> | ||||
<t>alert-pause: The amount of time between consecutive alerts. | </ol></li> | |||
</ul> | ||||
<ul spacing="normal"> | ||||
<li>"alert-pause" attribute: The amount of time between consecutive aler | ||||
ts. | ||||
In the Q4S-aware-network scenario, the server has to wait | In the Q4S-aware-network scenario, the server has to wait | |||
this period of time between Q4S ALERT messages sent to the | this period of time between Q4S-ALERT messages sent to the | |||
client. In the Reactive scenario, the server stack has to | client. In the Reactive scenario, the server stack has to | |||
wait this period of time between alert notifications sent to | wait this period of time between alert notifications sent to | |||
the Actuator. Measurements are not stopped in Negotiation or | the Actuator. Measurements are not stopped in Negotiation or | |||
Continuity Phases during this period of time, but no alerts | Continuity phases during this period of time, but no alerts | |||
are sent even with violated network quality constraints in | are sent, even with violated network quality constraints, in | |||
order to leave time for network reconfiguration or for | order to leave time for network reconfiguration or for | |||
application adjustments.</t> | application adjustments.</li> | |||
<li>"recovery-pause" attribute: The amount of time the Q4S server waits | ||||
<t>recovery-pause: The amount of time the Q4S server waits | before trying to recover the initial "qos-level" (<xref target="sec-7.2.1" | |||
before trying to recover the initial qos-level. After having | format="default"/>). | |||
After having | ||||
detected violation of quality constraints several times, the | detected violation of quality constraints several times, the | |||
qos-level will have been increased accordingly. If this | "qos-level" will have been increased accordingly. If this | |||
violation detection finally stops, the server waits for a | violation detection finally stops, the server waits for a | |||
period of time (recovery time) and if the situation persists, | period of time (recovery time), and if the situation persists, | |||
it tries to recover to previous qos-level values gradually by | it tries to recover to previous "qos-level" values gradually by | |||
sending Q4S RECOVERY messages to the client, in the Q4S-aware-network scen | sending Q4S-RECOVERY messages to the client in the Q4S-aware-network scena | |||
ario, or recovery notifications to the | rio, or recovery notifications to the | |||
Actuator, in the Reactive scenario.</t> | Actuator in the Reactive scenario (<xref target="sec-7.9" format="default" | |||
/>).</li> | ||||
</list> | </ul> | |||
</t> | <t> | |||
<t> | ||||
It is important to highlight that any Q4S 200 OK response sent by | It is important to highlight that any Q4S 200 OK response sent by | |||
the server to the client at any time during the life of a quality | the server to the client at any time during the life of a quality | |||
session may contain an SDP body with new values of quality | session may contain an SDP body with new values of quality | |||
constraints required by the application. Depending on the phase | constraints required by the application. Depending on the phase | |||
and the state of the measurement procedure within the specific | and the state of the measurement procedure within the specific | |||
phase, the client will react accordingly so as to take into | phase, the client will react accordingly to take into | |||
account the new quality constraints in the measurement procedure.</t> | account the new quality constraints in the measurement procedure.</t> | |||
<t> | ||||
<t> | Once the communication has been established (i.e., the Handshake phase is | |||
Once the communication has been established (handshake phase is | ||||
finished), the protocol will verify that the communication path | finished), the protocol will verify that the communication path | |||
between the client and the server meets the quality constraints on | between the client and the server meets the quality constraints in | |||
both directions, from and to the server (negotiation phase). This | both directions, from and to the server (Negotiation phase). This | |||
negotiation phase requires taking measurements of the quality | Negotiation phase requires taking measurements of the quality | |||
parameters: latencies, jitter, bandwidth and packet loss. This | parameters: latencies, jitter, bandwidth, and packet loss. This | |||
phase is initiated with a client message containing a Q4S READY | phase is initiated with a client message containing a Q4S READY | |||
method, which will be answered by the server with a Q4S 200 OK | method, which will be answered by the server with a Q4S 200 OK | |||
response.</t> | response.</t> | |||
<t> | ||||
<t> | ||||
Negotiation measurements are achieved in two sequential stages: | Negotiation measurements are achieved in two sequential stages: | |||
</t> | ||||
<list style="hanging" hangIndent="6"> | <dl newline="false" spacing="normal" indent="6"> | |||
<dt>Stage 0:</dt> | ||||
<t hangText="Stage 0:"> latency and jitter measurements</t> | <dd> latency and jitter measurements</dd> | |||
<dt>Stage 1:</dt> | ||||
<t hangText="Stage 1:"> bandwidth and packet loss measurements</t> | <dd> bandwidth and packet loss measurements</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | Stage 0 measurements are taken through Q4S PING messages | |||
sent from both the client and the server. All Q4S PING | ||||
<t> | ||||
Stage 0 measurements are being taken through Q4S PING messages | ||||
sent both from both the client and the server. All Q4S PING | ||||
requests will be answered by Q4S 200 OK messages to allow for | requests will be answered by Q4S 200 OK messages to allow for | |||
bidirectional measurements.</t> | bidirectional measurements.</t> | |||
<t> | ||||
<t> | ||||
Different client and server implementations may send a different | Different client and server implementations may send a different | |||
number of PING messages for measuring, although at least 255 | number of PING messages for measuring, although at least 255 | |||
messages should be considered to perform the latency measurement. | messages should be considered to perform the latency measurement. | |||
The Stage 0 measurements only may be considered ended when neither | The Stage 0 measurements only may be considered ended when neither | |||
client nor server receive new PING messages after an | client nor server receive new PING messages after an | |||
implementation-dependent guard time. Only after, client can send a | implementation-dependent guard time. Only after Stage 0 has ended, can the cl ient send a | |||
"READY 1" message.</t> | "READY 1" message.</t> | |||
<t> | ||||
<t> | ||||
After a pre-agreed number of measurements have been performed, | After a pre-agreed number of measurements have been performed, | |||
determined by the measurement procedure sent by the server, three | determined by the measurement procedure sent by the server, three | |||
scenarios may be possible: | scenarios may be possible: | |||
</t> | ||||
<list style="format (%c)"> <t> Measurements do not meet the | <ol spacing="normal" type="(%c)"> | |||
requirements: in this case the | <li> Measurements do not meet the | |||
requirements: in this case, the | ||||
stage 0 is repeated after sending an alert from the server to | stage 0 is repeated after sending an alert from the server to | |||
the client or from the server stack to the Actuator, depending | the client or from the server stack to the Actuator, depending | |||
on the alerting mode defined in the Handshake phase. Notice | on the alerting mode defined in the Handshake phase. Notice | |||
that measurements continue to be taken but no alerts are sent | that measurements continue to be taken but no alerts are sent | |||
during the alert-pause time. In the Reactive scenario, the | during the "alert-pause" time. In the Reactive scenario, the | |||
Actuator will decide either to forward the alert notification | Actuator will decide either to forward the alert notification | |||
to the network policy server or to the application, depending | to the network policy server or to the application, depending | |||
on where reconfiguration actions have to be taken. | on where reconfiguration actions have to be taken. | |||
</t> | </li> | |||
<li> Measurements do meet the requirements: in this case, client | ||||
<t> Measurements do meet the requirements: in this case client | moves to stage 1 by sending a new READY message. | |||
moves to stage 1 sending a new READY message. | </li> | |||
</t> | <li> At any time during the measurement procedure, the Q4S 200 OK | |||
<t> At any time during the measurement procedure, the Q4S 200 OK | ||||
message sent by the server to the client, in response to a Q4S | message sent by the server to the client, in response to a Q4S | |||
PING message, contains an SDP body with new values of quality | PING message, contains an SDP body with new values of quality | |||
constraints required by the application; this means the | constraints required by the application. This means the | |||
application has varied their quality requirements dynamically | application has varied their quality requirements dynamically; | |||
and therefore quality thresholds used while monitoring quality | therefore, quality thresholds used while monitoring quality | |||
parameters have to be changed to the new constraints. In this | parameters have to be changed to the new constraints. In this | |||
case the client moves to the beginning of the Stage 0 for | case, the client moves to the beginning of Stage 0 for | |||
initiating the negotiation measurements again. | initiating the negotiation measurements again. | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | <t> | |||
<t> | ||||
Stage 1 is optional. Its purpose is to measure the availability of | Stage 1 is optional. Its purpose is to measure the availability of | |||
application needed bandwidth. This stage can be skipped by client | application-needed bandwidth. If the "bandwidth" attribute is | |||
sending a "READY 2" message after completion of stage 0 when | set to zero kbps in the SDP, the client can skip stage 1 by | |||
bandwidth requirements is set to cero kbps in the SDP. Stage 1 | sending a "READY 2" message after completion of stage 0. Stage 1 | |||
measurements are achieved through Q4S BWIDTH messages sent both | measurements are achieved through Q4S BWIDTH messages sent | |||
from the client and the server. Unlike PING messages, Q4S BWIDTH | from both the client and the server. Unlike PING messages, Q4S BWIDTH | |||
requests will not be answered.</t> | requests will not be answered.</t> | |||
<t> | ||||
<t> | ||||
If Stage 0 and 1 meet the application quality constraints, the | If Stage 0 and 1 meet the application quality constraints, the | |||
application may start. Q4S will enter the continuity phase | application may start. Q4S will enter the Continuity phase | |||
measuring the network quality parameters through the Q4S PING | by measuring the network quality parameters through the Q4S PING | |||
message exchange on both connection paths, and raising alerts in | message exchange on both connection paths and raising alerts in | |||
case of violation.</t> | case of violation.</t> | |||
<t> | ||||
<t> | Once the client wants to terminate the quality session, it sends a | |||
Once the client wants to terminate the quality session it sends a | ||||
Q4S CANCEL message, which will be acknowledged by the server with | Q4S CANCEL message, which will be acknowledged by the server with | |||
another Q4S CANCEL message. Termination of quality sessions are | another Q4S CANCEL message. Termination of quality sessions are | |||
always initiated by the client because Q4S TCP requests follow the | always initiated by the client because Q4S TCP requests follow the | |||
client server schema.</t> | client/server schema.</t> | |||
<t><xref target="ref-successful-q4s-message-exchange" format="default"/> | ||||
<t><list style="hanging" hangIndent="-1"><t hangText="Figure 2 depicts th | depicts the message exchange in a successful scenario.</t> | |||
e message exchange in a successful scenario."> | <figure anchor="ref-successful-q4s-message-exchange"> | |||
<vspace blankLines="0"/> | <name>Successful Q4S Message Exchange</name> | |||
</t> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
</list> | ||||
</t> | ||||
<figure title="Successful Q4S message exchange" anchor="ref-successful-q4 | ||||
s-message-exchange"><artwork><![CDATA[ | ||||
+-------------------------------------------+ | +-------------------------------------------+ | |||
| | | | | | |||
| Client Server | | | Client Server | | |||
| | | | | | |||
Handshake | --------- Q4S BEGIN -----------> | | Handshake | --------- Q4S BEGIN -----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| | | | | | |||
Negotiation | | | Negotiation | | | |||
(Stage 0) | --------- Q4S READY 0----------> | | (Stage 0) | --------- Q4S READY 0----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
skipping to change at line 673 ¶ | skipping to change at line 621 ¶ | |||
Negotiation | | | Negotiation | | | |||
(Stage 1) | --------- Q4S READY 1----------> | | (Stage 1) | --------- Q4S READY 1----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| | | | | | |||
| --------- Q4S BWITDH ----------> | | | --------- Q4S BWITDH ----------> | | |||
| <-------- Q4S BWIDTH------------ | | | <-------- Q4S BWIDTH------------ | | |||
| --------- Q4S BWITDH ----------> | | | --------- Q4S BWITDH ----------> | | |||
| <-------- Q4S BWIDTH------------ | | | <-------- Q4S BWIDTH------------ | | |||
| ... | | | ... | | |||
Continuity | --------- Q4S READY 2 ---------> | | Continuity | --------- Q4S READY 2 ---------> | | |||
| <-------- Q4S 200 OK ----------- | app | | <-------- Q4S 200 OK ----------- | app start | |||
start | ||||
| | | | | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| -------- Q4S 200 OK ----------> | | | -------- Q4S 200 OK ----------> | | |||
| | | | | | |||
Termination | --------- Q4S CANCEL ----------> | app end | Termination | --------- Q4S CANCEL ----------> | app end | |||
| <-------- Q4S CANCEL ----------- | | | <-------- Q4S CANCEL ----------- | | |||
| | | | | | |||
+-------------------------------------------+ | +-------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
Client and server measurements are included into PING and BWIDTH | Both client and server measurements are included in the PING and BWIDTH | |||
messages, allowing both sides of the communication to be are aware | messages, allowing both sides of the communication channel to be aware | |||
of all measurements in both directions.</t> | of all measurements in both directions.</t> | |||
<t> | ||||
<t> | ||||
The following two examples show the behavior of the Q4S protocol | The following two examples show the behavior of the Q4S protocol | |||
when: quality constraints are violated, alerts are generated; and, | when quality constraints are violated, and alerts are generated; and, | |||
later on, violation of quality constraints stops leading to the | later on, when the violation of quality constraints stops leading to the | |||
execution of the recovery process. The first example (Figure 3) | execution of the recovery process. The first example | |||
(<xref target="ref-q4s-aware-network-alerting-mode" format="default"/>) | ||||
shows the Q4S-aware-network alerting mode scenario:</t> | shows the Q4S-aware-network alerting mode scenario:</t> | |||
<figure anchor="ref-q4s-aware-network-alerting-mode"> | ||||
<figure title="Q4S-aware-network alerting mode" anchor="ref-q4s-aware-net | <name>Q4S-Aware-Network Alerting Mode</name> | |||
work-alerting-mode"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+-------------------------------------------+ | +-------------------------------------------+ | |||
| | | | | | |||
| Client Server | | | Client Server | | |||
| | | | | | |||
Handshake | --------- Q4S BEGIN -----------> | | Handshake | --------- Q4S BEGIN -----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| | | | | | |||
Negotiation | | | Negotiation | | | |||
(Stage 0) | --------- Q4S READY 0----------> | | (Stage 0) | --------- Q4S READY 0----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| | | | | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| -------- Q4S 200 OK ----------> | | | -------- Q4S 200 OK ----------> | | |||
| ... | | | ... | | |||
| | | | | | |||
| <-------- Q4S ALERT ------------ | | | <-------- Q4S-ALERT ------------ | | |||
| -------- Q4S ALERT ------------> | | | -------- Q4S-ALERT ------------> | | |||
| (alert-pause start) | | | (alert-pause start) | | |||
Repetition | | | Repetition | | | |||
of Stage 0 | --------- Q4S READY 0----------> | | of Stage 0 | --------- Q4S READY 0----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| | | | | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| ... | | | ... | | |||
Negotiation | | | Negotiation | | | |||
(Stage 1) | --------- Q4S READY 1----------> | | (Stage 1) | --------- Q4S READY 1----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| | | | | | |||
| --------- Q4S BWITDH ----------> | | | --------- Q4S BWITDH ----------> | | |||
| <-------- Q4S BWIDTH------------ | | | <-------- Q4S BWIDTH------------ | | |||
| ... | | | ... | | |||
| | | | | | |||
Continuity | --------- Q4S READY 2 ---------> | | Continuity | --------- Q4S READY 2 ---------> | | |||
| <-------- Q4S 200 OK ----------- | app | | <-------- Q4S 200 OK ----------- | app start | |||
start | ||||
| | | | | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| -------- Q4S 200 OK ----------> | | | -------- Q4S 200 OK ----------> | | |||
| ... | | | ... | | |||
|(alert-pause expires & | | |(alert-pause expires & | | |||
| violated constraints) | | | violated constraints) | | |||
| <-------- Q4S ALERT ------------ | | | <-------- Q4S-ALERT ------------ | | |||
| --------- Q4S ALERT -----------> | | | --------- Q4S-ALERT -----------> | | |||
| | | | | | |||
| (alert-pause start) | | | (alert-pause start) | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| --------- Q4S 200 OK ----------> | | | --------- Q4S 200 OK ----------> | | |||
| ... | | | ... | | |||
|(alert-pause expires & | | |(alert-pause expires & | | |||
| violated constraints) | | | violated constraints) | | |||
| <-------- Q4S ALERT ------------ | | | <-------- Q4S-ALERT ------------ | | |||
| --------- Q4S ALERT -----------> | | | --------- Q4S-ALERT -----------> | | |||
| (alert-pause) | | | (alert-pause) | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| -------- Q4S 200 OK ----------> | | | -------- Q4S 200 OK ----------> | | |||
| ... | | | ... | | |||
|(alert-pause expires & | | |(alert-pause expires & | | |||
| Fullfilled constraints) | | | Fulfilled constraints) | | |||
| | | | | | |||
| (recovery-pause start) | | | (recovery-pause start) | | |||
| | | | | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| -------- Q4S 200 OK ----------> | | | -------- Q4S 200 OK ----------> | | |||
| ... | | | ... | | |||
|(recovery-pause expires & | | |(recovery-pause expires & | | |||
| Fullfilled constraints) | | | Fulfilled constraints) | | |||
| <--------- Q4S RECOVERY --------- | | | <--------- Q4S-RECOVERY --------- | | |||
| -------- Q4S RECOVERY -----------> | | | -------- Q4S-RECOVERY -----------> | | |||
| | | | | | |||
| (recovery-pause start) | | | (recovery-pause start) | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| -------- Q4S 200 OK ----------> | | | -------- Q4S 200 OK ----------> | | |||
| ... | | | ... | | |||
| | | | | | |||
Termination | --------- Q4S CANCEL ----------> | app end | Termination | --------- Q4S CANCEL ----------> | app end | |||
| <-------- Q4S CANCEL ----------- | | | <-------- Q4S CANCEL ----------- | | |||
| | | | | | |||
+-------------------------------------------+ | +-------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
In this Q4S-aware-network alerting mode scenario, the server may | In this Q4S-aware-network alerting mode scenario, the server may | |||
send Q4S alerts to the client at any time on detection of violated | send Q4S alerts to the client at any time upon detection of violated | |||
quality constraints. This alerting exchange must not interrupt the | quality constraints. This alerting exchange must not interrupt the | |||
continuity quality parameter measurements between client and | continuity quality parameter measurements between client and | |||
server.</t> | server.</t> | |||
<t> | ||||
<t> | The second example depicted in <xref target="ref-reactive-alerting-mode" form | |||
The second example depicted in the figure 4 represents the | at="default"/> represents the | |||
Reactive scenario, in which alert notifications are sent from the | Reactive scenario, in which alert notifications are sent from the | |||
server stack to the Actuator which is in charge of deciding either | server stack to the Actuator, which is in charge of deciding | |||
to act over application behavior and/or invoke a network policy | to act over application behavior and/or to invoke a network policy | |||
server. The Actuator is an entity that has a pre-defined set of | server. The Actuator is an entity that has a defined set of | |||
different quality levels and decides how to act depending on the | different quality levels and decides how to act depending on the | |||
actions stated for each of these levels; it can take actions for | actions stated for each of these levels; it can take actions for | |||
making adjustments on the application or it can send a request to | making adjustments on the application, or it can send a request to | |||
the policy server for acting on the network. The policy server | the policy server for acting on the network. The policy server | |||
also has a pre-defined set of different quality levels pre-agreed | also has a defined set of different quality levels previously agreed | |||
upon between the Application Content Provider and the ISP. The | upon between the Application Content Provider and the ISP. The | |||
Reactive alerting mode is the default mode.</t> | Reactive alerting mode is the default mode.</t> | |||
<figure anchor="ref-reactive-alerting-mode"> | ||||
<figure title="Reactive alerting mode" anchor="ref-reactive-alerting-mode | <name>Reactive Alerting Mode</name> | |||
"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+-------------------------------------------+ | +-------------------------------------------+ | |||
| | | | | | |||
| Client Server Actuator | | | Client Server Actuator | | |||
Handshake | ----- Q4S BEGIN -----> | | Handshake | ----- Q4S BEGIN -----> | | |||
| <---- Q4S 200 OK ----- | | | <---- Q4S 200 OK ----- | | |||
| | | | | | |||
Negotiation | | | Negotiation | | | |||
(Stage 0) | ----- Q4S READY 0----> | | (Stage 0) | ----- Q4S READY 0----> | | |||
| <---- Q4S 200 OK ----- | | | <---- Q4S 200 OK ----- | | |||
| | | | | | |||
skipping to change at line 867 ¶ | skipping to change at line 814 ¶ | |||
| <---- Q4S PING ------- | | | <---- Q4S PING ------- | | |||
| ... | | | ... | | |||
Negotiation | | | Negotiation | | | |||
(Stage 1) | ----- Q4S READY 1----> | | (Stage 1) | ----- Q4S READY 1----> | | |||
| <---- Q4S 200 OK ----- | | | <---- Q4S 200 OK ----- | | |||
| | | | | | |||
| ----- Q4S BWITDH ----> | | | ----- Q4S BWITDH ----> | | |||
| <---- Q4S BWIDTH------ | | | <---- Q4S BWIDTH------ | | |||
| ... | | | ... | | |||
Continuity | ----- Q4S READY 2 ---> | | Continuity | ----- Q4S READY 2 ---> | | |||
| <---- Q4S 200 OK ----- | app | | <---- Q4S 200 OK ----- | app start | |||
start | ||||
| | | | | | |||
|(alert-pause expires & | | |(alert-pause expires & | | |||
| fulfilled constraints) | | | fulfilled constraints) | | |||
| | | | | | |||
|(recovery-pause start) | | |(recovery-pause start) | | |||
| ----- Q4S PING ------> | | | ----- Q4S PING ------> | | |||
| <---- Q4S 200 OK ----- | | | <---- Q4S 200 OK ----- | | |||
| <---- Q4S PING ------- | | | <---- Q4S PING ------- | | |||
| ----- Q4S PING ------> | | | ----- Q4S PING ------> | | |||
| | | | | | |||
skipping to change at line 905 ¶ | skipping to change at line 851 ¶ | |||
Termination | ----- Q4S CANCEL ----> | app end | Termination | ----- Q4S CANCEL ----> | app end | |||
| --cancel | | | --cancel | | |||
| notification--> | | | notification--> | | |||
| | | | | | |||
| <--cancel | | | <--cancel | | |||
| acknowledge-- | | | acknowledge-- | | |||
| <---- Q4S CANCEL ----- | | | <---- Q4S CANCEL ----- | | |||
| | | | | | |||
+-------------------------------------------+ | +-------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
At the end of any Negotiation phase stage, the server sends an | At the end of any stage of the Negotiation phase, the server sends an | |||
alert notification to the Actuator if quality constraints are | alert notification to the Actuator if quality constraints are | |||
violated. During the period of time defined by the alert-pause | violated. During the period of time defined by the "alert-pause" | |||
parameter, no further alert notifications are sent, but | attribute, no further alert notifications are sent, but | |||
measurements are not interrupted. This way, both the client and | measurements are not interrupted. This way, both the client and | |||
the server will detect network improvements as soon as possible. | the server will detect network improvements as soon as possible. | |||
In a similar way, during the continuity phase, the server may send | In a similar way during the Continuity phase, the server may send | |||
alert notifications at any time to the Actuator on detection of | alert notifications at any time to the Actuator upon detection of | |||
violated quality constraints. This alerting exchange must not | violated quality constraints. This alerting exchange must not | |||
interrupt the continuity measurements between client and server.</t> | interrupt the continuity measurements between client and server.</t> | |||
<t> | ||||
<t> | ||||
Finally, in the Termination phase, Q4S CANCEL messages sent from | Finally, in the Termination phase, Q4S CANCEL messages sent from | |||
the client to the server must be forwarded from the server to the | the client to the server must be forwarded from the server to the | |||
Actuator in order to release possible assigned resources for the | Actuator in order to release possible assigned resources for the | |||
session.</t> | session.</t> | |||
</section> | ||||
</section> | <section anchor="sec-4" numbered="true" toc="default"> | |||
<name>Q4S Messages</name> | ||||
<section title="Q4S Messages" anchor="section-4"><t> | <t> | |||
Q4S is a text-based protocol and uses the UTF-8 charset (RFC 3629 | Q4S is a text-based protocol and uses the UTF-8 charset | |||
<xref target="ref-19"/>). A Q4S message is either a request or a response.</t | <xref target="RFC3629" format="default"/>. A Q4S message is either a request | |||
> | or a response.</t> | |||
<t> | ||||
<t> | Both request and response messages use the basic format of | |||
Both Request and Response messages use the basic format of | Internet Message Format <xref target="RFC5322" format="default"/>. Both types | |||
Internet Message Format (RFC 5322 <xref target="ref-20"/>). Both types of mes | of messages | |||
sages | ||||
consist of a start-line, one or more header fields, an empty line | consist of a start-line, one or more header fields, an empty line | |||
indicating the end of the header fields, and an optional message-body.</t> | indicating the end of the header fields, and an optional message-body. | |||
This document uses ABNF notation <xref target="RFC5234" format="default"/> | ||||
<t> | for the definitions of the syntax of messages.</t> | |||
The start-line, each message-header line, and the empty line MUST | <t> | |||
The start-line, each message-header line, and the empty line <bcp14>MUST</bcp | ||||
14> | ||||
be terminated by a carriage-return line-feed sequence (CRLF). | be terminated by a carriage-return line-feed sequence (CRLF). | |||
Note that the empty line MUST be present even if the message-body | Note that the empty line <bcp14>MUST</bcp14> be present even if the message-b ody | |||
is not.</t> | is not.</t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
generic-message = start-line CRLF | generic-message = start-line CRLF | |||
*message-header CRLF | *message-header CRLF | |||
CRLF | CRLF | |||
[ message-body ] | [ message-body ] | |||
start-line = Request-Line / Status-Line | start-line = Request-Line / Status-Line | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | ||||
Much of Q4S's messages and header field syntax are identical to | Much of Q4S's messages and header field syntax are identical to | |||
HTTP/1.1. However, Q4S is not an extension of HTTP.</t> | HTTP/1.1. However, Q4S is not an extension of HTTP.</t> | |||
<section anchor="sec-4.1" numbered="true" toc="default"> | ||||
<section title="Requests" anchor="section-4.1"><t> | <name>Requests</name> | |||
<t> | ||||
Q4S requests are distinguished by having a Request-Line for a | Q4S requests are distinguished by having a Request-Line for a | |||
start-line. A Request-Line contains a method name, a Request-URI, | start-line. A Request-Line contains a method name, a Request-URI, | |||
and the protocol version separated by a single space (SP) | and the protocol version separated by a single space (SP) | |||
character.</t> | character.</t> | |||
<t> | ||||
<t> | ||||
The Request-Line ends with CRLF. No CR or LF are allowed except in | The Request-Line ends with CRLF. No CR or LF are allowed except in | |||
the end-of-line CRLF sequence. No linear whitespace (LWS) is allowed | the end-of-line CRLF sequence. No linear whitespace (LWSP) is allowed | |||
in any of the elements.</t> | in any of the elements.</t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<t> | Request-Line = Method SP Request-URI SP Q4S-Version CRLF | |||
Request-Line = Method SP Request-URI SP Q4S-Version CRLF </t> | ]]></sourcecode> | |||
<dl newline="false" spacing="normal" indent="6"> | ||||
<t><list style="hanging" hangIndent="6"> | <dt>Method:</dt> | |||
<dd> | ||||
<t hangText="Method:"> | ||||
This specification defines seven methods: BEGIN for | This specification defines seven methods: BEGIN for | |||
starting and negotiate quality sessions, READY for | starting and negotiating quality sessions, READY for | |||
synchronization of measurements, PING and BWIDTH for | synchronization of measurements, PING and BWIDTH for | |||
quality measurements purpose, CANCEL for terminating | quality measurements purposes, CANCEL for terminating | |||
sessions, Q4S-ALERT for quality violations reporting, and | sessions, Q4S-ALERT for reporting quality violations, and | |||
Q4S-RECOVERY for quality recovery reporting. | Q4S-RECOVERY for reporting quality recovery. | |||
</t> | </dd> | |||
<dt>Request-URI:</dt> | ||||
<t hangText="Request-URI:"> | <dd> | |||
The Request-URI is a Q4S URI (RFC 2396) as described | The Request-URI is a Q4S URI <xref target="RFC3986" format="default"/> as | |||
in 7.4. The Request-URI MUST NOT contain unescaped spaces | described | |||
or control characters and MUST NOT be enclosed in "<>". | in <xref target="sec-7.4" format="default"/>. The Request-URI <bcp14>MUST | |||
</t> | NOT</bcp14> contain unescaped spaces | |||
or control characters and <bcp14>MUST NOT</bcp14> be enclosed in "<> | ||||
<t hangText="Q4S-Version:"> | ". | |||
</dd> | ||||
<dt>Q4S-Version:</dt> | ||||
<dd> | ||||
Both request and response messages include the | Both request and response messages include the | |||
version of Q4S in use. To be compliant with this | version of Q4S in use. To be compliant with this | |||
specification, applications sending Q4S messages MUST | specification, applications sending Q4S messages <bcp14>MUST</bcp14> | |||
include a Q4S-Version of "Q4S/1.0". The Q4S-Version string | include a Q4S-Version of "Q4S/1.0". The Q4S-Version string | |||
is case-insensitive, but implementations MUST send upper-case. Unlike HTTP | is case insensitive, but implementations <bcp14>MUST</bcp14> | |||
/1.1, Q4S treats the version number as a | send uppercase. Unlike HTTP/1.1, Q4S treats the version number as a | |||
literal string. In practice, this should make no difference. | literal string. In practice, this should make no difference. | |||
</t> | </dd> | |||
</dl> | ||||
</list> | </section> | |||
</t> | <section anchor="sec-4.2" numbered="true" toc="default"> | |||
<name>Responses</name> | ||||
</section> | <t> | |||
<section title="Responses" anchor="section-4.2"><t> | ||||
Q4S responses are distinguished from requests by having a Status-Line as thei r start-line. A Status-Line consists of the protocol | Q4S responses are distinguished from requests by having a Status-Line as thei r start-line. A Status-Line consists of the protocol | |||
version followed by a numeric Status-Code and its associated | version followed by a numeric Status-Code and its associated | |||
textual phrase, with each element separated by a single SP | textual phrase, with each element separated by a single SP | |||
character. No CR or LF is allowed except in the final CRLF | character. No CR or LF is allowed except in the final CRLF | |||
sequence.</t> | sequence.</t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<t> | Status-Line = Q4S-Version SP Status-Code SP Reason-Phrase CRLF | |||
Status-Line = Q4S-Version SP Status-Code SP Reason-Phrase CRLF </t> | ]]></sourcecode> | |||
<t> | ||||
<t> | ||||
The Status-Code is a 3-digit integer result code that indicates | The Status-Code is a 3-digit integer result code that indicates | |||
the outcome of an attempt to understand and satisfy a request. The | the outcome of an attempt to understand and satisfy a request. The | |||
Reason-Phrase is intended to give a short textual description of | Reason-Phrase is intended to give a short textual description of | |||
the Status-Code. The Status-Code is intended for use by automata, | the Status-Code. The Status-Code is intended for use by automata, | |||
whereas the Reason-Phrase is intended for the human user. A client | whereas the Reason-Phrase is intended for the human user. A client | |||
is not required to examine or display the Reason-Phrase.</t> | is not required to examine or display the Reason-Phrase.</t> | |||
<t> | ||||
<t> | While this specification suggests specific wording for the | |||
While this specification suggests specific wording for the reason | Reason-Phrase, implementations <bcp14>MAY</bcp14> choose other text, for exam | |||
phrase, implementations MAY choose other text, for example, in the | ple, in the | |||
language indicated in the Accept-Language header field of the | language indicated in the Accept-Language header field of the | |||
request.</t> | request.</t> | |||
<t> | ||||
<t> | ||||
The first digit of the Status-Code defines the class of response. | The first digit of the Status-Code defines the class of response. | |||
The last two digits do not have any categorization role. For this | The last two digits do not have any categorization role. For this | |||
reason, any response with a status code between 100 and 199 is | reason, any response with a status code between 100 and 199 is | |||
referred to as a "1xx response", any response with a status code | referred to as a "1xx response", any response with a status code | |||
between 200 and 299 as a "2xx response", and so on. Q4S/1.0 | between 200 and 299 as a "2xx response", and so on. Q4S/1.0 | |||
allows following values for the first digit: | allows following values for the first digit: | |||
<list style="hanging" hangIndent="6"> | </t> | |||
<t hangText="1xx:"> | <dl newline="false" spacing="normal" indent="6"> | |||
<dt>1xx:</dt> | ||||
<dd> | ||||
Provisional -- request received, continuing to process the request; | Provisional -- request received, continuing to process the request; | |||
</t> | </dd> | |||
<dt>2xx:</dt> | ||||
<t hangText="2xx:"> | <dd> | |||
Success -- the action was successfully received, understood, and accepted ; | Success -- the action was successfully received, understood, and accepted ; | |||
</t> | </dd> | |||
<dt>3xx:</dt> | ||||
<t hangText="3xx:"> | <dd> | |||
Redirection -- further action needs to be taken in order to complete the request; | Redirection -- further action needs to be taken in order to complete the request; | |||
</t> | </dd> | |||
<dt>4xx:</dt> | ||||
<t hangText="4xx:"> | <dd> | |||
Request Failure -- the request contains bad syntax or cannot be fulfilled at this server; | Request Failure -- the request contains bad syntax or cannot be fulfilled at this server; | |||
</t> | </dd> | |||
<dt>5xx:</dt> | ||||
<t hangText="5xx:"> | <dd> | |||
Server Error -- the server failed to fulfill an apparently valid request | Server Error -- the server failed to fulfill an apparently valid request | |||
" | ; | |||
</t> | </dd> | |||
<dt>6xx:</dt> | ||||
<t hangText="6xx:"> | <dd> | |||
Global Failure -- the request cannot be fulfilled at any server" | Global Failure -- the request cannot be fulfilled at any server. | |||
</t> | </dd> | |||
</list></t> | </dl> | |||
<t> | ||||
<t> | The status codes are the same as described in HTTP <xref target="RFC7231" for | |||
The status codes are the same described in HTTP (RFC 7231 <xref target="ref-2 | mat="default"/>. In | |||
"/>). In | ||||
the same way as HTTP, Q4S applications are not required to | the same way as HTTP, Q4S applications are not required to | |||
understand the meaning of all registered status codes, though such | understand the meaning of all registered status codes, though such | |||
understanding is obviously desirable. However, applications MUST | understanding is obviously desirable. However, applications <bcp14>MUST</bcp1 4> | |||
understand the class of any status code, as indicated by the first | understand the class of any status code, as indicated by the first | |||
digit, and treat any unrecognized response as being equivalent to | digit, and treat any unrecognized response as being equivalent to | |||
the x00 status code of that class.</t> | the x00 status code of that class.</t> | |||
<t> | ||||
<t> | The Q4S-ALERT, Q4S-RECOVERY, and CANCEL requests do not have to be | |||
The Q4S-ALERT, Q4S-RECOVERY and CANCEL requests do not have to be | responded to. However, after receiving a Q4S-ALERT, Q4S-RECOVERY, or | |||
responded. However, after receiving a Q4S-ALERT, Q4S-RECOVERY or | CANCEL request, the server <bcp14>SHOULD</bcp14> send a Q4S-ALERT, Q4S-RECOVE | |||
CANCEL request, the server SHOULD send a Q4S-ALERT, Q4S-RECOVERY | RY, | |||
or CANCEL request to the client</t> | or CANCEL request to the client.</t> | |||
</section> | ||||
</section> | <section anchor="sec-4.3" numbered="true" toc="default"> | |||
<name>Header Fields</name> | ||||
<section title="Header Fields" anchor="section-4.3"><t> | <t> | |||
Q4S header fields are identical to HTTP header fields in both | Q4S header fields are identical to HTTP header fields in both | |||
syntax and semantics.</t> | syntax and semantics.</t> | |||
<t> | ||||
<t> | ||||
Some header fields only make sense in requests or responses. These | Some header fields only make sense in requests or responses. These | |||
are called request header fields and response header fields, | are called request header fields and response header fields, | |||
respectively. If a header field appears in a message not matching | respectively. If a header field appears in a message that does not match | |||
its category (such as a request header field in a response), it | its category (such as a request header field in a response), it | |||
MUST be ignored.</t> | <bcp14>MUST</bcp14> be ignored.</t> | |||
<section anchor="sec-4.3.1" numbered="true" toc="default"> | ||||
<section title="Common Q4S Header Fields" anchor="section-4.3.1"> | <name>Common Q4S Header Fields</name> | |||
<t> These fields may appear in request and response messages. | ||||
<t> These fields may appear in Request and Response messages. | </t> | |||
<dl newline="false" spacing="normal" indent="6"> | ||||
<list style="hanging" hangIndent="6"> | <dt>Session-Id:</dt> | |||
<t hangText="Session-Id:">the value for this header is the same session id | <dd>the value for this header field is the same sess-id | |||
used in SDP (embedded in "o" SDP parameter) and is assigned | used in SDP (embedded in the SDP "o=" line) and is assigned | |||
by the server. The messages without SDP MUST include this | by the server. The messages without SDP <bcp14>MUST</bcp14> include this | |||
header. If a message has and SDP body, this header is | header field. If a message has an SDP body, this header field is | |||
optional. The method of <session id> allocation is up to the | optional. The method of sess-id allocation is up to the | |||
creating tool, but it is suggested that a UTC timestamp be | creating tool, but it is suggested that a UTC timestamp be | |||
used to ensure uniqueness.</t> | used to ensure uniqueness.</dd> | |||
<dt>Sequence-Number:</dt> | ||||
<t hangText="Sequence-Number:">sequential and cyclic positive integer | <dd>sequential and cyclic positive integer | |||
number assigned to PING and BWIDTH messages, and acknowledged | number assigned to PING and BWIDTH messages and acknowledged | |||
in 200 OK responses.</t> | in 200 OK responses.</dd> | |||
<dt>Timestamp:</dt> | ||||
<t hangText="Timestamp:">this optional header contains the system time | <dd>this optional header field contains the system time | |||
(with the best possible accuracy). It indicates the time in | (with the best possible accuracy). It indicates the time in | |||
which the PING request was sent. If this header is present in | which the PING request was sent. If this header field is present in | |||
PING messages, then the 200 OK response messages MUST include | PING messages, then the 200 OK response messages <bcp14>MUST</bcp14> inclu | |||
this value.</t> | de | |||
this value.</dd> | ||||
<t hangText="Stage:">this is used in client's READY requests and server's | <dt>Stage:</dt> | |||
<dd>this is used in the client's READY requests and the server's | ||||
200 OK responses during the Negotiation and Continuity phases | 200 OK responses during the Negotiation and Continuity phases | |||
in order to synchronize the initiation of the measurements. | in order to synchronize the initiation of the measurements. | |||
Example: Stage: 0</t> | Example: Stage: 0</dd> | |||
</dl> | ||||
</list> | </section> | |||
</t> | <section anchor="sec-4.3.2" numbered="true" toc="default"> | |||
<name>Specific Q4S Request Header Fields</name> | ||||
</section> | <t> | |||
<section title="Specific Q4S Request Header Fields" anchor="section-4.3.2 | ||||
"><t> | ||||
In addition to HTTP header fields, these are the specific Q4S | In addition to HTTP header fields, these are the specific Q4S | |||
request header fields</t> | request header fields:</t> | |||
<dl newline="false" spacing="normal" indent="6"> | ||||
<t><list style="symbols"><t>User-Agent: this header contains information | <dt>User-Agent:</dt> | |||
about the | <dd>this header field contains information about the | |||
implementation of the user agent. This is for statistical | implementation of the user agent. This is for statistical | |||
purposes, the tracing of protocol violations, and the | purposes, the tracing of protocol violations, and the | |||
automated recognition of user agents for the sake of | automated recognition of user agents for the sake of | |||
tailoring responses to avoid particular user agent | tailoring responses to avoid particular user agent | |||
limitations. User agents SHOULD include this field with | limitations. User agents <bcp14>SHOULD</bcp14> include this field with | |||
requests. The field MAY contain multiple product tokens and | requests. The field <bcp14>MAY</bcp14> contain multiple product tokens and | |||
comments identifying the agent and any sub-products which | comments identifying the agent and any sub-products that | |||
form a significant part of the user agent. By convention, the | form a significant part of the user agent. By convention, the | |||
product tokens are listed in order of their significance for | product tokens are listed in order of their significance for | |||
identifying the application.</t> | identifying the application.</dd> | |||
<dt>Signature:</dt> | ||||
<t>Signature: this header contains a digital signature that can | <dd><t>this header field contains a digital signature that can | |||
be used by the network, actuator or policy server to validate | be used by the network, Actuator, or policy server to validate | |||
the SDP, preventing security attacks. The signature is an | the SDP, preventing security attacks. The Signature is an | |||
optional header generated by the server according to the pre-agreed securi | optional header field generated by the server according to the | |||
ty policies between the Application Content | pre-agreed security policies between the Application Content | |||
Provider and the ISP. For example, a hash algorithm and | Provider and the ISP. For example, a hash algorithm and | |||
encryption method such as SHA256 (RFC 4634 <xref target="ref-14"/>) and RS | encryption method such as SHA256 <xref target="RFC6234" format="default"/> | |||
A (RFC | and RSA <xref target="RFC8017" format="default"/> based on the server cert | |||
8017 <xref target="ref-15"/>) based on the server certificate could be use | ificate could be used. | |||
d. | ||||
This certificate is supposed to be delivered by a | This certificate is supposed to be delivered by a | |||
Certification Authority (CA) or policy owner to the server. | Certification Authority (CA) or policy owner to the server. | |||
The signature is applied to the SDP body. | The signature is applied to the SDP body.</t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Signature= RSA ( SHA256 (<sdp>), <certificate> ) | Signature= RSA ( SHA256 (<sdp>), <certificate> ) | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t>If the Signature header field is not present, other validation | |||
mechanisms | ||||
If the signature is not present, other validation mechanism | <bcp14>MAY</bcp14> be implemented in order to provide assured quality with | |||
MAY be implemented in order to provide assured quality with | ||||
security and control. | security and control. | |||
</t> | </t> | |||
</dd> | ||||
<t>Measurements: this header carries the measurements of the | <dt>Measurements:</dt> | |||
<dd><t>this header field carries the measurements of the | ||||
quality parameters in PING and BWIDTH requests. The format | quality parameters in PING and BWIDTH requests. The format | |||
is: | is: </t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | Measurements: "l=" " "|[0..9999] ", j=" " "|[0..9999] ", pl=" | |||
Measurements: "l=" " "|[0..9999] ", j=" " "|[0..9999] ", pl=" | " "|[0.00 .. 100.00] ", bw=" " "|[0..999999] | |||
" "|[0.00 .. 100.00] ", bw=" " "|[0..999999] | ]]></sourcecode> | |||
]]></artwork> | <t> | |||
</figure> | ||||
Where "l" stands for latency followed by the measured value | Where "l" stands for latency followed by the measured value | |||
(in milliseconds)or an empty space, "j" stands for jitter | (in milliseconds) or an empty space, "j" stands for jitter | |||
followed by the measured value (in milliseconds) or an empty | followed by the measured value (in milliseconds) or an empty | |||
space, "pl" stands for packetloss followed by the measured | space, "pl" stands for packet loss followed by the measured | |||
value (in percentage with two decimals) or an empty space | value (in percentage with two decimals) or an empty space, | |||
and "bw" stands for bandwidth followed by the measured value | and "bw" stands for bandwidth followed by the measured value | |||
(in kbps) or an empty space.</t> | (in kbps) or an empty space.</t> | |||
</dd> | ||||
</list> | </dl> | |||
</t> | </section> | |||
<section anchor="sec-4.3.3" numbered="true" toc="default"> | ||||
</section> | <name>Specific Q4S Response Header Fields</name> | |||
<dl newline="false" spacing="normal" indent="6"> | ||||
<section title="Specific Q4S Response Header Fields" anchor="section-4.3. | <dt>Expires:</dt> | |||
3"><t><list style="symbols"><t>Expires: its purpose is to provide a sanity check | <dd><t>its purpose is to provide a sanity check and allow | |||
and allow | ||||
the server to close inactive sessions. If the client does not | the server to close inactive sessions. If the client does not | |||
send a new request before the expiration time, the server MAY | send a new request before the expiration time, the server <bcp14>MAY</bcp1 | |||
close the session. The value MUST be an integer and the | 4> | |||
measurement units are milliseconds.<vspace blankLines="1"/> | close the session. The value <bcp14>MUST</bcp14> be an integer, and the | |||
In order to keep the session open the server MUST send a Q4S | measurement units are milliseconds.</t> | |||
alert before the session expiration (Expires header), with | <t> | |||
In order to keep the session open, the server <bcp14>MUST</bcp14> send a | ||||
Q4S | ||||
alert before the session expiration (Expires header field), with | ||||
the same quality levels and an alert cause of "keep-alive". | the same quality levels and an alert cause of "keep-alive". | |||
The purpose of this alert is to avoid TCP sockets (which were | The purpose of this alert is to avoid TCP sockets, which were | |||
opened with READY message) from being closed, specially in | opened with READY message, from being closed, specially in | |||
NAT scenarios. | NAT scenarios.</t> | |||
</t> | </dd> | |||
</dl> | ||||
</list> | </section> | |||
</t> | </section> | |||
<section anchor="sec-4.4" numbered="true" toc="default"> | ||||
</section> | <name>Bodies</name> | |||
<t> | ||||
</section> | ||||
<section title="Bodies" anchor="section-4.4"><t> | ||||
Requests, including new requests defined in extensions to this | Requests, including new requests defined in extensions to this | |||
specification, MAY contain message bodies unless otherwise noted. | specification, <bcp14>MAY</bcp14> contain message bodies unless otherwise not ed. | |||
The interpretation of the body depends on the request method.</t> | The interpretation of the body depends on the request method.</t> | |||
<t> | ||||
<t> | ||||
For response messages, the request method and the response status | For response messages, the request method and the response status | |||
code determine the type and interpretation of any message body. | code determine the type and interpretation of any message body. | |||
All responses MAY include a body.</t> | All responses <bcp14>MAY</bcp14> include a body.</t> | |||
<t> | ||||
<t> | The Internet media type of the message body <bcp14>MUST</bcp14> be given by t | |||
The Internet media type of the message body MUST be given by the | he | |||
Content-Type header field.</t> | Content-Type header field.</t> | |||
<section anchor="sec-4.4.1" numbered="true" toc="default"> | ||||
<section title="Encoding" anchor="section-4.4.1"><t> | <name>Encoding</name> | |||
The body MUST NOT be compressed. This mechanism is valid for | <t> | |||
other protocols such as HTTP and SIP (RFC 3261 <xref target="ref-22"/>), but | The body <bcp14>MUST NOT</bcp14> be compressed. This mechanism is valid for | |||
a compression/coding scheme will limit certain logical | other protocols such as HTTP and SIP <xref target="RFC3261" format="default"/ | |||
implementations of the way the request is parsed, thus, making the | >, | |||
protocol concept more implementation dependent. In addition, | but a compression/coding scheme will limit the way the request | |||
is parsed to certain logical implementations, thus making | ||||
the protocol concept more implementation dependent. In addition, the | ||||
bandwidth calculation may not be valid if compression is used. | bandwidth calculation may not be valid if compression is used. | |||
Therefore, the HTTP request header "Accept-Encoding" cannot be | Therefore, the HTTP Accept-Encoding request header field cannot be | |||
used in Q4S with different values than "identity" and if it is | used in Q4S with values different from "identity", and if it is | |||
present in a request, the server MUST ignore it. In addition, the | present in a request, the server <bcp14>MUST</bcp14> ignore it. In addition, | |||
response header "Content-Encoding" is optional, but if present, | the | |||
response header field Content-Encoding is optional, but if present, | ||||
the unique permitted value is "identity".</t> | the unique permitted value is "identity".</t> | |||
<t> | ||||
<t> | The body length in bytes <bcp14>MUST</bcp14> be provided by the Content-Lengt | |||
The body length in bytes MUST be provided by the Content-Length | h | |||
header field. The "chunked" transfer encoding of HTTP/1.1 MUST NOT | header field. The "chunked" transfer encoding of HTTP/1.1 <bcp14>MUST NOT</bc | |||
be used for Q4S (Note: The chunked encoding modifies the body of a | p14> | |||
be used for Q4S.</t> | ||||
<aside><t>Note: The chunked encoding modifies the body of a | ||||
message in order to transfer it as a series of chunks, each one | message in order to transfer it as a series of chunks, each one | |||
with its own size indicator.)</t> | with its own size indicator.</t></aside> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec-5" numbered="true" toc="default"> | |||
<name>Q4S Method Definitions</name> | ||||
</section> | <t> | |||
<section title="Q4S Method Definitions" anchor="section-5"><t> | ||||
The Method token indicates the method to be performed on the | The Method token indicates the method to be performed on the | |||
resource identified by the Request-URI. The method is case-sensitive.</t> | resource identified by the Request-URI. The method is case sensitive.</t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | Method = "BEGIN" | "READY" | "PING" | "BWIDTH" | | |||
Method = "BEGIN" | "READY" | "PING" | "BWIDTH" | | "Q4S-ALERT" | "Q4S-RECOVERY" | "CANCEL" | extension-method | |||
"Q4S-ALERT" | "Q4S-RECOVERY" | "CANCEL" | | ||||
extension-method | ||||
extension-method = token | extension-method = token | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | ||||
The list of methods allowed by a resource can be specified in an | The list of methods allowed by a resource can be specified in an | |||
"Allow" header field (RFC 7231 <xref target="ref-2"/>). The return code of th e | Allow header field <xref target="RFC7231" format="default"/>. The return code of the | |||
response always notifies the client when a method is currently | response always notifies the client when a method is currently | |||
allowed on a resource, since the set of allowed methods can change | allowed on a resource, since the set of allowed methods can change | |||
dynamically. Any server application SHOULD return the status code | dynamically. Any server application <bcp14>SHOULD</bcp14> return the status c ode | |||
405 (Method Not Allowed) if the method is known, but not allowed | 405 (Method Not Allowed) if the method is known, but not allowed | |||
for the requested resource, and 501 (Not Implemented) if the | for the requested resource, and 501 (Not Implemented) if the | |||
method is unrecognized or not implemented by the server.</t> | method is unrecognized or not implemented by the server.</t> | |||
<section anchor="sec-5.1" numbered="true" toc="default"> | ||||
<section title="BEGIN" anchor="section-5.1"><t> | <name>BEGIN</name> | |||
<t> | ||||
The BEGIN method requests information from a resource identified | The BEGIN method requests information from a resource identified | |||
by a Q4S URI. The semantics of this method is the starting of a | by a Q4S URI. The purpose of this method is to start the | |||
quality session.</t> | quality session.</t> | |||
<t> | ||||
<t> | This method is used only during the Handshake phase to retrieve | |||
This method is only used during the handshake phase to retrieve | the SDP containing the sess-id and all quality and operation | |||
the SDP containing session id and all quality and operation | ||||
parameters for the desired application to run.</t> | parameters for the desired application to run.</t> | |||
<t> | ||||
<t> | ||||
When a BEGIN message is received by the server, any current | When a BEGIN message is received by the server, any current | |||
quality session MUST be cancelled, and a new session should be | quality session <bcp14>MUST</bcp14> be canceled, and a new session should be | |||
created.</t> | created.</t> | |||
<t> | ||||
<t> | ||||
The response to a Q4S BEGIN request is not cacheable.</t> | The response to a Q4S BEGIN request is not cacheable.</t> | |||
</section> | ||||
</section> | <section anchor="sec-5.2" numbered="true" toc="default"> | |||
<name>READY</name> | ||||
<section title="READY" anchor="section-5.2"><t> | <t> | |||
The READY method is used to synchronize the starting time for | The READY method is used to synchronize the starting time for the | |||
sending of PING and BWIDTH messages over UDP between clients and | sending of PING and BWIDTH messages over UDP between clients and | |||
servers. The stage header included in this method is mandatory.</t> | servers. Including the Stage header field in this method is mandatory.</t> | |||
<t> | ||||
<t> | This message is used only in Negotiation and Continuity phases, | |||
This message is only used in negotiation and continuity phases, | and only just before making a measurement. Otherwise (outside of this | |||
and only just before making a measurement. Otherwise (out of this | context), the server <bcp14>MUST</bcp14> ignore this method.</t> | |||
context), the server MUST ignore this method.</t> | </section> | |||
<section anchor="sec-5.3" numbered="true" toc="default"> | ||||
</section> | <name>PING</name> | |||
<t> | ||||
<section title="PING" anchor="section-5.3"><t> | This message is used during the Negotiation and Continuity phases | |||
This message is used during the negotiation and continuity phases | to measure the RTT and jitter of a session. The message <bcp14>MUST</bcp14> b | |||
to measure the RTT and jitter of a session. The message MUST be | e | |||
sent only over UDP ports.</t> | sent only over UDP ports.</t> | |||
<t> | ||||
<t> | ||||
The fundamental difference between the PING and BWIDTH requests is | The fundamental difference between the PING and BWIDTH requests is | |||
reflected in the different measurements achieved with them. PING | reflected in the different measurements achieved with them. PING | |||
is a short message, and MUST be answered in order to measure RTT | is a short message, and it <bcp14>MUST</bcp14> be answered in order to measur | |||
and jitter, whereas BWIDTH is a long message and MUST NOT be | e RTT | |||
and jitter, whereas BWIDTH is a long message and <bcp14>MUST NOT</bcp14> be | ||||
answered.</t> | answered.</t> | |||
<t> | ||||
<t> | PING is a request method that can be originated by either the client or | |||
PING is a request method that can be originated by client but also | the server. The client <bcp14>MUST</bcp14> also answer the server PING messag | |||
by server. Client MUST also answer the server PING messages, | es, | |||
assuming a "server role" for these messages during measurement | assuming a "server role" for these messages during the measurement | |||
process.</t> | process.</t> | |||
<t> | ||||
<t> | Including the Measurements header field in this method is mandatory, and | |||
The Measurements header included in this method is mandatory, and | provides updated measurements values for latency, jitter, and | |||
provides updated measurements values for latency, jitter and | ||||
packet loss to the counterpart.</t> | packet loss to the counterpart.</t> | |||
</section> | ||||
</section> | <section anchor="sec-5.4" numbered="true" toc="default"> | |||
<name>BWIDTH</name> | ||||
<section title="BWIDTH" anchor="section-5.4"><t> | <t> | |||
This message is used only during the Negotiation phase to measure | This message is used only during the Negotiation phase to measure | |||
the bandwidth and packet loss of a session. The message MUST be | the bandwidth and packet loss of a session. The message <bcp14>MUST</bcp14> b e | |||
sent only over UDP ports.</t> | sent only over UDP ports.</t> | |||
<t> | ||||
<t> | BWIDTH is a request method that can be originated by either the client | |||
BWIDTH is a request method that can be originated by the client | or the server. Both client and server <bcp14>MUST NOT</bcp14> answer | |||
but also by server. Both (client and server) MUST NOT answer | ||||
BWIDTH messages.</t> | BWIDTH messages.</t> | |||
<t> | ||||
<t> | Including the Measurements header field in this method is mandatory and | |||
The Measurements header included in this method is mandatory and | ||||
provides updated measurements values for bandwidth and packet loss | provides updated measurements values for bandwidth and packet loss | |||
to the counterpart.</t> | to the counterpart.</t> | |||
</section> | ||||
</section> | <section anchor="sec-5.5" numbered="true" toc="default"> | |||
<name>Q4S-ALERT</name> | ||||
<section title="Q4S-ALERT" anchor="section-5.5"><t> | <t> | |||
This is the request message that Q4S generates when the | This is the request message that Q4S generates when the | |||
measurements indicate that quality constraints are being violated. | measurements indicate that quality constraints are being violated. | |||
It is used during the negotiation and continuity phases.</t> | It is used during the Negotiation and Continuity phases.</t> | |||
<t> | ||||
<t> | ||||
This informative message indicates that the user experience is | This informative message indicates that the user experience is | |||
being degraded and includes the details of the problem (bandwidth, | being degraded and includes the details of the problem (bandwidth, | |||
jitter, packet loss measurements). The Q4S-ALERT message does not | jitter, packet loss measurements). The Q4S-ALERT message does not | |||
contain any detail on the actions to be taken, which depends on | contain any detail on the actions to be taken, which depend on | |||
the agreements between all involved parties.</t> | the agreements between all involved parties.</t> | |||
<t> | ||||
<t> | Unless there is an error condition, an answer to a Q4S-ALERT | |||
Q4S-ALERT request does not have to be answered with a response | request is optional and is formatted as a request Q4S-ALERT message. | |||
message unless there is an error condition, but with an answer | If there is an error condition, then a response message is sent. | |||
formatted as a request Q4S-ALERT message. The response to a Q4S-ALERT request | The response to a Q4S-ALERT request is not cacheable.</t> | |||
is not cacheable.</t> | <t> | |||
This method <bcp14>MUST</bcp14> be initiated by the server in both alerting | ||||
<t> | modes. In the Q4S-aware-network alerting mode, the Q4S-ALERT messages | |||
This method MUST be initiated by the server in both alerting | are sent by the server to the client, advising the | |||
modes. In Q4S-aware-network alerting mode, the Q4S-ALERT messages | network to react by itself. In the Reactive alerting mode, alert | |||
are fired by the server and sent to the client, advising the | ||||
network to react by itself. In Reactive alerting mode, alert | ||||
notifications are triggered by the server stack and sent to the | notifications are triggered by the server stack and sent to the | |||
Actuator(see Figure1 "Reactive Scenario").</t> | Actuator (see <xref target="ref-reactive-scenario" format="default"/>, "React | |||
ive Scenario").</t> | ||||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Client----q4s----SERVER STACK--->ACTUATOR-->APP OR POLICY SERVER | Client----q4s----SERVER STACK--->ACTUATOR-->APP OR POLICY SERVER | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
<t> | ||||
The way in which the server stack notifies the Actuator is | The way in which the server stack notifies the Actuator is | |||
implementation dependent, and the communication between the | implementation dependent, and the communication between the | |||
Actuator and the network policy server is defined by the protocol | Actuator and the network policy server is defined by the protocol | |||
and API that the policy server implements.</t> | and API that the policy server implements.</t> | |||
</section> | ||||
</section> | <section anchor="sec-5.6" numbered="true" toc="default"> | |||
<name>Q4S-RECOVERY</name> | ||||
<section title="Q4S-RECOVERY" anchor="section-5.6"><t> | <t> | |||
This is the request message that Q4S generates when the | This is the request message that Q4S generates when the | |||
measurements indicate that quality constraints were being violated | measurements indicate that quality constraints, which had been violated, | |||
but they have been fulfilled during a period of time already | have been fulfilled during a period of time | |||
(recovery pause). It is used during the negotiation and continuity | ("recovery-pause"). It is used during the Negotiation and Continuity | |||
phases.</t> | phases.</t> | |||
<t> | ||||
<t> | This informative message indicates that the "qos-level" could be | |||
This informative message indicates that the qos-level could be | increased gradually until the initial "qos-level" is recovered (the | |||
increased gradually until the initial qos-level is recovered (the | "qos-level" established at the beginning of the session that was | |||
qos-level established at the beginning os the session of that was | decreased during violation of constraints. See <xref target="sec-7.9" format= | |||
decreased during violation of constraints). The Q4S-RECOVERY | "default"/>). | |||
The Q4S-RECOVERY | ||||
message does not contain any detail on the actions to be taken, | message does not contain any detail on the actions to be taken, | |||
which depends on the agreements between all involved parties.</t> | which depends on the agreements between all involved parties.</t> | |||
<t> | ||||
<t> | The answer to a Q4S-RECOVERY request is formatted as a request | |||
Q4S-RECOVERY request MUST NOT be answered with a response message | Q4S-RECOVERY message. A Q4S-RECOVERY request <bcp14>MUST NOT</bcp14> be answe | |||
unless there is an error condition, but with an answer formatted | red | |||
as a request Q4S-RECOVERY message. The response to a Q4S-RECOVERY | with a response message unless there is an error condition. | |||
request is not cacheable.</t> | The response to a Q4S-RECOVERY request is not cacheable.</t> | |||
<t> | ||||
<t> | Like the Q4S-ALERT message, the Q4S-RECOVERY method is always | |||
As for the Q4S-ALERT message, the Q4S-RECOVERY method is always | initiated by the server in both alerting modes. In the | |||
initiated by the server in both alerting modes. In Q4S-aware-network alerting | Q4S-aware-network alerting mode, the Q4S-RECOVERY messages are sent by the | |||
mode, the Q4S-RECOVERY messages are fired by the | server to the client, advising the network to react by | |||
server and sent to the client, advising the network to react by | itself. In the Reactive alerting mode, recovery notifications are | |||
itself. In Reactive alerting mode, recovery notifications are | triggered by the server stack and sent to the Actuator (see <xref target="ref | |||
triggered by the server stack and sent to the Actuator(see Figure1 | -reactive-scenario" format="default"/>, | |||
"Reactive Scenario").</t> | "Reactive Scenario").</t> | |||
</section> | ||||
</section> | <section anchor="sec-5.7" numbered="true" toc="default"> | |||
<name>CANCEL</name> | ||||
<section title="CANCEL" anchor="section-5.7"><t> | <t> | |||
The semantics of CANCEL message is the release of the Q4S session | The purpose of the CANCEL message is the release of the Q4S | |||
id and the possible resources assigned to the session. This | Session-Id and the possible resources assigned to the session. This | |||
message could be triggered by Q4S stack or by the application | message could be triggered by the Q4S stack or by the application | |||
using the stack (through an implementation dependent API).</t> | using the stack (through an implementation-dependent API).</t> | |||
<t> | ||||
<t> | ||||
In the same way as Q4S-ALERT, CANCEL must not be answered with a | In the same way as Q4S-ALERT, CANCEL must not be answered with a | |||
response message, but with an answer formatted as a request Q4S-CANCEL messag e.</t> | response message, but with an answer formatted as a request Q4S-CANCEL messag e.</t> | |||
<t> | ||||
<t> | In the Reactive scenario, the server stack <bcp14>MUST</bcp14> react to the Q | |||
In the Reactive scenario, the server stack MUST react to the Q4S | 4S | |||
CANCEL messages received from the client by forwarding a cancel | CANCEL messages received from the client by forwarding a cancel | |||
notification to the Actuator, in order to release possible | notification to the Actuator, in order to release possible | |||
assigned resources for the session (at application or at policy | assigned resources for the session (at the application or at the policy | |||
server). The Actuator MUST answer the cancel notification with a | server). The Actuator <bcp14>MUST</bcp14> answer the cancel notification with | |||
a | ||||
cancel acknowledge towards the server stack, acknowledging the | cancel acknowledge towards the server stack, acknowledging the | |||
reception.</t> | reception.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-6" numbered="true" toc="default"> | ||||
</section> | <name>Response Codes</name> | |||
<t> | ||||
<section title="Response Codes" anchor="section-6"><t> | Q4S response codes are used for TCP and UDP. However, in UDP, only | |||
Q4S response codes are used for TCP and UDP. However, in UDP only | ||||
the response code 200 is used.</t> | the response code 200 is used.</t> | |||
<t> | ||||
<t> | ||||
The receiver of an unknown response code must take a generic | The receiver of an unknown response code must take a generic | |||
action for the received error group (1XX, 2XX, 3XX, 4XX, 5XX, | action for the received error group (1xx, 2xx, 3xx, 4xx, 5xx, | |||
6XX). In case of unknown error group, the expected action should | 6xx). In case of an unknown error group, the expected action should | |||
be the same as with 6XX error group.</t> | be the same as with the 6xx error group.</t> | |||
<section anchor="sec-6.1" numbered="true" toc="default"> | ||||
<section title="100 Trying" anchor="section-6.1"><t> | <name>100 Trying</name> | |||
<t> | ||||
This response indicates that the request has been received by the | This response indicates that the request has been received by the | |||
next-hop server and that some unspecified action is being taken on | next-hop server and that some unspecified action is being taken on | |||
behalf of this request (for example, a database is being | behalf of this request (for example, a database is being | |||
consulted). This response, like all other provisional responses, | consulted). This response, like all other provisional responses, | |||
stops retransmissions of a Q4S-ALERT during the alert-pause time.</t> | stops retransmissions of a Q4S-ALERT during the "alert-pause" time.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.2" numbered="true" toc="default"> | |||
<name>Success 2xx</name> | ||||
<section title="Success 2xx" anchor="section-6.2"><t> | <t> | |||
2xx responses give information about success of a request.</t> | 2xx responses give information about the success of a request.</t> | |||
<section anchor="sec-6.2.1" numbered="true" toc="default"> | ||||
<section title="200 OK" anchor="section-6.2.1"><t> | <name>200 OK</name> | |||
<t> | ||||
The request has succeeded.</t> | The request has succeeded.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-6.3" numbered="true" toc="default"> | ||||
</section> | <name>Redirection 3xx</name> | |||
<t> | ||||
<section title="Redirection 3xx" anchor="section-6.3"><t> | 3xx responses give information about the user's new location or | |||
3xx responses give information about the user's new location, or | ||||
about alternative services that might be able to satisfy the | about alternative services that might be able to satisfy the | |||
request.</t> | request.</t> | |||
<t> | ||||
<t> | The requesting client <bcp14>SHOULD</bcp14> retry the request at the new | |||
The requesting client SHOULD retry the request at the new | ||||
address(es) given by the Location header field.</t> | address(es) given by the Location header field.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4" numbered="true" toc="default"> | |||
<name>Request Failure 4xx</name> | ||||
<section title="Request Failure 4xx" anchor="section-6.4"><t> | <t> | |||
4xx responses are definite failure responses from a particular | 4xx responses are definite failure responses from a particular | |||
server. The client SHOULD NOT retry the same request without | server. The client <bcp14>SHOULD NOT</bcp14> retry the same request without | |||
modification (for example, adding appropriate headers or SDP | modification (for example, adding appropriate header fields or SDP | |||
values). However, the same request to a different server might be | values). However, the same request to a different server might be | |||
successful.</t> | successful.</t> | |||
<section anchor="sec-6.4.1" numbered="true" toc="default"> | ||||
<section title="400 Bad Request" anchor="section-6.4.1"><t> | <name>400 Bad Request</name> | |||
<t> | ||||
The request could not be understood due to malformed syntax. The | The request could not be understood due to malformed syntax. The | |||
Reason-Phrase SHOULD identify the syntax problem in more detail, | Reason-Phrase <bcp14>SHOULD</bcp14> identify the syntax problem in more detai l, | |||
for example, "Missing Sequence-Number header field".</t> | for example, "Missing Sequence-Number header field".</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.2" numbered="true" toc="default"> | |||
<name>404 Not Found</name> | ||||
<section title="404 Not Found" anchor="section-6.4.2"><t> | <t> | |||
The server has definitive information that the user does not exist | The server has definitive information that the user does not exist | |||
at the domain specified in the Request-URI. This status is also | at the domain specified in the Request-URI. This status is also | |||
returned if the domain in the Request-URI does not match any of | returned if the domain in the Request-URI does not match any of | |||
the domains handled by the recipient of the request.</t> | the domains handled by the recipient of the request.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.3" numbered="true" toc="default"> | |||
<name>405 Method Not Allowed</name> | ||||
<section title="405 Method Not Allowed" anchor="section-6.4.3"><t> | <t> | |||
The method specified in the Request-Line is understood, but not | The method specified in the Request-Line is understood, but not | |||
allowed for the address identified by the Request-URI.</t> | allowed for the address identified by the Request-URI.</t> | |||
<t> | ||||
<t> | The response <bcp14>MUST</bcp14> include an Allow header field containing a l | |||
The response MUST include an Allow header field containing a list | ist | |||
of valid methods for the indicated address.</t> | of valid methods for the indicated address.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.4" numbered="true" toc="default"> | |||
<name>406 Not Acceptable</name> | ||||
<section title="406 Not Acceptable" anchor="section-6.4.4"><t> | <t> | |||
The resource identified by the request is only able of generating | The resource identified by the request is only able to generate | |||
response entities that have content characteristics not acceptable | response entities that have content characteristics that are not acceptable | |||
according to the Accept header field sent in the request.</t> | according to the Accept header field sent in the request.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.5" numbered="true" toc="default"> | |||
<name>408 Request Timeout</name> | ||||
<section title="408 Request Timeout" anchor="section-6.4.5"><t> | <t> | |||
The server could not produce a response within a suitable amount | The server could not produce a response within a suitable amount | |||
of time, and the client MAY repeat the request without | of time, and the client <bcp14>MAY</bcp14> repeat the request without | |||
modifications at any later time</t> | modifications at any later time.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.6" numbered="true" toc="default"> | |||
<name>413 Request Entity Too Large</name> | ||||
<section title="413 Request Entity Too Large" anchor="section-6.4.6"><t> | <t> | |||
The server is refusing to process a request because the request | The server is refusing to process a request because the request | |||
entity-body is larger than the one that the server is willing or | entity-body is larger than the one that the server is willing or | |||
able to process. The server MAY close the connection to prevent | able to process. The server <bcp14>MAY</bcp14> close the connection to preven t | |||
the client from continuing the request.</t> | the client from continuing the request.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.7" numbered="true" toc="default"> | |||
<name>414 Request-URI Too Long</name> | ||||
<section title="414 Request-URI Too Long" anchor="section-6.4.7"><t> | <t> | |||
The server is refusing to process the request because the Request-URI is long er than the one that the server accepts.</t> | The server is refusing to process the request because the Request-URI is long er than the one that the server accepts.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.8" numbered="true" toc="default"> | |||
<name>415 Unsupported Media Type</name> | ||||
<section title="415 Unsupported Media Type" anchor="section-6.4.8"><t> | <t> | |||
The server is refusing to process the request because the message | The server is refusing to process the request because the message | |||
body of the request is in a format not supported by the server for | body of the request is in a format not supported by the server for | |||
the requested method. The server MUST return a list of acceptable | the requested method. The server <bcp14>MUST</bcp14> return a list of accepta ble | |||
formats using the Accept, Accept-Encoding, or Accept-Language | formats using the Accept, Accept-Encoding, or Accept-Language | |||
header field, depending on the specific problem with the content.</t> | header field, depending on the specific problem with the content.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.4.9" numbered="true" toc="default"> | |||
<name>416 Unsupported URI Scheme</name> | ||||
<section title="416 Unsupported URI Scheme" anchor="section-6.4.9"><t> | <t> | |||
The server cannot process the request because the scheme of the | The server cannot process the request because the scheme of the | |||
URI in the Request-URI is unknown to the server.</t> | URI in the Request-URI is unknown to the server.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-6.5" numbered="true" toc="default"> | ||||
</section> | <name>Server Failure 5xx</name> | |||
<t> | ||||
<section title="Server Failure 5xx" anchor="section-6.5"><t> | ||||
5xx responses are failure responses given when a server itself is | 5xx responses are failure responses given when a server itself is | |||
having trouble.</t> | having trouble.</t> | |||
<section anchor="sec-6.5.1" numbered="true" toc="default"> | ||||
<section title="500 Server Internal Error" anchor="section-6.5.1"><t> | <name>500 Server Internal Error</name> | |||
<t> | ||||
The server encountered an unexpected condition that prevented it | The server encountered an unexpected condition that prevented it | |||
from fulfilling the request. The client MAY display the specific | from fulfilling the request. The client <bcp14>MAY</bcp14> display the specif | |||
error condition and MAY retry the request after several seconds.</t> | ic | |||
error condition and <bcp14>MAY</bcp14> retry the request after several second | ||||
</section> | s.</t> | |||
</section> | ||||
<section title="501 Not Implemented" anchor="section-6.5.2"><t> | <section anchor="sec-6.5.2" numbered="true" toc="default"> | |||
<name>501 Not Implemented</name> | ||||
<t> | ||||
The server does not support the functionality required to fulfill | The server does not support the functionality required to fulfill | |||
the request. This is the appropriate response when a Server does | the request. This is the appropriate response when a server does | |||
not recognize the request method and it is not capable of | not recognize the request method, and it is not capable of | |||
supporting it for any user.</t> | supporting it for any user.</t> | |||
<t> | ||||
<t> | ||||
Note that a 405 (Method Not Allowed) is sent when the server | Note that a 405 (Method Not Allowed) is sent when the server | |||
recognizes the request method, but that method is not allowed or | recognizes the request method, but that method is not allowed or | |||
supported.</t> | supported.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.5.3" numbered="true" toc="default"> | |||
<name>503 Service Unavailable</name> | ||||
<section title="503 Service Unavailable" anchor="section-6.5.3"><t> | <t> | |||
The server is temporarily unable to process the request due to a | The server is temporarily unable to process the request due to a | |||
temporary overloading or maintenance of the server. The server MAY | temporary overloading or maintenance of the server. The server <bcp14>MAY</bc p14> | |||
indicate when the client should retry the request in a Retry-After | indicate when the client should retry the request in a Retry-After | |||
header field. If no Retry-After is given, the client MUST act as | header field. If no Retry-After is given, the client <bcp14>MUST</bcp14> act as | |||
if it had received a 500 (Server Internal Error) response.</t> | if it had received a 500 (Server Internal Error) response.</t> | |||
<t> | ||||
<t> | A client receiving a 503 (Service Unavailable) <bcp14>SHOULD</bcp14> attempt | |||
A client receiving a 503 (Service Unavailable) SHOULD attempt to | to | |||
forward the request to an alternate server. It SHOULD NOT forward | forward the request to an alternate server. It <bcp14>SHOULD NOT</bcp14> forw | |||
ard | ||||
any other requests to that server for the duration specified in | any other requests to that server for the duration specified in | |||
the Retry-After header field, if present.</t> | the Retry-After header field, if present.</t> | |||
<t> | ||||
<t> | Servers <bcp14>MAY</bcp14> refuse the connection or drop the request instead | |||
Servers MAY refuse the connection or drop the request instead of | of | |||
responding with 503 (Service Unavailable).</t> | responding with 503 (Service Unavailable).</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.5.4" numbered="true" toc="default"> | |||
<name>504 Server Time-Out</name> | ||||
<section title="504 Server Time-out" anchor="section-6.5.4"><t> | <t> | |||
The server did not receive a timely response from an external | The server did not receive a timely response from an external | |||
server it accessed in attempting to process the request.</t> | server it accessed in attempting to process the request.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.5.5" numbered="true" toc="default"> | |||
<name>505 Version Not Supported</name> | ||||
<section title="505 Version Not Supported" anchor="section-6.5.5"><t> | <t> | |||
The server does not support, or refuses to support, the Q4S | The server does not support, or refuses to support, the Q4S | |||
protocol version that was used in the request. The server is | protocol version that was used in the request. The server is | |||
indicating that it is unable or unwilling to complete the request | indicating that it is unable or unwilling to complete the request | |||
using the same major version as the client, other than with this | using the same major version as the client, other than with this | |||
error message.</t> | error message.</t> | |||
<t> | ||||
<t> | In the case that the Q4S version is not supported, this error may be | |||
In the case that Q4S version is not supported, this error may be | sent by the server in the Handshake phase just after receiving the | |||
sent by the server in handshake phase just after receiving the | ||||
first BEGIN message from client.</t> | first BEGIN message from client.</t> | |||
</section> | ||||
</section> | <section anchor="sec-6.5.6" numbered="true" toc="default"> | |||
<name>513 Message Too Large</name> | ||||
<section title="513 Message Too Large" anchor="section-6.5.6"><t> | <t> | |||
The server was unable to process the request since the message | The server was unable to process the request because the message | |||
length exceeded its capabilities.</t> | length exceeded its capabilities.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-6.6" numbered="true" toc="default"> | ||||
</section> | <name>Global Failures 6xx</name> | |||
<t> | ||||
<section title="Global Failures 6xx" anchor="section-6.6"><t> | ||||
6xx responses indicate that a server has definitive information | 6xx responses indicate that a server has definitive information | |||
about a particular policy not satisfied for processing the | about a particular policy not satisfied for processing the | |||
request.</t> | request.</t> | |||
<section anchor="sec-6.6.1" numbered="true" toc="default"> | ||||
<section title="600 session does not exist" anchor="section-6.6.1"><t> | <name>600 Session Does Not Exist</name> | |||
The Session-Id is not valid</t> | <t> | |||
The Session-Id is not valid.</t> | ||||
</section> | </section> | |||
<section anchor="sec-6.6.2" numbered="true" toc="default"> | ||||
<section title="601 quality level not allowed" anchor="section-6.6.2"><t> | <name>601 Quality Level Not Allowed</name> | |||
The QOS level requested is not allowed for the pair client/server</t> | <t> | |||
The "qos-level" requested is not allowed for the client/server pair.</t> | ||||
</section> | </section> | |||
<section anchor="sec-6.6.3" numbered="true" toc="default"> | ||||
<section title="603 Session not allowed" anchor="section-6.6.3"><t> | <name>603 Session Not Allowed</name> | |||
The session is not allowed due to some policy (number of sessions | <t> | |||
allowed for the server is exceeded, or the time band of the Q4S-ALERT is not | The session is not allowed due to some policy (the number of sessions | |||
allowed for the pair client/server, etc.).</t> | allowed for the server is exceeded, or the time band of the Q4S-ALERT | |||
is not allowed for the client/server pair, etc.).</t> | ||||
</section> | </section> | |||
<section anchor="sec-6.6.4" numbered="true" toc="default"> | ||||
<section title="604 authorization not allowed" anchor="section-6.6.4"><t> | <name>604 Authorization Not Allowed</name> | |||
<t> | ||||
The policy server does not authorize the Q4S-ALERT quality session | The policy server does not authorize the Q4S-ALERT quality session | |||
improvement operation due to an internal or external reason.</t> | improvement operation due to an internal or external reason.</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec-7" numbered="true" toc="default"> | |||
<name>Protocol</name> | ||||
</section> | <t> | |||
<section title="Protocol" anchor="section-7"><t> | ||||
This section describes the measurement procedures, the SDP | This section describes the measurement procedures, the SDP | |||
structure of the Q4S messages, the different Q4S protocol phases | structure of the Q4S messages, the different Q4S protocol phases, | |||
and the messages exchanged in them.</t> | and the messages exchanged in them.</t> | |||
<section anchor="sec-7.1" numbered="true" toc="default"> | ||||
<section title="Protocol Phases" anchor="section-7.1"><t> | <name>Protocol Phases</name> | |||
All elements of the IP network contribute to the quality in | <t> | |||
terms of latency, jitter, bandwidth and packet loss. All these | All elements of the IP network contribute to quality in | |||
terms of latency, jitter, bandwidth, and packet loss. All these | ||||
elements have their own quality policies in terms of priorities, | elements have their own quality policies in terms of priorities, | |||
traffic mode, etc. and each element has its own way to manage the | traffic mode, etc., and each element has its own way to manage the | |||
quality. The purpose of a quality connection is to establish an | quality. The purpose of a quality connection is to establish | |||
end-to-end communication with enough quality for the application | end-to-end communication with enough quality for the application | |||
to function flawlessly.</t> | to function flawlessly.</t> | |||
<t> | ||||
<t> | ||||
To monitor quality constraints of the application, four phases are | To monitor quality constraints of the application, four phases are | |||
defined and can be seen in figure 5:</t> | defined and can be seen in <xref target="ref-session-lifetime-phases" format= | |||
"default"/>:</t> | ||||
<figure title="Session lifetime phases" anchor="ref-session-lifetime-phas | <figure anchor="ref-session-lifetime-phases"> | |||
es"><artwork><![CDATA[ | <name>Session Lifetime Phases</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
| | | | | | |||
| | | | | | |||
| Handshake ---> Negotiation -+--> Continuity ----> Termination | | | Handshake ---> Negotiation -+--> Continuity ----> Termination | | |||
| A | (app start) | (app end) | | | A | (app start) | (app end) | | |||
| | V A V A | | | | V A V A | | |||
| | violated | violated | | | | | violated | violated | | | |||
| | constraints | constraints | | | | | constraints | constraints | | | |||
| | | | |_______| ____| | | | | | | |_______| ____| | | |||
| | | | +-------+ | | | | | | | +-------+ | | | |||
| | | | | | | | | | | | | | |||
| +------+ +---------------------+ | | | +------+ +---------------------+ | | |||
| | | | | | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t><list style="symbols"><t>Handshake phase: in which the server is conta | <dl spacing="normal"> | |||
cted by the | <dt>Handshake phase:</dt><dd>in which the server is contacted by the | |||
client and in the answer message the quality constraints for | client, and in the answer message, the quality constraints for | |||
the application is communicated embedded in an SDP.</t> | the application are communicated in the embedded SDP.</dd> | |||
<dt>Negotiation phase:</dt><dd>in which the quality of the connection | ||||
<t>Negotiation phase: in which the quality of the connection is | is | |||
measured in both directions (latency, jitter, bandwidth and | measured in both directions (latency, jitter, bandwidth, and | |||
packet loss), and Q4S messages may be sent in order to alert | packet loss), and Q4S messages may be sent in order to alert | |||
if the measured quality does not meet the constraints. This | if the measured quality does not meet the constraints. This | |||
phase is iterative until quality constraints are reached, or | phase is iterative until quality constraints are reached, or | |||
the session is cancelled after a number of measurement cycles | the session is canceled after a number of measurement cycles | |||
with consistent violation of the quality constraints. The | with consistent violation of the quality constraints. The | |||
number of measurement cycles executed depends on the qos-level which is in | number of measurement cycles executed depends on the "qos-level", | |||
cremented in each cycle until a maximum qos-level value is reached. Just after r | which is incremented in each cycle until a maximum "qos-level" value | |||
eaching the quality | is reached. Just after reaching the quality | |||
requirements, Q4S provides a simple optional mechanism using | requirements, Q4S provides a simple optional mechanism using | |||
HTTP to start the application.</t> | HTTP to start the application.</dd> | |||
<dt>Continuity phase:</dt><dd>in which quality is continuously measure | ||||
<t>Continuity phase: in which quality is continuously measured. | d. | |||
In this phase the measurements MUST avoid disturbing the | In this phase, the measurements <bcp14>MUST</bcp14> avoid disturbing the | |||
application by consuming network resources. If quality | application by consuming network resources. If quality | |||
constraints are not met, the server stack will notify the | constraints are not met, the server stack will notify the | |||
Actuator with an alert notification. If later the quality | Actuator with an alert notification. If later the quality | |||
improves, the server stack will notify the Actuator, in this | improves, the server stack will notify the Actuator, in this | |||
case with a recovery notification. After several alert | case with a recovery notification. After several alert | |||
notifications with no quality improvements, the Q4S stack | notifications with no quality improvements, the Q4S stack | |||
SHOULD move to Termination phase.</t> | <bcp14>SHOULD</bcp14> move to the Termination phase.</dd> | |||
<dt>Termination phase:</dt><dd>in which the Q4S session is terminated. | ||||
<t>Termination phase: in which the Q4S session is terminated. | The application may be closed also or may not start.</dd> | |||
The application may be closed too or may not start.</t> | </dl> | |||
</section> | ||||
</list> | <section anchor="sec-7.2" numbered="true" toc="default"> | |||
</t> | <name>SDP Structure</name> | |||
<t> | ||||
</section> | ||||
<section title="SDP Structure" anchor="section-7.2"><t> | ||||
The original goal of SDP was to announce necessary information for | The original goal of SDP was to announce necessary information for | |||
the participants and multicast MBONE (Multicast Backbone) | the participants and multicast MBONE (Multicast Backbone) | |||
applications. Right now, its use has been extended to the | applications. Right now, its use has been extended to the | |||
announcement and the negotiation of multimedia sessions. The | announcement and the negotiation of multimedia sessions. The | |||
purpose of Q4S is not to establish media stream sessions, but to | purpose of Q4S is not to establish media stream sessions, but to | |||
monitor a quality connection. This connection may be later used to | monitor a quality connection. This connection may be later used to | |||
establish any type of session including media sessions; Q4S does | establish any type of session including media sessions; Q4S does | |||
not impose any conditions on the type of communication requiring | not impose any conditions on the type of communication requiring | |||
quality parameters.</t> | quality parameters.</t> | |||
<t> | ||||
<t> | ||||
SDP will be used by Q4S to exchange quality constraints and will | SDP will be used by Q4S to exchange quality constraints and will | |||
therefore always have all the media attributes ("m") set to zero.</t> | therefore always have all the media descriptions ("m=") set to zero.</t> | |||
<t> | ||||
<t> | ||||
The SDP embedded in the messages is the container of the quality | The SDP embedded in the messages is the container of the quality | |||
parameters. As these may vary depending on the direction of the | parameters. As these may vary depending on the direction of the | |||
communication (to and from the client) all quality parameters need | communication (to and from the client), all quality parameters need | |||
to specify the uplink and downlink values: <uplink> / <downlink>. | to specify the uplink and downlink values: <uplink> / <downlink> | |||
When one or both of these values are empty, it MUST be understood | (see <xref target="sec-7.5.3" format="default"/> for an example). | |||
When one or both of these values are empty, it <bcp14>MUST</bcp14> be underst | ||||
ood | ||||
as needing no constraint on that parameter and/or that direction.</t> | as needing no constraint on that parameter and/or that direction.</t> | |||
<t> | ||||
<t> | The uplink direction <bcp14>MUST</bcp14> be considered as being the communica | |||
The uplink direction MUST be considered as being the communication | tion | |||
from the client to the server. The downlink direction MUST be | from the client to the server. The downlink direction <bcp14>MUST</bcp14> be | |||
considered as being the communication from the server to the | considered as being the communication from the server to the | |||
client.</t> | client.</t> | |||
<t> | ||||
<t> | ||||
The SDP information can comprise all or some of the following | The SDP information can comprise all or some of the following | |||
parameters shown in the example below. This is an example of an | parameters shown in the example below. This is an example of an | |||
SDP message used by Q4S included in the 200 OK response to a Q4S | SDP message used by Q4S included in the 200 OK response to a Q4S | |||
BEGIN request.</t> | BEGIN request.</t> | |||
<sourcecode type="sdp"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
v=0 | v=0 | |||
o=q4s-UA 53655765 2353687637 IN IP4 192.0.2.33 | o=q4s-UA 53655765 2353687637 IN IP4 192.0.2.33 | |||
s=Q4S | s=Q4S | |||
i=Q4S parameters | i=Q4S parameters | |||
t=0 0 | t=0 0 | |||
a=qos-level:0/0 | a=qos-level:0/0 | |||
a=alerting-mode:Reactive | a=alerting-mode:Reactive | |||
a=alert-pause:5000 | a=alert-pause:5000 | |||
a=public-address:client IP4 198.51.100.51 | a=public-address:client IP4 198.51.100.51 | |||
a=public-address:server IP4 198.51.100.58 | a=public-address:server IP4 198.51.100.58 | |||
skipping to change at line 1770 ¶ | skipping to change at line 1669 ¶ | |||
a=bandwidth:20/6000 | a=bandwidth:20/6000 | |||
a=packetloss:0.50/0.50 | a=packetloss:0.50/0.50 | |||
a=flow:app clientListeningPort TCP/10000-20000 | a=flow:app clientListeningPort TCP/10000-20000 | |||
a=flow:app clientListeningPort UDP/15000-18000 | a=flow:app clientListeningPort UDP/15000-18000 | |||
a=flow:app serverListeningPort TCP/56000 | a=flow:app serverListeningPort TCP/56000 | |||
a=flow:app serverListeningPort UDP/56000 | a=flow:app serverListeningPort UDP/56000 | |||
a=flow:q4s clientListeningPort UDP/55000 | a=flow:q4s clientListeningPort UDP/55000 | |||
a=flow:q4s clientListeningPort TCP/55001 | a=flow:q4s clientListeningPort TCP/55001 | |||
a=flow:q4s serverListeningPort UDP/56000 | a=flow:q4s serverListeningPort UDP/56000 | |||
a=flow:q4s serverListeningPort TCP/56001 | a=flow:q4s serverListeningPort TCP/56001 | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | ||||
As quality constraints may be changed by applications at any time | As quality constraints may be changed by applications at any time | |||
during the Q4S session lifetime, any Q4S 200 OK response sent by | during the Q4S session lifetime, any Q4S 200 OK response sent by | |||
the server to the client in the Negotiation and Continuity phases | the server to the client in the Negotiation and Continuity phases | |||
could also include an SDP body with the new quality requirements | could also include an SDP body with the new quality requirements | |||
stated by the applications from then on. Therefore, in response to | stated by the applications from then on. Therefore, in response to | |||
any PING request sent by the client to the server, the server | any PING request sent by the client to the server, the server | |||
could send a Q4S 200 OK with an SDP message embedded that | could send a Q4S 200 OK with an embedded SDP message that | |||
specifies new quality constraints requested by the application.</t> | specifies new quality constraints requested by the application.</t> | |||
<section anchor="sec-7.2.1" numbered="true" toc="default"> | ||||
<section title=""qos-level" attribute" anchor="section-7.2.1">< | <name>"qos-level" Attribute</name> | |||
t> | <t> | |||
The "qos-level" attribute contains the QoS level for uplink and | The "qos-level" attribute contains the QoS level for uplink and | |||
downlink. Default values are 0 for both directions. The meaning of | downlink. Default values are 0 for both directions. The meaning of | |||
each level is out of scope of Q4S, but a higher level SHOULD | each level is out of scope of Q4S, but a higher level <bcp14>SHOULD</bcp14> | |||
correspond to a better service quality.</t> | correspond to a better service quality.</t> | |||
<t> | ||||
<t> | ||||
Appropriate attribute values: [0..9] "/" [0..9]</t> | Appropriate attribute values: [0..9] "/" [0..9]</t> | |||
<t> | ||||
<t> | ||||
The "qos-level" attribute may be changed during the session | The "qos-level" attribute may be changed during the session | |||
lifetime raising or lowering the value as necessary following the | lifetime, raising or lowering the value as necessary following the | |||
network measurements and the application needs.</t> | network measurements and the application needs.</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.2" numbered="true" toc="default"> | |||
<name>"alerting-mode" Attribute</name> | ||||
<section title=""alerting-mode" attribute" anchor="section-7.2. | <t> | |||
2"><t> | ||||
The "alerting-mode" attribute specifies the player in charge of | The "alerting-mode" attribute specifies the player in charge of | |||
triggering Q4S alerts in case of constraint violation. There are | triggering Q4S alerts in the case of constraint violation. There are | |||
two possible values:</t> | two possible values:</t> | |||
<t> | ||||
<t> | ||||
Appropriate attribute values: <"Q4S-aware-network"|"Reactive"></t> | Appropriate attribute values: <"Q4S-aware-network"|"Reactive"></t> | |||
<dl newline="false" spacing="normal" indent="6"> | ||||
<t><list style="format (%c)"> | <dt>Q4S-aware-network:</dt> <dd>Q4S-ALERT messages are triggered by | |||
<t>Q4S-aware-network: Q4S ALERT messages are triggered by the | the | |||
server to the client. In this case the network is supposed to | server to the client. In this case, the network is supposed to | |||
be Q4S aware, and reacts by itself to these alerts. | be Q4S aware, and reacts by itself to these alerts.</dd> | |||
</t> | <dt> Reactive:</dt> <dd>alert notifications are sent by the server s | |||
tack to | ||||
<t> Reactive: alert notifications are sent by the server stack to | the Actuator. In this case, the network is not Q4S aware, and a | |||
the Actuator. In this case the network is not Q4S aware and a | ||||
specific node (Actuator) is in charge of triggering tuning | specific node (Actuator) is in charge of triggering tuning | |||
mechanisms., either on the network or in the application. | mechanisms, either on the network or in the application. | |||
</t> | </dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | The "alerting-mode" attribute is optional, and if not present, | |||
<t> | ||||
The "alerting-mode" attribute is optional and if not present | ||||
Reactive alerting mode is assumed.</t> | Reactive alerting mode is assumed.</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.3" numbered="true" toc="default"> | |||
<name>"alert-pause" Attribute</name> | ||||
<section title=""alert-pause" attribute" anchor="section-7.2.3" | <t> | |||
><t> | ||||
In the Q4S-aware-network scenario, the "alert-pause" attribute | In the Q4S-aware-network scenario, the "alert-pause" attribute | |||
specifies the amount of time (in milliseconds) the server waits | specifies the amount of time (in milliseconds) the server waits | |||
between consecutive Q4S ALERT messages sent to the client. In the | between consecutive Q4S-ALERT messages sent to the client. In the | |||
Reactive scenario, the "alert-pause" attribute specifies the | Reactive scenario, the "alert-pause" attribute specifies the | |||
amount of time (in milliseconds) the server stack waits between | amount of time (in milliseconds) the server stack waits between | |||
consecutive alert notifications sent to the Actuator. Measurements | consecutive alert notifications sent to the Actuator. Measurements | |||
are not stopped in Negotiation or Continuity Phases during this | are not stopped in Negotiation or Continuity phases during this | |||
period of time, but no Q4S ALERT messages or alert notifications | period of time, but no Q4S-ALERT messages or alert notifications | |||
are fired, even with violated quality constraints, allowing either | are fired, even with violated quality constraints, allowing for either | |||
network reconfigurations or application adjustments.</t> | network reconfigurations or application adjustments.</t> | |||
<t> | ||||
<t> | ||||
Appropriate attribute values: [0..60000]</t> | Appropriate attribute values: [0..60000]</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.4" numbered="true" toc="default"> | |||
<name>"recovery-pause" Attribute</name> | ||||
<section title=""recovery-pause" attribute" anchor="section-7.2 | <t> | |||
.4"><t> | ||||
In the Q4S-aware-network scenario, the "recovery-pause" attribute | In the Q4S-aware-network scenario, the "recovery-pause" attribute | |||
specifies the amount of time (in milliseconds) the server waits | specifies the amount of time (in milliseconds) the server waits | |||
for initiating the qos-level recovery process. Once the recovery | for initiating the "qos-level" recovery process. Once the recovery | |||
process has started, the "recovery-pause" attribute also states | process has started, the "recovery-pause" attribute also states | |||
the amount of time (in milliseconds) between consecutive Q4S-RECOVERY message | the amount of time (in milliseconds) between consecutive Q4S-RECOVERY | |||
s sent by the server to the client (in the Q4S-aware-network scenario), or betwe | messages sent by the server to the client (in the Q4S-aware-network scenario) | |||
en recovery notifications sent by | or between recovery notifications sent by | |||
the server stack to the Actuator (in the Reactive scenario).</t> | the server stack to the Actuator (in the Reactive scenario).</t> | |||
<t> | ||||
<t> | ||||
Appropriate attribute values: [0..60000]</t> | Appropriate attribute values: [0..60000]</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.5" numbered="true" toc="default"> | |||
<name>"public-address" Attributes</name> | ||||
<section title=""public-address" attributes" anchor="section-7. | <t> | |||
2.5"><t> | ||||
This attribute contains the public IP address of the client and | This attribute contains the public IP address of the client and | |||
the server. The server fills these attributes with his own public | the server. The server fills these attributes with its own public | |||
IP address and the public IP address of the first message received | IP address and the public IP address of the first message received | |||
from the client in the handshake phase.</t> | from the client in the Handshake phase.</t> | |||
<t> | ||||
<t> | ||||
The purpose of these attributes is to make available the | The purpose of these attributes is to make available the | |||
addressing information to network policy server or other external | addressing information to the network policy server or other external | |||
entities in charge of processing Q4S-ALERT messages.</t> | entities in charge of processing Q4S-ALERT messages.</t> | |||
<t> | ||||
<t> | Appropriate attribute values: <"client"|"server"> <"IP4"|"IP6"> | |||
Appropriate attribute values:<"client"|"server"><"IP4"|"IP6"> | ||||
<value of IP address></t> | <value of IP address></t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.6" numbered="true" toc="default"> | |||
<name>"latency" Attribute</name> | ||||
<section title=""latency" attribute" anchor="section-7.2.6"><t> | <t> | |||
The maximum latency (considered equal for uplink and downlink) | The maximum latency (considered equal for uplink and downlink) | |||
tolerance are specified in the "latency" attribute, expressed in | tolerance is specified in the "latency" attribute, expressed in | |||
milliseconds. In the Q4S-aware-network scenario, if the latency | milliseconds. In the Q4S-aware-network scenario, if the latency | |||
constraints are not met, a Q4S-ALERT method will be sent to the | constraints are not met, a Q4S-ALERT method will be sent to the | |||
client. In the Reactive scenario, if the latency constraints are | client. In the Reactive scenario, if the latency constraints are | |||
not met, an alert notification will be sent to the Actuator. If | not met, an alert notification will be sent to the Actuator. If | |||
the "latency" attribute is not present or has a 0 value, no | the "latency" attribute is not present or has a 0 value, no | |||
latency constraints need to be met and no measurements MAY be | latency constraints need to be met, and no measurements <bcp14>MAY</bcp14> be | |||
taken.</t> | taken.</t> | |||
<t> | ||||
<t> | ||||
Appropriate attribute values: [0..9999]</t> | Appropriate attribute values: [0..9999]</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.7" numbered="true" toc="default"> | |||
<name>"jitter" Attribute</name> | ||||
<section title=""jitter" attribute" anchor="section-7.2.7"><t> | <t> | |||
The maximum uplink and downlink jitter tolerance are specified in | The maximum uplink and downlink jitter tolerance is specified in | |||
the "jitter" attribute, expressed in milliseconds. In the Q4S-aware-network s cenario, if the jitter constraints are not met, a | the "jitter" attribute, expressed in milliseconds. In the Q4S-aware-network s cenario, if the jitter constraints are not met, a | |||
Q4S-ALERT method will be sent to the client. In the Reactive | Q4S-ALERT method will be sent to the client. In the Reactive | |||
scenario, if the latency constraints are not met, an alert | scenario, if the latency constraints are not met, an alert | |||
notification will be sent to the Actuator. If "jitter" attribute | notification will be sent to the Actuator. If the "jitter" attribute | |||
is not present or has a 0 value, no jitter constraints need to be | is not present or has a 0 value, no jitter constraints need to be | |||
met and no measurements MAY be taken.</t> | met, and no measurements <bcp14>MAY</bcp14> be taken.</t> | |||
<t> | ||||
<t> | ||||
Appropriate attribute values: [0..9999] "/" [0..9999]</t> | Appropriate attribute values: [0..9999] "/" [0..9999]</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.8" numbered="true" toc="default"> | |||
<name>"bandwidth" Attribute</name> | ||||
<section title=""bandwidth" attribute" anchor="section-7.2.8">< | <t> | |||
t> | The minimum uplink and downlink bandwidth is specified in the | |||
The minimum uplink and downlink bandwidth are specified in the | ||||
"bandwidth" attribute, expressed in kbps. In the Q4S-aware-network | "bandwidth" attribute, expressed in kbps. In the Q4S-aware-network | |||
scenario, if the bandwidth constraints are not met, a Q4S-ALERT | scenario, if the bandwidth constraints are not met, a Q4S-ALERT | |||
method will be sent to the client. In the Reactive scenario, an | method will be sent to the client. In the Reactive scenario, an | |||
alert notification will be sent to the Actuator. If "bandwidth" | alert notification will be sent to the Actuator. If the "bandwidth" | |||
attribute is not present or has a 0 value, no bandwidth | attribute is not present or has a 0 value, no bandwidth | |||
constraints need to be met and no measurements MAY be taken.</t> | constraints need to be met, and no measurements <bcp14>MAY</bcp14> be taken.< | |||
/t> | ||||
<t> | <t> | |||
Appropriate attribute values: [0..99999] "/" [0..99999]</t> | Appropriate attribute values: [0..99999] "/" [0..99999]</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.9" numbered="true" toc="default"> | |||
<name>"packetloss" Attribute</name> | ||||
<section title=""packetloss" attribute" anchor="section-7.2.9"> | <t> | |||
<t> | The maximum uplink and downlink packet loss tolerance is | |||
The maximum uplink and downlink packet loss tolerance are | ||||
specified in the "packetloss" attribute expressed in percentage | specified in the "packetloss" attribute expressed in percentage | |||
(two decimal accuracy). In the Q4S-aware-network scenario, if the | (two decimal accuracy). In the Q4S-aware-network scenario, if the | |||
packetloss constraints are not met, a Q4S-ALERT method will be | packetloss constraints are not met, a Q4S-ALERT method will be | |||
sent to the client. In the Reactive scenario, an alert | sent to the client. In the Reactive scenario, an alert | |||
notification will be sent to the Actuator. If "packetloss" | notification will be sent to the Actuator. If the "packetloss" | |||
attribute is not present or has a 0 value, no packetloss | attribute is not present or has a 0 value, no packet loss | |||
constraints need to be met and no measurements MAY be taken.</t> | constraints need to be met, and no measurements <bcp14>MAY</bcp14> be taken.< | |||
/t> | ||||
<t> | <t> | |||
Appropriate attribute values: [0.00 ..100.00] "/"[0.00 ..100.00]</t> | Appropriate attribute values: [0.00 ..100.00] "/"[0.00 ..100.00]</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.2.10" numbered="true" toc="default"> | |||
<name>"flow" Attributes</name> | ||||
<section title=""flow" attributes" anchor="section-7.2.10"><t> | <t> | |||
These attributes specify the flows (protocol, destination | These attributes specify the flows (protocol, destination | |||
IP/ports) of data over TCP and UDP ports to be used in uplink and | IP/ports) of data over TCP and UDP ports to be used in uplink and | |||
downlink communications.</t> | downlink communications.</t> | |||
<t> | ||||
<t> | ||||
Several "flow" attributes can be defined. These flows identify the | Several "flow" attributes can be defined. These flows identify the | |||
listening port (client or server), the protocol (TCP or UDP) (RFC | listening port (client or server), the protocol (TCP <xref target="RFC0793" f | |||
793 <xref target="ref-16"/> and RFC 768 <xref target="ref-17"/>) with the ran | ormat="default"/> | |||
ge of ports that are going | or UDP <xref target="RFC0768" format="default"/>) | |||
with the range of ports that are going | ||||
to be used by the application and, of course, by the Q4S protocol | to be used by the application and, of course, by the Q4S protocol | |||
(for quality measurements). All defined flows (app and q4s) will | (for quality measurements). All defined flows ("app" and "q4s") will | |||
be considered within the same quality profile, which is determined | be considered within the same quality profile, which is determined | |||
by the qos-level attribute in each direction. This allows to | by the "qos-level" attribute in each direction. This allows us to | |||
assume that measurements on q4s flows are the same experimented by | assume that measurements on "q4s" flows are the same as experienced by | |||
the application which is using app flows.</t> | the application, which is using "app" flows.</t> | |||
<t> | ||||
<t> | During Negotiation and Continuity phases, the specified Q4S ports | |||
During negotiation and continuity phases the specified Q4S ports | ||||
in the "flow:q4s" attributes of SDP will be used for Q4S messages.</t> | in the "flow:q4s" attributes of SDP will be used for Q4S messages.</t> | |||
<t> | ||||
<t> | ||||
The Q4S flows comprise two UDP flows and two TCP flows (one uplink | The Q4S flows comprise two UDP flows and two TCP flows (one uplink | |||
and one downlink for each one) whereas application traffic MAY | and one downlink for each one), whereas application traffic <bcp14>MAY</bcp14 | |||
consist of many flows, depending on its nature. The handshake | > | |||
consist of many flows, depending on its nature. The Handshake | ||||
phase takes place through the Q4S Contact URI, using the standard | phase takes place through the Q4S Contact URI, using the standard | |||
Q4S TCP port. However, the negotiation and continuity phases will | Q4S TCP port. However, the Negotiation and Continuity phases will | |||
take place on the specified Q4S ports (UDP and TCP) specified in | take place on the Q4S ports (UDP and TCP) specified in | |||
the SDP.</t> | the SDP.</t> | |||
<t> | ||||
<t> | The "clientListeningPort" is a port on which the client listens | |||
The "clientListeningPort" is a port in which the client listens | for server requests and <bcp14>MUST</bcp14> be used as the origin port of cli | |||
for server requests and MUST be used as origin port of client | ent | |||
responses. The "serverListeningPort" is a port in which server is | responses. The "serverListeningPort" is a port on which the server is | |||
listening for incoming messages from the client. The origin port | listening for incoming messages from the client. The origin port | |||
of server responses may be different than "serverListeningPort" | of server responses may be different than the "serverListeningPort" | |||
value.</t> | value.</t> | |||
<t> | ||||
<t> | If "clientListeningPort" is zero ("a=flow:q4s clientListeningPort | |||
If "clientListeningPort" is zero (a=flow:q4s clientListeningPort | TCP/0"), the client <bcp14>MAY</bcp14> choose one randomly per OS standard | |||
TCP/0), the client MAY choose one randomly as per OS standard | ||||
rules. Client ports inside the SDP must always be matched against | rules. Client ports inside the SDP must always be matched against | |||
actual received port values on the server side in order to deal | actual received port values on the server side in order to deal | |||
with NAT/NATP devices. If zero value or incorrect value is | with NAT/NAPT devices. If a zero value or incorrect value is | |||
present, server must set the value to the received origin port in | present, the server must set the value to the received origin port in | |||
the next message with SDP (200 OK, ALERT and CANCEL messages).</t> | the next message with SDP (200 OK, ALERT, and CANCEL messages).</t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Attribute values: | Attribute values: | |||
<"q4s"|"app"> <"serverListeningPort"|"clientListeningPort"> | <"q4s"|"app"> <"serverListeningPort"|"clientListeningPort"> | |||
<"UDP"|"TCP"> <0..65535>[ "-" [0..65535]] | <"UDP"|"TCP"> <0..65535> [ "-" [0..65535]] | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </section> | |||
</section> | <section anchor="sec-7.2.11" numbered="true" toc="default"> | |||
<name>"measurement" Attributes</name> | ||||
<section title=""measurement" attributes" anchor="section-7.2.1 | <t> | |||
1"><t> | ||||
These attributes contain the measurement procedure and the results | These attributes contain the measurement procedure and the results | |||
of the quality measurements.</t> | of the quality measurements.</t> | |||
<t> | ||||
<t> | ||||
Measurement parameters are included using the session attribute | Measurement parameters are included using the session attribute | |||
"measurement". The first measurement parameter is the procedure. | "measurement". The first measurement parameter is the procedure. | |||
Q4S provides a "default" procedure for measurements, but others | Q4S provides a "default" procedure for measurements, but others | |||
like RTP/RTCP might be used and defined later. This document will | like RTP/RTCP might be used and defined later. This document will | |||
only define and explain the "default" procedure.</t> | only define and explain the "default" procedure.</t> | |||
<t> | ||||
<t> | In the initial client request, a set of measurement procedures can | |||
In the initial client request a set of measurement procedures can | ||||
be sent to the server for negotiation. One measurement procedure | be sent to the server for negotiation. One measurement procedure | |||
line MUST be included in the SDP message for each proposed method. | line <bcp14>MUST</bcp14> be included in the SDP message for each proposed met | |||
The server MUST answer with only one line with the chosen | hod. | |||
The server <bcp14>MUST</bcp14> answer with only one line with the chosen | ||||
procedure.</t> | procedure.</t> | |||
<t> | ||||
<t> | ||||
For each procedure, a set of values of parameters separated by "," | For each procedure, a set of values of parameters separated by "," | |||
can be included in the same attribute line. The amount and type of | can be included in the same attribute line. The amount and type of | |||
parameters depends on the procedure type.</t> | parameters depends on the procedure type.</t> | |||
<t> | ||||
<t> | In the following example, the "default" procedure type is chosen:</t> | |||
In the following example the "default" procedure type is chosen:</t> | <sourcecode type="sdp"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
a=measurement:procedure default(50/50,75/75,5000,40/80,100/256) | a=measurement:procedure default(50/50,75/75,5000,40/80,100/256) | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t> | ||||
<t> | In the "default" procedure, the meaning of these parameters is | |||
In the "default" procedure, the meaning of these parameters is:</t> | the following:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>The first parameter is the interval of time ( | <li>The first parameter is the interval of time (in milliseconds) | |||
in milliseconds) | between PING requests during the Negotiation phase. Uplink | |||
between PING requests during the negotiation phase. Uplink | ||||
and downlink values from the client's point of view are | and downlink values from the client's point of view are | |||
separated by "/". This allows having different responsiveness | separated by "/". This allows different responsiveness | |||
values depending on the control resources used in each | values depending on the control resources used in each | |||
direction.</t> | direction.</li> | |||
<li>The second parameter is the time interval (in milliseconds) | ||||
<t>The second parameter is the time interval (in milliseconds) | between PING requests during the Continuity phase. Uplink and | |||
between PING requests during the continuity phase. Uplink and | downlink values are separated by "/". This allows two | |||
downlink values are separated by "/". This allows having two | ||||
different responsiveness values depending on the control | different responsiveness values depending on the control | |||
resources used in each direction.</t> | resources used in each direction.</li> | |||
<li>The third parameter is the time interval to be used to | ||||
<t>The third parameter is the time interval to be used to | measure bandwidth during the Negotiation phase.</li> | |||
measure bandwidth during the negotiation phase.</t> | <li>The fourth parameter indicates the window size for jitter and | |||
<t>The fourth parameter indicates the window size for jitter and | ||||
latency calculations. Uplink and downlink values are | latency calculations. Uplink and downlink values are | |||
separated by "/".</t> | separated by "/".</li> | |||
<li>The fifth parameter indicates the window size for packet loss | ||||
<t>The fifth parameter indicates the window size for packet loss | ||||
calculations. Uplink and downlink values are separated by | calculations. Uplink and downlink values are separated by | |||
"/".</t> | "/".</li> | |||
</ul> | ||||
</list> | <t> | |||
</t> | There are four more "measurement" attributes:</t> | |||
<sourcecode type="sdp"><![CDATA[ | ||||
<t> | ||||
There are four more measurement attributes:</t> | ||||
<figure><artwork><![CDATA[ | ||||
a=measurement:latency 45 | a=measurement:latency 45 | |||
a=measurement:jitter 3/12 | a=measurement:jitter 3/12 | |||
a=measurement:bandwidth 200/9800 | a=measurement:bandwidth 200/9800 | |||
a=measurement:packetloss 0.00/1.00 | a=measurement:packetloss 0.00/1.00 | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | The "measurement:latency", "measurement:jitter", "measurement:bandwidth", and | |||
The latency, jitter, bandwidth and packet-loss measurement | "measurement:packetloss" | |||
attributes contain the values measured for each of these quality | attributes contain the values measured for each of these quality | |||
parameters in uplink and downlink directions. Notice that latency | parameters in uplink and downlink directions. Notice that latency | |||
is considered equal for uplink and downlink directions. Quality | is considered equal for uplink and downlink directions. Quality | |||
parameter values in these measurement attributes provide a | parameter values in these "measurement" attributes provide a | |||
snapshot of the quality reached and MUST only be included in Q4S-ALERT messag | snapshot of the quality reached and <bcp14>MUST</bcp14> only be | |||
es in the SDP body such that they can be protected | included in Q4S-ALERT messages in the SDP body such that they can be protecte | |||
d | ||||
from malicious attacks as these alerts include a signature of the | from malicious attacks as these alerts include a signature of the | |||
SDP body in the header. The rest of messages will include the | SDP body in the header. The rest of the messages will include the | |||
measured values in the Measurements header.</t> | measured values in the Measurements header field.</t> | |||
<t> | ||||
<t> | In the case of the "default" procedure, the valid values are as follows:</t> | |||
In the case of procedure "default", the valid values are:</t> | <sourcecode type="abnf"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
a=measurement:procedure default,[0..999]"/" [0..999] "," [0..999] | a=measurement:procedure default,[0..999]"/" [0..999] "," [0..999] | |||
"/" [0..999] "," [0..9999] "," [0..999]/[0..999] "," | "/" [0..999] "," [0..9999] "," [0..999]/[0..999] "," | |||
[0..999]/[0..999] | [0..999]/[0..999] | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </section> | |||
</section> | <section anchor="sec-7.2.12" numbered="true" toc="default"> | |||
<name>"max-content-length" Attribute</name> | ||||
<section title=""max-content-length" attribute" anchor="section | <t> | |||
-7.2.12"><t> | ||||
The adaptation of measurement traffic to approximate the actual | The adaptation of measurement traffic to approximate the actual | |||
data streams' characteristics is convenient to accurately estimate | data streams' characteristics is convenient to accurately estimate | |||
the expected QoS for applications. Particularly, packet size can | the expected QoS for applications. Particularly, packet size can | |||
have a remarkable effect on bandwidth estimations. Moreover, this | have a remarkable effect on bandwidth estimations. Moreover, this | |||
can produce problems depending on the MTU of the end hosts and | can produce problems depending on the MTU of the end hosts and | |||
links along the path.</t> | links along the path.</t> | |||
<t> | ||||
<t> | Therefore, the maximum content length <bcp14>MAY</bcp14> be set in an attribu | |||
Therefore, the maximum content length MAY be set in an attribute | te | |||
denoted as "max-content-length". Its value MUST be given in bytes | denoted as "max-content-length". Its value <bcp14>MUST</bcp14> be given in by | |||
and MUST NOT include application, transport, network or link layer | tes | |||
and <bcp14>MUST NOT</bcp14> include application, transport, network, or link | ||||
layer | ||||
headers, i.e., size of the content length at the application | headers, i.e., size of the content length at the application | |||
layer. If not set, the value MUST be 1000 bytes.</t> | layer. If not set, the value <bcp14>MUST</bcp14> be 1000 bytes.</t> | |||
<t> | ||||
<t> | Furthermore, this attribute <bcp14>MAY</bcp14> be used to communicate MTU lim | |||
Furthermore, this attribute MAY be used to inform about MTU limits | its | |||
in end points, hence reducing possible bias as a result of | in endpoints, hence reducing possible bias as a result of | |||
network-layer fragmentation.</t> | network-layer fragmentation.</t> | |||
<t> | ||||
<t> | ||||
For instance:</t> | For instance:</t> | |||
<t> | ||||
<t> | ||||
a=max-content-length:1300</t> | a=max-content-length:1300</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-7.3" numbered="true" toc="default"> | ||||
</section> | <name>Measurements</name> | |||
<t> | ||||
<section title="Measurements" anchor="section-7.3"><t> | ||||
This section describes the way quality parameters are measured as | This section describes the way quality parameters are measured as | |||
defined by the "default" procedure. Measurements MUST be taken for | defined by the "default" procedure. Measurements <bcp14>MUST</bcp14> be taken for | |||
any quality parameter with constraints, that is, specified in the | any quality parameter with constraints, that is, specified in the | |||
SDP attributes with non-zero values. For non-present attributes | SDP attributes with non-zero values. For absent attributes, | |||
measurements MAY be omitted.</t> | measurements <bcp14>MAY</bcp14> be omitted.</t> | |||
<section anchor="sec-7.3.1" numbered="true" toc="default"> | ||||
<section title="Latency" anchor="section-7.3.1"><t> | <name>Latency</name> | |||
Latency measurements will be performed if the latency attribute | <t> | |||
and/or the application latency attribute are present and with non-zero values | Latency measurements will be performed if the "latency" attribute | |||
.</t> | and/or the "a=measurement:latency" attribute are present and have non-zero va | |||
lues.</t> | ||||
<t> | <t> | |||
Q4S defines a PING method in order to exchange packets between the | Q4S defines a PING method in order to exchange packets between the | |||
client and the server. Based on this PING exchange the client and | client and the server. Based on this PING exchange, the client and | |||
the server are able to calculate the round-trip time (RTT). The | the server are able to calculate the round-trip time (RTT). The | |||
RTT is the sum of downlink latency (normally named "reverse latency") and upl ink latency (normally named "forward latency").</t> | RTT is the sum of downlink latency (normally named "reverse latency") and upl ink latency (normally named "forward latency").</t> | |||
<t> | ||||
<t> | At least 255 samples of RTT <bcp14>MUST</bcp14> be taken by the client and | |||
At least 255 samples of RTT MUST be taken by the client and | ||||
server. As the forward and reverse latencies are impossible to | server. As the forward and reverse latencies are impossible to | |||
measure, client and server will assume that both latencies are | measure, the client and server will assume that both latencies are | |||
identical (symmetric network assumption). The latency will | identical (symmetric network assumption). The latency will | |||
therefore be calculated as the statistical median value of all the | therefore be calculated as the statistical median value of all the | |||
RTT samples divided by 2.</t> | RTT samples divided by 2.</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.3.2" numbered="true" toc="default"> | |||
<name>Jitter</name> | ||||
<section title="Jitter" anchor="section-7.3.2"><t> | <t> | |||
Jitter measurements will be performed if the jitter attribute | Jitter measurements will be performed if the "jitter" attribute | |||
and/or the application jitter attribute are present and with non-zero values. | and/or the "a=measurement:jitter" attribute are present and have non-zero val | |||
</t> | ues.</t> | |||
<t> | ||||
<t> | ||||
The jitter can be calculated independently by the client and by | The jitter can be calculated independently by the client and by | |||
the server. The downlink jitter is calculated by the client taking | the server. The downlink jitter is calculated by the client taking | |||
into account the time interval between PING requests as defined by | into account the time interval between PING requests as defined by | |||
the measurement procedure attribute in the first or second | the "measurement:procedure" attribute in the first or second | |||
parameter depending on the Q4S protocol phase. The client and the | parameter depending on the Q4S protocol phase. The client and the | |||
server MUST send these PING requests at the specified intervals. | server <bcp14>MUST</bcp14> send these PING requests at the specified interval | |||
The client measures the downlink jitter whereas the server | s. | |||
The client measures the downlink jitter, whereas the server | ||||
measures the uplink jitter. Note that PING responses are not taken | measures the uplink jitter. Note that PING responses are not taken | |||
into account when calculating jitter values.</t> | into account when calculating jitter values.</t> | |||
<t> | ||||
<t> | Every time a PING request is received by an endpoint | |||
Every time a PING request message is received by an endpoint | ||||
(either server or client), the corresponding jitter value is | (either server or client), the corresponding jitter value is | |||
updated using the Statistical Jitter value calculated on the first | updated with the statistical jitter value, which is | |||
255 packets received using the arithmetic mean of the absolute | the arithmetic mean of the absolute values of elapsed times | |||
values of elapsed times.</t> | calculated on the first 255 packets received. | |||
</t> | ||||
<t> | <t> | |||
Each endpoint sends a PING periodically with a fixed interval, | Each endpoint sends a PING periodically with a fixed interval, | |||
each value of "elapsed time" (ET) should be very close to this | and each value of "elapsed time" (ET) should be very close to this | |||
interval. If a PING message is lost, the elapsed time value is | interval. If a PING message is lost, the ET value is | |||
doubled. Identifying lost PING messages, however, is not an issue | doubled. Identifying lost PING messages, however, is not an issue | |||
because all PING messages are labeled with a Sequence-Number | because all PING messages are labeled with a Sequence-Number | |||
header. Therefore the receiver can discard this elapsed time | header field. Therefore, the receiver can discard this ET | |||
value.</t> | value.</t> | |||
<t> | ||||
<t> | In order to have the first jitter sample, the receiver <bcp14>MUST</bcp14> wa | |||
In order to have the first jitter sample, the receiver MUST wait | it | |||
until it receives 3 PING requests, because each ET is the time | until it receives 3 PING requests, because each ET is the time | |||
between two PINGs and a Jitter needs at least two ET.</t> | between two PINGs, and a jitter measurement needs at least two ET.</t> | |||
<t> | ||||
<t> | The client measures the values of RTT and downlink jitter, and the | |||
The client measures the values of RTT and downlink jitter and the | ||||
server measures RTT and uplink jitter, but all measurements are | server measures RTT and uplink jitter, but all measurements are | |||
shared with the counterpart by means of "Measurements" header of | shared with the counterpart by means of the Measurements header field of | |||
PING message.</t> | the PING message.</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.3.3" numbered="true" toc="default"> | |||
<name>Bandwidth</name> | ||||
<section title="Bandwidth" anchor="section-7.3.3"><t> | <t> | |||
Bandwidth measurements will be performed if the bandwidth | Bandwidth measurements will be performed if the "bandwidth" | |||
attribute and/or the application bandwidth attribute is present | attribute and/or the "a=measurement:bandwidth" attribute is present | |||
and with non-zero values.</t> | and has non-zero values.</t> | |||
<t> | ||||
<t> | ||||
In order to measure the available bandwidth, both the client and | In order to measure the available bandwidth, both the client and | |||
the server MUST start sending BWIDTH messages simultaneously using | the server <bcp14>MUST</bcp14> start sending BWIDTH messages simultaneously u | |||
the UDP control ports exchanged during the handshake phase in the | sing | |||
SDP message, at the needed rate to verify the availability of the | the UDP control ports exchanged during the Handshake phase in the | |||
SDP message at the needed rate to verify the availability of the | ||||
bandwidth constraint in each direction. The messages are sent | bandwidth constraint in each direction. The messages are sent | |||
during the period of time defined in the third parameter of the | during the period of time defined in the third parameter of the | |||
SDP measurement default procedure attribute in millisecond units.</t> | SDP "measurement:procedure default" attribute in milliseconds.</t> | |||
<figure anchor="ref-bandwidth-and-packet-loss-measurements"> | ||||
<figure title="Bandwidth and packet loss measurements" anchor="ref-bandwi | <name>Bandwidth and Packet Loss Measurements</name> | |||
dth-and-packet-loss-measurements"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
a=measurement:procedure default(50/50,75/75,5000,256/256,256/256) | a=measurement:procedure default(50/50,75/75,5000,256/256,256/256) | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| Rate | | | Rate | | |||
| A | | | A | | |||
| | | | | | | | |||
|downlink rate-|-------------------+ <-- traffic | | |downlink rate-|-------------------+ <-- traffic | | |||
| | | sent by | | | | | sent by | | |||
| | | server | | | | | server | | |||
| | | | | | | | | | |||
skipping to change at line 2226 ¶ | skipping to change at line 2079 ¶ | |||
| uplink rate-|-------------------+ <-- traffic | | | uplink rate-|-------------------+ <-- traffic | | |||
| | | sent by | | | | | sent by | | |||
| | | client | | | | | client | | |||
| | | | | | | | | | |||
| | | | | | | | | | |||
| |---|---|---|---|---|----> time | | | |---|---|---|---|---|----> time | | |||
| 0 1 2 3 4 5 (sec.) | | | 0 1 2 3 4 5 (sec.) | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
The goal of these measurements is not to identify the available | The goal of these measurements is not to identify the available | |||
bandwidth of the communication path but to determine if the | bandwidth of the communication path, but to determine if the | |||
required bandwidth is available, meeting the application's | required bandwidth is available, meeting the application's | |||
constraints. Therefore, the requested bandwidth MUST be measured | constraints. Therefore, the requested bandwidth <bcp14>MUST</bcp14> be measur | |||
sending only the highest bit rate required by the bandwidth | ed | |||
attribute. This is illustrated in Figure 6.</t> | sending only the highest bitrate required by the bandwidth | |||
attribute. This is illustrated in <xref target="ref-bandwidth-and-packet-loss | ||||
<t> | -measurements" format="default"/>.</t> | |||
During bandwidth measurement time, ALERTS are not expected, but | <t> | |||
ALERTS are not expected during bandwidth measurement, but | ||||
only at the end of the measurement time.</t> | only at the end of the measurement time.</t> | |||
<t> | ||||
<t> | When measuring bandwidth, all BWIDTH requests sent <bcp14>MUST</bcp14> be 1 | |||
When measuring bandwidth, all BWIDTH requests sent MUST be 1 | kilobyte in length (UDP payload length by default), they <bcp14>MUST</bcp14> | |||
kilobyte in length (UDP payload length by default), and MUST | include a Sequence-Number header field with a sequential number starting | |||
include a Sequence-Number header with a sequential number starting | at 0, and their content <bcp14>MUST</bcp14> consist of randomly generated val | |||
at 0, and their content MUST consist of randomly generated values | ues | |||
to minimize the effect of compression elements along the path. The | to minimize the effect of compression elements along the path. The | |||
Sequence-Number MUST be incremented by 1 with each BWIDTH packet | Sequence-Number <bcp14>MUST</bcp14> be incremented by 1 with each BWIDTH pack et | |||
sent. If any measurement stage needs to be repeated, the sequence | sent. If any measurement stage needs to be repeated, the sequence | |||
number MUST start at zero again. BWIDTH requests MUST NOT be | number <bcp14>MUST</bcp14> start at zero again. BWIDTH requests <bcp14>MUST N OT</bcp14> be | |||
answered. Examples:</t> | answered. Examples:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Client message: | Client message: | |||
========================= | ========================= | |||
BWIDTH q4s://www.example.com Q4S/1.0 | BWIDTH q4s://www.example.com Q4S/1.0 | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Sequence-Number: 0 | Sequence-Number: 0 | |||
Content-Type: text | Content-Type: text | |||
Content-Length: XXXX | Content-Length: XXXX | |||
Measurements: l=22, j=10, pl=0.00, bw=3000 | Measurements: l=22, j=10, pl=0.00, bw=3000 | |||
VkZaU1FrNVZNVlZSV0doT1ZrZ (to complete up to "max-content- | VkZaU1FrNVZNVlZSV0doT1ZrZ (to complete up to "max-content- | |||
length" bytes UDP payload length) | length" bytes UDP payload length) | |||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
<t> | The client <bcp14>MUST</bcp14> send BWIDTH packets to the server to allow the | |||
The client MUST send BWIDTH packets to the server to allow the | server to measure the uplink bandwidth. The server <bcp14>MUST</bcp14> send | |||
server to measure the uplink bandwidth. The server MUST send | ||||
BWIDTH packets to the client to allow the client to measure the | BWIDTH packets to the client to allow the client to measure the | |||
downlink bandwidth.</t> | downlink bandwidth.</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Server message: | Server message: | |||
========================= | ========================= | |||
BWIDTH q4s://www.example.com Q4S/1.0 | BWIDTH q4s://www.example.com Q4S/1.0 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Sequence-Number: 0 | Sequence-Number: 0 | |||
Content-Type: text | Content-Type: text | |||
Content-Length: XXXX | Content-Length: XXXX | |||
Measurements: l=22, j=7, pl=0.00, bw=200 | Measurements: l=22, j=7, pl=0.00, bw=200 | |||
ZY0VaT1ZURlZVVmhyUFE9PQ (to complete up to max-content- | ZY0VaT1ZURlZVVmhyUFE9PQ (to complete up to max-content- | |||
length | length UDP payload length) | |||
UDP payload length) | ||||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </section> | |||
</section> | <section anchor="sec-7.3.4" numbered="true" toc="default"> | |||
<name>Packet Loss</name> | ||||
<section title="Packet loss" anchor="section-7.3.4"><t> | <t> | |||
Packet loss and bandwidth are measured simultaneously using the | Packet loss and bandwidth are measured simultaneously using the | |||
BWIDTH packets sent by both the client and the server. Because the | BWIDTH packets sent by both the client and the server. Because the | |||
BWIDTH packets contain a Sequence-Number header incremented | BWIDTH packets contain a Sequence-Number header field incremented | |||
sequentially with each sent packet, lost packets can be easily | sequentially with each sent packet, lost packets can be easily | |||
identified. The lost packets MUST be counted during the | identified. The lost packets <bcp14>MUST</bcp14> be counted during the | |||
measurement time.</t> | measurement time.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-7.4" numbered="true" toc="default"> | ||||
</section> | <name>Handshake Phase</name> | |||
<t> | ||||
<section title="Handshake Phase" anchor="section-7.4"><t> | ||||
The first phase consists of a Q4S BEGIN method issued from the | The first phase consists of a Q4S BEGIN method issued from the | |||
client to the server as shown in Figure 7.</t> | client to the server as shown in <xref target="ref-handshake-phase" format="d | |||
efault"/>.</t> | ||||
<t> | <t> | |||
The first Q4S message MUST have a special URI (RFC 3986 <xref target="ref-12" | The first Q4S message <bcp14>MUST</bcp14> have a special URI <xref target="RF | |||
/>), | C3986" format="default"/>, | |||
which forces the use of the Q4S protocol if it is implemented in a | which forces the use of the Q4S protocol if it is implemented in a | |||
standard web browser.</t> | standard web browser.</t> | |||
<t> | ||||
<t> | ||||
This URI, named "Contact URI", is used to request the start of a | This URI, named "Contact URI", is used to request the start of a | |||
session. Its scheme MUST be:</t> | session. Its scheme <bcp14>MUST</bcp14> be:</t> | |||
<sourcecode type="abnf"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
"q4s:" "//" host [":" port] [path["?" query] | "q4s:" "//" host [":" port] [path["?" query] | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | ||||
Optionally, the client can send the desired quality parameters | Optionally, the client can send the desired quality parameters | |||
enclosed in the body of the message as an SDP document. The server | enclosed in the body of the message as an SDP document. The server | |||
MAY take them into account when building the answer message with | <bcp14>MAY</bcp14> take them into account when building the answer message wi | |||
the final values in the SDP body, following a request / response | th | |||
schema (RFC 3264 <xref target="ref-13"/>).</t> | the final values in the SDP body, following a request/response | |||
schema <xref target="RFC3264" format="default"/>.</t> | ||||
<t> | <t> | |||
If the request is accepted, the server MUST answer it with a Q4S | If the request is accepted, the server <bcp14>MUST</bcp14> answer it with a Q | |||
200 OK message, which MUST contain an SDP body (RFC 4566 <xref target="ref-10 | 4S | |||
"/>) | 200 OK message, which <bcp14>MUST</bcp14> contain an SDP body <xref target="R | |||
with the assigned session id (embedded in the "o" SDP parameter), | FC4566" format="default"/> | |||
with the assigned sess-id (embedded in the SDP "o=" line), | ||||
the IP addresses to be used, the flow ports to be used, the | the IP addresses to be used, the flow ports to be used, the | |||
measurement procedure to be followed and information about the | measurement procedure to be followed, and information about the | |||
required quality constraints. Additionally, the alerting-mode and | required quality constraints. Additionally, the "alerting-mode" and | |||
alert-pause time parameters may be included. Q4S responses should | "alert-pause" time attributes may be included. Q4S responses should | |||
use the protocol designator "Q4S/1.0".</t> | use the protocol designator "Q4S/1.0".</t> | |||
<t> | ||||
<t> | ||||
After these two messages are exchanged, the first phase is | After these two messages are exchanged, the first phase is | |||
completed. The quality parameter thresholds have been sent to the | completed. The quality parameter thresholds have been sent to the | |||
client. The next step is to measure the actual quality of the | client. The next step is to measure the actual quality of the | |||
communication path between the client and the server and alert if | communication path between the client and the server and alert if | |||
the Service Level Agreement (SLA) is being violated.</t> | the Service Level Agreement (SLA) is being violated.</t> | |||
<figure anchor="ref-handshake-phase"> | ||||
<figure title="Handshake phase" anchor="ref-handshake-phase"><artwork><![ | <name>Handshake Phase</name> | |||
CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| | | | | | |||
| Client Server | | | Client Server | | |||
| | | | | | |||
| ------- Q4S BEGIN ------------> | | | ------- Q4S BEGIN ------------> | | |||
| | | | | | |||
| <------ Q4S 200 OK ------------ | | | <------ Q4S 200 OK ------------ | | |||
| | | | | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
Example of Client Request and Server Answer:</t> | The following is an example of a client request and a server answer:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Client Request: | Client Request: | |||
========================= | ========================= | |||
BEGIN q4s://www.example.com Q4S/1.0 | BEGIN q4s://www.example.com Q4S/1.0 | |||
Content-Type: application/sdp | Content-Type: application/sdp | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Content-Length: 142 | Content-Length: 142 | |||
(SDP not shown) | (SDP not shown) | |||
========================= | ========================= | |||
skipping to change at line 2381 ¶ | skipping to change at line 2221 ¶ | |||
========================= | ========================= | |||
Q4S/1.0 200 OK | Q4S/1.0 200 OK | |||
Date: Mon, 10 Jun 2010 10:00:01 GMT | Date: Mon, 10 Jun 2010 10:00:01 GMT | |||
Content-Type: application/sdp | Content-Type: application/sdp | |||
Expires: 3000 | Expires: 3000 | |||
Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 | Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 | |||
Content-Length: 131 | Content-Length: 131 | |||
(SDP not shown) | (SDP not shown) | |||
========================= | ========================= | |||
The headers used are explained in section 4.3. | ||||
]]></artwork> | ]]></artwork> | |||
</figure> | <t>The header fields used are explained in <xref target="sec-4.3" format="defaul | |||
</section> | t"/>.</t> | |||
</section> | ||||
<section title="Negotiation Phase" anchor="section-7.5"><t> | <section anchor="sec-7.5" numbered="true" toc="default"> | |||
The negotiation phase is in charge of measuring the quality | <name>Negotiation Phase</name> | |||
<t> | ||||
The Negotiation phase is in charge of measuring the quality | ||||
parameters and verifying that the communication paths meet the | parameters and verifying that the communication paths meet the | |||
required quality constraints on both directions as specified in | required quality constraints in both directions as specified in | |||
the SDP body.</t> | the SDP body.</t> | |||
<t> | ||||
<t> | ||||
The measured parameters will be compared with the quality | The measured parameters will be compared with the quality | |||
constraints specified in the SDP body. If the quality session is | constraints specified in the SDP body. If the quality session is | |||
compliant with all the quality constraints the application can | compliant with all the quality constraints, the application can | |||
start.</t> | start.</t> | |||
<t>If the quality constraints are not met, a higher quality | ||||
<t><list style="symbols"><t>If the quality constraints are not met, a hig | ||||
her quality | ||||
service level will be demanded. Depending on the scenario, | service level will be demanded. Depending on the scenario, | |||
this quality upgrade will be managed as follows: In the Q4S-aware-network | this quality upgrade will be managed as follows: </t> | |||
scenario: a Q4S-ALERT method will be triggered | ||||
by the server to the client and the client will answer with | <dl> | |||
<dt>In the Q4S-aware-network scenario:</dt><dd>a Q4S-ALERT method will be t | ||||
riggered | ||||
by the server to the client, and the client will answer with | ||||
the same Q4S-ALERT method. After receiving the same Q4S-ALERT | the same Q4S-ALERT method. After receiving the same Q4S-ALERT | |||
from the counterpart, no other alerts will be triggered by | from the counterpart, no other alerts will be triggered by | |||
the server during the "alert-pause" period of time, in order | the server during the "alert-pause" period of time in order | |||
to allow the network to react, but measurements will continue | to allow the network to react, but measurements will continue | |||
to be taken to achieve early detection of improved network | to be taken to achieve early detection of improved network | |||
quality conditions and a fast application start.</t> | quality conditions and a fast application start.</dd> | |||
<dt>In the Reactive scenario:</dt><dd>an alert notification will be se | ||||
<t>In the Reactive scenario: an alert notification will be sent | nt | |||
by the server stack to the Actuator, and the Actuator will | by the server stack to the Actuator, and the Actuator will | |||
answer with an alert acknowledgement. After receiving the | answer with an alert acknowledgement. After receiving the | |||
alert acknowledgement from the Actuator, the server stack | alert acknowledgement from the Actuator, the server stack | |||
will not send other alert notifications during the "alert-pause" period of | will not send other alert notifications during the "alert-pause" | |||
time, in order to allow the Actuator to | period of time in order to allow the Actuator to | |||
react and trigger actions on the application or on the policy | react and trigger actions on the application or on the policy | |||
server, but measurements will continue to be taken to achieve | server, but measurements will continue to be taken to achieve | |||
early detection of improved network quality conditions and a | early detection of improved network quality conditions and a | |||
fast application start.</t> | fast application start.</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | ||||
<t> | ||||
In both scenarios stated above, if after several measurement | In both scenarios stated above, if after several measurement | |||
cycles, the network constraints cannot be met the quality session | cycles, the network constraints cannot be met, the quality session | |||
is terminated. Concretely when under all possible actions taken by | is terminated. Concretely when, under all possible actions taken by | |||
Actuator the quality remains below requirements, the session must | Actuator, the quality remains below requirements, the session must | |||
be terminated.</t> | be terminated.</t> | |||
<t> | ||||
<t> | ||||
The steps to be taken in this phase depend on the measurement | The steps to be taken in this phase depend on the measurement | |||
procedure exchanged during the handshake phase. This document only | procedure exchanged during the Handshake phase. This document only | |||
describes the "default" procedure, but others can be used, like | describes the "default" procedure, but others can be used, like | |||
RTP/RTCP (RFC 3550 <xref target="ref-18"/>).</t> | RTP/RTCP <xref target="RFC3550" format="default"/>.</t> | |||
<t> | ||||
<t> | Measurements of latency and jitter are made by calculating the | |||
Measurements of latency and jitter are done calculating the | differences in the arrival times of packets and can be achieved with | |||
differences in arrival times of packets and can be achieved with | ||||
little bandwidth consumption. The bandwidth measurement, on the | little bandwidth consumption. The bandwidth measurement, on the | |||
other hand, involves higher bandwidth consumption in both | other hand, involves higher bandwidth consumption in both | |||
directions (uplink and downlink).</t> | directions (uplink and downlink).</t> | |||
<t> | ||||
<t> | To avoid wasting unnecessary network resources, these two types of | |||
To avoid wasting unnecessary network resources these two types of | ||||
measurements will be performed in two separate stages. If the | measurements will be performed in two separate stages. If the | |||
required latencies and jitters cannot be reached, it makes no | required latencies and jitters cannot be reached, it makes no | |||
sense to waste network resources measuring bandwidth. In addition, | sense to waste network resources measuring bandwidth. In addition, | |||
if achieving the required latency and jitter thresholds implies | if achieving the required latency and jitter thresholds implies | |||
upgrading the quality session level, the chance of obtaining | upgrading the quality session level, the chance of obtaining | |||
compliant bandwidth measurements without retries is higher, saving | compliant bandwidth measurements without retries is higher, saving | |||
network traffic again. Therefore, the default procedure, | network traffic again. Therefore, the "default" procedure | |||
determines that the measurements are taken in two stages: | determines that the measurements are taken in two stages: | |||
<list style="hanging" hangIndent="6"> | ||||
<t hangText="Stage 0:"> Measurement of latencies, jitters and packet los | ||||
s</t> | ||||
<t hangText="Stage 1:"> Measurement of bandwidths and packet loss</t> | ||||
</list> | ||||
</t> | </t> | |||
<dl newline="false" spacing="normal" indent="6"> | ||||
<t> | <dt>Stage 0:</dt> | |||
<dd> Measurement of latencies, jitters, and packet loss</dd> | ||||
<dt>Stage 1:</dt> | ||||
<dd> Measurement of bandwidths and packet loss</dd> | ||||
</dl> | ||||
<t> | ||||
Notice that packet loss can be measured in both stages, as all | Notice that packet loss can be measured in both stages, as all | |||
messages exchanged include a sequence-number header that allows | messages exchanged include a Sequence-Number header field that allows | |||
for easy packet loss detection.</t> | for easy packet loss detection.</t> | |||
<t> | ||||
<t> | The client starts the Negotiation phase by sending a READY request | |||
The client starts the negotiation phase sending a READY request | ||||
using the TCP Q4S ports defined in the SDP. This READY request | using the TCP Q4S ports defined in the SDP. This READY request | |||
includes a "Stage" header that indicates the measurement stage.</t> | includes a Stage header field that indicates the measurement stage.</t> | |||
<t> | ||||
<t> | If either jitter, latency, or both are specified, the Negotiation | |||
If either jitter, latency or both are specified, the negotiation | ||||
phase begins with the measurement of latencies and jitters (stage | phase begins with the measurement of latencies and jitters (stage | |||
0). If none of those attributes are specified, stage 0 is skipped.</t> | 0). If none of those attributes is specified, stage 0 is skipped.</t> | |||
<section anchor="sec-7.5.1" numbered="true" toc="default"> | ||||
<section title="Stage 0: Measurement of Latencies and Jitter" anchor="sec | <name>Stage 0: Measurement of Latencies and Jitter</name> | |||
tion-7.5.1"><t> | <t> | |||
The Stage 0 MUST start with a synchronization message exchange | The Stage 0 <bcp14>MUST</bcp14> start with a synchronization message exchange | |||
initiated with the client's READY message.</t> | initiated with the client's READY message.</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | Client Request, READY message: | |||
Client request, READY message: | ||||
========================= | ========================= | |||
READY q4s://www.example.com Q4S/1.0 | READY q4s://www.example.com Q4S/1.0 | |||
Stage: 0 | Stage: 0 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Content-Length: 0 | Content-Length: 0 | |||
========================= | ========================= | |||
Server Response: | Server Response: | |||
========================= | ========================= | |||
Q4S/1.0 200 OK | Q4S/1.0 200 OK | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Stage:0 | Stage:0 | |||
Content-Length: 0 | Content-Length: 0 | |||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
<t> | ||||
This triggers the exchange of a sequence of PING requests and | This triggers the exchange of a sequence of PING requests and | |||
responses that will lead to the calculation of RTT (latency), | responses that will lead to the calculation of RTT (latency), | |||
jitter and packet loss.</t> | jitter, and packet loss.</t> | |||
<t> | ||||
<t> | After receiving a 200 OK, the client must send the first PING | |||
After receiving 200 OK, the client must send the first PING | message, and the server will wait to send PINGs until the reception | |||
message and the server will wait to send PINGs until the reception | ||||
of this first client PING.</t> | of this first client PING.</t> | |||
<t> | ||||
<t> | The client and server <bcp14>MUST</bcp14> send PING requests to each other. T | |||
Client and server MUST send PING requests to each other. The | he | |||
Sequence-Number header of the first PING MUST be set to 0. Client | Sequence-Number header field of the first PING <bcp14>MUST</bcp14> be set to | |||
0. The client | ||||
and server will manage their own sequence numbers.</t> | and server will manage their own sequence numbers.</t> | |||
<figure anchor="ref-simultaneous-exchange-of-ping-request-and-response | ||||
<figure title="Simultaneous exchange of PING request and responses" ancho | s"> | |||
r="ref-simultaneous-exchange-of-ping-request-and-responses"><artwork><![CDATA[ | <name>Simultaneous Exchange of PING Request and Responses</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| | | | | | |||
| Client Server | | | Client Server | | |||
| | | | | | |||
| --------- Q4S READY 0 ---------> | | | --------- Q4S READY 0 ---------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| | | | | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| -------- Q4S 200 OK ----------> | | | -------- Q4S 200 OK ----------> | | |||
| --------- Q4S PING ------------> | | | --------- Q4S PING ------------> | | |||
| <-------- Q4S PING ------------- | | | <-------- Q4S PING ------------- | | |||
| --------- Q4S 200 OK ----------> | | | --------- Q4S 200 OK ----------> | | |||
| <-------- Q4S 200 OK ----------- | | | <-------- Q4S 200 OK ----------- | | |||
| ... | | | ... | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
Figure 8 shows an example of the PING request sent from the client | The following is | |||
an example of the PING request sent from the client | ||||
and the server's response:</t> | and the server's response:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Client Request: | Client Request: | |||
========================= | ========================= | |||
PING q4s://www.example.com Q4S/1.0 | PING q4s://www.example.com Q4S/1.0 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Sequence-Number: 0 | Sequence-Number: 0 | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Measurements: l=22, j=12, pl=0.20, bw= | Measurements: l=22, j=12, pl=0.20, bw= | |||
Content-Length: 0 | Content-Length: 0 | |||
========================= | ========================= | |||
Server Response: | Server Response: | |||
========================= | ========================= | |||
Q4S/1.0 200 OK | Q4S/1.0 200 OK | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Sequence-Number: 0 | Sequence-Number: 0 | |||
Content-Length: 0 | Content-Length: 0 | |||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
<t> | ||||
The function of the PING method is similar to the ICMP echo | The function of the PING method is similar to the ICMP echo | |||
request message. The server MUST answer as soon as it receives the | request message <xref target="RFC0792" format="default"/>. | |||
The server <bcp14>MUST</bcp14> answer as soon as it receives the | ||||
message.</t> | message.</t> | |||
<t> | ||||
<t> | Both endpoints <bcp14>MUST</bcp14> send Q4S PING messages with the periodicit | |||
Both endpoints MUST send Q4S PING messages with the periodicity | y | |||
specified in the first parameter of SDP measurement procedure | specified in the first parameter of SDP "measurement:procedure" | |||
attribute, using always the same UDP ports and incrementing the | attribute, always using the same UDP ports and incrementing the | |||
Sequence-Number with each message.</t> | Sequence-Number with each message.</t> | |||
<t> | ||||
<t> | In the following example, the value of the first parameter of the SDP "measur | |||
In the following example, the SDP measurement procedure attribute, | ement:procedure" attribute | |||
this value is 50 milliseconds (from the client to the server) and | is 50 milliseconds (from the client to the server) and | |||
60ms (from the server to the client).</t> | 60 ms (from the server to the client):</t> | |||
<sourcecode type="sdp"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
a=measurement:procedure default(50/60,50/50,5000,256/256,256/256) | a=measurement:procedure default(50/60,50/50,5000,256/256,256/256) | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | They <bcp14>MUST NOT</bcp14> wait for a response to send the next PING reques | |||
They MUST NOT wait for a response to send the next PING request. | t. | |||
The "Sequence-Number" header value is incremented sequentially and | The Sequence-Number header field value is incremented sequentially and | |||
MUST start at zero. If this stage is repeated, the initial | <bcp14>MUST</bcp14> start at zero. If this stage is repeated, the initial | |||
Sequence-Number MUST start at zero again.</t> | Sequence-Number <bcp14>MUST</bcp14> start at zero again.</t> | |||
<t> | ||||
<t> | All PING requests <bcp14>MUST</bcp14> contain a Measurements header field wit | |||
All PING requests MUST contain a "Measurements" header, with the | h the | |||
values of the latency, jitter and packet loss measured by each | values of the latency, jitter, and packet loss measured by each | |||
entity up to that moment. The client will send its measurements to | entity up to that moment. The client will send its measurements to | |||
the server and the server his measurements to the client. Example:</t> | the server, and the server will send its measurements to the client. Example: | |||
</t> | ||||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Measurements: l=22, j=13, pl=0.10, bw=</t> | Measurements: l=22, j=13, pl=0.10, bw= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
Where "l" stands for latency, "j" for jitter, "pl" for packet loss, and "bw" | ||||
<t> | ||||
Where l stands for latency, j for jitter, pl for packetloss and bw | ||||
for bandwidth. The bandwidth value is omitted, as it is not | for bandwidth. The bandwidth value is omitted, as it is not | |||
measured at this stage.</t> | measured at this stage.</t> | |||
<t> | ||||
<t> | Optionally the PING request can include a Timestamp header field with | |||
Optionally the PING request can include a "Timestamp" header, with | the time in which the message has been sent. In the case that the header fiel | |||
the time in which the message has been sent. In case the header is | d is | |||
present, the server MUST include the header in the response | present, the server <bcp14>MUST</bcp14> include the header field in the respo | |||
nse | ||||
without changing the value.</t> | without changing the value.</t> | |||
<t> | ||||
<t> | A minimum number of PING messages <bcp14>MUST</bcp14> be exchanged in order t | |||
A minimum number of PING messages MUST be exchanged in order to be | o be | |||
able to measure latency, jitter and packet-loss with certain | able to measure latency, jitter, and packet loss with certain | |||
accuracy (at least 256 samples are RECOMMENDED to get a accurate | accuracy (at least 256 samples are <bcp14>RECOMMENDED</bcp14> to get an accur | |||
ate | ||||
packet loss measurement). Both the client and the server calculate | packet loss measurement). Both the client and the server calculate | |||
the respective measured parameter values. The mechanisms to | the respective measured parameter values. The mechanisms to | |||
calculate the different parameters are described in section 7.3.</t> | calculate the different parameters are described in <xref target="sec-7.3" fo rmat="default"/>.</t> | |||
<t> | <t> | |||
At the end of this stage 0, there are three possibilities:</t> | At the end of this stage 0, there are three possibilities:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>The latency, jitter and packet loss constrain | <li>The latency, jitter, and packetloss constraints are reached | |||
ts are reached | in both directions</li> | |||
in both directions</t> | <li>The latency, jitter, and packetloss constraints are not | |||
reached in one or both directions</li> | ||||
<t>The latency, jitter and packet loss constraints are not | </ul> | |||
reached in one or both directions</t> | <t> | |||
In the first case, Stage 0 is finished. The client and server are | ||||
</list> | ||||
</t> | ||||
<t> | ||||
In the first case, Stage 0 is finished. Client and server are | ||||
ready for Stage 1: bandwidth and packet loss measurement. The | ready for Stage 1: bandwidth and packet loss measurement. The | |||
client moves to stage 1 by sending a READY message including the | client moves to stage 1 by sending a READY message that includes the | |||
header "Stage: 1".</t> | header field, "Stage: 1".</t> | |||
<t> | ||||
<t> | If the bandwidth constraints are either empty or have a value of zero, the | |||
If the bandwidth constraints are empty or with value zero, the | Negotiation phase <bcp14>MUST</bcp14> terminate, and both client and server m | |||
negotiation phase MUST terminate and both client and server may | ay | |||
initiate the Continuity Phase. In this case client moves to | initiate the Continuity phase. In this case, client moves to the | |||
Continuity phase by sending a READY message including the header | Continuity phase by sending a READY message that includes the header field, | |||
"Stage: 2".</t> | "Stage: 2".</t> | |||
<t> | ||||
<t> | ||||
The second case, in which one or more quality constraints have not | The second case, in which one or more quality constraints have not | |||
been met, is detailed in section 7.5.4.</t> | been met, is detailed in <xref target="sec-7.5.4" format="default"/>.</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.5.2" numbered="true" toc="default"> | |||
<name>Stage 1: Measurement of Bandwidth and Packet Loss</name> | ||||
<section title="Stage 1: Measurement of Bandwidth and Packet Loss" anchor | <t> | |||
="section-7.5.2"><t> | ||||
This stage begins in a similar way to stage 0, sending a READY | This stage begins in a similar way to stage 0, sending a READY | |||
request over TCP. This READY message "Stage" header value is 1. | request over TCP. The value of the READY message's Stage header field is 1. | |||
The server answers with a Q4S 200 OK message to synchronize the | The server answers with a Q4S 200 OK message to synchronize the | |||
initiation of the measurements as shown in Figure 9.</t> | initiation of the measurements as shown in | |||
<xref target="ref-starting-bandwidth-and-packet-loss-measurement" format="def | ||||
<figure title="Starting bandwidth and packet loss measurement" anchor="re | ault"/>.</t> | |||
f-starting-bandwidth-and-packet-loss-measurement"><artwork><![CDATA[ | <figure anchor="ref-starting-bandwidth-and-packet-loss-measurement"> | |||
<name>Starting Bandwidth and Packet Loss Measurement</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| | | | | | |||
| Client Server | | | Client Server | | |||
| | | | | | |||
| --------- Q4S READY 1 -----------> | | | --------- Q4S READY 1 -----------> | | |||
| <-------- Q4S 200 OK ------------- | | | <-------- Q4S 200 OK ------------- | | |||
| | | | | | |||
| --------- Q4S BWIDTH -----------> | | | --------- Q4S BWIDTH -----------> | | |||
| <-------- Q4S BWIDTH ------------ | | | <-------- Q4S BWIDTH ------------ | | |||
| --------- Q4S BWIDTH -----------> | | | --------- Q4S BWIDTH -----------> | | |||
| <-------- Q4S BWIDTH ------------ | | | <-------- Q4S BWIDTH ------------ | | |||
| ... | | | ... | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Client Request: | Client Request: | |||
========================= | ========================= | |||
READY q4s://www.example.com Q4S/1.0 | READY q4s://www.example.com Q4S/1.0 | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Stage: 1 | Stage: 1 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Content-Length: 0 | Content-Length: 0 | |||
========================= | ========================= | |||
Server Response: | Server Response: | |||
========================= | ========================= | |||
Q4S/1.0 200 OK | Q4S/1.0 200 OK | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Stage: 1 | Stage: 1 | |||
Content-Length: 0 | Content-Length: 0 | |||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
<t> | ||||
Just after receiving the 200 OK, both the client and the server | Just after receiving the 200 OK, both the client and the server | |||
MUST start sending BWIDTH messages simultaneously using the UDP | <bcp14>MUST</bcp14> start sending BWIDTH messages simultaneously using the UD | |||
q4s ports. <xref target="section-7.3.3"/> describes the bandwidth measurement | P | |||
in | "q4s" ports. <xref target="sec-7.3.3" format="default"/> describes the bandwi | |||
dth measurement in | ||||
detail.</t> | detail.</t> | |||
<t> | ||||
<t> | ||||
At the end of this stage 1, there are three possibilities:</t> | At the end of this stage 1, there are three possibilities:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>The bandwidth and packet loss constraints are | <li>The bandwidth and packetloss constraints are reached in both | |||
reached in both | directions.</li> | |||
directions</t> | <li>The bandwidth and packetloss constraints are not reached in | |||
one or both directions.</li> | ||||
<t>The bandwidth and packet loss constraints are not reached in | </ul> | |||
one both directions.</t> | <t> | |||
In the first case, Stage 1 is finished. The client and server are | ||||
</list> | ready for the Continuity phase. The client moves to this phase by | |||
</t> | sending a READY message that includes the header field, "Stage: 2". The | |||
server answer <bcp14>MUST</bcp14> be 200 OK as shown in | ||||
<t> | <xref target="ref-trigger-the-application-using-http-uri" format="default"/>. | |||
In the first case, Stage 1 is finished. Client and server are | </t> | |||
ready for Continuity phase. The client moves to this phase by | <figure anchor="ref-trigger-the-application-using-http-uri"> | |||
sending a READY message including the header "Stage: 2". The | <name>Trigger the Application Using HTTP URI</name> | |||
server answer MUST be 200 OK as shown in Figure 10.</t> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<figure title="Trigger the application using HTTP URI" anchor="ref-trigge | ||||
r-the-application-using-http-uri"><artwork><![CDATA[ | ||||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| | | | | | |||
| Client Server | | | Client Server | | |||
| | | | | | |||
| --------- Q4S READY 2 --------------> | | | --------- Q4S READY 2 --------------> | | |||
| <---- Q4S 200 OK with trigger URI----- | | | <---- Q4S 200 OK with trigger URI----- | | |||
| | | | | | |||
| --------- HTTP GET ----------------> | | | --------- HTTP GET ----------------> | | |||
| | | | | | |||
| (Application starts) | | | (Application starts) | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Client Request: | Client Request: | |||
========================= | ========================= | |||
READY q4s://www.example.com Q4S/1.0 | READY q4s://www.example.com Q4S/1.0 | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Stage: 2 | Stage: 2 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Content-Length: 0 | Content-Length: 0 | |||
========================= | ========================= | |||
skipping to change at line 2757 ¶ | skipping to change at line 2565 ¶ | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Trigger-URI: http://www.example.com/app_start | Trigger-URI: http://www.example.com/app_start | |||
Expires: 3000 | Expires: 3000 | |||
Content-Type: application/sdp | Content-Type: application/sdp | |||
Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 | Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 | |||
Content-Length: 131 | Content-Length: 131 | |||
(SDP not shown) | (SDP not shown) | |||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
<t> | If the Trigger-URI header field is present, the client <bcp14>SHOULD</bcp14> | |||
If the "Trigger-URI" header is present, the client SHOULD send an | send an | |||
HTTP request to this URI.</t> | HTTP request to this URI.</t> | |||
<t> | ||||
<t> | The second case, with violated network constraints, is explained in | |||
The second case, with violated network constraints is explained in | <xref target="sec-7.5.4" format="default"/>.</t> | |||
7.5.4.</t> | </section> | |||
<section anchor="sec-7.5.3" numbered="true" toc="default"> | ||||
</section> | <name>Quality Constraints Not Reached</name> | |||
<t> | ||||
<section title="Quality Constraints Not Reached" anchor="section-7.5.3">< | ||||
t> | ||||
After finishing Stage 1 of the Negotiation phase, the client and | After finishing Stage 1 of the Negotiation phase, the client and | |||
the server have each other measured parameter values as these have | the server have each other's measured parameter values as these have | |||
been exchanged in the "Measurements" headers of the PING and | been exchanged in the Measurements header fields of the PING and | |||
BWIDTH messages. If there is one or more parameters that do not | BWIDTH messages. If there is one or more parameters that do not | |||
comply with the uplink or downlink application constraints | comply with the uplink or downlink application constraints | |||
required both the server and the client are aware of it.</t> | required, both the server and the client are aware of it.</t> | |||
<t> | ||||
<t> | ||||
If there is any quality parameter that does not meet the uplink or | If there is any quality parameter that does not meet the uplink or | |||
downlink quality constraints specified in the SDP message, two | downlink quality constraints specified in the SDP message, two | |||
scenarios are possible depending on the specified alerting-mode | scenarios are possible depending on the specified alerting mode | |||
(if not present, default value is "Reactive" alerting mode): | (if not present, the default value is Reactive alerting mode): | |||
<list style="format (%c)"> | </t> | |||
<t> Q4S-aware-network alerting mode:"> the server MUST send a | <ol spacing="normal" type="(%c)"> | |||
Q4S-ALERT message to the client including the digital signature | <li> | |||
header, and the client MUST answer with the same Q4S-ALERT | <t> Q4S-aware-network alerting mode: the server <bcp14>MUST</bcp14 | |||
message. The Signature header contains the signed hash value of | > send a | |||
the SDP body in order to protect all the SDP the data and | Q4S-ALERT message to the client including the digital Signature | |||
therefore it MUST contain the measurement parameters in the | header field, and the client <bcp14>MUST</bcp14> answer with the same Q4S- | |||
ALERT | ||||
message. The Signature header field contains the signed hash value of | ||||
the SDP body in order to protect all the SDP data, and | ||||
therefore it <bcp14>MUST</bcp14> contain the "measurement" parameters in t | ||||
he | ||||
body. | body. | |||
</t> | ||||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Server request | Server request | |||
========================= | ========================= | |||
Q4S-ALERT q4s://www.example.com Q4S/1.0 | Q4S-ALERT q4s://www.example.com Q4S/1.0 | |||
Host: www.example.com | Host: www.example.com | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Content-Type: application/sdp | Content-Type: application/sdp | |||
Content-Length: 142 | Content-Length: 142 | |||
v=0 | v=0 | |||
skipping to change at line 2828 ¶ | skipping to change at line 2635 ¶ | |||
a=flow:q4s downlink TCP/55001 | a=flow:q4s downlink TCP/55001 | |||
a=flow:q4s uplink UDP/56000 | a=flow:q4s uplink UDP/56000 | |||
a=flow:q4s uplink TCP/56001 | a=flow:q4s uplink TCP/56001 | |||
a=measurement:procedure default(50/50,50/50,5000,256/256,256/256) | a=measurement:procedure default(50/50,50/50,5000,256/256,256/256) | |||
a=measurement:latency 30 | a=measurement:latency 30 | |||
a=measurement:jitter 6/4 | a=measurement:jitter 6/4 | |||
a=measurement:bandwidth 200/4000 | a=measurement:bandwidth 200/4000 | |||
a=measurement:packetloss 0.20/0.33 | a=measurement:packetloss 0.20/0.33 | |||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
At this point, both the client and server keep on measuring but | ||||
At this point, both client and server keep on measuring but | without sending new Q4S-ALERT messages during the "alert-pause" | |||
without sending new Q4S ALERT messages during the "alert-pause" | ||||
milliseconds. </t> | milliseconds. </t> | |||
</li> | ||||
<t> Reactive alerting mode:"> the server stack MUST send an alert | <li> Reactive alerting mode: the server stack <bcp14>MUST</bcp14> s | |||
notification to the Actuator, and the Actuator MUST answer with | end an alert | |||
notification to the Actuator, and the Actuator <bcp14>MUST</bcp14> answer | ||||
with | ||||
an acknowledgement to the received alert notification. The | an acknowledgement to the received alert notification. The | |||
alert notification sent to the Actuator by the server stack | alert notification sent to the Actuator by the server stack | |||
doesn't follow Q4S message style but should have all the | doesn't follow Q4S message style but should have all the | |||
information the Actuator will need for the actions to be taken, | information the Actuator will need for the actions to be taken, | |||
which will be implementation dependent. | which will be implementation dependent. | |||
</t> | </li> | |||
</ol> | ||||
</list> | <t> | |||
</t> | At this point during Negotiation phase, both the client and server | |||
<t> | ||||
At this point, during Negotiation phase, both client and server | ||||
keep on measuring without sending new alert notifications to the | keep on measuring without sending new alert notifications to the | |||
Actuator during the "alert-pause" milliseconds specified in the | Actuator during the "alert-pause" milliseconds specified in the | |||
SDP. This way, both client and server will detect any improvement | SDP. This way, both client and server will detect any improvement | |||
in network conditions as soon as the network reacts. The | in network conditions as soon as the network reacts. The | |||
application can start as soon as the number of measurements | application can start as soon as the number of measurements | |||
indicated in the measurement procedure attribute indicates that | indicated in the "measurement:procedure" attribute indicates that | |||
the quality parameters are met.</t> | the quality parameters are met.</t> | |||
<t> | ||||
<t> | The same applies to Continuity phase: the measurement dialog between | |||
Same applies to Continuity phase: the measurement dialog between | ||||
client and server must not be interrupted by any possible ALERT | client and server must not be interrupted by any possible ALERT | |||
message.</t> | message.</t> | |||
<section anchor="sec-7.5.3.1" numbered="true" toc="default"> | ||||
<section title="Actuator Role" anchor="section-7.5.3.1"><t> | <name>Actuator Role</name> | |||
Actuator receives notifications of unmet requirements from the Q4S | <t> | |||
server stack, and act upon the application or the network policy | The actuator receives notifications of unmet requirements from the Q4S | |||
server stack and acts upon the application or the network policy | ||||
server, according to logic out of scope of this protocol.</t> | server, according to logic out of scope of this protocol.</t> | |||
<t> | ||||
<t> | The Actuator logic activates mechanisms at the application level | |||
The Actuator logic activates mechanisms at application level | and/or the network level based on a quality level dictionary, in which | |||
or/and network level based on a quality level dictionary, in which | the meaning of each level is implementation dependent, and each level | |||
each level meaning is implementation dependent and each level | involves different actions based on rules to keep a certain user | |||
involve different actions based on rules to keep certain user | ||||
experience quality.</t> | experience quality.</t> | |||
<t> | ||||
<t> | The type of actions that an Actuator can take at the application level | |||
The type of actions that an Actuator can take at application level | are application dependent and <bcp14>MAY</bcp14> involve:</t> | |||
are application dependent and MAY involve:</t> | <ul spacing="normal"> | |||
<li>Reduction of application functionalities, such as limitation | ||||
<t><list style="symbols"><t>Reduction of application functionalities, suc | of application speed or application options.</li> | |||
h as limitation | <li>Reduction of application resources usage, such as reduction | |||
of application speed or application options.</t> | of frames per second in a video application or any other parameter | |||
modification in order to adapt to network conditions.</li> | ||||
<t>Reduction of application resources usage, such as reduction | </ul> | |||
of frames per second in a video app or any other parameter | <t> | |||
modification in order to adapt to network conditions.</t> | Apart from actions at the application level, the Actuator <bcp14>MAY</bcp14> | |||
act at | ||||
</list> | the network level if a network policy server is available.</t> | |||
</t> | </section> | |||
<section anchor="sec-7.5.3.2" numbered="true" toc="default"> | ||||
<t> | <name>Policy Server Role</name> | |||
Apart from actions at application level, the Actuator MAY act at | <t> | |||
network level if a network policy server is available.</t> | A network policy server may be part of the Reactive scenario, and | |||
it is in charge of managing network quality provision. A network | ||||
</section> | policy server may implement all or some of these features (but implementation | |||
is not | ||||
<section title="Policy Server Role" anchor="section-7.5.3.2"><t> | ||||
A network policy server may be part of the reactive scenario and | ||||
it is in charge of managing network quality provision. Network | ||||
policy server may implement all or some of these features (but not | ||||
exclusive to):</t> | exclusive to):</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>Server validation in terms of quality constra | <li>Server validation in terms of quality constraints</li> | |||
ints.</t> | <li>Authentication (Signature validation) and security (blocking o | |||
f | ||||
<t>Authentication (Signature validation) and security (block | malicious clients)</li> | |||
malicious clients)</t> | <li> | |||
<t>Policy rules (the following rules are only examples):</t> | ||||
<t>Policy rules (following rules are only examples):<list style="symbols" | <ul spacing="normal"> | |||
><t>Maximum quality level allowed for the ACP</t> | <li>Maximum quality level allowed for the ACP</li> | |||
<li>Time bands allowed for providing quality sessions</li> | ||||
<t>Time bands allowed for providing quality sessions</t> | <li>Number of simultaneous quality sessions allowed</li> | |||
<li>Maximum time used by allowed quality sessions</li> | ||||
<t>Number of simultaneous quality sessions allowed</t> | <li>Etc.</li> | |||
</ul> | ||||
<t>Maximum time used by allowed quality sessions</t> | </li> | |||
</ul> | ||||
<t>Etc.</t> | <t> | |||
If any of the policy rules fail, a Q4S-ALERT message <bcp14>MUST</bcp14> be | ||||
</list> | answered by a 6xx error indicating the cause.</t> | |||
</t> | </section> | |||
</section> | ||||
</list> | <section anchor="sec-7.5.4" numbered="true" toc="default"> | |||
</t> | <name>"qos-level" Changes</name> | |||
<t> | ||||
<t> | If any constraint was violated, the server <bcp14>MAY</bcp14> trigger a Q4S-A | |||
If any of the policy rules fail, a Q4S-ALERT message MUST be | LERT | |||
answered by a 6XX error, indicating the cause.</t> | asking for a higher "qos-level" attribute. The maximum "qos-level" | |||
allowed is 9 for both uplink and downlink.</t> | ||||
</section> | <t> | |||
If the "qos-level" has reached the maximum value for the downlink or | ||||
</section> | ||||
<section title="QoS Level Changes" anchor="section-7.5.4"><t> | ||||
If any constraint was violated, server MAY trigger a Q4S-ALERT | ||||
asking for higher qos-level attribute. The maximum qos-level | ||||
allowed is 9, both uplink and downlink.</t> | ||||
<t> | ||||
If the qos-level has reached the maximum value for downlink or | ||||
uplink without matching the constraints, then a CANCEL request | uplink without matching the constraints, then a CANCEL request | |||
MUST be sent by the client using the TCP port determined in the | <bcp14>MUST</bcp14> be sent by the client using the TCP port determined in th | |||
handshake phase in order to release the session. In reaction to | e | |||
the reception of the CANCEL request, the server MUST send a CANCEL | Handshake phase in order to release the session. In reaction to | |||
request too. If no CANCEL request is received, the expiration time | the reception of the CANCEL request, the server <bcp14>MUST</bcp14> send a CA | |||
cancels the session at server side.</t> | NCEL | |||
request, too. If no CANCEL request is received, the expiration time | ||||
<figure><artwork><![CDATA[ | cancels the session on the server side.</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
Client Request: | Client Request: | |||
========================= | ========================= | |||
CANCEL q4s://www.example.com Q4S/1.0 | CANCEL q4s://www.example.com Q4S/1.0 | |||
User-Agent: q4s-ua-experimental-1.0 | User-Agent: q4s-ua-experimental-1.0 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Content-Type: application/sdp | Content-Type: application/sdp | |||
Content-Length: 142 | Content-Length: 142 | |||
(SDP not shown) | (SDP not shown) | |||
========================= | ========================= | |||
skipping to change at line 2966 ¶ | skipping to change at line 2753 ¶ | |||
CANCEL q4s://www.example.com Q4S/1.0 | CANCEL q4s://www.example.com Q4S/1.0 | |||
Session-Id: 53655765 | Session-Id: 53655765 | |||
Expires: 0 | Expires: 0 | |||
Content-Type: application/sdp | Content-Type: application/sdp | |||
Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 | Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 | |||
Content-Length: 131 | Content-Length: 131 | |||
(SDP not shown) | (SDP not shown) | |||
========================= | ========================= | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </section> | |||
</section> | </section> | |||
<section anchor="sec-7.6" numbered="true" toc="default"> | ||||
</section> | <name>Continuity Phase</name> | |||
<t> | ||||
<section title="Continuity Phase" anchor="section-7.6"><t> | During the Negotiation phase, latency, jitter, bandwidth, and | |||
During the negotiation phase, latency, jitter, bandwidth and | packet loss have been measured. During the Continuity phase, | |||
packet loss have been measured. During the continuity phase | ||||
bandwidth will not be measured again because bandwidth | bandwidth will not be measured again because bandwidth | |||
measurements may disturb application performance.</t> | measurements may disturb application performance.</t> | |||
<t> | ||||
<t> | ||||
This phase is supposed to be executed at the same time as the | This phase is supposed to be executed at the same time as the | |||
real-time application is being used.</t> | real-time application is being used.</t> | |||
<t> | ||||
<t> | This document only covers the "default" procedure. The continuity | |||
This document only covers the default procedure. The continuity | operation with the "default" procedure is based on a sliding window of | |||
operation with default procedure is based on a sliding window of | ||||
samples. The number of samples involved in the sliding window may | samples. The number of samples involved in the sliding window may | |||
be different for jitter and latency than for packet-loss | be different for jitter and latency than for packet loss | |||
calculations according to the fifth and sixth parameters of the | calculations according to the fifth and sixth parameters of the | |||
measurement procedure attribute. In the example, shown in Figure | "measurement:procedure" attribute. In the example, shown in | |||
11, the jitter and latency sliding window comprises 40 samples | <xref target="ref-sliding-samples-window" format="default"/>, | |||
whereas the size of the packet-loss sliding window is 100 samples:</t> | the jitter and latency sliding window comprises 40 samples, | |||
whereas the size of the packet loss sliding window is 100 samples:</t> | ||||
<figure><artwork><![CDATA[ | <sourcecode type="sdp"><![CDATA[ | |||
a=measurement:procedure default(50/50,75/75,5000,40/40,100/100) | a=measurement:procedure default(50/50,75/75,5000,40/40,100/100) | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | ||||
In addition, the sizes of these windows are configurable per | In addition, the sizes of these windows are configurable per | |||
direction: uplink and downlink values may differ.</t> | direction: uplink and downlink values may differ.</t> | |||
<t> | ||||
<t> | PING requests are sent continuously (in both directions), and when | |||
PING requests are sent continuously (in both directions) and when | the Sequence-Number header field reaches the maximum value, the client | |||
the Sequence-Number header reaches the maximum value, the client | continues sending PING messages with the Sequence-Number header field | |||
continues sending PING messages with the Sequence-Number header | ||||
starting again at zero. When the server PING Sequence-Number | starting again at zero. When the server PING Sequence-Number | |||
header reaches the maximum value, it does the same, starting again | header field reaches the maximum value, it does the same, starting again | |||
from zero.</t> | from zero.</t> | |||
<t> | ||||
<t> | ||||
On the client side, the measured values of downlink jitter, | On the client side, the measured values of downlink jitter, | |||
downlink packet loss and latency are calculated using the last | downlink packet loss, and latency are calculated using the last | |||
samples, discarding older ones, in a sliding window schema.</t> | samples, discarding older ones, in a sliding window schema.</t> | |||
<figure anchor="ref-sliding-samples-window"> | ||||
<figure title="Sliding samples window" anchor="ref-sliding-samples-window | <name>Sliding Samples Window</name> | |||
"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+--------------------------------------------------+ | +--------------------------------------------------+ | |||
| | | | | | |||
| 55 56 57 . . . 253 254 255 0 1 2 . . . 55 56 | | | 55 56 57 . . . 253 254 255 0 1 2 . . . 55 56 | | |||
| A A | | | A A | | |||
| | | | | | | | | | |||
| +-----------------------------------+ | | | +-----------------------------------+ | | |||
| | | | | | |||
+--------------------------------------------------+ | +--------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
Only if the server detects that the measured values (downlink or | Only if the server detects that the measured values (downlink or | |||
uplink jitter, packet loss or latency) are not reaching the | uplink jitter, packet loss, or latency) are not reaching the | |||
quality constraints, a Q4S ALERT is triggered and sent either to | quality constraints, a Q4S-ALERT is triggered and sent either to | |||
the client or to the Actuator, depending on the alerting mode, and | the client or to the Actuator, depending on the alerting mode, and | |||
the alert-pause timer is started.</t> | the "alert-pause" timer is started.</t> | |||
<t> | ||||
<t> | In the Q4S-aware-network alerting mode shown in | |||
In Q4S-aware-network alerting mode shown in Figure 12, if the | <xref target="ref-continuity-in-q4s-aware-network-alerting-mode" format="defa | |||
client receives a Q4S ALERT message, it MUST answer sending the | ult"/>, | |||
Q4S ALERT request message back to the server including the SDP | if the | |||
(with its corresponding digital signature).</t> | client receives a Q4S-ALERT message, it <bcp14>MUST</bcp14> answer by sending | |||
the | ||||
<t> | Q4S-ALERT request message including the SDP | |||
Both client and server will keep performing measurements but no | (with its corresponding digital signature) back to the server.</t> | |||
other Q4S ALERT message MUST be sent during "alert-pause" | <t> | |||
milliseconds. The operations needed to act on the network and the | Both client and server will keep performing measurements, | |||
agents in charge of them are out of scope of this draft.</t> | but Q4S-ALERT messages <bcp14>MUST NOT</bcp14> be sent during | |||
"alert-pause" milliseconds. | ||||
<figure title="Continuity in Q4S-aware-network alerting mode" anchor="ref | The operations needed to act on the network and the | |||
-continuity-in-q4s-aware-network-alerting-mode"><artwork><![CDATA[ | agents in charge of them are out of scope of this document.</t> | |||
<figure anchor="ref-continuity-in-q4s-aware-network-alerting-mode"> | ||||
<name>Continuity in Q4S-Aware-Network Alerting Mode</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| | | | | | |||
| Client Server | | | Client Server | | |||
| | | | | | |||
| ... | | | ... | | |||
| ----------- PING ----------> | | | ----------- PING ----------> | | |||
| <--------- 200 OK ---------- | | | <--------- 200 OK ---------- | | |||
| <------- Q4S-ALERT --------- | | | <------- Q4S-ALERT --------- | | |||
| -------- Q4S-ALERT --------> | | | -------- Q4S-ALERT --------> | | |||
| <---------- PING ----------- | | | <---------- PING ----------- | | |||
| ---------- 200 OK ---------> | | | ---------- 200 OK ---------> | | |||
| ----------- PING ----------> | | | ----------- PING ----------> | | |||
| <--------- 200 OK ---------- | | | <--------- 200 OK ---------- | | |||
| <---------- PING ----------- | | | <---------- PING ----------- | | |||
| ---------- 200 OK ---------> | | | ---------- 200 OK ---------> | | |||
| ... | | | ... | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
In the Reactive scenario shown in Figure 13, if the server detects | In the Reactive scenario shown in <xref target="ref-continuity-in-reactive-al | |||
that the measured values (downlink or uplink jitter, packet loss | erting-mode" format="default"/>, | |||
if the server detects | ||||
that the measured values (downlink or uplink jitter, packet loss, | ||||
or latency) are not reaching the quality constraints, an alert | or latency) are not reaching the quality constraints, an alert | |||
notification is triggered and sent to the Actuator. The Actuator | notification is triggered and sent to the Actuator. The Actuator | |||
MUST then answer to the server stack with an alert acknowledgement</t> | <bcp14>MUST</bcp14> then answer to the server stack with an alert acknowledge | |||
ment.</t> | ||||
<t> | <t> | |||
The measurement dialog between the client and the server MUST NOT | The measurement dialog between the client and the server <bcp14>MUST NOT</bcp | |||
14> | ||||
be interrupted by any possible ALERT message.</t> | be interrupted by any possible ALERT message.</t> | |||
<figure anchor="ref-continuity-in-reactive-alerting-mode"> | ||||
<figure title="Continuity in Reactive alerting mode" anchor="ref-continui | <name>Continuity in Reactive Alerting Mode</name> | |||
ty-in-reactive-alerting-mode"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| | | | | | |||
| Client Server Actuator | | | Client Server Actuator | | |||
| ... | | | ... | | |||
| --- PING ----------> | | | --- PING ----------> | | |||
| <-- 200 OK---------- | | | <-- 200 OK---------- | | |||
| <----- PING -------- | | | <----- PING -------- | | |||
| <--- 200 OK -------- ---- alert | | | <--- 200 OK -------- ---- alert | | |||
| notification --> | | | notification --> | | |||
| | | | | | |||
| --- PING ----------> <--- alert | | | --- PING ----------> <--- alert | | |||
| acknowledge --- | | | acknowledge --- | | |||
| <-- 200 OK---------- | | | <-- 200 OK---------- | | |||
| <----- PING -------- | | | <----- PING -------- | | |||
| --- 200 OK --------> | | | --- 200 OK --------> | | |||
| ... | | | ... | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section anchor="sec-7.7" numbered="true" toc="default"> | ||||
<section title="Termination Phase" anchor="section-7.7"><t> | <name>Termination Phase</name> | |||
The Termination phase is the end point for the established Q4S | <t> | |||
The Termination phase is the endpoint for the established Q4S | ||||
session that is reached in the following cases:</t> | session that is reached in the following cases:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>A CANCEL message has been received. The clien | <li>A CANCEL message has been received. The client sends a | |||
t sends a | CANCEL message due to the network's inability to | |||
CANCEL message due to the impossibility of the network to | ||||
meet the required quality constraints. The client and server | meet the required quality constraints. The client and server | |||
application will be notified by the respective Q4S stack.</t> | application will be notified by their respective Q4S stacks.</li> | |||
<li>Session expires: if after the Expires time, no client or | ||||
<t>Session expires: if after the Expires time no client or | server activity is detected, that end cancels the session.</li> | |||
server activity is detected, that end cancels the session.</t> | <li>A BEGIN message has been received by the server. | |||
The pre-existing Q4S quality session is canceled, and a new session | ||||
<t>A BEGIN message has been received by the server. The pre-existing Q4S | will be initiated.</li> | |||
quality session is cancelled and a new session | </ul> | |||
will be initiated.</t> | <t> | |||
The meaning of the Termination phase in terms of the release of resources | ||||
</list> | ||||
</t> | ||||
<t> | ||||
The meaning of Termination phase in terms of release of resources | ||||
or accounting is application dependent and out of scope of the Q4S | or accounting is application dependent and out of scope of the Q4S | |||
protocol.</t> | protocol.</t> | |||
<t> | ||||
<t> | In the Reactive alerting mode, Q4S CANCEL messages received by the Q4S | |||
In Reactive alerting mode, Q4S CANCEL messages received by the Q4S | server must cause the server stack to send cancel notifications | |||
server must cause the sending of cancel notifications sent from | to the Actuator in order to release possible | |||
the server stack to the Actuator in order to release possible | ||||
assigned resources for the session.</t> | assigned resources for the session.</t> | |||
<section anchor="sec-7.7.1" numbered="true" toc="default"> | ||||
<section title="Sanity Check of Quality Sessions" anchor="section-7.7.1"> | <name>Sanity Check of Quality Sessions</name> | |||
<t> | <t> | |||
A session may finish due to several reasons (client shutdown, | A session may finish due to several reasons (client shutdown, | |||
client CANCEL request, constraints not reached, etc), and any | client CANCEL request, constraints not reached, etc.), and any | |||
session finished MUST release the assigned resources.</t> | session finished <bcp14>MUST</bcp14> release the assigned resources.</t> | |||
<t> | ||||
<t> | ||||
In order to release the assigned server resources for the session, | In order to release the assigned server resources for the session, | |||
the "Expires" header indicates the maximum interval of time | the Expires header field indicates the maximum interval of time | |||
without exchanging any Q4S message.</t> | without exchanging any Q4S message.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-7.8" numbered="true" toc="default"> | ||||
</section> | <name>Dynamic Constraints and Flows</name> | |||
<t> | ||||
<section title="Dynamic Constraints And Flows" anchor="section-7.8"><t> | ||||
Depending on the nature of the application, the quality | Depending on the nature of the application, the quality | |||
constraints to be reached may evolve, changing some or all quality | constraints to be reached may evolve, changing some or all quality | |||
constraint values in any direction.</t> | constraint values in any direction.</t> | |||
<t> | ||||
<t> | The client <bcp14>MUST</bcp14> be able to deal with this possibility. When th | |||
The client MUST be able to deal with this possibility. When the | e | |||
server sends an SDP document attached to a response (200 OK, or | server sends an SDP document attached to a response (200 OK or | |||
Q4S-ALERT, etc), the client MUST take all the new received values, | Q4S-ALERT, etc.), the client <bcp14>MUST</bcp14> take all the new received va | |||
lues, | ||||
overriding any previous value in use.</t> | overriding any previous value in use.</t> | |||
<t> | ||||
<t> | The dynamic changes on the quality constraints can be a result | |||
The dynamic changes on the quality constraints can be as a result | ||||
of two possibilities:</t> | of two possibilities:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>The application communicates to the Q4S serve | <li>The application communicates to the Q4S server a change in | |||
r a change in | the constraints. In this case, the application requirements | |||
the constraints. In this case the application requirements | can evolve, and the Q4S server will be aware of them.</li> | |||
can evolve and the Q4S server will be aware of them.</t> | <li>The application uses TCP flows. In that case, in order to | |||
<t>The application uses TCP flows. In that case, in order to | ||||
guarantee a constant throughput, the nature of TCP behavior | guarantee a constant throughput, the nature of TCP behavior | |||
forces the use of a composite constraint function, which | forces the use of a composite constraint function, which | |||
depends on RTT, packet loss and window control mechanism | depends on RTT, packet loss, and a window control mechanism | |||
implemented in each TCP stack.</t> | implemented in each TCP stack.</li> | |||
</ul> | ||||
</list> | <t> | |||
</t> | ||||
<t> | ||||
TCP throughput can be less than actual bandwidth if the | TCP throughput can be less than actual bandwidth if the | |||
Bandwidth-Delay Product (BDP) is large or if the network suffers | Bandwidth-Delay Product (BDP) is large, or if the network suffers | |||
from a high packet loss rate. In both cases, TCP congestion | from a high packet loss rate. In both cases, TCP congestion | |||
control algorithms may result in a suboptimal performance.</t> | control algorithms may result in a suboptimal performance.</t> | |||
<t> | ||||
<t> | Different TCP congestion control implementations like Reno <xref target="RENO | |||
Different TCP congestion control implementations like Reno <xref target="ref- | " format="default"/>, | |||
23" />, | High Speed TCP <xref target="RFC3649" format="default"/>, | |||
High Speed TCP (RFC 3649 <xref target="ref-24"/>), CUBIC <xref target="ref-25 | CUBIC <xref target="I-D.rhee-tcpm-cubic" format="default"/>, | |||
"/>, Compound TCP (CTCP | Compound TCP (CTCP) <xref target="I-D.sridharan-tcpm-ctcp" format="default"/> | |||
<xref target="ref-26"/>), etc. reach different throughputs under the same net | , | |||
work | etc., reach different throughputs under the same network | |||
conditions of RTT and packet loss. In all cases, depending on the | conditions of RTT and packet loss. In all cases, depending on the | |||
RTT measured value, the Q4S server could change dynamically the | RTT-measured value, the Q4S server could dynamically change the | |||
packetloss constraints (defined in SDP) in order to make possible | packetloss constraints (defined in the SDP) in order to make it possible | |||
to reach a required throughput or vice versa (use packetloss | to reach a required throughput or vice versa (using "measurement:packetloss" | |||
measurement to change dynamically latency constraints).</t> | to change dynamically the latency constraints).</t> | |||
<t> | ||||
<t> | A general guideline for calculating the packet loss constraint and the RTT | |||
A general guideline to calculate the packetloss constraint and RTT | constraint consists of approximating the throughput by using a | |||
constraint consists in approximating the throughput using a | ||||
simplified formula, which should take into account the TCP stack | simplified formula, which should take into account the TCP stack | |||
implementation of the receiver, in addition to RTT and packet | implementation of the receiver, in addition to the RTT and packet | |||
loss:</t> | loss:</t> | |||
<sourcecode type="pseudocode"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Th= Function( RTT, packet loss, ...) | Th= Function( RTT, packet loss, ...) | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | Then, depending on RTT-measured values, set dynamically the | |||
Then, depending on RTT measured values, set dynamically the | packet loss constraint.</t> | |||
packetloss constraint.</t> | <t> | |||
<t> | ||||
It is possible to easily calculate a worst-case boundary for the | It is possible to easily calculate a worst-case boundary for the | |||
Reno algorithm, which should ensure for all algorithms that the | Reno algorithm, which should ensure for all algorithms that the | |||
target throughput is actually achieved. Except that, high-speed | target throughput is actually achieved, except that high-speed | |||
algorithms will then have even a larger throughput, if more | algorithms will then have even larger throughput if more | |||
bandwidth is available.</t> | bandwidth is available.</t> | |||
<t> | ||||
<t> | For the Reno algorithm, the Mathis formula may be used <xref target="RENO" fo | |||
For the Reno algorithm, the Mathis' formula may be used <xref target="ref-23" | rmat="default"/> for | |||
/> for | ||||
the upper bound on the throughput:</t> | the upper bound on the throughput:</t> | |||
<sourcecode type="pseudocode"><![CDATA[ | ||||
<t><list hangIndent="9" style="hanging"><t> | Th <= (MSS/RTT)*(1 / sqrt{p}) | |||
Th <= (MSS/RTT)*(1 / sqrt{p})</t> | ]]></sourcecode> | |||
<t> | ||||
</list> | In the absence of packet loss, a practical limit for the TCP | |||
</t> | throughput is the receiver_window_size divided by the RTT. | |||
However, if the TCP implementation uses a window scale | ||||
<t> | ||||
In absence of packet loss, a practical limit for the TCP | ||||
throughput is the receiver_window_size divided by the round-trip | ||||
time. However, if the TCP implementation uses a window scale | ||||
option, this limit can reach the available bandwidth value.</t> | option, this limit can reach the available bandwidth value.</t> | |||
</section> | ||||
</section> | <section anchor="sec-7.9" numbered="true" toc="default"> | |||
<name>"qos-level" Upgrade and Downgrade Operation</name> | ||||
<section title="Qos-level Upgrade And Downgrade Operation" anchor="sectio | <t> | |||
n-7.9"><t> | Each time the server detects a violation of constraints, the alert | |||
Each time the server detects violation of constraints, the alert | mechanism is triggered, the "alert-pause" timer is started, and the | |||
mechanism is triggered, the alert-pause timer is started, and the | "qos-level" is increased. When this happens repeatedly, and the | |||
qos-level is increased. When this happens repeatedly, and the qos-level reach | "qos-level" reaches its maximum value (value 9), the session is | |||
es its maximum value (value 9), the session is | canceled. But when the violation of constraints stops before | |||
cancelled. But when the violation of constraints stops before | reaching "qos-level" maximum value, the recovery mechanism allows | |||
reaching qos-level maximum value, the recovery mechanism allows | for the "qos-level" upgrade gradually.</t> | |||
for the qos-level upgrade gradually.</t> | <t> | |||
This downgrade and upgrade of "qos-level" is explained | ||||
<t> | with the following example:</t> | |||
Following, this downgrade and upgrade of qos-level is explained | <ol spacing="normal" type="1"> | |||
with an example:</t> | <li>A Q4S session is initiated successfully with "qos-level=0".</li> | |||
<li>During the Continuity phase, violation of constraints is | ||||
<t><list style="numbers"><t>A Q4S session is initiated successfully with | detected; the "qos-level" is increased to 1, a Q4S-ALERT is sent by | |||
qos-level=0.</t> | the server to the client, and an "alert-pause" timer is started.</li> | |||
<li>The "alert-pause" timer expires, and still a violation of constrai | ||||
<t>During the continuity phase, violation of constraints is | nts | |||
detected; qos-level is increased to 1, a Q4S-ALERT is sent by | is detected; the "qos-level" is increased to 2, a Q4S-ALERT is sent | |||
the server to the client and alert-pause timer is started.</t> | by the server to the client, and an "alert-pause" timer is started.</li> | |||
<li>The "alert-pause" timer expires, but the violation of constraints | ||||
<t>Alert-pause timer expires and still violation of constraints | has | |||
is detected; qos-level is increased to 2, a Q4S-ALERT is sent | stopped; the "recovery-pause" timer is started.</li> | |||
by the server to the client and alert-pause timer is started.</t> | <li>The "recovery-pause" timer expires, and no violation of | |||
constraints has been detected. Meanwhile, the "qos-level" is | ||||
<t>Alert-pause timer expires but violation of constraints has | ||||
stopped; recovery-pause is started.</t> | ||||
<t>Recovery-pause timer expires, and no violation of | ||||
constraints has been detected meanwhile; qos-level is | ||||
decreased to 1, a Q4S-RECOVERY is sent by the server to the | decreased to 1, a Q4S-RECOVERY is sent by the server to the | |||
client and recovery-pause timer is started again.</t> | client, and the "recovery-pause" timer is started again.</li> | |||
<li>The "recovery-pause" timer expires again, and no violation of | ||||
<t>Recovery-pause timer expires again and no violation of | constraints has been detected. Meanwhile, the "qos-level" is | |||
constraints has been detected meanwhile; qos-level is | decreased to 0, and a Q4S-RECOVERY is sent by the server to | |||
decreased to 0 and a Q4S-RECOVERY is sent by the server to | the client. The "recovery-pause" timer is not started this time as | |||
the client; recovery-pause timer is not started this time as | the "qos-level" has reached its initial value.</li> | |||
qos-level has reached its initial value.</t> | </ol> | |||
<t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
When the network configuration allows for the possibility of | When the network configuration allows for the possibility of | |||
managing Q4S flows and application flows independently (either is | managing Q4S flows and application flows independently (either is | |||
a network-based QoS or a Q4S aware network), the qos-level | a network-based QoS or a Q4S-aware network), the "qos-level" | |||
downgrade process could be managed more efficiently using a | downgrade process could be managed more efficiently using a | |||
strategy that allows for carrying out qos-level downgrades | strategy that allows for carrying out "qos-level" downgrades | |||
excluding app flows from SDP dynamically. The Q4S flows would be | excluding application flows from SDP dynamically. The Q4S flows would be | |||
downgraded to allow for measurements on a lower quality level | downgraded to allow for measurements on a lower quality level | |||
without interference of the application flows. A Q4S client MUST | without interference of the application flows. A Q4S client <bcp14>MUST</bcp1 | |||
allow this kind of SDP modifications by the server.</t> | 4> | |||
allow this kind of SDP modification by the server.</t> | ||||
<t> | <t> | |||
Periodically (every several minutes, depending on the | Periodically (every several minutes, depending on the | |||
implementation) a Q4S-ALERT could be triggered, in which the level | implementation) a Q4S-ALERT could be triggered, in which the level | |||
is downgraded for Q4S flows, excluding application flows from the | is downgraded for Q4S flows, excluding application flows from the | |||
embedded SDP of that request.</t> | embedded SDP of that request.</t> | |||
<t> | ||||
<t> | This mechanism allows the measurement at lower levels of quality while | |||
This mechanism allows to measure at lower levels of quality while | application flows continue using a higher "qos-level" value.</t> | |||
application flows continue using a higher qos level value.</t> | <ul spacing="normal"> | |||
<li>If the measurements in the lower level meet the quality | ||||
<t><list style="symbols"><t>If the measurements in the lower level meet t | constraints, then a Q4S-RECOVERY message to this lower "qos-level" may be | |||
he quality | triggered, in which the SDP includes the | |||
constraints, then a Q4S-RECOVERY message to this lower qos-level may be tr | application flows in addition to the Q4S flows.</li> | |||
iggered, in which the SDP includes the | <li>If the measurements in the lower level do not meet the | |||
application flows in addition to Q4S flows.</t> | constraints, then a new Q4S-ALERT to the previous "qos-level" | |||
<bcp14>MUST</bcp14> be triggered, in which the SDP includes only the Q4S | ||||
<t>If the measurements in the lower level do not meet the | flows.</li> | |||
constraints, then a new Q4S-ALERT to the previous qos-level | </ul> | |||
MUST be triggered, in which the SDP includes only the Q4S | <figure anchor="ref-possible-evolution-of-qos-level"> | |||
flows.</t> | <name>Possible Evolution of "qos-level"</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
</list> | ||||
</t> | ||||
<figure title="Possible evolution of qos-level" anchor="ref-possible-evol | ||||
ution-of-qos-level"><artwork><![CDATA[ | ||||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| | | | | | |||
| qos-level | | | qos-level | | |||
| A | | | A | | |||
| | | | | | | | |||
| 4| | | | 4| | | |||
| | | | | | | | |||
| 3| +------+ | | | 3| +------+ | | |||
| | | | | | | | | | | | |||
| 2| +----+ +----+ +--- | | | 2| +----+ +----+ +--- | | |||
| | | | | | | | | | | | | | |||
| 1| +----+ +-----+ | | | 1| +----+ +-----+ | | |||
| | | | | | | | | | |||
| 0+---+---------------------------------> time | | | 0+---+---------------------------------> time | | |||
| | | | | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | <t> | |||
This mechanism, illustrated in Figure 14, avoids the risk of | This mechanism, illustrated in <xref target="ref-possible-evolution-of-qos-le | |||
disturbing the application, while the measurements are being run | vel" format="default"/>, avoids the risk of | |||
disturbing the application while the measurements are being run | ||||
in lower levels. However, this optional optimization of resources | in lower levels. However, this optional optimization of resources | |||
MUST be used carefully.</t> | <bcp14>MUST</bcp14> be used carefully.</t> | |||
<t> | ||||
<t> | The chosen period to measure a lower "qos-level" is implementation | |||
The chosen period to measure a lower qos level is implementation | dependent. Therefore, it is not included as a "measurement:procedure" paramet | |||
dependent. Therefore, it is not included as a measurement | er. | |||
procedure parameter. It is RECOMMENDED to use a large value, such | It is <bcp14>RECOMMENDED</bcp14> to use a large value, such | |||
as 20 minutes.</t> | as 20 minutes.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-8" numbered="true" toc="default"> | ||||
</section> | <name>General User Agent Behavior</name> | |||
<section anchor="sec-8.1" numbered="true" toc="default"> | ||||
<section title="General User Agent Behavior" anchor="section-8"><section | <name>Roles in Peer-to-Peer Scenarios</name> | |||
title="Roles in Peer-to-Peer Scenarios" anchor="section-8.1"><t> | <t> | |||
In order to allow peer to peer applications, a Q4S User Agent (UA) | In order to allow peer-to-peer applications, a Q4S User Agent (UA) | |||
MUST be able to assume both client and server role. The role | <bcp14>MUST</bcp14> be able to assume both the client and server role. The ro | |||
le | ||||
assumed depends on who sends the first message.</t> | assumed depends on who sends the first message.</t> | |||
<t> | ||||
<t> | In a communication between two UAs, the UA that first sends the Q4S | |||
In a communication between two UAs, the UA that sends the Q4S | BEGIN request to start the Handshake phase shall assume the client role.</t> | |||
BEGIN request in the first place, for starting the handshake | <t> | |||
phase, shall assume the client role.</t> | If both UAs send the BEGIN request at the same time, they will | |||
wait for a random time to restart again as shown in <xref target="ref-p2p-rol | ||||
<t> | es" format="default"/>.</t> | |||
If both UASs send the BEGIN request at the same time, they will | <t> | |||
wait for a random time to restart again as shown in Figure 15.</t> | ||||
<t> | ||||
Otherwise, an UA may be configured to act only as server (e.g., | Otherwise, an UA may be configured to act only as server (e.g., | |||
content provider's side).</t> | content provider's side).</t> | |||
<figure anchor="ref-p2p-roles"> | ||||
<figure title="P2P roles." anchor="ref-p2p-roles."><artwork><![CDATA[ | <name>P2P Roles</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+-----------------------------------------------+ | +-----------------------------------------------+ | |||
| | | | | | |||
| UA(Client) UA(Server) | | | UA(Client) UA(Server) | | |||
| | | | | | |||
| -------- Q4S BEGIN -------------> | | | -------- Q4S BEGIN -------------> | | |||
| <------- Q4S BEGIN -------------- | | | <------- Q4S BEGIN -------------- | | |||
| | | | | | |||
| ------- Q4S BEGIN --------------> | | | ------- Q4S BEGIN --------------> | | |||
| <------ Q4S 200 OK -------------- | | | <------ Q4S 200 OK -------------- | | |||
| | | | | | |||
| | | | | | |||
+-----------------------------------------------+ | +-----------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section anchor="sec-8.2" numbered="true" toc="default"> | ||||
<section title="Multiple Quality Sessions in Parallel" anchor="section-8. | <name>Multiple Quality Sessions in Parallel</name> | |||
2"><t> | <t> | |||
A Q4S session is intended to be used for an application. It means | A Q4S session is intended to be used for an application. This means | |||
that for using the application, the client MUST establish only one | that for using the application, the client <bcp14>MUST</bcp14> establish only | |||
one | ||||
Q4S session against the server. Indeed, the relation between | Q4S session against the server. Indeed, the relation between | |||
session-id and application is 1 to 1.</t> | the Session-Id and the application is 1 to 1.</t> | |||
<t> | ||||
<t> | ||||
If a user wants to participate in several independent Q4S sessions | If a user wants to participate in several independent Q4S sessions | |||
simultaneously against different servers (or against the same | simultaneously against different servers (or against the same | |||
server) it can execute different Q4S clients to establish | server), it can execute different Q4S clients to establish | |||
separately different Q4S sessions but it is NOT RECOMMENDED, | separately different Q4S sessions, but it is <bcp14>NOT RECOMMENDED</bcp14> | |||
because:</t> | because:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>The establishment of a new Q4S session may af | <li>The establishment of a new Q4S session may affect other | |||
fect other | ||||
running applications over other Q4S sessions during bandwidth | running applications over other Q4S sessions during bandwidth | |||
measurement.</t> | measurement.</li> | |||
<li>If the Negotiation phase is executed separately before | ||||
<t>If the negotiation phase is executed separately before | ||||
running any application, the summation of bandwidth | running any application, the summation of bandwidth | |||
requirements could not be met when the applications are | requirements could not be met when the applications are | |||
running in parallel.</t> | running in parallel.</li> | |||
</ul> | ||||
</list> | </section> | |||
</t> | <section anchor="sec-8.3" numbered="true" toc="default"> | |||
<name>General Client Behavior</name> | ||||
</section> | <t> | |||
A Q4S client has different behaviors. We will use letters X, Y, and Z to | ||||
<section title="General Client bBhavior" anchor="section-8.3"><t> | designate each different behavior (follow the letters in | |||
A Q4S Client has different behaviors. We will use letters X,Y,Z to | <xref target="ref-phases-client-behaviors" format="default"/> and their descr | |||
designate each different behavior (follow the letter bullets in | iptions below).</t> | |||
figure 16).</t> | <dl newline="false" spacing="normal" indent="4"> | |||
<dt>X)</dt> | ||||
<t><list hangIndent="3" style="hanging"> | <dd>When it sends messages over TCP (methods BEGIN, READY, | |||
<t hangText="X)">When it sends messages over TCP (methods BEGIN, READY, Q4S-ALER | Q4S-ALERT, Q4S-RECOVERY, and CANCEL), it behaves strictly like a state | |||
T, Q4S-RECOVERY and CANCEL) it behaves strictly like a state | ||||
machine that sends requests and waits for responses. Depending | machine that sends requests and waits for responses. Depending | |||
on the response type it enters in a new state.</t> | on the response type, it enters into a new state.</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | ||||
<t> | ||||
When it sends UDP messages (methods PING and BWIDTH), a Q4S client | When it sends UDP messages (methods PING and BWIDTH), a Q4S client | |||
is not strictly a state machine that sends messages and waits for | is not strictly a state machine that sends messages and waits for | |||
responses because:</t> | responses because of the following:</t> | |||
<dl newline="false" spacing="normal" indent="4"> | ||||
<t><list hangIndent="3" style="hanging"> | <dt>Y)</dt> | |||
<t hangText="Y)">At latency, jitter and packet loss measurement, the PING | <dd>During the measurement of latency, jitter, and packet loss, the PI | |||
requests are sent periodically, not after receiving the response | NG | |||
to the previous request. In addition, the client MUST answer the | requests are sent periodically, not just after receiving the response | |||
to the previous request. In addition, the client <bcp14>MUST</bcp14> answe | ||||
r the | ||||
PING requests coming from the server, therefore the client | PING requests coming from the server, therefore the client | |||
assumes temporarily the role of a server.</t> | assumes temporarily the role of a server.</dd> | |||
</dl> | ||||
</list> | <dl newline="false" spacing="normal" indent="4"> | |||
</t> | <dt>Z)</dt> | |||
<dd>During the bandwidth and packet loss measurement stage, the client | ||||
<t><list hangIndent="3" style="hanging"> | ||||
<t hangText="Z)">At bandwidth and packet loss measurement stage, the client | ||||
does not expect to receive responses when sending BWIDTH | does not expect to receive responses when sending BWIDTH | |||
requests to the server. In addition, it MUST receive and process | requests to the server. In addition, it <bcp14>MUST</bcp14> receive and pr ocess | |||
all server messages in order to achieve the downlink | all server messages in order to achieve the downlink | |||
measurement.</t> | measurement.</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | ||||
<t> | ||||
The Q4S-ALERT and CANCEL may have a conventional answer if an | The Q4S-ALERT and CANCEL may have a conventional answer if an | |||
error is produced, otherwise the corresponding answer is formatted | error is produced, otherwise the corresponding answer is formatted | |||
as a request message.</t> | as a request message.</t> | |||
<figure anchor="ref-phases-client-behaviors"> | ||||
<figure title="Phases & client behaviors" anchor="ref-phases-client-b | <name>Phases and Client Behaviors</name> | |||
ehaviors"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+-----------+------------------------+-----------+-----------+ | +-----------+------------------------+-----------+-----------+ | |||
| Handshake | Negotiation |Continuity |Termination| | | Handshake | Negotiation |Continuity |Termination| | |||
| Phase | Phase | Phase | Phase | | | Phase | Phase | Phase | Phase | | |||
| | | | | | | | | | | | |||
| X ---------> Y --> X --> Z --> X ---> Y --> X ---> X | | | X ---------> Y --> X --> Z --> X ---> Y --> X ---> X | | |||
| | A | A | | A | | | | | | A | A | | A | | | | |||
| | | | | | | | | | | | | | | | | | | | | | | | |||
| | +-----+ +-----+ | +-----+ | | | | | +-----+ +-----+ | +-----+ | | | |||
| | | | | | | | | | | | |||
+------------------------------------------------+-----------+ | +------------------------------------------------+-----------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<section title="Generating Requests" anchor="section-8.3.1"><t> | <section anchor="sec-8.3.1" numbered="true" toc="default"> | |||
A valid Q4S request formulated by a Client MUST, at a minimum, | <name>Generating Requests</name> | |||
contains the following header fields:</t> | <t> | |||
A valid Q4S request formulated by a client <bcp14>MUST</bcp14>, at a minimum, | ||||
<t><list style="symbols"><t>If no SDP is included: the header Session-Id | contain the following header fields:</t> | |||
and Sequence-Number are mandatory.</t> | <dl> | |||
<dt>If no SDP is included:</dt><dd>the header fields Session-Id and | ||||
<t>If SDP is included: Session-Id is embedded into SDP, | Sequence-Number are mandatory.</dd> | |||
therefore the inclusion of Session-Id header is optional but | <dt>If SDP is included:</dt><dd>the Session-Id is embedded into the | |||
if present must have the same value. Measurements are | SDP, | |||
therefore the inclusion of the Session-Id header field is optional, but | ||||
if present, must have the same value. Measurements are | ||||
embedded into the SDP only for Q4S-ALERT messages in order to | embedded into the SDP only for Q4S-ALERT messages in order to | |||
be signed.</t> | be signed.</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | At any time, if the server sends new SDP with updated values, | |||
the client <bcp14>MUST</bcp14> take it into account.</t> | ||||
<t> | </section> | |||
At any time, if the server sends a new SDP with updated values, | </section> | |||
client MUST take it into account.</t> | <section anchor="sec-8.4" numbered="true" toc="default"> | |||
<name>General Server Behavior</name> | ||||
</section> | <t> | |||
</section> | ||||
<section title="General Server Behavior" anchor="section-8.4"><t> | ||||
If a server does not understand a header field in a request (that | If a server does not understand a header field in a request (that | |||
is, the header field is not defined in this specification or in | is, the header field is not defined in this specification or in | |||
any supported extension), the server MUST ignore that header field | any supported extension), the server <bcp14>MUST</bcp14> ignore that header f ield | |||
and continue processing the message.</t> | and continue processing the message.</t> | |||
<t> | ||||
<t> | The role of the server is changed at Negotiation and Continuity | |||
The role of the server is changed at negotiation and continuity | phases, in which the server <bcp14>MUST</bcp14> send packets to measure jitte | |||
phases, in which server MUST send packets to measure jitter, | r, | |||
latency and bandwidth. Therefore, the different behaviors of | latency, and bandwidth. Therefore, the different behaviors of | |||
server are (follow the letter bullets in the figure 17):</t> | the server are (follow the letters in <xref target="ref-phases-server-behavio | |||
urs" format="default"/> | ||||
<t><list hangIndent="3" style="hanging"> | and their descriptions below):</t> | |||
<t hangText="R)"> | <dl newline="false" spacing="normal" indent="4"> | |||
<dt>R)</dt> | ||||
<dd> | ||||
When the client sends messages over TCP (methods BEGIN, | When the client sends messages over TCP (methods BEGIN, | |||
READY Q4S-ALERT, Q4S-RECOVERY and CANCEL) it behaves strictly | READY Q4S-ALERT, Q4S-RECOVERY, and CANCEL), it behaves strictly | |||
like a state machine that receives messages and sends | like a state machine that receives messages and sends | |||
responses.</t> | responses.</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | ||||
<t> | ||||
When the client begins to send UDP messages (methods PING and | When the client begins to send UDP messages (methods PING and | |||
BWIDTH), a Q4S server is not strictly a state machine that | BWIDTH), a Q4S server is not strictly a state machine that | |||
receives messages and sends responses because:</t> | receives messages and sends responses because of the following:</t> | |||
<dl newline="false" spacing="normal" indent="4"> | ||||
<t><list hangIndent="3" style="hanging"> | <dt>S)</dt> | |||
<t hangText="S)"> | <dd> | |||
At latency, jitter and packet loss measurement, the PING | During the measurement of latency, jitter, and packet loss, the PING | |||
requests are sent periodically by the client but also by the | requests are sent periodically by the client and also by the | |||
server. In this case the server behaves as a server answering | server. In this case, the server behaves as a server answering | |||
client requests but also behaves temporarily as a client, | client requests but also behaves temporarily as a client, | |||
sending PING requests toward the client and receiving | sending PING requests toward the client and receiving | |||
responses.</t> | responses.</dd> | |||
</dl> | ||||
</list> | <dl newline="false" spacing="normal" indent="4"> | |||
</t> | <dt>T)</dt> | |||
<dd> | ||||
<t><list hangIndent="3" style="hanging"> | During bandwidth and packet loss measurement, the server sends | |||
<t hangText="T)"> | BWIDTH requests to the client. In addition, it <bcp14>MUST</bcp14> receive | |||
At bandwidth and packet loss measurement, the server sends | and | |||
BWIDTH requests to the client. In addition, it MUST receive and | ||||
process client messages in order to achieve the uplink | process client messages in order to achieve the uplink | |||
measurement.</t> | measurement.</dd> | |||
</dl> | ||||
</list> | <t> | |||
</t> | ||||
<t> | ||||
The Q4S-ALERT and CANCEL may have a conventional answer if an | The Q4S-ALERT and CANCEL may have a conventional answer if an | |||
error is produced, otherwise the corresponding answer is formatted | error is produced, otherwise the corresponding answer is formatted | |||
as a request message.</t> | as a request message.</t> | |||
<figure anchor="ref-phases-server-behaviours"> | ||||
<figure title="Phases & server behaviours" anchor="ref-phases-server- | <name>Phases and Server Behaviors</name> | |||
behaviours"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+-----------+------------------------+-----------+-----------+ | +-----------+------------------------+-----------+-----------+ | |||
| Handshake | Negotiation |Continuity |Termination| | | Handshake | Negotiation |Continuity |Termination| | |||
| Phase | Phase | Phase | Phase | | | Phase | Phase | Phase | Phase | | |||
| | | | | | | | | | | | |||
| R ---------> S --> R --> T --> R ---> S --> R ---> R | | | R ---------> S --> R --> T --> R ---> S --> R ---> R | | |||
| | A | A | | A | | | | | | A | A | | A | | | | |||
| | | | | | | | | | | | | | | | | | | | | | | | |||
| | +-----+ +-----+ | +-----+ | | | | | +-----+ +-----+ | +-----+ | | | |||
| | | | | | | | | | | | |||
+------------------------------------------------+-----------+ | +------------------------------------------------+-----------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec-9" numbered="true" toc="default"> | |||
<name>Implementation Recommendations</name> | ||||
<section title="Implementation Recommendations" anchor="section-9"><secti | <section anchor="sec-9.1" numbered="true" toc="default"> | |||
on title="Default Client Constraints" anchor="section-9.1"><t> | <name>Default Client Constraints</name> | |||
To provide a default configuration, it would be good that the | <t> | |||
client had a configurable set of Quality headers in the | To provide a default configuration, it would be good if the | |||
implementation settings menu. Otherwise these quality headers will | client had a configurable set of quality headers in the | |||
implementation settings menu. Otherwise, these quality headers will | ||||
not be present in the first message.</t> | not be present in the first message.</t> | |||
<t> | ||||
<t> | ||||
Different business models (out of scope of this proposal) may be | Different business models (out of scope of this proposal) may be | |||
achieved: depending on who pays for the quality session, the | achieved: depending on who pays for the quality session, the | |||
server can accept certain Client parameters sent in the first | server can accept certain client parameters sent in the first | |||
message, or force billing parameters on the server side.</t> | message, or force billing parameters on the server side.</t> | |||
</section> | ||||
</section> | <section anchor="sec-9.2" numbered="true" toc="default"> | |||
<name>Latency and Jitter Measurements</name> | ||||
<section title="Latency and Jitter Measurements" anchor="section-9.2"><t> | <t> | |||
Different client and server implementations may send a different | Different client and server implementations may send a different | |||
number of PING messages for measuring, although at least 255 | number of PING messages for measuring, although at least 255 | |||
messages should be considered to perform the latency measurement. | messages should be considered to perform the latency measurement. | |||
The Stage 0 measurements only may be considered ended when neither | The Stage 0 measurements may be considered ended only when neither | |||
client nor server receive new PING messages after an | the client nor server receive new PING messages after an | |||
implementation-dependent guard time. Only after, client can send a | implementation-dependent guard time. Only after, the client can send a | |||
"READY 1" message.</t> | "READY 1" message.</t> | |||
<t> | ||||
<t> | ||||
In execution systems, where the timers are not accurate, a | In execution systems, where the timers are not accurate, a | |||
recommended approach consists of including the optional header | recommended approach consists of including the optional Timestamp header fiel | |||
"Timestamp" in the PING request with the time in which the message | d | |||
in the PING request with the time in which the message | ||||
has been sent. This allows an accurate measurement of the jitter | has been sent. This allows an accurate measurement of the jitter | |||
even with no identical intervals of time between PINGs.</t> | even with no identical intervals of time between PINGs.</t> | |||
</section> | ||||
</section> | <section anchor="sec-9.3" numbered="true" toc="default"> | |||
<name>Bandwidth Measurements</name> | ||||
<section title="Bandwidth Measurements" anchor="section-9.3"><t> | <t> | |||
In programming languages or Operating Systems with limited timers | In programming languages or operating systems with limited timers | |||
or clock resolution, it is recommended to use an approach based on | or clock resolution, it is recommended to use an approach based on | |||
several intervals to send messages of 1KB (= 8000 bits), in order | several intervals to send messages of 1KB (= 8000 bits) in order | |||
to reach the required bandwidth consumption using a rate as close | to reach the required bandwidth consumption, using a rate as close | |||
as possible to a constant rate.</t> | as possible to a constant rate.</t> | |||
<t> | ||||
<t> | ||||
For example, if the resolution is 1 millisecond, and the bandwidth | For example, if the resolution is 1 millisecond, and the bandwidth | |||
to reach is 11Mbps, a good approach consists of sending: </t> | to reach is 11 Mbps, a good approach consists of sending: </t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
1 message of 1KB every 1 millisecond + | 1 message of 1KB every 1 millisecond + | |||
1 message of 1KB every 3 milliseconds + | 1 message of 1KB every 3 milliseconds + | |||
1 message of 1KB every 23 milliseconds | 1 message of 1KB every 23 milliseconds | |||
]]></artwork></figure> | ]]></artwork> | |||
<t> | ||||
<t> | The number of intervals depends on the required bandwidth and accuracy | |||
The number of intervals depends on required bandwidth and accuracy | ||||
that the programmer wants to achieve.</t> | that the programmer wants to achieve.</t> | |||
<t> | ||||
<t> | ||||
Considering messages of 1KB (= 8000 bits), a general approach to | Considering messages of 1KB (= 8000 bits), a general approach to | |||
determine these intervals is | determine these intervals is the following: | |||
<list style="format (%d)"> | ||||
<t> Compute Target bandwidth / 8000 bits. In the example above is | ||||
11Mbps/8000 = 1375 messages per second | ||||
</t> | ||||
<t> Divide the number of messages per second by 1000 to determine | </t> | |||
the number of messages per millisecond. 1375/1000 = 1'375. The | <ol spacing="normal" type="(%d)"> | |||
<li> Compute target bandwidth / 8000 bits. In the example above, it is | ||||
11 Mbps / 8000 = 1375 messages per second. | ||||
</li> | ||||
<li> Divide the number of messages per second by 1000 to determine | ||||
the number of messages per millisecond: 1375 / 1000 = 1.375. The | ||||
integer value is the number of messages per millisecond (in this | integer value is the number of messages per millisecond (in this | |||
case, one). The pending bandwidth is now 375 messages per second | case, one). The pending bandwidth is now 375 messages per second. | |||
</t> | </li> | |||
<li> | ||||
<t> To achieve the 375 messages per second, use a sub-multiple of | <t> To achieve the 375 messages per second, use a submultiple of | |||
1000 which must be less than 375 | 1000, which must be less than 375: | |||
</t> | ||||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
1000 / 2 = 500 > 375 | ||||
1000/2 = 500 > 375 | ||||
1000/3 = 333 < 375 | ||||
]]></artwork></figure> | ||||
In this case a message every 3 ms is suitable. The new pending | ||||
target bandwidth is 375 -333 = 42 messages per second</t> | ||||
<t> Repeat the same strategy as point 3, to reach the pending | 1000 / 3 = 333 < 375 | |||
bandwidth. In this case, 23 ms is suitable because: | ]]></artwork> | |||
<t> | ||||
<figure><artwork><![CDATA[ | In this case, a message every 3 ms is suitable. The new pending | |||
target bandwidth is 375 - 333 = 42 messages per second.</t> | ||||
</li> | ||||
<li> | ||||
<t> Repeat the same strategy as point 3 to reach the pending | ||||
bandwidth. In this case, 23 ms is suitable because of the following: | ||||
1000/22 = 45 >42 | </t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
1000 / 22 = 45 > 42 | ||||
1000/23 = 43 >42 | 1000 / 23 = 43 > 42 | |||
1000 / 24 = 41.6 < 42 | 1000 / 24 = 41.6 < 42 | |||
]]></artwork> | ||||
]]></artwork></figure> | </li> | |||
</t> | </ol> | |||
</list> | <t> | |||
</t> | We can choose 24 ms, but then we need to cover an additional 0.4 | |||
messages per second (42 - 41.6 = 0.4), and 43 is a number higher than | ||||
<t> | ||||
We can choose 24 ms but then we need to cover additional 0.4 | ||||
messages per second (42-41.6=0.4) and 43 is a number higher than | ||||
42 but very close to it.</t> | 42 but very close to it.</t> | |||
<t> | ||||
<t> | ||||
In execution systems where the timers are not accurate, a | In execution systems where the timers are not accurate, a | |||
recommended approach consists of checking at each interval the | recommended approach consists of checking at each interval the | |||
number of packets that should have been sent at this timestamp | number of packets that should have been sent at this timestamp | |||
since origin and send the needed number of packets in order to | since origin and send the needed number of packets in order to | |||
reach the required bandwidth.</t> | reach the required bandwidth.</t> | |||
<t> | ||||
<t> | The shorter the packets used, the more constant the rate of | |||
The shorter packets are used, the more constant is the rate of | ||||
bandwidth measurement. However, this may stress the execution | bandwidth measurement. However, this may stress the execution | |||
system in charge of receiving and processing packets. As a | system in charge of receiving and processing packets. As a | |||
consequence, some packets may be lost because of stack overflows. | consequence, some packets may be lost because of stack overflows. | |||
To deal with this potential issue, a larger packet is RECOMMENDED | To deal with this potential issue, a larger packet is <bcp14>RECOMMENDED</bcp | |||
(2KB or more) taking into account the overhead produced by the | 14> | |||
chunks headers.</t> | (2KB or more), taking into account the overhead produced by the | |||
chunks' headers.</t> | ||||
</section> | </section> | |||
<section anchor="sec-9.4" numbered="true" toc="default"> | ||||
<section title="Packet Loss Measurement Resolution" anchor="section-9.4"> | <name>Packet Loss Measurement Resolution</name> | |||
<t> | <t> | |||
Depending on application nature and network conditions, a packet | Depending on the application nature and network conditions, a packet | |||
loss resolution less than 1% may be needed. In such cases, there | loss resolution less than 1% may be needed. In such cases, there | |||
is no limit to the number of samples used for this calculation. A | is no limit to the number of samples used for this calculation. A | |||
tradeoff between time and resolution should be reached in each | trade-off between time and resolution should be reached in each | |||
case. For example, in order to have a resolution of 1/10000, the | case. For example, in order to have a resolution of 1/10000, the | |||
last 10000 samples should be considered in the packet loss | last 10000 samples should be considered in the packet loss | |||
measured value.</t> | measured value.</t> | |||
<t> | ||||
<t> | ||||
The problem of this approach is the reliability of old samples. If | The problem of this approach is the reliability of old samples. If | |||
the interval used between PING messages is 50ms, then to have a | the interval used between PING messages is 50 ms, then to have a | |||
resolution of 1/1000 it takes 50 seconds and a resolution of | resolution of 1/1000, it takes 50 seconds, and a resolution of | |||
1/10000 takes 500 seconds (more than 8 minutes). The reliability | 1/10000 takes 500 seconds (more than 8 minutes). The reliability | |||
of a packet loss calculation based on a sliding window of 8 | of a packet loss calculation based on a sliding window of 8 | |||
minutes depends on how fast network conditions evolve.</t> | minutes depends on how fast network conditions evolve.</t> | |||
</section> | ||||
</section> | <section anchor="sec-9.5" numbered="true" toc="default"> | |||
<name>Measurements and Reactions</name> | ||||
<section title="Measurements and Reactions" anchor="section-9.5"><t> | <t> | |||
Q4S can be used as a mechanism to measure and trigger network | Q4S can be used as a mechanism to measure and trigger network | |||
tuning and application level actions (i.e. lowering video bit-rate, reduce mu | tuning and application-level actions (i.e. lowering video bit-rate, | |||
ltiplayer interaction speed, etc) in real-time in | reducing multiplayer interaction speed, etc.) in real time in | |||
order to reach the application constraints, addressing measured | order to reach the application constraints, addressing measured | |||
possible network degradation.</t> | possible network degradation.</t> | |||
</section> | ||||
</section> | <section anchor="sec-9.6" numbered="true" toc="default"> | |||
<name>Instability Treatments</name> | ||||
<section title="Instability Treatments" anchor="section-9.6"><t> | <t> | |||
There are two scenarios in which Q4S can be affected by network | There are two scenarios in which Q4S can be affected by network | |||
problems: loss of Q4S packets and outlier samples.</t> | problems: loss of Q4S packets and outlier samples.</t> | |||
<section anchor="sec-9.6.1" numbered="true" toc="default"> | ||||
<section title="Loss of Control Packets" anchor="section-9.6.1"><t> | <name>Loss of Control Packets</name> | |||
<t> | ||||
Lost UDP packets (PING or BWIDTH messages) don't cause any | Lost UDP packets (PING or BWIDTH messages) don't cause any | |||
problems for the Q4S state machine, but if TCP packets are | problems for the Q4S state machine, but if TCP packets are | |||
delivered too late (which we will consider as "lost"), some | delivered too late (which we will consider as "lost"), some | |||
undesirable consequences could arise.</t> | undesirable consequences could arise.</t> | |||
<t> | ||||
<t> | ||||
Q4S does have protection mechanisms to overcome these situations. | Q4S does have protection mechanisms to overcome these situations. | |||
Examples:</t> | Examples:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>If a BEGIN packet is lost or its correspondin | <li>If a BEGIN packet or its corresponding answer is lost, after | |||
g answer, after | a certain timeout, the client <bcp14>SHOULD</bcp14> resend another BEGIN | |||
a certain timeout, the client SHOULD resend another BEGIN | packet, resetting the session</li> | |||
packet, resetting the session</t> | <li>If a READY packet is lost, after a certain timeout, the | |||
client <bcp14>SHOULD</bcp14> resend another READY packet.</li> | ||||
<t>If a READY packet is lost, after a certain timeout, the | <li>If a Q4S-ALERT request or its corresponding answer is lost, | |||
client SHOULD resend another READY packet.</t> | after a certain timeout, the originator <bcp14>SHOULD</bcp14> resend anoth | |||
er | ||||
<t>If a QOS ALERT request is lost or its corresponding answer, | Q4S-ALERT packet.</li> | |||
after a certain timeout, the originator SHOULD resend another | <li>If a CANCEL request or its corresponding answer is lost, | |||
Q4S-ALERT packet.</t> | after a certain timeout, the originator <bcp14>SHOULD</bcp14> resend anoth | |||
er | ||||
<t>If a CANCEL request is lost or its corresponding answer, | CANCEL packet.</li> | |||
after a certain timeout, the originator SHOULD resend another | </ul> | |||
CANCEL packet.</t> | </section> | |||
<section anchor="sec-9.6.2" numbered="true" toc="default"> | ||||
</list> | <name>Outlier Samples</name> | |||
</t> | <t> | |||
</section> | ||||
<section title="Outlier Samples" anchor="section-9.6.2"><t> | ||||
Outlier samples are those jitter or latency values far from the | Outlier samples are those jitter or latency values far from the | |||
general/average values of most samples.</t> | general/average values of most samples.</t> | |||
<t> | ||||
<t> | Hence, the Q4S default measurement method uses the statistical median | |||
Hence Q4S default measurement method uses the statistical median | formula for latency calculation, and the outlier samples are | |||
formula for latency calculation, the outlier samples are | neutralized. This is a very common filter for noise or errors | |||
neutralized. This is a very common filtering for noise or errors | ||||
on signal and image processing.</t> | on signal and image processing.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-9.7" numbered="true" toc="default"> | ||||
</section> | <name>Scenarios</name> | |||
<t> | ||||
<section title="Scenarios" anchor="section-9.7"><t> | ||||
Q4S could be used in two scenarios:</t> | Q4S could be used in two scenarios:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>client to ACP (Application content provider)< | <li>client to ACP </li> | |||
/t> | <li>client to client (peer-to-peer scenario)</li> | |||
</ul> | ||||
<t>client to client (peer to peer scenario)</t> | <section anchor="sec-9.7.1" numbered="true" toc="default"> | |||
<name>Client to ACP</name> | ||||
</list> | <t> | |||
</t> | ||||
<section title="Client to ACP" anchor="section-9.7.1"><t> | ||||
One server:</t> | One server:</t> | |||
<t> | ||||
<t> | It is the common scenario in which the client contacts the server to | |||
It is the common scenario in which client contact server to | ||||
establish a Q4S session.</t> | establish a Q4S session.</t> | |||
<t> | ||||
<t> | ||||
N servers:</t> | N servers:</t> | |||
<t> | ||||
<t> | ||||
In Content Delivery Networks and in general applications where | In Content Delivery Networks and in general applications where | |||
delivery of contents can be achieved by different delivery nodes, | delivery of contents can be achieved by different delivery nodes, | |||
two working mechanisms can be defined</t> | two working mechanisms can be defined:</t> | |||
<dl> | ||||
<t><list style="symbols"><t>Starting mode: End-user may run Q4S against s | <dt>Starting mode:</dt><dd>the end user may run Q4S against several | |||
everal delivery | delivery | |||
nodes and after some seconds choose the best one to start the | nodes and after some seconds choose the best one to start the | |||
multimedia session</t> | multimedia session.</dd> | |||
<dt>Prevention mode:</dt><dd>during a streaming session, the user ke | ||||
<t>Prevention mode: During streaming session, user keeps several | eps several | |||
Q4S dialogs against different alternative delivery nodes. In | Q4S dialogs against different alternative delivery nodes. In | |||
case of congestion, end-user MAY change to the best | case of congestion, the end user <bcp14>MAY</bcp14> change to the best | |||
alternative delivery node</t> | alternative delivery node.</dd> | |||
</dl> | ||||
</list> | </section> | |||
</t> | <section anchor="sec-9.7.2" numbered="true" toc="default"> | |||
<name>Client to Client</name> | ||||
</section> | <t> | |||
In order to solve the client-to-client scenario, a Q4S register | ||||
<section title="Client to Client" anchor="section-9.7.2"><t> | function <bcp14>MUST</bcp14> be implemented. This allows clients to contact e | |||
In order to solve the client to client scenario, a Q4S register | ach | |||
function MUST be implemented. This allows clients contact each | ||||
other for sending the BEGIN message. In this scenario, the | other for sending the BEGIN message. In this scenario, the | |||
Register server would be used by peers to publish their Q4S-Resource-Server h | Register server would be used by peers to publish their Q4S-Resource-Server h | |||
eader and their public IP address to make | eader and their public IP address to | |||
possible the assumption of server role.</t> | enable the assumption of the server role.</t> | |||
<t> | ||||
<t> | The register function is out of scope of this protocol version | |||
The register function is out of scope of this protocol version, | because different HTTP mechanisms can be used, and Q4S <bcp14>MUST NOT</bcp14 | |||
because different HTTP mechanisms can be used and Q4S MUST NOT | > | |||
force any.</t> | force any.</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec-10" numbered="true" toc="default"> | |||
<name>Security Considerations</name> | ||||
</section> | <section anchor="sec-10.1" numbered="true" toc="default"> | |||
<name>Confidentiality Issues</name> | ||||
<section title="Security Considerations" anchor="section-10"><section tit | <t> | |||
le="Confidentiality Issues" anchor="section-10.1"><t> | Because Q4S does not transport any application data, Q4S does not | |||
Hence Q4S does not transport any application data, Q4S does not | ||||
jeopardize the security of application data. However, other | jeopardize the security of application data. However, other | |||
certain considerations may take place, like identity impersonation | certain considerations may take place, like identity impersonation | |||
and measurements privacy and integrity.</t> | and measurements privacy and integrity.</t> | |||
</section> | ||||
</section> | <section anchor="sec-10.2" numbered="true" toc="default"> | |||
<name>Integrity of Measurements and Authentication</name> | ||||
<section title="Integrity of Measurements and Authentication" anchor="sec | <t> | |||
tion-10.2"><t> | ||||
Identity impersonation could potentially produce anomalous Q4S | Identity impersonation could potentially produce anomalous Q4S | |||
measurements. If this attack is based on spoofing of server IP | measurements. If this attack is based on spoofing of the server IP | |||
address, it can be avoided using the digital signature mechanism, | address, it can be avoided using the digital signature mechanism | |||
included in the SDP. The network can easily validate this digital | included in the SDP. The network can easily validate this digital | |||
signature using the public key of the server certificate.</t> | signature using the public key of the server certificate.</t> | |||
<t> | ||||
<t> | ||||
Integrity of Q4S measurements under any malicious manipulation | Integrity of Q4S measurements under any malicious manipulation | |||
(such as Man-in-the-Middle (MITM) attack) relay on the same | (such as a Man-in-the-Middle (MITM) attack) relies on the same | |||
mechanism, the SDP signature.</t> | mechanism, the SDP signature.</t> | |||
<t> | ||||
<t> | The Signature header field contains the signed hash value of the SDP | |||
The Signature header contains the signed hash value of the SDP | ||||
body in order to protect all the SDP data, including the | body in order to protect all the SDP data, including the | |||
measurements. This signature not only protects the integrity of | measurements. This signature not only protects the integrity of | |||
data but also authenticates the server.</t> | data but also authenticates the server.</t> | |||
</section> | ||||
</section> | <section anchor="sec-10.3" numbered="true" toc="default"> | |||
<name>Privacy of Measurements</name> | ||||
<section title="Privacy of Measurements" anchor="section-10.3"><t> | <t> | |||
This protocol could be supported over IPSec. Q4S relays on UDP and | This protocol could be supported over IPsec. Q4S relies on UDP and | |||
TCP, and IPSec supports both. If Q4S is used for application-based | TCP, and IPsec supports both. If Q4S is used for application-based | |||
QoS, then IPsec is operationally valid but if Q4S is used to | QoS, then IPsec is operationally valid; however, if Q4S is used to | |||
trigger network-based actions, then measurements could be wrong, | trigger network-based actions, then measurements could be incorrect | |||
unless IPSec ports be considered at any potential action over the | unless the IPsec ports can be a target of potential action over the | |||
network (such as prioritization of certain application flows).</t> | network (such as prioritizing IPsec flows to measure the new, upgraded | |||
state of certain application flows). </t> | ||||
</section> | </section> | |||
<section anchor="sec-10.4" numbered="true" toc="default"> | ||||
<section title="Availability Issues" anchor="section-10.4"><t> | <name>Availability Issues</name> | |||
Any loss of connectivity may interrupt the availability of Q4S | <t> | |||
service, and results in higher packet-loss measurements, which is | Any loss of connectivity may interrupt the availability of the Q4S | |||
service and may result in higher packet loss measurements, which is | ||||
just the desired behavior in these situations.</t> | just the desired behavior in these situations.</t> | |||
<t> | ||||
<t> | ||||
In order to mitigate availability issues caused by malicious | In order to mitigate availability issues caused by malicious | |||
attacks (such as DoS and DDoS), a good practice is to enable Q4S | attacks (such as DoS and DDoS), a good practice is to enable the Q4S | |||
service only for authenticated users. Q4S can be launched after | service only for authenticated users. Q4S can be launched after the | |||
user is authenticated by the application. At this moment, his IP | user is authenticated by the application. At this moment, the user's IP | |||
address is known and the Q4S service may be enabled for this IP | address is known, and the Q4S service may be enabled for this IP | |||
address. Otherwise Q4S service should appear unreachable.</t> | address. Otherwise, the Q4S service should appear unreachable.</t> | |||
</section> | ||||
</section> | <section anchor="sec-10.5" numbered="true" toc="default"> | |||
<name>Bandwidth Occupancy Issues</name> | ||||
<section title="Bandwidth Occupancy Issues" anchor="section-10.5"><t> | <t> | |||
Q4S bandwidth measurement is limited to the application needs. It | Q4S bandwidth measurement is limited to the application needs. It | |||
means that all available bandwidth is not measured, but only the | means that all available bandwidth is not measured, but only the | |||
fraction required by the application. This allows other | fraction required by the application. This allows other | |||
applications to use normally the rest of available bandwidth.</t> | applications to use the rest of available bandwidth normally.</t> | |||
<t> | ||||
<t> | However, a malicious Q4S client could restart Q4S sessions just | |||
However, a malicious Q4S client could re-starts Q4S sessions just | after finishing the Negotiation phase. The consequence would be to | |||
after finishing the negotiation phase. The consequence would be to | ||||
waste bandwidth for nothing.</t> | waste bandwidth for nothing.</t> | |||
<t> | ||||
<t> | ||||
In order to mitigate this possible anomalous behavior, it is | In order to mitigate this possible anomalous behavior, it is | |||
RECOMMENDED to configure the server to reject sessions from the | <bcp14>RECOMMENDED</bcp14> to configure the server to reject sessions from th | |||
same end-point when this situation is detected.</t> | e | |||
same endpoint when this situation is detected.</t> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec-11" numbered="true" toc="default"> | |||
<name>Future Code Point Requirements</name> | ||||
<section title="Future Code Point Requirements" anchor="section-11"><t> | <t> | |||
If the ideas described in this document are pursued to become a | If the ideas described in this document are pursued to become a | |||
protocol specification, then the code points described in this | protocol specification, then the code points described in this | |||
document will need to be assigned by IANA.</t> | document will need to be assigned by IANA.</t> | |||
<section anchor="sec-11.1" numbered="true" toc="default"> | ||||
<section title="Service Port" anchor="section-11.1"><t> | <name>Service Port</name> | |||
The need for an assigned PORT is to make possible a future Q4S | <t> | |||
aware network, capable of react by itself to Q4S alerts. A | An assigned port would make possible a future Q4S-aware | |||
network capable of reacting by itself to Q4S alerts. A | ||||
specific port would simplify the identification of the protocol by | specific port would simplify the identification of the protocol by | |||
network elements in charge of take possible reactive decisions. | network elements in charge of making possible reactive decisions. | |||
Therefore, the need for a port by IANA may be postponed to the | Therefore, the need for a port assignment by IANA may be postponed until ther | |||
need for a future Q4S aware network.</t> | e is the | |||
need for a future Q4S-aware network.</t> | ||||
<t> | <t> | |||
Service Name: Q4S</t> | Service Name: Q4S</t> | |||
<t> | ||||
<t> | ||||
Transport Protocol(s): TCP</t> | Transport Protocol(s): TCP</t> | |||
<dl newline="true" spacing="normal" indent="3"> | ||||
<t><list style="hanging" hangIndent="3"><t hangText="Assignee :"> | <dt>Assignee:</dt> | |||
<vspace blankLines="1"/> | <dd> | |||
Name : Jose Javier Garcia Aranda | <t> | |||
<vspace blankLines="1"/> | Name: Jose Javier Garcia Aranda | |||
</t> | ||||
<t> | ||||
Email: jose_javier.garcia_aranda@nokia.com | Email: jose_javier.garcia_aranda@nokia.com | |||
</t> | </t> | |||
</dd> | ||||
<t hangText="Contact :"> | <dt>Contact:</dt> | |||
<vspace blankLines="1"/> | <dd> | |||
Name : Jose Javier Garcia Aranda | <t> | |||
<vspace blankLines="1"/> | Name: Jose Javier Garcia Aranda | |||
</t> | ||||
<t> | ||||
Email: jose_javier.garcia_aranda@nokia.com | Email: jose_javier.garcia_aranda@nokia.com | |||
</t> | </t> | |||
</dd> | ||||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="normal" indent="6"> | |||
<dt>Description:</dt> | ||||
<t><list style="hanging" hangIndent="6"> | <dd> | |||
<t hangText="Description:"> | ||||
The service associated with this request is in | The service associated with this request is in | |||
charge of the establishment of new Q4S sessions, and during the | charge of the establishment of new Q4S sessions, and during the | |||
session manages the pass to a new protocol stage (handshake, | session, manages the handoff to a new protocol phase (Handshake, | |||
negotiation and continuity) as well as inform of alerts when | Negotiation and Continuity) as well as sends alerts when | |||
measurements do not meet the requirements.</t> | measurements do not meet the requirements.</dd> | |||
<dt>Reference:</dt> | ||||
<t hangText="Reference:"> | <dd> | |||
this document. This service does not use IP-layer | This document. This service does not use IP-layer | |||
broadcast, multicast, or anycast communication.</t> | broadcast, multicast, or anycast communication.</dd> | |||
</dl> | ||||
</list> | </section> | |||
</t> | </section> | |||
</section> | <section anchor="sec-12" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
</section> | <t>This document has no IANA actions.</t> | |||
</section> | ||||
</middle> | </middle> | |||
<back> | ||||
<back> | ||||
<references title="Normative References"> | ||||
<reference anchor="ref-1" target="https://www.rfc-editor.org/info/rfc7230 | ||||
"><front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | ||||
</title> | ||||
<author fullname="R. Fielding" initials="R." surname="Fielding" role="edi | ||||
tor"> | ||||
</author> | ||||
<author fullname="J. Reschke" initials="J." surname="Reschke" role="edito | ||||
r"> | ||||
</author> | ||||
<date month="June" year="2014"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7230"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7230"/> | ||||
</reference> | ||||
<reference anchor="ref-2" target="https://www.rfc-editor.org/info/rfc7231 | ||||
"><front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</tit | ||||
le> | ||||
<author fullname="R. Fielding" initials="R." surname="Fielding" role="edi | ||||
tor"> | ||||
</author> | ||||
<author fullname="J. Reschke" initials="J." surname="Reschke" role="edito | ||||
r"> | ||||
</author> | ||||
<date month="June" year="2014"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7231"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7231"/> | ||||
</reference> | ||||
<reference anchor="ref-3" target="https://www.rfc-editor.org/info/rfc7232 | ||||
"><front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</titl | ||||
e> | ||||
<author fullname="R. Fielding" initials="R." surname="Fielding" role="edi | ||||
tor"> | ||||
</author> | ||||
<author fullname="J. Reschke" initials="J." surname="Reschke" role="edito | ||||
r"> | ||||
</author> | ||||
<date month="June" year="2014"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7232"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7232"/> | ||||
</reference> | ||||
<reference anchor="ref-4" target="https://www.rfc-editor.org/info/rfc7233 | ||||
"><front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</title> | ||||
<author fullname="R. Fielding" initials="R." surname="Fielding" role="edi | ||||
tor"> | ||||
</author> | ||||
<author fullname="Y. Lafon" initials="Y." surname="Lafon" role="editor"> | ||||
</author> | ||||
<author fullname="J. Reschke" initials="J." surname="Reschke" role="edito | ||||
r"> | ||||
</author> | ||||
<date month="June" year="2014"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7233"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7233"/> | ||||
</reference> | ||||
<reference anchor="ref-5" target="https://www.rfc-editor.org/info/rfc7234 | ||||
"><front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title> | ||||
<author fullname="R. Fielding" initials="R." surname="Fielding" role="edi | ||||
tor"> | ||||
</author> | ||||
<author fullname="M. Nottingham" initials="M." surname="Nottingham" role= | ||||
"editor"> | ||||
</author> | ||||
<author fullname="J. Reschke" initials="J." surname="Reschke" role="edito | ||||
r"> | ||||
</author> | ||||
<date month="June" year="2014"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7234"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7234"/> | ||||
</reference> | ||||
<reference anchor="ref-6" target="https://www.rfc-editor.org/info/rfc7235 | ||||
"><front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title> | ||||
<author fullname="R. Fielding" initials="R." surname="Fielding" role="edi | ||||
tor"> | ||||
</author> | ||||
<author fullname="J. Reschke" initials="J." surname="Reschke" role="edito | ||||
r"> | ||||
</author> | ||||
<date month="June" year="2014"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7235"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7235"/> | ||||
</reference> | ||||
<reference anchor="ref-8" target="https://www.rfc-editor.org/info/rfc3550 | ||||
"><front> | ||||
<title>RTP: A Transport Protocol for Real-Time Applications</title> | ||||
<author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"> | ||||
</author> | ||||
<author fullname="S. Casner" initials="S." surname="Casner"> | ||||
</author> | ||||
<author fullname="R. Frederick" initials="R." surname="Frederick"> | ||||
</author> | ||||
<author fullname="V. Jacobson" initials="V." surname="Jacobson"> | ||||
</author> | ||||
<date month="July" year="2003"/> | ||||
</front> | ||||
<seriesInfo name="STD" value="64"/> | ||||
<seriesInfo name="RFC" value="3550"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3550"/> | ||||
</reference> | ||||
<!-- Version-Independent Properties of QUIC; companion document RFC YYYY --> | ||||
<reference anchor="ref-9"> | ||||
<front> | ||||
<title>Version-Independent Properties of QUIC</title> | ||||
<author initials='M' surname='Thomson' fullname='Martin Thomson'> | ||||
<organization /> | ||||
</author> | ||||
<date month='July' day='10' year='2019' /> | ||||
<abstract><t>This document defines the properties of the QUIC transport protocol | ||||
that are expected to remain unchanged over time as new versions of the protocol | ||||
are developed. Note to Readers Discussion of this draft takes place on the QU | ||||
IC working group mailing list (quic@ietf.org), which is archived at https://mail | ||||
archive.ietf.org/arch/search/?email_list=quic [1]. Working Group information ca | ||||
n be found at https://github.com/quicwg [2]; source code and issues list for thi | ||||
s draft can be found at https://github.com/quicwg/base-drafts/labels/-invariants | ||||
[3].</t></abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="YYYY"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFCYYYY"/> | ||||
</reference> | ||||
<reference anchor="ref-10" target="https://www.rfc-editor.org/info/rfc456 | ||||
6"><front> | ||||
<title>SDP: Session Description Protocol</title> | ||||
<author fullname="M. Handley" initials="M." surname="Handley"> | ||||
</author> | ||||
<author fullname="V. Jacobson" initials="V." surname="Jacobson"> | ||||
</author> | ||||
<author fullname="C. Perkins" initials="C." surname="Perkins"> | ||||
</author> | ||||
<date month="July" year="2006"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4566"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4566"/> | ||||
</reference> | ||||
<reference anchor="ref-11" target="https://www.rfc-editor.org/info/rfc211 | ||||
9"><front> | ||||
<title>Key words for use in RFCs to Indicate Requirement Levels</title> | ||||
<author fullname="S. Bradner" initials="S." surname="Bradner"> | ||||
</author> | ||||
<date month="March" year="1997"/> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="2119"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | ||||
<reference anchor="ref-12" target="https://www.rfc-editor.org/info/rfc398 | ||||
6"><front> | ||||
<title>Uniform Resource Identifier (URI): Generic Syntax</title> | ||||
<author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"> | ||||
</author> | ||||
<author fullname="R. Fielding" initials="R." surname="Fielding"> | ||||
</author> | ||||
<author fullname="L. Masinter" initials="L." surname="Masinter"> | ||||
</author> | ||||
<date month="January" year="2005"/> | ||||
</front> | ||||
<seriesInfo name="STD" value="66"/> | ||||
<seriesInfo name="RFC" value="3986"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3986"/> | ||||
</reference> | ||||
<reference anchor="ref-13" target="https://www.rfc-editor.org/info/rfc326 | ||||
4"><front> | ||||
<title>An Offer/Answer Model with Session Description Protocol (SDP)</tit | ||||
le> | ||||
<author fullname="J. Rosenberg" initials="J." surname="Rosenberg"> | ||||
</author> | ||||
<author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"> | ||||
</author> | ||||
<date month="June" year="2002"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3264"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3264"/> | ||||
</reference> | ||||
<reference anchor="ref-14" target="https://www.rfc-editor.org/info/rfc463 | ||||
4"><front> | ||||
<title>US Secure Hash Algorithms (SHA and HMAC-SHA)</title> | ||||
<author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"> | ||||
</author> | ||||
<author fullname="T. Hansen" initials="T." surname="Hansen"> | ||||
</author> | ||||
<date month="July" year="2006"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4634"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4634"/> | ||||
</reference> | ||||
<reference anchor="ref-15" target="https://www.rfc-editor.org/info/rfc801 | ||||
7"><front> | ||||
<title>PKCS #1: RSA Cryptography Specifications Version 2.2</title> | ||||
<author fullname="K. Moriarty" initials="K." surname="Moriarty" role="edi | ||||
tor"> | ||||
</author> | ||||
<author fullname="B. Kaliski" initials="B." surname="Kaliski"> | ||||
</author> | ||||
<author fullname="J. Jonsson" initials="J." surname="Jonsson"> | ||||
</author> | ||||
<author fullname="A. Rusch" initials="A." surname="Rusch"> | ||||
</author> | ||||
<date month="November" year="2016"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8017"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8017"/> | ||||
</reference> | ||||
<reference anchor="ref-16" target="https://www.rfc-editor.org/info/rfc793 | ||||
"><front> | ||||
<title>Transmission Control Protocol</title> | ||||
<author fullname="J. Postel" initials="J." surname="Postel"> | ||||
</author> | ||||
<date month="September" year="1981"/> | ||||
</front> | ||||
<seriesInfo name="STD" value="7"/> | ||||
<seriesInfo name="RFC" value="793"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC0793"/> | ||||
</reference> | ||||
<reference anchor="ref-17" target="https://www.rfc-editor.org/info/rfc768 | ||||
"><front> | ||||
<title>User Datagram Protocol</title> | ||||
<author fullname="J. Postel" initials="J." surname="Postel"> | ||||
</author> | ||||
<date month="August" year="1980"/> | ||||
</front> | ||||
<seriesInfo name="STD" value="6"/> | ||||
<seriesInfo name="RFC" value="768"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC0768"/> | ||||
</reference> | ||||
<reference anchor="ref-18" target="https://www.rfc-editor.org/info/rfc355 | ||||
0"><front> | ||||
<title>RTP: A Transport Protocol for Real-Time Applications</title> | ||||
<author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"> | ||||
</author> | ||||
<author fullname="S. Casner" initials="S." surname="Casner"> | ||||
</author> | ||||
<author fullname="R. Frederick" initials="R." surname="Frederick"> | ||||
</author> | ||||
<author fullname="V. Jacobson" initials="V." surname="Jacobson"> | ||||
</author> | ||||
<date month="July" year="2003"/> | ||||
</front> | ||||
<seriesInfo name="STD" value="64"/> | ||||
<seriesInfo name="RFC" value="3550"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3550"/> | ||||
</reference> | ||||
<reference anchor="ref-19" target="https://www.rfc-editor.org/info/rfc362 | ||||
9"><front> | ||||
<title>UTF-8, a transformation format of ISO 10646</title> | ||||
<author fullname="F. Yergeau" initials="F." surname="Yergeau"> | ||||
</author> | ||||
<date month="November" year="2003"/> | ||||
</front> | ||||
<seriesInfo name="STD" value="63"/> | ||||
<seriesInfo name="RFC" value="3629"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3629"/> | ||||
</reference> | ||||
<reference anchor="ref-20" target="https://www.rfc-editor.org/info/rfc532 | ||||
2"><front> | ||||
<title>Internet Message Format</title> | ||||
<author fullname="P. Resnick" initials="P." surname="Resnick" role="edito | ||||
r"> | ||||
</author> | ||||
<date month="October" year="2008"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5322"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5322"/> | ||||
</reference> | ||||
<reference anchor="ref-21" target="https://www.rfc-editor.org/info/rfc817 | ||||
4"><front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
<author fullname="B. Leiba" initials="B." surname="Leiba"> | ||||
</author> | ||||
<date month="May" year="2017"/> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<reference anchor="ref-22" target="https://www.rfc-editor.org/info/rfc326 | ||||
1"><front> | ||||
<title>SIP: Session Initiation Protocol</title> | ||||
<author fullname="J. Rosenberg" initials="J." surname="Rosenberg"> | ||||
</author> | ||||
<author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"> | ||||
</author> | ||||
<author fullname="G. Camarillo" initials="G." surname="Camarillo"> | ||||
</author> | ||||
<author fullname="A. Johnston" initials="A." surname="Johnston"> | ||||
</author> | ||||
<author fullname="J. Peterson" initials="J." surname="Peterson"> | ||||
</author> | ||||
<author fullname="R. Sparks" initials="R." surname="Sparks"> | ||||
</author> | ||||
<author fullname="M. Handley" initials="M." surname="Handley"> | ||||
</author> | ||||
<author fullname="E. Schooler" initials="E." surname="Schooler"> | ||||
</author> | ||||
<date month="June" year="2002"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3261"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3261"/> | ||||
</reference> | ||||
<!-- [rfced] [ref-23] URL: https://cseweb.ucsd.edu/classes/wi01/cse222/papers/ma | ||||
this-tcpmodel-ccr97.pdf --> | ||||
<reference anchor="ref-23"><front> | ||||
<title>The Macroscopic Behavior of the TCP Congestion Avoidance Algorithm | ||||
</title> | ||||
<author fullname="M. Mathis" initials="M." surname="Mathis"> | ||||
</author> | ||||
<author fullname="J. Semke" initials="J." surname="Semke"> | ||||
</author> | ||||
<author fullname="J. Mahdavi" initials="J." surname="Mahdavi"> | ||||
</author> | ||||
<author fullname="T. Ott" initials="T." surname="Ott"> | ||||
</author> | ||||
<date month="July" year="1997"/> | ||||
</front> | ||||
<seriesInfo name="Computer Communications Review," value="27(3)"/> | ||||
</reference> | ||||
<reference anchor="ref-24" target="https://www.rfc-editor.org/info/rfc364 | ||||
9"><front> | ||||
<title>HighSpeed TCP for Large Congestion Windows</title> | ||||
<author fullname="S. Floyd" initials="S." surname="Floyd"> | ||||
</author> | ||||
<date month="December" year="2003"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3649"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3649"/> | ||||
</reference> | ||||
<!-- draft-rhee-tcpm-cubic-02; Expired --> | ||||
<reference anchor='ref-25'> | ||||
<front> | ||||
<title>CUBIC for Fast Long-Distance Networks</title> | ||||
<author initials='I' surname='Rhee' fullname='Injong Rhee'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='L' surname='Xu' fullname='Lisong Xu'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='S' surname='Ha' fullname='Sangtae Ha'> | ||||
<organization /> | ||||
</author> | ||||
<date month='August' day='26' year='2008' /> | ||||
<abstract><t>CUBIC is an extension to the current TCP standards. The protocol d | ||||
iffers from the current TCP standards only in the congestion window adjustment f | ||||
unction in the sender side. In particular, it uses a cubic function instead of | ||||
a linear window increase of the current TCP standards to improve scalability and | ||||
stability under fast and long distance networks. BIC-TCP, a predecessor of CUB | ||||
IC, has been a default TCP adopted by Linux since year 2005 and has already been | ||||
deployed globally and in use for several years by the Internet community at lar | ||||
ge. CUBIC is using a similar window growth function as BIC-TCP and is designed | ||||
to be less aggressive and fairer to TCP in bandwidth usage than BIC-TCP while ma | ||||
intaining the strengths of BIC-TCP such as stability, window scalability and RTT | ||||
fairness. Through extensive testing in various Internet scenarios, we believe | ||||
that CUBIC is safe for deployment and testing in the global Internet. The inten | ||||
t of this document is to provide the protocol specification of CUBIC for a third | ||||
party implementation and solicit the community feedback through experimentation | ||||
on the performance of CUBIC. We expect this document to be eventually publishe | ||||
d as an experimental RFC.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='Work in Progress,' value='draft-rhee-tcpm-cubic-02' /> | ||||
</reference> | ||||
<!-- draft-sridharan-tcpm-ctcp-02; Expired --> | ||||
<reference anchor='ref-26'> | ||||
<front> | ||||
<title>Compound TCP: A New TCP Congestion Control for High-Speed and Long Distan | ||||
ce Networks</title> | ||||
<author initials='M' surname='Sridharan' fullname='Murali Sridharan'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='K' surname='Tan' fullname='Kun Tan'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='D' surname='Bansal' fullname='Deepak Bansal'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='D' surname='Thaler' fullname='Dave Thaler'> | ||||
<organization /> | ||||
</author> | ||||
<date month='November' day='11' year='2008' /> | ||||
<abstract><t>Compound TCP (CTCP) is a modification to TCP's congestion control m | ||||
echanism for use with TCP connections with large congestion windows. This docume | ||||
nt describes the Compound TCP algorithm in detail, and solicits experimentation | ||||
and feedback from the wider community. The key idea behind CTCP is to add a sca | ||||
lable delay-based component to the standard TCP's loss-based congestion control. | ||||
The sending rate of CTCP is controlled by both loss and delay components. The d | ||||
elay-based component has a scalable window increasing rule that not only efficie | ||||
ntly uses the link capacity, but on sensing queue build up, proactively reduces | ||||
the sending rate.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='Work in Progress,' value='draft-sridharan-tcpm-ctcp-02' /> | ||||
</reference> | ||||
<reference anchor="ref-27" target="https://www.rfc-editor.org/info/rfc465 | <displayreference target="I-D.ietf-quic-transport" to="QUIC"/> | |||
6"><front> | <displayreference target="I-D.rhee-tcpm-cubic" to="CUBIC"/> | |||
<title>A One-way Active Measurement Protocol (OWAMP)</title> | <displayreference target="I-D.sridharan-tcpm-ctcp" to="CTCP"/> | |||
<author fullname="S. Shalunov" initials="S." surname="Shalunov"> | <references> | |||
</author> | <name>References</name> | |||
<author fullname="B. Teitelbaum" initials="B." surname="Teitelbaum"> | <references> | |||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7230.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7231.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7232.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7233.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7234.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7235.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2818.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3986.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3629.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5322.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5234.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6234.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8017.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3264.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4566.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3550.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.0793.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.0792.xml"/> | ||||
<xi:include href="https://www.rfc-editor.org/refs/bibxml3/reference.I-D. | ||||
ietf-quic-transport.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4656.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5357.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3261.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.0768.xml"/> | ||||
<reference anchor="RENO"> | ||||
<front> | ||||
<title>The Macroscopic Behavior of the TCP Congestion Avoidance Algo | ||||
rithm</title> | ||||
<seriesInfo name="DOI" value="10.1145/263932.264023"/> | ||||
<author fullname="M. Mathis" initials="M." surname="Mathis"> | ||||
</author> | </author> | |||
<author fullname="A. Karp" initials="A." surname="Karp"> | <author fullname="J. Semke" initials="J." surname="Semke"> | |||
</author> | </author> | |||
<author fullname="J. Boote" initials="J." surname="Boote"> | <author fullname="J. Mahdavi" initials="J." surname="Mahdavi"> | |||
</author> | </author> | |||
<author fullname="M. Zekauskas" initials="M." surname="Zekauskas"> | <author fullname="T. Ott" initials="T." surname="Ott"> | |||
</author> | </author> | |||
<date month="September" year="2006"/> | <date month="July" year="1997"/> | |||
</front> | </front> | |||
<seriesInfo name="RFC" value="4656"/> | <refcontent>ACM SIGCOMM Computer Communication Review, pp. 67-82</re | |||
<seriesInfo name="DOI" value="10.17487/RFC4656"/> | fcontent> | |||
</reference> | </reference> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3649.xml"/> | ||||
<reference anchor="ref-28" target="https://www.rfc-editor.org/info/rfc535 | <!-- draft-rhee-tcpm-cubic-02; Expired since 2009 --> | |||
7"><front> | <xi:include href="https://www.rfc-editor.org/refs/bibxml3/reference.I-D. | |||
<title>A Two-Way Active Measurement Protocol (TWAMP)</title> | rhee-tcpm-cubic.xml"/> | |||
<author fullname="K. Hedayat" initials="K." surname="Hedayat"> | ||||
</author> | ||||
<author fullname="R. Krzanowski" initials="R." surname="Krzanowski"> | ||||
</author> | ||||
<author fullname="A. Morton" initials="A." surname="Morton"> | ||||
</author> | ||||
<author fullname="K. Yum" initials="K." surname="Yum"> | ||||
</author> | ||||
<author fullname="J. Babiarz" initials="J." surname="Babiarz"> | ||||
</author> | ||||
<date month="October" year="2008"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5357"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5357"/> | ||||
</reference> | ||||
</references> | ||||
<section title="Acknowledgments" anchor="section-13"><t> | <!-- draft-sridharan-tcpm-ctcp-02; Expired since 2009 --> | |||
<xi:include href="https://www.rfc-editor.org/refs/bibxml3/reference.I-D. | ||||
sridharan-tcpm-ctcp.xml"/> | ||||
</references> | ||||
</references> | ||||
<section anchor="sec-13" numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t> | ||||
Many people have made comments and suggestions contributing to | Many people have made comments and suggestions contributing to | |||
this document. In particular, we would like to thank:</t> | this document. In particular, we would like to thank:</t> | |||
<t> | ||||
<t> | <contact fullname="Victor Villagra"/>, <contact fullname="Sonia Herranz"/>, | |||
Victor Villagra, Sonia Herranz, Clara Cubillo Pastor, Francisco | <contact fullname="Clara Cubillo Pastor"/>, <contact fullname="Francisco Dura | |||
Duran Pina, Michael Scharf, Jesus Soto Viso and Federico Guillen.</t> | n Pina"/>, | |||
<contact fullname="Michael Scharf"/>, <contact fullname="Jesus Soto Viso"/>, | ||||
<t> | and | |||
<contact fullname="Federico Guillen"/>.</t> | ||||
<t> | ||||
Additionally, we want to thank the Spanish Centre for the | Additionally, we want to thank the Spanish Centre for the | |||
Development of Industrial Technology (CDTI) as well as the Spanish | Development of Industrial Technology (CDTI) as well as the Spanish | |||
Science and Tech Ministry which funds this initiative through | Science and Tech Ministry, which funds this initiative through | |||
their innovation programs.</t> | their innovation programs.</t> | |||
</section> | ||||
<section anchor="sec-14" numbered="false" toc="default"> | ||||
<name>Contributors</name> | ||||
<contact fullname="Jacobo Perez Lajo"> | ||||
<organization>Nokia Spain</organization> | ||||
<address> | ||||
<email>jacobo.perez@nokia.com</email> | ||||
</address> | ||||
</contact> | ||||
</section> | <contact fullname="Luis Miguel Diaz Vizcaino"> | |||
<organization>Nokia Spain</organization> | ||||
<section title="Contributors" anchor="section-14"><figure><artwork><![CDA | <address> | |||
TA[ | <email>Luismi.Diaz@nokia.com</email> | |||
Jacobo Perez Lajo | </address> | |||
Nokia Spain | </contact> | |||
Email: jacobo.perez@nokia.com | ||||
Luis Miguel Diaz Vizcaino | ||||
Nokia Spain | ||||
Email: Luismi.Diaz@nokia.com | ||||
Gonzalo Munoz Fernandez | ||||
Nokia Spain | ||||
Email: gonzalo.munoz_fernandez.ext@nokia.com | ||||
Manuel Alarcon Granero | <contact fullname="Gonzalo Munoz Fernandez"> | |||
Nokia Spain | <organization>Nokia Spain</organization> | |||
Email: manuel.alarcon_granero.ext@nokia.com | <address> | |||
<email>gonzalo.munoz_fernandez.ext@nokia.com</email> | ||||
</address> | ||||
</contact> | ||||
Francisco Jose juan Quintanilla | <contact fullname="Manuel Alarcon Granero"> | |||
Nokia Spain | <organization>Nokia Spain</organization> | |||
Email: francisco_jose.juan_quintanilla.ext@nokia.com | <address> | |||
<email>manuel.alarcon_granero.ext@nokia.com</email> | ||||
</address> | ||||
</contact> | ||||
Carlos Barcenilla | <contact fullname="Francisco Jose Juan Quintanilla"> | |||
Universidad Politecnica de Madrid | <organization>Nokia Spain</organization> | |||
<address> | ||||
<email>francisco_jose.juan_quintanilla.ext@nokia.com</email> | ||||
</address> | ||||
</contact> | ||||
Juan Quemada | <contact fullname="Carlos Barcenilla"> | |||
Universidad Politecnica de Madrid | <organization>Universidad Politecnica de Madrid</organization> | |||
Email: jquemada@dit.upm.es | </contact> | |||
Ignacio Maestro | <contact fullname="Juan Quemada"> | |||
Tecnalia Research & Innovation | <organization>Universidad Politecnica de Madrid</organization> | |||
Email: ignacio.maestro@tecnalia.com | <address> | |||
<email>jquemada@dit.upm.es</email> | ||||
</address> | ||||
</contact> | ||||
Lara Fajardo Ibanez | <contact fullname="Ignacio Maestro"> | |||
Optiva Media | <organization>Tecnalia Research & Innovation</organization> | |||
Email: lara.fajardo@optivamedia.com | <address> | |||
<email>ignacio.maestro@tecnalia.com</email> | ||||
</address> | ||||
</contact> | ||||
Pablo Lopez Zapico | <contact fullname="Lara Fajardo Ibañez"> | |||
Optiva Media | <organization>Optiva Media</organization> | |||
Email: Pablo.lopez@optivamedia.com | <address> | |||
<email>lara.fajardo@optivamedia.com</email> | ||||
</address> | ||||
</contact> | ||||
David Muelas Recuenco | <contact fullname="Pablo López Zapico"> | |||
Universidad Autonoma de Madrid | <organization>Optiva Media</organization> | |||
Email: dav.muelas@uam.es | <address> | |||
Jesus Molina Merchan | <email>Pablo.lopez@optivamedia.com</email> | |||
Universidad Autonoma de Madrid | </address> | |||
jesus.molina@uam.es | </contact> | |||
Jorge E. Lopez de Vergara Mendez | <contact fullname="David Muelas Recuenco"> | |||
Universidad Autonoma de Madrid | <organization>Universidad Autonoma de Madrid</organization> | |||
Email: jorge.lopez_vergara@uam.es | <address> | |||
<email>dav.muelas@uam.es</email> | ||||
</address> | ||||
</contact> | ||||
Victor Manuel Maroto Ortega | <contact fullname="Jesus Molina Merchan"> | |||
Optiva Media | <organization>Universidad Autonoma de Madrid</organization> | |||
Email: victor.maroto@optivamedia.com | <address> | |||
]]></artwork> | <email>jesus.molina@uam.es</email> | |||
</figure> | </address> | |||
</section> | </contact> | |||
</back> | <contact fullname="Jorge E. Lopez de Vergara Mendez"> | |||
<organization>Universidad Autonoma de Madrid</organization> | ||||
<address> | ||||
<email>jorge.lopez_vergara@uam.es</email> | ||||
</address> | ||||
</contact> | ||||
</rfc> | <contact fullname="Victor Manuel Maroto Ortega"> | |||
<organization>Optiva Media</organization> | ||||
<address> | ||||
<email>victor.maroto@optivamedia.com</email> | ||||
</address> | ||||
</contact> | ||||
</section> | ||||
</back> | ||||
</rfc> | ||||
End of changes. 595 change blocks. | ||||
3094 lines changed or deleted | 2453 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |