diff options
Diffstat (limited to 'doc/rfc/rfc8802.txt')
-rw-r--r-- | doc/rfc/rfc8802.txt | 3691 |
1 files changed, 3691 insertions, 0 deletions
diff --git a/doc/rfc/rfc8802.txt b/doc/rfc/rfc8802.txt new file mode 100644 index 0000000..9cb0691 --- /dev/null +++ b/doc/rfc/rfc8802.txt @@ -0,0 +1,3691 @@ + + + + +Independent Submission J.J. Aranda +Request for Comments: 8802 M. Cortés +Category: Informational Nokia +ISSN: 2070-1721 J. Salvachúa + Univ. Politecnica de Madrid + M. Narganes + Tecnalia + I. Martínez-Sarriegui + Optiva Media + July 2020 + + + The Quality for Service (Q4S) Protocol + +Abstract + + This memo describes an application-level protocol for the + communication of end-to-end QoS compliance information based on the + HyperText Transfer Protocol (HTTP) and the Session Description + Protocol (SDP). The Quality for Service (Q4S) protocol provides a + mechanism to negotiate and monitor latency, jitter, bandwidth, and + packet loss, and to alert whenever one of the negotiated conditions + is violated. + + Implementation details on the actions to be triggered upon reception/ + detection of QoS alerts exchanged by the protocol are out of scope of + this document; it is either application dependent (e.g., act to + increase quality or reduce bit-rate) or network dependent (e.g., + change connection's quality profile). + + This protocol specification is the product of research conducted over + a number of years; it is presented here as a permanent record and to + offer a foundation for future similar work. It does not represent a + standard protocol and does not have IETF consensus. + +Status of This Memo + + This document is not an Internet Standards Track specification; it is + published for informational purposes. + + This is a contribution to the RFC Series, independently of any other + RFC stream. The RFC Editor has chosen to publish this document at + its discretion and makes no statement about its value for + implementation or deployment. Documents approved for publication by + the RFC Editor are not candidates for any level of Internet Standard; + see Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc8802. + +Copyright Notice + + Copyright (c) 2020 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. + +Table of Contents + + 1. Introduction + 1.1. Scope + 1.2. Motivation + 1.3. Summary of Features + 1.4. Differences from OWAMP/TWAMP + 2. Terminology + 3. Overview of Operation + 4. Q4S Messages + 4.1. Requests + 4.2. Responses + 4.3. Header Fields + 4.3.1. Common Q4S Header Fields + 4.3.2. Specific Q4S Request Header Fields + 4.3.3. Specific Q4S Response Header Fields + 4.4. Bodies + 4.4.1. Encoding + 5. Q4S Method Definitions + 5.1. BEGIN + 5.2. READY + 5.3. PING + 5.4. BWIDTH + 5.5. Q4S-ALERT + 5.6. Q4S-RECOVERY + 5.7. CANCEL + 6. Response Codes + 6.1. 100 Trying + 6.2. Success 2xx + 6.2.1. 200 OK + 6.3. Redirection 3xx + 6.4. Request Failure 4xx + 6.4.1. 400 Bad Request + 6.4.2. 404 Not Found + 6.4.3. 405 Method Not Allowed + 6.4.4. 406 Not Acceptable + 6.4.5. 408 Request Timeout + 6.4.6. 413 Request Entity Too Large + 6.4.7. 414 Request-URI Too Long + 6.4.8. 415 Unsupported Media Type + 6.4.9. 416 Unsupported URI Scheme + 6.5. Server Failure 5xx + 6.5.1. 500 Server Internal Error + 6.5.2. 501 Not Implemented + 6.5.3. 503 Service Unavailable + 6.5.4. 504 Server Time-Out + 6.5.5. 505 Version Not Supported + 6.5.6. 513 Message Too Large + 6.6. Global Failures 6xx + 6.6.1. 600 Session Does Not Exist + 6.6.2. 601 Quality Level Not Allowed + 6.6.3. 603 Session Not Allowed + 6.6.4. 604 Authorization Not Allowed + 7. Protocol + 7.1. Protocol Phases + 7.2. SDP Structure + 7.2.1. "qos-level" Attribute + 7.2.2. "alerting-mode" Attribute + 7.2.3. "alert-pause" Attribute + 7.2.4. "recovery-pause" Attribute + 7.2.5. "public-address" Attributes + 7.2.6. "latency" Attribute + 7.2.7. "jitter" Attribute + 7.2.8. "bandwidth" Attribute + 7.2.9. "packetloss" Attribute + 7.2.10. "flow" Attributes + 7.2.11. "measurement" Attributes + 7.2.12. "max-content-length" Attribute + 7.3. Measurements + 7.3.1. Latency + 7.3.2. Jitter + 7.3.3. Bandwidth + 7.3.4. Packet Loss + 7.4. Handshake Phase + 7.5. Negotiation Phase + 7.5.1. Stage 0: Measurement of Latencies and Jitter + 7.5.2. Stage 1: Measurement of Bandwidth and Packet Loss + 7.5.3. Quality Constraints Not Reached + 7.5.3.1. Actuator Role + 7.5.3.2. Policy Server Role + 7.5.4. "qos-level" Changes + 7.6. Continuity Phase + 7.7. Termination Phase + 7.7.1. Sanity Check of Quality Sessions + 7.8. Dynamic Constraints and Flows + 7.9. "qos-level" Upgrade and Downgrade Operation + 8. General User Agent Behavior + 8.1. Roles in Peer-to-Peer Scenarios + 8.2. Multiple Quality Sessions in Parallel + 8.3. General Client Behavior + 8.3.1. Generating Requests + 8.4. General Server Behavior + 9. Implementation Recommendations + 9.1. Default Client Constraints + 9.2. Latency and Jitter Measurements + 9.3. Bandwidth Measurements + 9.4. Packet Loss Measurement Resolution + 9.5. Measurements and Reactions + 9.6. Instability Treatments + 9.6.1. Loss of Control Packets + 9.6.2. Outlier Samples + 9.7. Scenarios + 9.7.1. Client to ACP + 9.7.2. Client to Client + 10. Security Considerations + 10.1. Confidentiality Issues + 10.2. Integrity of Measurements and Authentication + 10.3. Privacy of Measurements + 10.4. Availability Issues + 10.5. Bandwidth Occupancy Issues + 11. Future Code Point Requirements + 11.1. Service Port + 12. IANA Considerations + 13. References + 13.1. Normative References + 13.2. Informative References + Acknowledgements + Contributors + Authors' Addresses + +1. Introduction + + The World Wide Web (WWW) is a distributed hypermedia system that has + gained widespread acceptance among Internet users. Although WWW + browsers support other, preexisting Internet application protocols, + the primary protocol used between WWW clients and servers became the + HyperText Transfer Protocol (HTTP) ([RFC7230], [RFC7231], [RFC7232], + [RFC7233], [RFC7234], and [RFC7235]). Since then, HTTP over TLS + (known as HTTPS and described in [RFC2818]) has become an imperative + for providing secure and authenticated WWW access. The mechanisms + described in this document are equally applicable to HTTP and HTTPS. + + The ease of use of the Web has prompted its widespread employment as + a client/server architecture for many applications. Many of such + applications require the client and the server to be able to + communicate with each other and exchange information with certain + quality constraints. + + Quality in communications at the application level consists of four + measurable parameters: + + Latency: The time a message takes to travel from source to + destination. It may be approximated as RTT/2 (round-trip + time), assuming the networks are symmetrical. In this context, + we will consider the statistical median formula. + + Jitter: Latency variation. There are some formulas to calculate + jitter, and in this context, we will consider the arithmetic + mean formula. + + Bandwidth: Bit rate of communication. To ensure quality, a protocol + must ensure the availability of the bandwidth needed by the + application. + + Packet loss: 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 + not achieved (for example, in video streaming over UDP), and + the information received is less than the required bandwidth. + In terms of jitter, a packet loss sometimes is seen by the + destination as a larger time between arrivals, causing a jitter + growth. + + Any other communication parameter, such as throughput, is not a + network parameter because it depends on protocol window size and + other implementation-dependent aspects. + + The Q4S protocol provides a mechanism for quality monitoring based on + an HTTP syntax and the Session 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 based on HTTP. Quality requirements may + be needed by any type of application that communicates using any kind + of protocol, especially those with real-time constraints. Depending + on the nature of each application, the constraints may be different, + leading to different parameter thresholds that need to be met. + + Q4S is an application-level client/server protocol that continuously + measures session quality for a given flow (or set of flows), end-to- + end (e2e) and in real time; raising alerts if quality parameters are + below a given negotiated threshold and sending recoveries when + quality parameters are restored. Q4S describes when these + notifications, alerts, and recoveries need to be sent and the entity + receiving them. The actions undertaken by the receiver of the alert + are out of scope of the protocol. + + Q4S is session-independent from the application flows to minimize the + impact on them. To perform the measurements, two control flows are + created on both communication paths (forward and reverse directions). + + This protocol specification is the product of research conducted over + a number of years and is presented here as a permanent record and to + offer a foundation for future similar work. It does not represent a + standard protocol and does not have IETF consensus. + +1.1. Scope + + The purpose of Q4S is to measure end-to-end network quality in real + time. Q4S does not transport any application data. This means that + Q4S is designed to be used jointly with other transport protocols + such as Real-time Transport Protocol (RTP) [RFC3550], Transmission + Control Protocol (TCP) [RFC0793], QUIC [QUIC], HTTP [RFC7230], etc. + + Some existent transport protocols are focused on real-time media + transport and certain connection metrics are available, which is the + case of RTP and RTP Control Protocol (RTCP) [RFC3550]. Other + protocols such as QUIC provide low connection latencies as well as + advanced congestion control. These protocols transport data + efficiently and provide a lot of functionalities. However, there are + currently no other quality measurement protocols offering the same + level of function as Q4S. See Section 1.4 for a discussion of the + IETF's quality measurement protocols, One-Way Active Measurement + Protocol (OWAMP) and Two-Way Active Measurement Protocol (TWAMP). + + Q4S enables applications to become reactive under e2e network quality + changes. To achieve it, an independent Q4S stack application must + run in parallel with the target application. Then, Q4S metrics may + be used to trigger actions on the target application, such as speed + adaptation to latency in multiuser games, bitrate control at + streaming services, intelligent commutation of delivery node at + Content Delivery Networks, and whatever the target application + allows. + +1.2. Motivation + + Monitoring quality of service (QoS) in computer networks is useful + for several reasons: + + * It enables real-time services and applications to verify whether + network resources achieve a certain QoS level. This helps real- + time services and applications to run over the Internet, allowing + the existence of Application Content Providers (ACPs), which offer + guaranteed real-time services to the end users. + + * Real-time monitoring allows applications to adapt themselves to + network conditions (application-based QoS) and/or request more + network quality from the Internet Service Provider (ISP) (if the + ISP offers this possibility). + + * Monitoring may also be required by peer-to-peer (P2P) real-time + applications for which Q4S can be used. + + * Monitoring enables ISPs to offer QoS to any ACP or end user + application in an accountable way. + + * Monitoring enables e2e negotiation of QoS parameters, + independently of the ISPs of both endpoints. + + A protocol to monitor QoS must address the following issues: + + * Must be ready to be used in conjunction with current standard + protocols and applications, without forcing a change on them. + + * Must have a formal and compact way to specify quality constraints + desired by the application to run. + + * Must have measurement mechanisms that avoid application disruption + and minimize network resources consumption. + + * Must have specific messages to alert about the violation of + quality constraints in different directions (forward and reverse) + because network routing may not be symmetrical, and of course, + quality constraints may not be symmetrical. + + * After having alerted about the violation of quality constraints, + must have specific messages to inform about the recovery of + quality constraints in corresponding directions (forward and + reverse). + + * Must protect the data (constraints, measurements, QoS levels + demanded from the network) in order to avoid the injection of + malicious data in the measurements. + +1.3. Summary of Features + + The Quality for Service (Q4S) protocol is a message-oriented + communication protocol that can be used in conjunction with any other + application-level protocol. Q4S is a measurement protocol. Any + action taken derived from its measurements are out of scope of the + protocol. These actions depend on the application provider and may + be application-level adaptive reactions, may involve requests to the + ISP, or whatever the application provider decides. + + The benefits in quality measurements provided by Q4S can be used by + any type of application that uses any type of protocol for data + transport. It provides a quality monitoring scheme for any + communication that takes place between the client and the server, not + only for the Q4S communication itself. + + Q4S does not establish multimedia sessions, and it does not transport + application data. It monitors the fulfillment of the quality + requirements of the communication between the client and the server; + therefore, it does not impose any restrictions on the type of + application, protocol, or usage of the monitored quality connection. + + Some applications may vary their quality requirements dynamically for + any given quality parameter. Q4S is able to adapt to the changing + application needs, modifying the parameter thresholds to the new + values and monitoring the network quality according to the new + quality constraints. It will raise alerts if the new constraints are + violated. + + The Q4S session lifetime is composed of four phases with different + purposes: Handshake, Negotiation, Continuity, and Termination. + Negotiation and Continuity phases perform network parameter + measurements per a negotiated measurement procedure. Different + measurement procedures could be used inside Q4S, although one default + measurement mechanism is needed for compatibility reasons and is the + one defined in this document. Basically, Q4S defines how to + transport application quality requirements and measurement results + between a client and server and how to provide monitoring and + alerting, too. + + Q4S must be executed just before starting a client-server application + that needs a quality connection in terms of latency, jitter, + bandwidth, and/or packet loss. Once the client and server have + succeeded in establishing communication under quality constraints, + the application can start, and Q4S continues measuring and alerting + if necessary. + + The quality parameters can be suggested by the client in the first + message of the Handshake phase, but it is the server that accepts + these parameter values or forces others. The server is in charge of + deciding the final values of quality connection. + +1.4. Differences from OWAMP/TWAMP + + OWAMP [RFC4656] and TWAMP [RFC5357] are two protocols 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 to assist + reactive applications, whereas OWAMP/TWAMP is designed to measure + just network delay. + + The differences can be summarized in the following points: + + * OWAMP and TWAMP are not intended for measuring availability of + resources (certain bandwidth availability, for example) but only + RTT. However, Q4S is intended for measuring required bandwidth, + packet loss, jitter, and latency in both directions. Available + bandwidth is not measured by Q4S, but bandwidth required for a + specific application is. + + * OWAMP and TWAMP do not have responsivity control (which defines + the speed of protocol reactions under network quality changes) + because these protocols are designed to measure network + performance, not to assist reactive applications, and do not + detect the fluctuations of quality within certain time intervals + to take reactive actions. However, responsivity control is a key + feature of Q4S. + + * OWAMP and TWAMP are not intended to run in parallel with reactive + applications, but the Q4S protocol's goal is to run in parallel + and assist reactive applications in making decisions based on Q4S- + ALERT packets, which may trigger actions. + +2. Terminology + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. Overview of Operation + + This section introduces the basic operation of Q4S using simple + examples. This section is of a tutorial nature and does not contain + any normative statements. + + The first example shows the basic functions of Q4S: communication + establishment between a client and a server, quality requirement + negotiations for the requested application, application start and + continuous quality parameter measurements, and finally communication + termination. + + The client triggers the establishment of the communication by + requesting a specific service or application from the server. This + first message must have a special URI [RFC3986], which may force the + use of the Q4S protocol if it is implemented in a standard web + browser. This message consists of a Q4S BEGIN method, which can + optionally include a proposal for the communication quality + requirements in an SDP body. This option gives the client a certain + negotiation capacity about quality requirements, but it will be the + server who finally decides the stated requirements. + + This request is answered by the server with a Q4S 200 OK response + letting the client know that it accepts the request. This response + message must contain an SDP body with the following: + + * The assigned Q4S sess-id. + + * The quality constraints required by the requested application. + + * The measurement procedure to use. + + * "alerting-mode" attribute: There are two different scenarios for + sending alerts that trigger actions either on the network or in + the application when measurements identify violated quality + constraints. In both cases, alerts are triggered by the server. + + (a) Q4S-aware-network scenario: The network is Q4S aware 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 messages. + The alerting mode in this scenario is called Q4S-aware- + network alerting mode. + + (b) Reactive scenario: As shown in Figure 1, the network is not + Q4S aware. In this scenario, alert notifications are sent to + a specific node, called an Actuator, which is in charge of + making decisions regarding what actions to trigger: either to + change application behavior to adapt it to network conditions + and/or invoke a network policy server in order to reconfigure + the network and request better quality for application flows. + + +------+ +-----------+ + | App |<----- app flows---------->|Application| + |Client| +-----------+ + +------+ A + | + +------+ +------+ +--------+ + | Q4S |<----Q4S---->| Q4S |<----->|Actuator| + |Client| |Server| +--------+ + +------+ +------+ | + V + +-------------+ + |policy server| + +-------------+ + + Figure 1: Reactive Scenario + + The format of messages exchanged between the server stack and + the Actuator doesn't follow Q4S codification rules; their + format will be implementation dependent. In this way, we + will call the messages sent from the server stack to the + Actuator "notifications" (e.g., alert notifications) and the + messages sent from the Actuator to the server stack in + response to notifications "acknowledges" (e.g., alert + acknowledges). + + * "alert-pause" attribute: The amount of time between consecutive + alerts. In the Q4S-aware-network scenario, the server has to wait + this period of time between Q4S-ALERT messages sent to the client. + In the Reactive scenario, the server stack has to wait this period + of time between alert notifications sent to the Actuator. + Measurements are not stopped in Negotiation or Continuity phases + during this period of time, but no alerts are sent, even with + violated network quality constraints, in order to leave time for + network reconfiguration or for application adjustments. + + * "recovery-pause" attribute: The amount of time the Q4S server + waits before trying to recover the initial "qos-level" + (Section 7.2.1). After having detected violation of quality + constraints several times, the "qos-level" will have been + increased accordingly. If this violation detection finally stops, + the server waits for a period of time (recovery time), and if the + situation persists, it tries to recover to previous "qos-level" + values gradually by sending Q4S-RECOVERY messages to the client in + the Q4S-aware-network scenario, or recovery notifications to the + Actuator in the Reactive scenario (Section 7.9). + + 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 session + may contain an SDP body with new values of quality constraints + required by the application. Depending on the phase and the state of + the measurement procedure within the specific phase, the client will + react accordingly to take into account the new quality constraints in + the measurement procedure. + + Once the communication has been established (i.e., the Handshake + phase is finished), the protocol will verify that the communication + path between the client and the server meets the quality constraints + in both directions, from and to the server (Negotiation phase). This + Negotiation phase requires taking measurements of the quality + parameters: latencies, jitter, bandwidth, and packet loss. This + phase is initiated with a client message containing a Q4S READY + method, which will be answered by the server with a Q4S 200 OK + response. + + Negotiation measurements are achieved in two sequential stages: + + Stage 0: latency and jitter measurements + + Stage 1: bandwidth and packet loss measurements + + Stage 0 measurements are taken through Q4S PING messages sent from + both the client and the server. All Q4S PING requests will be + answered by Q4S 200 OK messages to allow for bidirectional + measurements. + + Different client and server implementations may send a different + number of PING messages for measuring, although at least 255 messages + should be considered to perform the latency measurement. The Stage 0 + measurements only may be considered ended when neither client nor + server receive new PING messages after an implementation-dependent + guard time. Only after Stage 0 has ended, can the client send a + "READY 1" message. + + After a pre-agreed number of measurements have been performed, + determined by the measurement procedure sent by the server, three + scenarios may be possible: + + (a) Measurements do not meet the requirements: in this case, the + stage 0 is repeated after sending an alert from the server to + the client or from the server stack to the Actuator, depending + on the alerting mode defined in the Handshake phase. Notice + that measurements continue to be taken but no alerts are sent + during the "alert-pause" time. In the Reactive scenario, the + Actuator will decide either to forward the alert notification to + the network policy server or to the application, depending on + where reconfiguration actions have to be taken. + + (b) Measurements do meet the requirements: in this case, client + moves to stage 1 by sending a new READY message. + + (c) At any time during the measurement procedure, the Q4S 200 OK + message sent by the server to the client, in response to a Q4S + PING message, contains an SDP body with new values of quality + constraints required by the application. This means the + application has varied their quality requirements dynamically; + therefore, quality thresholds used while monitoring quality + parameters have to be changed to the new constraints. In this + case, the client moves to the beginning of Stage 0 for + initiating the negotiation measurements again. + + Stage 1 is optional. Its purpose is to measure the availability of + application-needed bandwidth. If the "bandwidth" attribute is set to + zero kbps in the SDP, the client can skip stage 1 by sending a "READY + 2" message after completion of stage 0. Stage 1 measurements are + achieved through Q4S BWIDTH messages sent from both the client and + the server. Unlike PING messages, Q4S BWIDTH requests will not be + answered. + + If Stage 0 and 1 meet the application quality constraints, the + application may start. Q4S will enter the Continuity phase by + measuring the network quality parameters through the Q4S PING message + exchange on both connection paths and raising alerts in case of + violation. + + Once the client wants to terminate the quality session, it sends a + Q4S CANCEL message, which will be acknowledged by the server with + another Q4S CANCEL message. Termination of quality sessions are + always initiated by the client because Q4S TCP requests follow the + client/server schema. + + Figure 2 depicts the message exchange in a successful scenario. + + +-------------------------------------------+ + | | + | Client Server | + | | + Handshake | --------- Q4S BEGIN -----------> | + | <-------- Q4S 200 OK ----------- | + | | + Negotiation | | + (Stage 0) | --------- Q4S READY 0----------> | + | <-------- Q4S 200 OK ----------- | + | | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | --------- Q4S PING ------------> | + | <-------- Q4S PING ------------- | + | --------- Q4S 200 OK ----------> | + | <-------- Q4S 200 OK ----------- | + | ... | + Negotiation | | + (Stage 1) | --------- Q4S READY 1----------> | + | <-------- Q4S 200 OK ----------- | + | | + | --------- Q4S BWITDH ----------> | + | <-------- Q4S BWIDTH------------ | + | --------- Q4S BWITDH ----------> | + | <-------- Q4S BWIDTH------------ | + | ... | + Continuity | --------- Q4S READY 2 ---------> | + | <-------- Q4S 200 OK ----------- | app start + | | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | | + Termination | --------- Q4S CANCEL ----------> | app end + | <-------- Q4S CANCEL ----------- | + | | + +-------------------------------------------+ + + Figure 2: Successful Q4S Message Exchange + + Both client and server measurements are included in the PING and + BWIDTH messages, allowing both sides of the communication channel to + be aware of all measurements in both directions. + + The following two examples show the behavior of the Q4S protocol when + quality constraints are violated, and alerts are generated; and, + later on, when the violation of quality constraints stops leading to + the execution of the recovery process. The first example (Figure 3) + shows the Q4S-aware-network alerting mode scenario: + + +-------------------------------------------+ + | | + | Client Server | + | | + Handshake | --------- Q4S BEGIN -----------> | + | <-------- Q4S 200 OK ----------- | + | | + Negotiation | | + (Stage 0) | --------- Q4S READY 0----------> | + | <-------- Q4S 200 OK ----------- | + | | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | ... | + | | + | <-------- Q4S-ALERT ------------ | + | -------- Q4S-ALERT ------------> | + | (alert-pause start) | + Repetition | | + of Stage 0 | --------- Q4S READY 0----------> | + | <-------- Q4S 200 OK ----------- | + | | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | ... | + Negotiation | | + (Stage 1) | --------- Q4S READY 1----------> | + | <-------- Q4S 200 OK ----------- | + | | + | --------- Q4S BWITDH ----------> | + | <-------- Q4S BWIDTH------------ | + | ... | + | | + Continuity | --------- Q4S READY 2 ---------> | + | <-------- Q4S 200 OK ----------- | app start + | | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | ... | + |(alert-pause expires & | + | violated constraints) | + | <-------- Q4S-ALERT ------------ | + | --------- Q4S-ALERT -----------> | + | | + | (alert-pause start) | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | --------- Q4S 200 OK ----------> | + | ... | + |(alert-pause expires & | + | violated constraints) | + | <-------- Q4S-ALERT ------------ | + | --------- Q4S-ALERT -----------> | + | (alert-pause) | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | ... | + |(alert-pause expires & | + | Fulfilled constraints) | + | | + | (recovery-pause start) | + | | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | ... | + |(recovery-pause expires & | + | Fulfilled constraints) | + | <--------- Q4S-RECOVERY --------- | + | -------- Q4S-RECOVERY -----------> | + | | + | (recovery-pause start) | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | ... | + | | + Termination | --------- Q4S CANCEL ----------> | app end + | <-------- Q4S CANCEL ----------- | + | | + +-------------------------------------------+ + + Figure 3: Q4S-Aware-Network Alerting Mode + + In this Q4S-aware-network alerting mode scenario, the server may send + Q4S alerts to the client at any time upon detection of violated + quality constraints. This alerting exchange must not interrupt the + continuity quality parameter measurements between client and server. + + The second example depicted in Figure 4 represents the Reactive + scenario, in which alert notifications are sent from the server stack + to the Actuator, which is in charge of deciding to act over + application behavior and/or to invoke a network policy server. The + Actuator is an entity that has a defined set of different quality + levels and decides how to act depending on the actions stated for + each of these levels; it can take actions for making adjustments on + the application, or it can send a request to the policy server for + acting on the network. The policy server also has a defined set of + different quality levels previously agreed upon between the + Application Content Provider and the ISP. The Reactive alerting mode + is the default mode. + + +-------------------------------------------+ + | | + | Client Server Actuator | + Handshake | ----- Q4S BEGIN -----> | + | <---- Q4S 200 OK ----- | + | | + Negotiation | | + (Stage 0) | ----- Q4S READY 0----> | + | <---- Q4S 200 OK ----- | + | | + | ----- Q4S PING ------> | + | <---- Q4S 200 OK ----- | + | <---- Q4S PING ------- | + | ---- Q4S 200 OK ----> | + | ... | + | (alert-pause start) | + | --alert | + | notification--> | + | | + | <--alert | + | acknowledge--- | + | | + Repetition | | + of Stage 0 | ----- Q4S READY 0----> | + | <---- Q4S 200 OK ----- | + | | + | ----- Q4S PING ------> | + | <---- Q4S 200 OK ----- | + | <---- Q4S PING ------- | + | ... | + |(alert-pause expires & | + | violated constraints) | + | | + | --alert | + | notification--> | + | | + | <--alert | + | acknowledge--- | + | | + | ----- Q4S PING ------> | + | <---- Q4S 200 OK ----- | + | <---- Q4S PING ------- | + | ... | + Negotiation | | + (Stage 1) | ----- Q4S READY 1----> | + | <---- Q4S 200 OK ----- | + | | + | ----- Q4S BWITDH ----> | + | <---- Q4S BWIDTH------ | + | ... | + Continuity | ----- Q4S READY 2 ---> | + | <---- Q4S 200 OK ----- | app start + | | + |(alert-pause expires & | + | fulfilled constraints) | + | | + |(recovery-pause start) | + | ----- Q4S PING ------> | + | <---- Q4S 200 OK ----- | + | <---- Q4S PING ------- | + | ----- Q4S PING ------> | + | | + |(recovery-pause expires & | + | fulfilled constraints) | + | | + | --recovery | + | notification--> | + | | + | <--recovery | + | acknowledge--- | + | | + |(recovery-pause start) | + | <---- Q4S 200 OK ----- | + | <---- Q4S PING ------- | + | ----- Q4S 200 OK ----> | + | ----- Q4S PING ------> | + | ... | + | | + Termination | ----- Q4S CANCEL ----> | app end + | --cancel | + | notification--> | + | | + | <--cancel | + | acknowledge-- | + | <---- Q4S CANCEL ----- | + | | + +-------------------------------------------+ + + Figure 4: Reactive Alerting Mode + + At the end of any stage of the Negotiation phase, the server sends an + alert notification to the Actuator if quality constraints are + violated. During the period of time defined by the "alert-pause" + attribute, no further alert notifications are sent, but measurements + are not interrupted. This way, both the client and the server will + detect network improvements as soon as possible. In a similar way + during the Continuity phase, the server may send alert notifications + at any time to the Actuator upon detection of violated quality + constraints. This alerting exchange must not interrupt the + continuity measurements between client and server. + + Finally, in the Termination phase, Q4S CANCEL messages sent from the + client to the server must be forwarded from the server to the + Actuator in order to release possible assigned resources for the + session. + +4. Q4S Messages + + Q4S is a text-based protocol and uses the UTF-8 charset [RFC3629]. A + Q4S message is either a request or a response. + + Both request and response messages use the basic format of Internet + Message Format [RFC5322]. Both types of messages 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. This document uses + ABNF notation [RFC5234] for the definitions of the syntax of + messages. + + The start-line, each message-header line, and the empty line MUST be + terminated by a carriage-return line-feed sequence (CRLF). Note that + the empty line MUST be present even if the message-body is not. + + generic-message = start-line CRLF + *message-header CRLF + CRLF + [ message-body ] + start-line = Request-Line / Status-Line + + Much of Q4S's messages and header field syntax are identical to + HTTP/1.1. However, Q4S is not an extension of HTTP. + +4.1. Requests + + Q4S requests are distinguished by having a Request-Line for a start- + line. A Request-Line contains a method name, a Request-URI, and the + protocol version separated by a single space (SP) character. + + The Request-Line ends with CRLF. No CR or LF are allowed except in + the end-of-line CRLF sequence. No linear whitespace (LWSP) is + allowed in any of the elements. + + Request-Line = Method SP Request-URI SP Q4S-Version CRLF + + Method: This specification defines seven methods: BEGIN for starting + and negotiating quality sessions, READY for synchronization of + measurements, PING and BWIDTH for quality measurements + purposes, CANCEL for terminating sessions, Q4S-ALERT for + reporting quality violations, and Q4S-RECOVERY for reporting + quality recovery. + + Request-URI: The Request-URI is a Q4S URI [RFC3986] as described in + Section 7.4. The Request-URI MUST NOT contain unescaped spaces + or control characters and MUST NOT be enclosed in "<>". + + Q4S-Version: Both request and response messages include the version + of Q4S in use. To be compliant with this specification, + applications sending Q4S messages MUST include a Q4S-Version of + "Q4S/1.0". The Q4S-Version string is case insensitive, but + implementations MUST send uppercase. Unlike HTTP/1.1, Q4S + treats the version number as a literal string. In practice, + this should make no difference. + +4.2. Responses + + Q4S responses are distinguished from requests by having a Status-Line + as their start-line. A Status-Line consists of the protocol version + followed by a numeric Status-Code and its associated textual phrase, + with each element separated by a single SP character. No CR or LF is + allowed except in the final CRLF sequence. + + Status-Line = Q4S-Version SP Status-Code SP Reason-Phrase CRLF + + The Status-Code is a 3-digit integer result code that indicates the + outcome of an attempt to understand and satisfy a request. The + Reason-Phrase is intended to give a short textual description of the + Status-Code. The Status-Code is intended for use by automata, + whereas the Reason-Phrase is intended for the human user. A client + is not required to examine or display the Reason-Phrase. + + While this specification suggests specific wording for the Reason- + Phrase, implementations MAY choose other text, for example, in the + language indicated in the Accept-Language header field of the + request. + + The first digit of the Status-Code defines the class of response. + The last two digits do not have any categorization role. For this + reason, any response with a status code between 100 and 199 is + 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 allows + following values for the first digit: + + 1xx: Provisional -- request received, continuing to process the + request; + + 2xx: Success -- the action was successfully received, understood, + and accepted; + + 3xx: Redirection -- further action needs to be taken in order to + complete the request; + + 4xx: Request Failure -- the request contains bad syntax or cannot be + fulfilled at this server; + + 5xx: Server Error -- the server failed to fulfill an apparently + valid request; + + 6xx: Global Failure -- the request cannot be fulfilled at any + server. + + The status codes are the same as described in HTTP [RFC7231]. In the + same way as HTTP, Q4S applications are not required to understand the + meaning of all registered status codes, though such understanding is + obviously desirable. However, applications MUST understand the class + of any status code, as indicated by the first digit, and treat any + unrecognized response as being equivalent to the x00 status code of + that class. + + The Q4S-ALERT, Q4S-RECOVERY, and CANCEL requests do not have to be + responded to. However, after receiving a Q4S-ALERT, Q4S-RECOVERY, or + CANCEL request, the server SHOULD send a Q4S-ALERT, Q4S-RECOVERY, or + CANCEL request to the client. + +4.3. Header Fields + + Q4S header fields are identical to HTTP header fields in both syntax + and semantics. + + Some header fields only make sense in requests or responses. These + are called request header fields and response header fields, + 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 + MUST be ignored. + +4.3.1. Common Q4S Header Fields + + These fields may appear in request and response messages. + + Session-Id: the value for this header field is the same sess-id used + in SDP (embedded in the SDP "o=" line) and is assigned by the + server. The messages without SDP MUST include this header + field. If a message has an SDP body, this header field is + optional. The method of sess-id allocation is up to the + creating tool, but it is suggested that a UTC timestamp be used + to ensure uniqueness. + + Sequence-Number: sequential and cyclic positive integer number + assigned to PING and BWIDTH messages and acknowledged in 200 OK + responses. + + Timestamp: this optional header field contains the system time (with + the best possible accuracy). It indicates the time in which + the PING request was sent. If this header field is present in + PING messages, then the 200 OK response messages MUST include + this value. + + Stage: this is used in the client's READY requests and the server's + 200 OK responses during the Negotiation and Continuity phases + in order to synchronize the initiation of the measurements. + Example: Stage: 0 + +4.3.2. Specific Q4S Request Header Fields + + In addition to HTTP header fields, these are the specific Q4S request + header fields: + + User-Agent: this header field contains information about the + implementation of the user agent. This is for statistical + purposes, the tracing of protocol violations, and the automated + recognition of user agents for the sake of tailoring responses + to avoid particular user agent limitations. User agents SHOULD + include this field with requests. The field MAY contain + multiple product tokens and comments identifying the agent and + any sub-products that form a significant part of the user + agent. By convention, the product tokens are listed in order + of their significance for identifying the application. + + Signature: this header field contains a digital signature that can + be used by the network, Actuator, or policy server to validate + the SDP, preventing security attacks. The Signature is an + optional header field generated by the server according to the + pre-agreed security policies between the Application Content + Provider and the ISP. For example, a hash algorithm and + encryption method such as SHA256 [RFC6234] and RSA [RFC8017] + based on the server certificate could be used. This + certificate is supposed to be delivered by a Certification + Authority (CA) or policy owner to the server. The signature is + applied to the SDP body. + + Signature= RSA ( SHA256 (<sdp>), <certificate> ) + + If the Signature header field is not present, other validation + mechanisms MAY be implemented in order to provide assured + quality with security and control. + + Measurements: this header field carries the measurements of the + quality parameters in PING and BWIDTH requests. The format is: + + Measurements: "l=" " "|[0..9999] ", j=" " "|[0..9999] ", pl=" + " "|[0.00 .. 100.00] ", bw=" " "|[0..999999] + + Where "l" stands for latency followed by the measured value (in + milliseconds) or an empty space, "j" stands for jitter followed + by the measured value (in milliseconds) or an empty space, "pl" + stands for packet loss followed by the measured value (in + percentage with two decimals) or an empty space, and "bw" + stands for bandwidth followed by the measured value (in kbps) + or an empty space. + +4.3.3. Specific Q4S Response Header Fields + + Expires: its purpose is to provide a sanity check and allow the + server to close inactive sessions. If the client does not send + a new request before the expiration time, the server MAY close + the session. The value MUST be an integer, and the measurement + units are milliseconds. + + In order to keep the session open, the server MUST send a Q4S + alert before the session expiration (Expires header field), + with the same quality levels and an alert cause of "keep- + alive". The purpose of this alert is to avoid TCP sockets, + which were opened with READY message, from being closed, + specially in NAT scenarios. + +4.4. Bodies + + Requests, including new requests defined in extensions to this + specification, MAY contain message bodies unless otherwise noted. + The interpretation of the body depends on the request method. + + For response messages, the request method and the response status + code determine the type and interpretation of any message body. All + responses MAY include a body. + + The Internet media type of the message body MUST be given by the + Content-Type header field. + +4.4.1. Encoding + + The body MUST NOT be compressed. This mechanism is valid for other + protocols such as HTTP and SIP [RFC3261], 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. Therefore, the HTTP Accept-Encoding request + header field cannot be used in Q4S with values different from + "identity", and if it is present in a request, the server MUST ignore + it. In addition, the response header field Content-Encoding is + optional, but if present, the unique permitted value is "identity". + + The body length in bytes MUST be provided by the Content-Length + header field. The "chunked" transfer encoding of HTTP/1.1 MUST NOT + be used for Q4S. + + | Note: The chunked encoding modifies the body of a message in + | order to transfer it as a series of chunks, each one with its + | own size indicator. + +5. Q4S Method Definitions + + The Method token indicates the method to be performed on the resource + identified by the Request-URI. The method is case sensitive. + + Method = "BEGIN" | "READY" | "PING" | "BWIDTH" | + "Q4S-ALERT" | "Q4S-RECOVERY" | "CANCEL" | extension-method + + extension-method = token + + The list of methods allowed by a resource can be specified in an + Allow header field [RFC7231]. The return code of the response always + notifies the client when a method is currently allowed on a resource, + since the set of allowed methods can change dynamically. Any server + application SHOULD return the status code 405 (Method Not Allowed) if + the method is known, but not allowed for the requested resource, and + 501 (Not Implemented) if the method is unrecognized or not + implemented by the server. + +5.1. BEGIN + + The BEGIN method requests information from a resource identified by a + Q4S URI. The purpose of this method is to start the quality session. + + This method is used only during the Handshake phase to retrieve the + SDP containing the sess-id and all quality and operation parameters + for the desired application to run. + + When a BEGIN message is received by the server, any current quality + session MUST be canceled, and a new session should be created. + + The response to a Q4S BEGIN request is not cacheable. + +5.2. READY + + The READY method is used to synchronize the starting time for the + sending of PING and BWIDTH messages over UDP between clients and + servers. Including the Stage header field in this method is + mandatory. + + This message is used only in Negotiation and Continuity phases, and + only just before making a measurement. Otherwise (outside of this + context), the server MUST ignore this method. + +5.3. PING + + This message is used during the Negotiation and Continuity phases to + measure the RTT and jitter of a session. The message MUST be sent + only over UDP ports. + + The fundamental difference between the PING and BWIDTH requests is + reflected in the different measurements achieved with them. PING is + a short message, and it MUST be answered in order to measure RTT and + jitter, whereas BWIDTH is a long message and MUST NOT be answered. + + PING is a request method that can be originated by either the client + or the server. The client MUST also answer the server PING messages, + assuming a "server role" for these messages during the measurement + process. + + Including the Measurements header field in this method is mandatory, + and provides updated measurements values for latency, jitter, and + packet loss to the counterpart. + +5.4. BWIDTH + + This message is used only during the Negotiation phase to measure the + bandwidth and packet loss of a session. The message MUST be sent + only over UDP ports. + + BWIDTH is a request method that can be originated by either the + client or the server. Both client and server MUST NOT answer BWIDTH + messages. + + Including the Measurements header field in this method is mandatory + and provides updated measurements values for bandwidth and packet + loss to the counterpart. + +5.5. Q4S-ALERT + + This is the request message that Q4S generates when the measurements + indicate that quality constraints are being violated. It is used + during the Negotiation and Continuity phases. + + This informative message indicates that the user experience is being + degraded and includes the details of the problem (bandwidth, jitter, + packet loss measurements). The Q4S-ALERT message does not contain + any detail on the actions to be taken, which depend on the agreements + between all involved parties. + + Unless there is an error condition, an answer to a Q4S-ALERT request + is optional and is formatted as a request Q4S-ALERT message. If + there is an error condition, then a response message is sent. The + response to a Q4S-ALERT request is not cacheable. + + This method MUST be initiated by the server in both alerting modes. + In the Q4S-aware-network alerting mode, the Q4S-ALERT messages are + sent by the server to the client, advising the network to react by + itself. In the Reactive alerting mode, alert notifications are + triggered by the server stack and sent to the Actuator (see Figure 1, + "Reactive Scenario"). + + Client----q4s----SERVER STACK--->ACTUATOR-->APP OR POLICY SERVER + + The way in which the server stack notifies the Actuator is + implementation dependent, and the communication between the Actuator + and the network policy server is defined by the protocol and API that + the policy server implements. + +5.6. Q4S-RECOVERY + + This is the request message that Q4S generates when the measurements + indicate that quality constraints, which had been violated, have been + fulfilled during a period of time ("recovery-pause"). It is used + during the Negotiation and Continuity phases. + + This informative message indicates that the "qos-level" could be + increased gradually until the initial "qos-level" is recovered (the + "qos-level" established at the beginning of the session that was + decreased during violation of constraints. See Section 7.9). The + Q4S-RECOVERY message does not contain any detail on the actions to be + taken, which depends on the agreements between all involved parties. + + The answer to a Q4S-RECOVERY request is formatted as a request Q4S- + RECOVERY message. A Q4S-RECOVERY request MUST NOT be answered with a + response message unless there is an error condition. The response to + a Q4S-RECOVERY request is not cacheable. + + Like the Q4S-ALERT message, the Q4S-RECOVERY method is always + initiated by the server in both alerting modes. In the Q4S-aware- + network alerting mode, the Q4S-RECOVERY messages are sent by the + server to the client, advising the network to react by itself. In + the Reactive alerting mode, recovery notifications are triggered by + the server stack and sent to the Actuator (see Figure 1, "Reactive + Scenario"). + +5.7. CANCEL + + The purpose of the CANCEL message is the release of the Q4S Session- + Id and the possible resources assigned to the session. This message + could be triggered by the Q4S stack or by the application using the + stack (through an implementation-dependent API). + + 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 message. + + In the Reactive scenario, the server stack MUST react to the Q4S + CANCEL messages received from the client by forwarding a cancel + notification to the Actuator, in order to release possible assigned + resources for the session (at the application or at the policy + server). The Actuator MUST answer the cancel notification with a + cancel acknowledge towards the server stack, acknowledging the + reception. + +6. Response Codes + + Q4S response codes are used for TCP and UDP. However, in UDP, only + the response code 200 is used. + + The receiver of an unknown response code must take a generic action + for the received error group (1xx, 2xx, 3xx, 4xx, 5xx, 6xx). In case + of an unknown error group, the expected action should be the same as + with the 6xx error group. + +6.1. 100 Trying + + This response indicates that the request has been received by the + next-hop server and that some unspecified action is being taken on + behalf of this request (for example, a database is being consulted). + This response, like all other provisional responses, stops + retransmissions of a Q4S-ALERT during the "alert-pause" time. + +6.2. Success 2xx + + 2xx responses give information about the success of a request. + +6.2.1. 200 OK + + The request has succeeded. + +6.3. Redirection 3xx + + 3xx responses give information about the user's new location or about + alternative services that might be able to satisfy the request. + + The requesting client SHOULD retry the request at the new address(es) + given by the Location header field. + +6.4. Request Failure 4xx + + 4xx responses are definite failure responses from a particular + server. The client SHOULD NOT retry the same request without + modification (for example, adding appropriate header fields or SDP + values). However, the same request to a different server might be + successful. + +6.4.1. 400 Bad Request + + The request could not be understood due to malformed syntax. The + Reason-Phrase SHOULD identify the syntax problem in more detail, for + example, "Missing Sequence-Number header field". + +6.4.2. 404 Not Found + + The server has definitive information that the user does not exist 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 the + domains handled by the recipient of the request. + +6.4.3. 405 Method Not Allowed + + The method specified in the Request-Line is understood, but not + allowed for the address identified by the Request-URI. + + The response MUST include an Allow header field containing a list of + valid methods for the indicated address. + +6.4.4. 406 Not Acceptable + + The resource identified by the request is only able to generate + response entities that have content characteristics that are not + acceptable according to the Accept header field sent in the request. + +6.4.5. 408 Request Timeout + + The server could not produce a response within a suitable amount of + time, and the client MAY repeat the request without modifications at + any later time. + +6.4.6. 413 Request Entity Too Large + + The server is refusing to process a request because the request + entity-body is larger than the one that the server is willing or able + to process. The server MAY close the connection to prevent the + client from continuing the request. + +6.4.7. 414 Request-URI Too Long + + The server is refusing to process the request because the Request-URI + is longer than the one that the server accepts. + +6.4.8. 415 Unsupported Media Type + + 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 + the requested method. The server MUST return a list of acceptable + formats using the Accept, Accept-Encoding, or Accept-Language header + field, depending on the specific problem with the content. + +6.4.9. 416 Unsupported URI Scheme + + The server cannot process the request because the scheme of the URI + in the Request-URI is unknown to the server. + +6.5. Server Failure 5xx + + 5xx responses are failure responses given when a server itself is + having trouble. + +6.5.1. 500 Server Internal Error + + The server encountered an unexpected condition that prevented it from + fulfilling the request. The client MAY display the specific error + condition and MAY retry the request after several seconds. + +6.5.2. 501 Not Implemented + + The server does not support the functionality required to fulfill the + request. This is the appropriate response when a server does not + recognize the request method, and it is not capable of supporting it + for any user. + + Note that a 405 (Method Not Allowed) is sent when the server + recognizes the request method, but that method is not allowed or + supported. + +6.5.3. 503 Service Unavailable + + The server is temporarily unable to process the request due to a + temporary overloading or maintenance of the server. The server MAY + 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 if + it had received a 500 (Server Internal Error) response. + + A client receiving a 503 (Service Unavailable) SHOULD attempt to + forward the request to an alternate server. It SHOULD NOT forward + any other requests to that server for the duration specified in the + Retry-After header field, if present. + + Servers MAY refuse the connection or drop the request instead of + responding with 503 (Service Unavailable). + +6.5.4. 504 Server Time-Out + + The server did not receive a timely response from an external server + it accessed in attempting to process the request. + +6.5.5. 505 Version Not Supported + + The server does not support, or refuses to support, the Q4S protocol + version that was used in the request. The server is indicating that + it is unable or unwilling to complete the request using the same + major version as the client, other than with this error message. + + In the case that the Q4S version is not supported, this error may be + sent by the server in the Handshake phase just after receiving the + first BEGIN message from client. + +6.5.6. 513 Message Too Large + + The server was unable to process the request because the message + length exceeded its capabilities. + +6.6. Global Failures 6xx + + 6xx responses indicate that a server has definitive information about + a particular policy not satisfied for processing the request. + +6.6.1. 600 Session Does Not Exist + + The Session-Id is not valid. + +6.6.2. 601 Quality Level Not Allowed + + The "qos-level" requested is not allowed for the client/server pair. + +6.6.3. 603 Session Not Allowed + + The session is not allowed due to some policy (the number of sessions + allowed for the server is exceeded, or the time band of the Q4S-ALERT + is not allowed for the client/server pair, etc.). + +6.6.4. 604 Authorization Not Allowed + + The policy server does not authorize the Q4S-ALERT quality session + improvement operation due to an internal or external reason. + +7. Protocol + + This section describes the measurement procedures, the SDP structure + of the Q4S messages, the different Q4S protocol phases, and the + messages exchanged in them. + +7.1. Protocol Phases + + 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, traffic mode, + etc., and each element has its own way to manage the quality. The + purpose of a quality connection is to establish end-to-end + communication with enough quality for the application to function + flawlessly. + + To monitor quality constraints of the application, four phases are + defined and can be seen in Figure 5: + + +---------------------------------------------------------------+ + | | + | | + | Handshake ---> Negotiation -+--> Continuity ----> Termination | + | A | (app start) | (app end) | + | | V A V A | + | | violated | violated | | + | | constraints | constraints | | + | | | | |_______| ____| | + | | | | +-------+ | | + | | | | | | + | +------+ +---------------------+ | + | | + +---------------------------------------------------------------+ + + Figure 5: Session Lifetime Phases + + Handshake phase: in which the server is contacted by the client, and + in the answer message, the quality constraints for the application + are communicated in the embedded SDP. + + Negotiation phase: in which the quality of the connection is + measured in both directions (latency, jitter, bandwidth, and + packet loss), and Q4S messages may be sent in order to alert if + the measured quality does not meet the constraints. This phase is + iterative until quality constraints are reached, or the session is + canceled after a number of measurement cycles with consistent + violation of the quality constraints. The number of measurement + cycles executed depends on the "qos-level", which is incremented + in each cycle until a maximum "qos-level" value is reached. Just + after reaching the quality requirements, Q4S provides a simple + optional mechanism using HTTP to start the application. + + Continuity phase: in which quality is continuously measured. In + this phase, the measurements MUST avoid disturbing the application + by consuming network resources. If quality constraints are not + met, the server stack will notify the Actuator with an alert + notification. If later the quality improves, the server stack + will notify the Actuator, in this case with a recovery + notification. After several alert notifications with no quality + improvements, the Q4S stack SHOULD move to the Termination phase. + + Termination phase: in which the Q4S session is terminated. The + application may be closed also or may not start. + +7.2. SDP Structure + + The original goal of SDP was to announce necessary information for + the participants and multicast MBONE (Multicast Backbone) + applications. Right now, its use has been extended to the + announcement and the negotiation of multimedia sessions. The purpose + of Q4S is not to establish media stream sessions, but to monitor a + quality connection. This connection may be later used to establish + any type of session including media sessions; Q4S does not impose any + conditions on the type of communication requiring quality parameters. + + SDP will be used by Q4S to exchange quality constraints and will + therefore always have all the media descriptions ("m=") set to zero. + + The SDP embedded in the messages is the container of the quality + parameters. As these may vary depending on the direction of the + communication (to and from the client), all quality parameters need + to specify the uplink and downlink values: <uplink> / <downlink> (see + Section 7.5.3 for an example). When one or both of these values are + empty, it MUST be understood as needing no constraint on that + parameter and/or that direction. + + The uplink direction MUST be considered as being the communication + from the client to the server. The downlink direction MUST be + considered as being the communication from the server to the client. + + The SDP information can comprise all or some of the following + 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 BEGIN + request. + + v=0 + o=q4s-UA 53655765 2353687637 IN IP4 192.0.2.33 + s=Q4S + i=Q4S parameters + t=0 0 + a=qos-level:0/0 + a=alerting-mode:Reactive + a=alert-pause:5000 + a=public-address:client IP4 198.51.100.51 + a=public-address:server IP4 198.51.100.58 + a=measurement:procedure default(50/50,75/75,5000,40/80,100/256) + a=latency:40 + a=jitter:10/10 + a=bandwidth:20/6000 + a=packetloss:0.50/0.50 + a=flow:app clientListeningPort TCP/10000-20000 + a=flow:app clientListeningPort UDP/15000-18000 + a=flow:app serverListeningPort TCP/56000 + a=flow:app serverListeningPort UDP/56000 + a=flow:q4s clientListeningPort UDP/55000 + a=flow:q4s clientListeningPort TCP/55001 + a=flow:q4s serverListeningPort UDP/56000 + a=flow:q4s serverListeningPort TCP/56001 + + As quality constraints may be changed by applications at any time + during the Q4S session lifetime, any Q4S 200 OK response sent by the + server to the client in the Negotiation and Continuity phases could + also include an SDP body with the new quality requirements stated by + the applications from then on. Therefore, in response to any PING + request sent by the client to the server, the server could send a Q4S + 200 OK with an embedded SDP message that specifies new quality + constraints requested by the application. + +7.2.1. "qos-level" Attribute + + The "qos-level" attribute contains the QoS level for uplink and + downlink. Default values are 0 for both directions. The meaning of + each level is out of scope of Q4S, but a higher level SHOULD + correspond to a better service quality. + + Appropriate attribute values: [0..9] "/" [0..9] + + The "qos-level" attribute may be changed during the session lifetime, + raising or lowering the value as necessary following the network + measurements and the application needs. + +7.2.2. "alerting-mode" Attribute + + The "alerting-mode" attribute specifies the player in charge of + triggering Q4S alerts in the case of constraint violation. There are + two possible values: + + Appropriate attribute values: <"Q4S-aware-network"|"Reactive"> + + Q4S-aware-network: Q4S-ALERT messages are triggered by the server to + the client. In this case, the network is supposed to be Q4S + aware, and reacts by itself to these alerts. + + Reactive: alert notifications are sent by the server stack to the + Actuator. In this case, the network is not Q4S aware, and a + specific node (Actuator) is in charge of triggering tuning + mechanisms, either on the network or in the application. + + The "alerting-mode" attribute is optional, and if not present, + Reactive alerting mode is assumed. + +7.2.3. "alert-pause" Attribute + + In the Q4S-aware-network scenario, the "alert-pause" attribute + specifies the amount of time (in milliseconds) the server waits + between consecutive Q4S-ALERT messages sent to the client. In the + Reactive scenario, the "alert-pause" attribute specifies the amount + of time (in milliseconds) the server stack waits between consecutive + alert notifications sent to the Actuator. Measurements are not + stopped in Negotiation or Continuity phases during this period of + time, but no Q4S-ALERT messages or alert notifications are fired, + even with violated quality constraints, allowing for either network + reconfigurations or application adjustments. + + Appropriate attribute values: [0..60000] + +7.2.4. "recovery-pause" Attribute + + In the Q4S-aware-network scenario, the "recovery-pause" attribute + specifies the amount of time (in milliseconds) the server waits for + initiating the "qos-level" recovery process. Once the recovery + process has started, the "recovery-pause" attribute also states the + amount of time (in milliseconds) between consecutive Q4S-RECOVERY + messages sent by the server to the client (in the Q4S-aware-network + scenario) or between recovery notifications sent by the server stack + to the Actuator (in the Reactive scenario). + + Appropriate attribute values: [0..60000] + +7.2.5. "public-address" Attributes + + This attribute contains the public IP address of the client and the + server. The server fills these attributes with its own public IP + address and the public IP address of the first message received from + the client in the Handshake phase. + + The purpose of these attributes is to make available the addressing + information to the network policy server or other external entities + in charge of processing Q4S-ALERT messages. + + Appropriate attribute values: <"client"|"server"> <"IP4"|"IP6"> + <value of IP address> + +7.2.6. "latency" Attribute + + The maximum latency (considered equal for uplink and downlink) + tolerance is specified in the "latency" attribute, expressed in + milliseconds. In the Q4S-aware-network scenario, if the latency + constraints are not met, a Q4S-ALERT method will be sent to the + client. In the Reactive scenario, if the latency constraints are not + met, an alert notification will be sent to the Actuator. If the + "latency" attribute is not present or has a 0 value, no latency + constraints need to be met, and no measurements MAY be taken. + + Appropriate attribute values: [0..9999] + +7.2.7. "jitter" Attribute + + The maximum uplink and downlink jitter tolerance is specified in the + "jitter" attribute, expressed in milliseconds. In the Q4S-aware- + network scenario, if the jitter constraints are not met, a Q4S-ALERT + method will be sent to the client. In the Reactive scenario, if the + latency constraints are not met, an alert 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 met, and no measurements MAY + be taken. + + Appropriate attribute values: [0..9999] "/" [0..9999] + +7.2.8. "bandwidth" Attribute + + The minimum uplink and downlink bandwidth is specified in the + "bandwidth" attribute, expressed in kbps. In the Q4S-aware-network + scenario, if the bandwidth constraints are not met, a Q4S-ALERT + method will be sent to the client. In the Reactive scenario, an + alert notification will be sent to the Actuator. If the "bandwidth" + attribute is not present or has a 0 value, no bandwidth constraints + need to be met, and no measurements MAY be taken. + + Appropriate attribute values: [0..99999] "/" [0..99999] + +7.2.9. "packetloss" Attribute + + The maximum uplink and downlink packet loss tolerance is specified in + the "packetloss" attribute expressed in percentage (two decimal + accuracy). In the Q4S-aware-network scenario, if the packetloss + constraints are not met, a Q4S-ALERT method will be sent to the + client. In the Reactive scenario, an alert notification will be sent + to the Actuator. If the "packetloss" attribute is not present or has + a 0 value, no packet loss constraints need to be met, and no + measurements MAY be taken. + + Appropriate attribute values: [0.00 ..100.00] "/"[0.00 ..100.00] + +7.2.10. "flow" Attributes + + These attributes specify the flows (protocol, destination IP/ports) + of data over TCP and UDP ports to be used in uplink and downlink + communications. + + Several "flow" attributes can be defined. These flows identify the + listening port (client or server), the protocol (TCP [RFC0793] or UDP + [RFC0768]) with the range of ports that are going to be used by the + application and, of course, by the Q4S protocol (for quality + measurements). All defined flows ("app" and "q4s") will be + considered within the same quality profile, which is determined by + the "qos-level" attribute in each direction. This allows us to + assume that measurements on "q4s" flows are the same as experienced + by the application, which is using "app" flows. + + During Negotiation and Continuity phases, the specified Q4S ports in + the "flow:q4s" attributes of SDP will be used for Q4S messages. + + The Q4S flows comprise two UDP flows and two TCP flows (one uplink + and one downlink for each one), whereas application traffic MAY + consist of many flows, depending on its nature. The Handshake phase + takes place through the Q4S Contact URI, using the standard Q4S TCP + port. However, the Negotiation and Continuity phases will take place + on the Q4S ports (UDP and TCP) specified in the SDP. + + The "clientListeningPort" is a port on which the client listens for + server requests and MUST be used as the origin port of client + responses. The "serverListeningPort" is a port on which the server + is listening for incoming messages from the client. The origin port + of server responses may be different than the "serverListeningPort" + value. + + If "clientListeningPort" is zero ("a=flow:q4s clientListeningPort + TCP/0"), the client MAY choose one randomly per OS standard rules. + Client ports inside the SDP must always be matched against actual + received port values on the server side in order to deal with NAT/ + NAPT devices. If a zero value or incorrect value is present, the + server must set the value to the received origin port in the next + message with SDP (200 OK, ALERT, and CANCEL messages). + + Attribute values: + <"q4s"|"app"> <"serverListeningPort"|"clientListeningPort"> + <"UDP"|"TCP"> <0..65535> [ "-" [0..65535]] + +7.2.11. "measurement" Attributes + + These attributes contain the measurement procedure and the results of + the quality measurements. + + Measurement parameters are included using the session attribute + "measurement". The first measurement parameter is the procedure. + Q4S provides a "default" procedure for measurements, but others like + RTP/RTCP might be used and defined later. This document will only + define and explain the "default" procedure. + + In the initial client request, a set of measurement procedures can be + sent to the server for negotiation. One measurement procedure line + MUST be included in the SDP message for each proposed method. The + server MUST answer with only one line with the chosen procedure. + + For each procedure, a set of values of parameters separated by "," + can be included in the same attribute line. The amount and type of + parameters depends on the procedure type. + + In the following example, the "default" procedure type is chosen: + + a=measurement:procedure default(50/50,75/75,5000,40/80,100/256) + + In the "default" procedure, the meaning of these parameters is the + following: + + * The first parameter is the interval of time (in milliseconds) + between PING requests during the Negotiation phase. Uplink and + downlink values from the client's point of view are separated by + "/". This allows different responsiveness values depending on the + control resources used in each direction. + + * The second parameter is the time interval (in milliseconds) + between PING requests during the Continuity phase. Uplink and + downlink values are separated by "/". This allows two different + responsiveness values depending on the control resources used in + each direction. + + * The third parameter is the time interval to be used to measure + bandwidth during the Negotiation phase. + + * The fourth parameter indicates the window size for jitter and + latency calculations. Uplink and downlink values are separated by + "/". + + * The fifth parameter indicates the window size for packet loss + calculations. Uplink and downlink values are separated by "/". + + There are four more "measurement" attributes: + + a=measurement:latency 45 + a=measurement:jitter 3/12 + a=measurement:bandwidth 200/9800 + a=measurement:packetloss 0.00/1.00 + + The "measurement:latency", "measurement:jitter", + "measurement:bandwidth", and "measurement:packetloss" attributes + contain the values measured for each of these quality parameters in + uplink and downlink directions. Notice that latency is considered + equal for uplink and downlink directions. Quality parameter values + in these "measurement" attributes provide a snapshot of the quality + reached and MUST only be included in Q4S-ALERT messages in the SDP + body such that they can be protected from malicious attacks as these + alerts include a signature of the SDP body in the header. The rest + of the messages will include the measured values in the Measurements + header field. + + In the case of the "default" procedure, the valid values are as + follows: + + a=measurement:procedure default,[0..999]"/" [0..999] "," [0..999] + "/" [0..999] "," [0..9999] "," [0..999]/[0..999] "," + [0..999]/[0..999] + +7.2.12. "max-content-length" Attribute + + The adaptation of measurement traffic to approximate the actual data + streams' characteristics is convenient to accurately estimate the + expected QoS for applications. Particularly, packet size can have a + remarkable effect on bandwidth estimations. Moreover, this can + produce problems depending on the MTU of the end hosts and links + along the path. + + Therefore, the maximum content length MAY be set in an attribute + denoted as "max-content-length". Its value MUST be given in bytes + and MUST NOT include application, transport, network, or link layer + headers, i.e., size of the content length at the application layer. + If not set, the value MUST be 1000 bytes. + + Furthermore, this attribute MAY be used to communicate MTU limits in + endpoints, hence reducing possible bias as a result of network-layer + fragmentation. + + For instance: + + a=max-content-length:1300 + +7.3. Measurements + + This section describes the way quality parameters are measured as + defined by the "default" procedure. Measurements MUST be taken for + any quality parameter with constraints, that is, specified in the SDP + attributes with non-zero values. For absent attributes, measurements + MAY be omitted. + +7.3.1. Latency + + Latency measurements will be performed if the "latency" attribute + and/or the "a=measurement:latency" attribute are present and have + non-zero values. + + Q4S defines a PING method in order to exchange packets between the + client and the server. Based on this PING exchange, the client and + the server are able to calculate the round-trip time (RTT). The RTT + is the sum of downlink latency (normally named "reverse latency") and + uplink latency (normally named "forward latency"). + + At least 255 samples of RTT MUST be taken by the client and server. + As the forward and reverse latencies are impossible to measure, the + client and server will assume that both latencies are identical + (symmetric network assumption). The latency will therefore be + calculated as the statistical median value of all the RTT samples + divided by 2. + +7.3.2. Jitter + + Jitter measurements will be performed if the "jitter" attribute and/ + or the "a=measurement:jitter" attribute are present and have non-zero + values. + + The jitter can be calculated independently by the client and by the + server. The downlink jitter is calculated by the client taking into + account the time interval between PING requests as defined by the + "measurement:procedure" attribute in the first or second parameter + depending on the Q4S protocol phase. The client and the server MUST + send these PING requests at the specified intervals. The client + measures the downlink jitter, whereas the server measures the uplink + jitter. Note that PING responses are not taken into account when + calculating jitter values. + + Every time a PING request is received by an endpoint (either server + or client), the corresponding jitter value is updated with the + statistical jitter value, which is the arithmetic mean of the + absolute values of elapsed times calculated on the first 255 packets + received. + + Each endpoint sends a PING periodically with a fixed interval, and + each value of "elapsed time" (ET) should be very close to this + interval. If a PING message is lost, the ET value is doubled. + Identifying lost PING messages, however, is not an issue because all + PING messages are labeled with a Sequence-Number header field. + Therefore, the receiver can discard this ET value. + + In order to have the first jitter sample, the receiver MUST wait + until it receives 3 PING requests, because each ET is the time + between two PINGs, and a jitter measurement needs at least two ET. + + The client measures the values of RTT and downlink jitter, and the + server measures RTT and uplink jitter, but all measurements are + shared with the counterpart by means of the Measurements header field + of the PING message. + +7.3.3. Bandwidth + + Bandwidth measurements will be performed if the "bandwidth" attribute + and/or the "a=measurement:bandwidth" attribute is present and has + non-zero values. + + In order to measure the available bandwidth, both the client and the + server MUST start sending BWIDTH messages simultaneously using 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 during + the period of time defined in the third parameter of the SDP + "measurement:procedure default" attribute in milliseconds. + + a=measurement:procedure default(50/50,75/75,5000,256/256,256/256) + + +------------------------------------------------+ + | Rate | + | A | + | | | + |downlink rate-|-------------------+ <-- traffic | + | | | sent by | + | | | server | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | | | | + | uplink rate-|-------------------+ <-- traffic | + | | | sent by | + | | | client | + | | | | + | | | | + | |---|---|---|---|---|----> time | + | 0 1 2 3 4 5 (sec.) | + | | + +------------------------------------------------+ + + Figure 6: Bandwidth and Packet Loss Measurements + + The goal of these measurements is not to identify the available + bandwidth of the communication path, but to determine if the required + bandwidth is available, meeting the application's constraints. + Therefore, the requested bandwidth MUST be measured sending only the + highest bitrate required by the bandwidth attribute. This is + illustrated in Figure 6. + + ALERTS are not expected during bandwidth measurement, but only at the + end of the measurement time. + + When measuring bandwidth, all BWIDTH requests sent MUST be 1 kilobyte + in length (UDP payload length by default), they MUST include a + Sequence-Number header field with a sequential number starting at 0, + and their content MUST consist of randomly generated values to + minimize the effect of compression elements along the path. The + Sequence-Number MUST be incremented by 1 with each BWIDTH packet + sent. If any measurement stage needs to be repeated, the sequence + number MUST start at zero again. BWIDTH requests MUST NOT be + answered. Examples: + + Client message: + ========================= + BWIDTH q4s://www.example.com Q4S/1.0 + User-Agent: q4s-ua-experimental-1.0 + Session-Id: 53655765 + Sequence-Number: 0 + Content-Type: text + Content-Length: XXXX + Measurements: l=22, j=10, pl=0.00, bw=3000 + + VkZaU1FrNVZNVlZSV0doT1ZrZ (to complete up to "max-content- + length" bytes UDP payload length) + ========================= + + The client MUST send BWIDTH packets to the server to allow the server + to measure the uplink bandwidth. The server MUST send BWIDTH packets + to the client to allow the client to measure the downlink bandwidth. + + Server message: + ========================= + BWIDTH q4s://www.example.com Q4S/1.0 + Session-Id: 53655765 + Sequence-Number: 0 + Content-Type: text + Content-Length: XXXX + Measurements: l=22, j=7, pl=0.00, bw=200 + + ZY0VaT1ZURlZVVmhyUFE9PQ (to complete up to max-content- + length UDP payload length) + ========================= + +7.3.4. Packet Loss + + Packet loss and bandwidth are measured simultaneously using the + BWIDTH packets sent by both the client and the server. Because the + BWIDTH packets contain a Sequence-Number header field incremented + sequentially with each sent packet, lost packets can be easily + identified. The lost packets MUST be counted during the measurement + time. + +7.4. Handshake Phase + + The first phase consists of a Q4S BEGIN method issued from the client + to the server as shown in Figure 7. + + The first Q4S message MUST have a special URI [RFC3986], which forces + the use of the Q4S protocol if it is implemented in a standard web + browser. + + This URI, named "Contact URI", is used to request the start of a + session. Its scheme MUST be: + + "q4s:" "//" host [":" port] [path["?" query] + + Optionally, the client can send the desired quality parameters + enclosed in the body of the message as an SDP document. The server + MAY take them into account when building the answer message with the + final values in the SDP body, following a request/response schema + [RFC3264]. + + If the request is accepted, the server MUST answer it with a Q4S 200 + OK message, which MUST contain an SDP body [RFC4566] with the + assigned sess-id (embedded in the SDP "o=" line), the IP addresses to + be used, the flow ports to be used, the measurement procedure to be + followed, and information about the required quality constraints. + Additionally, the "alerting-mode" and "alert-pause" time attributes + may be included. Q4S responses should use the protocol designator + "Q4S/1.0". + + After these two messages are exchanged, the first phase is completed. + The quality parameter thresholds have been sent to the client. The + next step is to measure the actual quality of the communication path + between the client and the server and alert if the Service Level + Agreement (SLA) is being violated. + + +------------------------------------------------+ + | | + | Client Server | + | | + | ------- Q4S BEGIN ------------> | + | | + | <------ Q4S 200 OK ------------ | + | | + | | + +------------------------------------------------+ + + Figure 7: Handshake Phase + + The following is an example of a client request and a server answer: + + Client Request: + ========================= + BEGIN q4s://www.example.com Q4S/1.0 + Content-Type: application/sdp + User-Agent: q4s-ua-experimental-1.0 + Content-Length: 142 + + (SDP not shown) + ========================= + + Server Answer: + ========================= + Q4S/1.0 200 OK + Date: Mon, 10 Jun 2010 10:00:01 GMT + Content-Type: application/sdp + Expires: 3000 + Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 + Content-Length: 131 + + (SDP not shown) + ========================= + + The header fields used are explained in Section 4.3. + +7.5. Negotiation Phase + + The Negotiation phase is in charge of measuring the quality + parameters and verifying that the communication paths meet the + required quality constraints in both directions as specified in the + SDP body. + + The measured parameters will be compared with the quality constraints + specified in the SDP body. If the quality session is compliant with + all the quality constraints, the application can start. + + If the quality constraints are not met, a higher quality service + level will be demanded. Depending on the scenario, this quality + upgrade will be managed as follows: + + In the Q4S-aware-network scenario: a Q4S-ALERT method will be + triggered by the server to the client, and the client will answer + with the same Q4S-ALERT method. After receiving the same Q4S- + ALERT from the counterpart, no other alerts will be triggered by + the server during the "alert-pause" period of time in order to + allow the network to react, but measurements will continue to be + taken to achieve early detection of improved network quality + conditions and a fast application start. + + In the Reactive scenario: an alert notification will be sent by the + server stack to the Actuator, and the Actuator will answer with an + alert acknowledgement. After receiving the alert acknowledgement + from the Actuator, the server stack will not send other alert + notifications during the "alert-pause" period of time in order to + allow the Actuator to react and trigger actions on the application + or on the policy server, but measurements will continue to be + taken to achieve early detection of improved network quality + conditions and a fast application start. + + In both scenarios stated above, if after several measurement cycles, + the network constraints cannot be met, the quality session is + terminated. Concretely when, under all possible actions taken by + Actuator, the quality remains below requirements, the session must be + terminated. + + The steps to be taken in this phase depend on the measurement + procedure exchanged during the Handshake phase. This document only + describes the "default" procedure, but others can be used, like RTP/ + RTCP [RFC3550]. + + Measurements of latency and jitter are made by calculating the + differences in the arrival times of packets and can be achieved with + little bandwidth consumption. The bandwidth measurement, on the + other hand, involves higher bandwidth consumption in both directions + (uplink and downlink). + + To avoid wasting unnecessary network resources, these two types of + measurements will be performed in two separate stages. If the + required latencies and jitters cannot be reached, it makes no sense + to waste network resources measuring bandwidth. In addition, if + achieving the required latency and jitter thresholds implies + upgrading the quality session level, the chance of obtaining + compliant bandwidth measurements without retries is higher, saving + network traffic again. Therefore, the "default" procedure determines + that the measurements are taken in two stages: + + Stage 0: Measurement of latencies, jitters, and packet loss + + Stage 1: Measurement of bandwidths and packet loss + + Notice that packet loss can be measured in both stages, as all + messages exchanged include a Sequence-Number header field that allows + for easy packet loss detection. + + The client starts the Negotiation phase by sending a READY request + using the TCP Q4S ports defined in the SDP. This READY request + includes a Stage header field that indicates the measurement stage. + + If either jitter, latency, or both are specified, the Negotiation + phase begins with the measurement of latencies and jitters (stage 0). + If none of those attributes is specified, stage 0 is skipped. + +7.5.1. Stage 0: Measurement of Latencies and Jitter + + The Stage 0 MUST start with a synchronization message exchange + initiated with the client's READY message. + + Client Request, READY message: + ========================= + READY q4s://www.example.com Q4S/1.0 + Stage: 0 + Session-Id: 53655765 + User-Agent: q4s-ua-experimental-1.0 + Content-Length: 0 + ========================= + + Server Response: + ========================= + Q4S/1.0 200 OK + Session-Id: 53655765 + Stage:0 + Content-Length: 0 + ========================= + + This triggers the exchange of a sequence of PING requests and + responses that will lead to the calculation of RTT (latency), jitter, + and packet loss. + + After receiving a 200 OK, the client must send the first PING + message, and the server will wait to send PINGs until the reception + of this first client PING. + + The client and server MUST send PING requests to each other. The + Sequence-Number header field of the first PING MUST be set to 0. The + client and server will manage their own sequence numbers. + + +------------------------------------------------+ + | | + | Client Server | + | | + | --------- Q4S READY 0 ---------> | + | <-------- Q4S 200 OK ----------- | + | | + | --------- Q4S PING ------------> | + | <-------- Q4S 200 OK ----------- | + | <-------- Q4S PING ------------- | + | -------- Q4S 200 OK ----------> | + | --------- Q4S PING ------------> | + | <-------- Q4S PING ------------- | + | --------- Q4S 200 OK ----------> | + | <-------- Q4S 200 OK ----------- | + | ... | + | | + +------------------------------------------------+ + + Figure 8: Simultaneous Exchange of PING Request and Responses + + The following is an example of the PING request sent from the client + and the server's response: + + Client Request: + ========================= + PING q4s://www.example.com Q4S/1.0 + Session-Id: 53655765 + Sequence-Number: 0 + User-Agent: q4s-ua-experimental-1.0 + Measurements: l=22, j=12, pl=0.20, bw= + Content-Length: 0 + ========================= + + Server Response: + ========================= + Q4S/1.0 200 OK + Session-Id: 53655765 + Sequence-Number: 0 + Content-Length: 0 + ========================= + + The function of the PING method is similar to the ICMP echo request + message [RFC0792]. The server MUST answer as soon as it receives the + message. + + Both endpoints MUST send Q4S PING messages with the periodicity + specified in the first parameter of SDP "measurement:procedure" + attribute, always using the same UDP ports and incrementing the + Sequence-Number with each message. + + In the following example, the value of the first parameter of the SDP + "measurement:procedure" attribute is 50 milliseconds (from the client + to the server) and 60 ms (from the server to the client): + + a=measurement:procedure default(50/60,50/50,5000,256/256,256/256) + + They MUST NOT wait for a response to send the next PING request. The + Sequence-Number header field value is incremented sequentially and + MUST start at zero. If this stage is repeated, the initial Sequence- + Number MUST start at zero again. + + All PING requests MUST contain a Measurements header field with the + values of the latency, jitter, and packet loss measured by each + entity up to that moment. The client will send its measurements to + the server, and the server will send its measurements to the client. + Example: + + Measurements: l=22, j=13, pl=0.10, bw= + + Where "l" stands for latency, "j" for jitter, "pl" for packet loss, + and "bw" for bandwidth. The bandwidth value is omitted, as it is not + measured at this stage. + + Optionally the PING request can include a Timestamp header field with + the time in which the message has been sent. In the case that the + header field is present, the server MUST include the header field in + the response without changing the value. + + A minimum number of PING messages MUST be exchanged in order to be + able to measure latency, jitter, and packet loss with certain + accuracy (at least 256 samples are RECOMMENDED to get an accurate + packet loss measurement). Both the client and the server calculate + the respective measured parameter values. The mechanisms to + calculate the different parameters are described in Section 7.3. + + At the end of this stage 0, there are three possibilities: + + * The latency, jitter, and packetloss constraints are reached in + both directions + + * The latency, jitter, and packetloss constraints are not reached in + one or both directions + + In the first case, Stage 0 is finished. The client and server are + ready for Stage 1: bandwidth and packet loss measurement. The client + moves to stage 1 by sending a READY message that includes the header + field, "Stage: 1". + + If the bandwidth constraints are either empty or have a value of + zero, the Negotiation phase MUST terminate, and both client and + server may initiate the Continuity phase. In this case, client moves + to the Continuity phase by sending a READY message that includes the + header field, "Stage: 2". + + The second case, in which one or more quality constraints have not + been met, is detailed in Section 7.5.4. + +7.5.2. Stage 1: Measurement of Bandwidth and Packet Loss + + This stage begins in a similar way to stage 0, sending a READY + 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 initiation of the measurements as shown in Figure 9. + + +------------------------------------------------+ + | | + | Client Server | + | | + | --------- Q4S READY 1 -----------> | + | <-------- Q4S 200 OK ------------- | + | | + | --------- Q4S BWIDTH -----------> | + | <-------- Q4S BWIDTH ------------ | + | --------- Q4S BWIDTH -----------> | + | <-------- Q4S BWIDTH ------------ | + | ... | + | | + +------------------------------------------------+ + + Figure 9: Starting Bandwidth and Packet Loss Measurement + + Client Request: + ========================= + READY q4s://www.example.com Q4S/1.0 + User-Agent: q4s-ua-experimental-1.0 + Stage: 1 + Session-Id: 53655765 + Content-Length: 0 + + ========================= + + Server Response: + ========================= + Q4S/1.0 200 OK + Session-Id: 53655765 + Stage: 1 + Content-Length: 0 + + ========================= + + Just after receiving the 200 OK, both the client and the server MUST + start sending BWIDTH messages simultaneously using the UDP "q4s" + ports. Section 7.3.3 describes the bandwidth measurement in detail. + + At the end of this stage 1, there are three possibilities: + + * The bandwidth and packetloss constraints are reached in both + directions. + + * The bandwidth and packetloss constraints are not reached in one or + both directions. + + In the first case, Stage 1 is finished. The client and server are + ready for the Continuity phase. The client moves to this phase by + sending a READY message that includes the header field, "Stage: 2". + The server answer MUST be 200 OK as shown in Figure 10. + + +------------------------------------------------+ + | | + | Client Server | + | | + | --------- Q4S READY 2 --------------> | + | <---- Q4S 200 OK with trigger URI----- | + | | + | --------- HTTP GET ----------------> | + | | + | (Application starts) | + | | + +------------------------------------------------+ + + Figure 10: Trigger the Application Using HTTP URI + + Client Request: + ========================= + READY q4s://www.example.com Q4S/1.0 + User-Agent: q4s-ua-experimental-1.0 + Stage: 2 + Session-Id: 53655765 + Content-Length: 0 + + ========================= + + Server Answer: + ========================= + Q4S/1.0 200 OK + Date: Mon, 10 Jun 2010 10:00:01 GMT + Session-Id: 53655765 + Trigger-URI: http://www.example.com/app_start + Expires: 3000 + Content-Type: application/sdp + Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 + Content-Length: 131 + + (SDP not shown) + ========================= + + If the Trigger-URI header field is present, the client SHOULD send an + HTTP request to this URI. + + The second case, with violated network constraints, is explained in + Section 7.5.4. + +7.5.3. Quality Constraints Not Reached + + After finishing Stage 1 of the Negotiation phase, the client and the + server have each other's measured parameter values as these have been + exchanged in the Measurements header fields of the PING and BWIDTH + messages. If there is one or more parameters that do not comply with + the uplink or downlink application constraints required, both the + server and the client are aware of it. + + If there is any quality parameter that does not meet the uplink or + downlink quality constraints specified in the SDP message, two + scenarios are possible depending on the specified alerting mode (if + not present, the default value is Reactive alerting mode): + + (a) Q4S-aware-network alerting mode: the server MUST send a Q4S- + ALERT message to the client including the digital Signature + header field, and the client MUST 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 MUST contain the "measurement" parameters in the + body. + + Server request + ========================= + Q4S-ALERT q4s://www.example.com Q4S/1.0 + Host: www.example.com + User-Agent: q4s-ua-experimental-1.0 + Session-Id: 53655765 + Content-Type: application/sdp + Content-Length: 142 + + v=0 + o=q4s-UA 53655765 2353687637 IN IP4 192.0.2.33 + s=Q4S + i=Q4S parameters + t=0 0 + a=qos-level:1/2 + a=alerting-mode: Q4S-aware-network + a=alert-pause:5000 + a=public-address:client IP4 198.51.100.51 + a=public-address:server IP4 198.51.100.58 + a=latency:40 + a=jitter:10/10 + a=bandwidth:20/6000 + a=packetloss:0.50/0.50 + a=flow:app downlink TCP/10000-20000 + a=flow:app uplink TCP/56000 + a=flow:q4s downlink UDP/55000 + a=flow:q4s downlink TCP/55001 + a=flow:q4s uplink UDP/56000 + a=flow:q4s uplink TCP/56001 + a=measurement:procedure default(50/50,50/50,5000,256/256,256/256) + a=measurement:latency 30 + a=measurement:jitter 6/4 + a=measurement:bandwidth 200/4000 + a=measurement:packetloss 0.20/0.33 + ========================= + + At this point, both the client and server keep on measuring but + without sending new Q4S-ALERT messages during the "alert-pause" + milliseconds. + + (b) Reactive alerting mode: the server stack MUST send an alert + notification to the Actuator, and the Actuator MUST answer with + an acknowledgement to the received alert notification. The + alert notification sent to the Actuator by the server stack + doesn't follow Q4S message style but should have all the + information the Actuator will need for the actions to be taken, + which will be implementation dependent. + + At this point during Negotiation phase, both the client and server + keep on measuring without sending new alert notifications to the + Actuator during the "alert-pause" milliseconds specified in the SDP. + This way, both client and server will detect any improvement in + network conditions as soon as the network reacts. The application + can start as soon as the number of measurements indicated in the + "measurement:procedure" attribute indicates that the quality + parameters are met. + + The same applies to Continuity phase: the measurement dialog between + client and server must not be interrupted by any possible ALERT + message. + +7.5.3.1. Actuator Role + + 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. + + The Actuator logic activates mechanisms at the application level and/ + or the network level based on a quality level dictionary, in which + the meaning of each level is implementation dependent, and each level + involves different actions based on rules to keep a certain user + experience quality. + + The type of actions that an Actuator can take at the application + level are application dependent and MAY involve: + + * Reduction of application functionalities, such as limitation of + application speed or application options. + + * Reduction of application resources usage, such as reduction of + frames per second in a video application or any other parameter + modification in order to adapt to network conditions. + + Apart from actions at the application level, the Actuator MAY act at + the network level if a network policy server is available. + +7.5.3.2. Policy Server Role + + A network policy server may be part of the Reactive scenario, and it + is in charge of managing network quality provision. A network policy + server may implement all or some of these features (but + implementation is not exclusive to): + + * Server validation in terms of quality constraints + + * Authentication (Signature validation) and security (blocking of + malicious clients) + + * Policy rules (the following rules are only examples): + + - Maximum quality level allowed for the ACP + + - Time bands allowed for providing quality sessions + + - Number of simultaneous quality sessions allowed + + - Maximum time used by allowed quality sessions + + - Etc. + + If any of the policy rules fail, a Q4S-ALERT message MUST be answered + by a 6xx error indicating the cause. + +7.5.4. "qos-level" Changes + + If any constraint was violated, the server MAY trigger a Q4S-ALERT + asking for a higher "qos-level" attribute. The maximum "qos-level" + allowed is 9 for both uplink and downlink. + + If the "qos-level" has reached the maximum value for the downlink or + uplink without matching the constraints, then a CANCEL request MUST + be sent by the client using the TCP port determined in the Handshake + phase in order to release the session. In reaction to the reception + of the CANCEL request, the server MUST send a CANCEL request, too. + If no CANCEL request is received, the expiration time cancels the + session on the server side. + + Client Request: + ========================= + CANCEL q4s://www.example.com Q4S/1.0 + User-Agent: q4s-ua-experimental-1.0 + Session-Id: 53655765 + Content-Type: application/sdp + Content-Length: 142 + + (SDP not shown) + ========================= + + Server Request in reaction to Client Request: + ========================= + CANCEL q4s://www.example.com Q4S/1.0 + Session-Id: 53655765 + Expires: 0 + Content-Type: application/sdp + Signature: 6ec1ba40e2adf2d783de530ae254acd4f3477ac4 + Content-Length: 131 + + (SDP not shown) + ========================= + +7.6. Continuity Phase + + During the Negotiation phase, latency, jitter, bandwidth, and packet + loss have been measured. During the Continuity phase, bandwidth will + not be measured again because bandwidth measurements may disturb + application performance. + + This phase is supposed to be executed at the same time as the real- + time application is being used. + + This document only covers the "default" procedure. The continuity + operation with the "default" procedure is based on a sliding window + of samples. The number of samples involved in the sliding window may + be different for jitter and latency than for packet loss calculations + according to the fifth and sixth parameters of the + "measurement:procedure" attribute. In the example, shown in + Figure 11, the jitter and latency sliding window comprises 40 + samples, whereas the size of the packet loss sliding window is 100 + samples: + + a=measurement:procedure default(50/50,75/75,5000,40/40,100/100) + + In addition, the sizes of these windows are configurable per + direction: uplink and downlink values may differ. + + PING requests are sent continuously (in both directions), and when + the Sequence-Number header field reaches the maximum value, the + client continues sending PING messages with the Sequence-Number + header field starting again at zero. When the server PING Sequence- + Number header field reaches the maximum value, it does the same, + starting again from zero. + + On the client side, the measured values of downlink jitter, downlink + packet loss, and latency are calculated using the last samples, + discarding older ones, in a sliding window schema. + + +--------------------------------------------------+ + | | + | 55 56 57 . . . 253 254 255 0 1 2 . . . 55 56 | + | A A | + | | | | + | +-----------------------------------+ | + | | + +--------------------------------------------------+ + + Figure 11: Sliding Samples Window + + Only if the server detects that the measured values (downlink or + uplink jitter, packet loss, or latency) are not reaching the quality + constraints, a Q4S-ALERT is triggered and sent either to the client + or to the Actuator, depending on the alerting mode, and the "alert- + pause" timer is started. + + In the Q4S-aware-network alerting mode shown in Figure 12, if the + client receives a Q4S-ALERT message, it MUST answer by sending the + Q4S-ALERT request message including the SDP (with its corresponding + digital signature) back to the server. + + Both client and server will keep performing measurements, but Q4S- + ALERT messages MUST NOT be sent during "alert-pause" milliseconds. + The operations needed to act on the network and the agents in charge + of them are out of scope of this document. + + +------------------------------------------------+ + | | + | Client Server | + | | + | ... | + | ----------- PING ----------> | + | <--------- 200 OK ---------- | + | <------- Q4S-ALERT --------- | + | -------- Q4S-ALERT --------> | + | <---------- PING ----------- | + | ---------- 200 OK ---------> | + | ----------- PING ----------> | + | <--------- 200 OK ---------- | + | <---------- PING ----------- | + | ---------- 200 OK ---------> | + | ... | + | | + +------------------------------------------------+ + + Figure 12: Continuity in Q4S-Aware-Network Alerting Mode + + In the Reactive scenario shown in Figure 13, if the server detects + that the measured values (downlink or uplink jitter, packet loss, or + latency) are not reaching the quality constraints, an alert + notification is triggered and sent to the Actuator. The Actuator + MUST then answer to the server stack with an alert acknowledgement. + + The measurement dialog between the client and the server MUST NOT be + interrupted by any possible ALERT message. + + +------------------------------------------------+ + | | + | Client Server Actuator | + | ... | + | --- PING ----------> | + | <-- 200 OK---------- | + | <----- PING -------- | + | <--- 200 OK -------- ---- alert | + | notification --> | + | | + | --- PING ----------> <--- alert | + | acknowledge --- | + | <-- 200 OK---------- | + | <----- PING -------- | + | --- 200 OK --------> | + | ... | + | | + +------------------------------------------------+ + + Figure 13: Continuity in Reactive Alerting Mode + +7.7. Termination Phase + + The Termination phase is the endpoint for the established Q4S session + that is reached in the following cases: + + * A CANCEL message has been received. The client sends a CANCEL + message due to the network's inability to meet the required + quality constraints. The client and server application will be + notified by their respective Q4S stacks. + + * Session expires: if after the Expires time, no client or server + activity is detected, that end cancels the session. + + * A BEGIN message has been received by the server. The pre-existing + Q4S quality session is canceled, and a new session will be + initiated. + + The meaning of the Termination phase in terms of the release of + resources or accounting is application dependent and out of scope of + the Q4S protocol. + + In the Reactive alerting mode, Q4S CANCEL messages received by the + Q4S server must cause the server stack to send cancel notifications + to the Actuator in order to release possible assigned resources for + the session. + +7.7.1. Sanity Check of Quality Sessions + + A session may finish due to several reasons (client shutdown, client + CANCEL request, constraints not reached, etc.), and any session + finished MUST release the assigned resources. + + In order to release the assigned server resources for the session, + the Expires header field indicates the maximum interval of time + without exchanging any Q4S message. + +7.8. Dynamic Constraints and Flows + + Depending on the nature of the application, the quality constraints + to be reached may evolve, changing some or all quality constraint + values in any direction. + + The client MUST be able to deal with this possibility. When the + server sends an SDP document attached to a response (200 OK or Q4S- + ALERT, etc.), the client MUST take all the new received values, + overriding any previous value in use. + + The dynamic changes on the quality constraints can be a result of two + possibilities: + + * The application communicates to the Q4S server a change in the + constraints. In this case, the application requirements can + evolve, and the Q4S server will be aware of them. + + * The application uses TCP flows. In that case, in order to + guarantee a constant throughput, the nature of TCP behavior forces + the use of a composite constraint function, which depends on RTT, + packet loss, and a window control mechanism implemented in each + TCP stack. + + TCP throughput can be less than actual bandwidth if the Bandwidth- + Delay Product (BDP) is large, or if the network suffers from a high + packet loss rate. In both cases, TCP congestion control algorithms + may result in a suboptimal performance. + + Different TCP congestion control implementations like Reno [RENO], + High Speed TCP [RFC3649], CUBIC [CUBIC], Compound TCP (CTCP) [CTCP], + etc., reach different throughputs under the same network conditions + of RTT and packet loss. In all cases, depending on the RTT-measured + value, the Q4S server could dynamically change the packetloss + constraints (defined in the SDP) in order to make it possible to + reach a required throughput or vice versa (using + "measurement:packetloss" to change dynamically the latency + constraints). + + A general guideline for calculating the packet loss constraint and + the RTT constraint consists of approximating the throughput by using + a simplified formula, which should take into account the TCP stack + implementation of the receiver, in addition to the RTT and packet + loss: + + Th= Function( RTT, packet loss, ...) + + Then, depending on RTT-measured values, set dynamically the packet + loss constraint. + + It is possible to easily calculate a worst-case boundary for the Reno + algorithm, which should ensure for all algorithms that the target + throughput is actually achieved, except that high-speed algorithms + will then have even larger throughput if more bandwidth is available. + + For the Reno algorithm, the Mathis formula may be used [RENO] for the + upper bound on the throughput: + + Th <= (MSS/RTT)*(1 / sqrt{p}) + + In the absence of packet loss, a practical limit for the TCP + throughput is the receiver_window_size divided by the RTT. However, + if the TCP implementation uses a window scale option, this limit can + reach the available bandwidth value. + +7.9. "qos-level" Upgrade and Downgrade Operation + + Each time the server detects a violation of constraints, the alert + mechanism is triggered, the "alert-pause" timer is started, and the + "qos-level" is increased. When this happens repeatedly, and the + "qos-level" reaches its maximum value (value 9), the session is + canceled. But when the violation of constraints stops before + reaching "qos-level" maximum value, the recovery mechanism allows for + the "qos-level" upgrade gradually. + + This downgrade and upgrade of "qos-level" is explained with the + following example: + + 1. A Q4S session is initiated successfully with "qos-level=0". + + 2. During the Continuity phase, violation of constraints is + detected; the "qos-level" is increased to 1, a Q4S-ALERT is sent + by the server to the client, and an "alert-pause" timer is + started. + + 3. The "alert-pause" timer expires, and still a violation of + constraints is detected; the "qos-level" is increased to 2, a + Q4S-ALERT is sent by the server to the client, and an "alert- + pause" timer is started. + + 4. The "alert-pause" timer expires, but the violation of constraints + has stopped; the "recovery-pause" timer is started. + + 5. The "recovery-pause" timer expires, and no violation of + constraints has been detected. Meanwhile, the "qos-level" is + decreased to 1, a Q4S-RECOVERY is sent by the server to the + client, and the "recovery-pause" timer is started again. + + 6. The "recovery-pause" timer expires again, and no violation of + constraints has been detected. Meanwhile, the "qos-level" is + 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 "qos-level" has reached its initial value. + + When the network configuration allows for the possibility of managing + Q4S flows and application flows independently (either is a network- + based QoS or a Q4S-aware network), the "qos-level" downgrade process + could be managed more efficiently using a strategy that allows for + carrying out "qos-level" downgrades excluding application flows from + SDP dynamically. The Q4S flows would be downgraded to allow for + measurements on a lower quality level without interference of the + application flows. A Q4S client MUST allow this kind of SDP + modification by the server. + + Periodically (every several minutes, depending on the implementation) + a Q4S-ALERT could be triggered, in which the level is downgraded for + Q4S flows, excluding application flows from the embedded SDP of that + request. + + This mechanism allows the measurement at lower levels of quality + while application flows continue using a higher "qos-level" value. + + * If the measurements in the lower level meet the quality + constraints, then a Q4S-RECOVERY message to this lower "qos-level" + may be triggered, in which the SDP includes the application flows + in addition to the Q4S flows. + + * If the measurements in the lower level do not meet the + constraints, then a new Q4S-ALERT to the previous "qos-level" MUST + be triggered, in which the SDP includes only the Q4S flows. + + +------------------------------------------------+ + | | + | qos-level | + | A | + | | | + | 4| | + | | | + | 3| +------+ | + | | | | | + | 2| +----+ +----+ +--- | + | | | | | | + | 1| +----+ +-----+ | + | | | | + | 0+---+---------------------------------> time | + | | + +------------------------------------------------+ + + Figure 14: Possible Evolution of "qos-level" + + This mechanism, illustrated in Figure 14, avoids the risk of + disturbing the application while the measurements are being run in + lower levels. However, this optional optimization of resources MUST + be used carefully. + + The chosen period to measure a lower "qos-level" is implementation + dependent. Therefore, it is not included as a + "measurement:procedure" parameter. It is RECOMMENDED to use a large + value, such as 20 minutes. + +8. General User Agent Behavior + +8.1. Roles in Peer-to-Peer Scenarios + + In order to allow peer-to-peer applications, a Q4S User Agent (UA) + MUST be able to assume both the client and server role. The role + assumed depends on who sends the first message. + + In a communication between two UAs, the UA that first sends the Q4S + BEGIN request to start the Handshake phase shall assume the client + role. + + If both UAs send the BEGIN request at the same time, they will wait + for a random time to restart again as shown in Figure 15. + + Otherwise, an UA may be configured to act only as server (e.g., + content provider's side). + + +-----------------------------------------------+ + | | + | UA(Client) UA(Server) | + | | + | -------- Q4S BEGIN -------------> | + | <------- Q4S BEGIN -------------- | + | | + | ------- Q4S BEGIN --------------> | + | <------ Q4S 200 OK -------------- | + | | + | | + +-----------------------------------------------+ + + Figure 15: P2P Roles + +8.2. Multiple Quality Sessions in Parallel + + A Q4S session is intended to be used for an application. This means + that for using the application, the client MUST establish only one + Q4S session against the server. Indeed, the relation between the + Session-Id and the application is 1 to 1. + + If a user wants to participate in several independent Q4S sessions + simultaneously against different servers (or against the same + server), it can execute different Q4S clients to establish separately + different Q4S sessions, but it is NOT RECOMMENDED because: + + * The establishment of a new Q4S session may affect other running + applications over other Q4S sessions during bandwidth measurement. + + * If the Negotiation phase is executed separately before running any + application, the summation of bandwidth requirements could not be + met when the applications are running in parallel. + +8.3. General Client Behavior + + A Q4S client has different behaviors. We will use letters X, Y, and + Z to designate each different behavior (follow the letters in + Figure 16 and their descriptions below). + + X) When it sends messages over TCP (methods BEGIN, READY, Q4S-ALERT, + Q4S-RECOVERY, and CANCEL), it behaves strictly like a state + machine that sends requests and waits for responses. Depending + on the response type, it enters into a new state. + + When it sends UDP messages (methods PING and BWIDTH), a Q4S client is + not strictly a state machine that sends messages and waits for + responses because of the following: + + Y) During the measurement of latency, jitter, and packet loss, the + PING requests are sent periodically, not just after receiving the + response to the previous request. In addition, the client MUST + answer the PING requests coming from the server, therefore the + client assumes temporarily the role of a server. + + Z) During the bandwidth and packet loss measurement stage, the + client does not expect to receive responses when sending BWIDTH + requests to the server. In addition, it MUST receive and process + all server messages in order to achieve the downlink measurement. + + The Q4S-ALERT and CANCEL may have a conventional answer if an error + is produced, otherwise the corresponding answer is formatted as a + request message. + + +-----------+------------------------+-----------+-----------+ + | Handshake | Negotiation |Continuity |Termination| + | Phase | Phase | Phase | Phase | + | | | | | + | X ---------> Y --> X --> Z --> X ---> Y --> X ---> X | + | | A | A | | A | | | + | | | | | | | | | | | + | | +-----+ +-----+ | +-----+ | | + | | | | | + +------------------------------------------------+-----------+ + + Figure 16: Phases and Client Behaviors + +8.3.1. Generating Requests + + A valid Q4S request formulated by a client MUST, at a minimum, + contain the following header fields: + + If no SDP is included: the header fields Session-Id and Sequence- + Number are mandatory. + + If SDP is included: the Session-Id is embedded into the 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 + be signed. + + At any time, if the server sends new SDP with updated values, the + client MUST take it into account. + +8.4. General Server Behavior + + 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 any + supported extension), the server MUST ignore that header field and + continue processing the message. + + The role of the server is changed at Negotiation and Continuity + phases, in which the server MUST send packets to measure jitter, + latency, and bandwidth. Therefore, the different behaviors of the + server are (follow the letters in Figure 17 and their descriptions + below): + + R) When the client sends messages over TCP (methods BEGIN, READY + Q4S-ALERT, Q4S-RECOVERY, and CANCEL), it behaves strictly like a + state machine that receives messages and sends responses. + + When the client begins to send UDP messages (methods PING and + BWIDTH), a Q4S server is not strictly a state machine that receives + messages and sends responses because of the following: + + S) During the measurement of latency, jitter, and packet loss, the + PING requests are sent periodically by the client and also by the + server. In this case, the server behaves as a server answering + client requests but also behaves temporarily as a client, sending + PING requests toward the client and receiving responses. + + T) During bandwidth and packet loss measurement, the server sends + BWIDTH requests to the client. In addition, it MUST receive and + process client messages in order to achieve the uplink + measurement. + + The Q4S-ALERT and CANCEL may have a conventional answer if an error + is produced, otherwise the corresponding answer is formatted as a + request message. + + +-----------+------------------------+-----------+-----------+ + | Handshake | Negotiation |Continuity |Termination| + | Phase | Phase | Phase | Phase | + | | | | | + | R ---------> S --> R --> T --> R ---> S --> R ---> R | + | | A | A | | A | | | + | | | | | | | | | | | + | | +-----+ +-----+ | +-----+ | | + | | | | | + +------------------------------------------------+-----------+ + + Figure 17: Phases and Server Behaviors + +9. Implementation Recommendations + +9.1. Default Client Constraints + + To provide a default configuration, it would be good if the 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. + + Different business models (out of scope of this proposal) may be + achieved: depending on who pays for the quality session, the server + can accept certain client parameters sent in the first message, or + force billing parameters on the server side. + +9.2. Latency and Jitter Measurements + + Different client and server implementations may send a different + number of PING messages for measuring, although at least 255 messages + should be considered to perform the latency measurement. The Stage 0 + measurements may be considered ended only when neither the client nor + server receive new PING messages after an implementation-dependent + guard time. Only after, the client can send a "READY 1" message. + + In execution systems, where the timers are not accurate, a + recommended approach consists of including the optional Timestamp + header field in the PING request with the time in which the message + has been sent. This allows an accurate measurement of the jitter + even with no identical intervals of time between PINGs. + +9.3. Bandwidth Measurements + + In programming languages or operating systems with limited timers or + clock resolution, it is recommended to use an approach based on + several intervals to send messages of 1KB (= 8000 bits) in order to + reach the required bandwidth consumption, using a rate as close as + possible to a constant rate. + + For example, if the resolution is 1 millisecond, and the bandwidth to + reach is 11 Mbps, a good approach consists of sending: + + 1 message of 1KB every 1 millisecond + + + 1 message of 1KB every 3 milliseconds + + + 1 message of 1KB every 23 milliseconds + + The number of intervals depends on the required bandwidth and + accuracy that the programmer wants to achieve. + + Considering messages of 1KB (= 8000 bits), a general approach to + determine these intervals is the following: + + (1) Compute target bandwidth / 8000 bits. In the example above, it + is 11 Mbps / 8000 = 1375 messages per second. + + (2) 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 case, one). The pending bandwidth is now 375 messages per + second. + + (3) To achieve the 375 messages per second, use a submultiple of + 1000, which must be less than 375: + + 1000 / 2 = 500 > 375 + + 1000 / 3 = 333 < 375 + + In this case, a message every 3 ms is suitable. The new pending + target bandwidth is 375 - 333 = 42 messages per second. + + (4) 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 + + 1000 / 23 = 43 > 42 + + 1000 / 24 = 41.6 < 42 + + 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 + 42 but very close to it. + + In execution systems where the timers are not accurate, a recommended + approach consists of checking at each interval the number of packets + that should have been sent at this timestamp since origin and send + the needed number of packets in order to reach the required + bandwidth. + + The shorter the packets used, the more constant the rate of bandwidth + measurement. However, this may stress the execution system in charge + of receiving and processing packets. As a consequence, some packets + may be lost because of stack overflows. To deal with this potential + issue, a larger packet is RECOMMENDED (2KB or more), taking into + account the overhead produced by the chunks' headers. + +9.4. Packet Loss Measurement Resolution + + Depending on the application nature and network conditions, a packet + 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 + trade-off between time and resolution should be reached in each case. + For example, in order to have a resolution of 1/10000, the last 10000 + samples should be considered in the packet loss measured value. + + The problem of this approach is the reliability of old samples. If + 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 + 1/10000 takes 500 seconds (more than 8 minutes). The reliability of + a packet loss calculation based on a sliding window of 8 minutes + depends on how fast network conditions evolve. + +9.5. Measurements and Reactions + + Q4S can be used as a mechanism to measure and trigger network tuning + and application-level actions (i.e. lowering video bit-rate, reducing + multiplayer interaction speed, etc.) in real time in order to reach + the application constraints, addressing measured possible network + degradation. + +9.6. Instability Treatments + + There are two scenarios in which Q4S can be affected by network + problems: loss of Q4S packets and outlier samples. + +9.6.1. Loss of Control Packets + + Lost UDP packets (PING or BWIDTH messages) don't cause any problems + for the Q4S state machine, but if TCP packets are delivered too late + (which we will consider as "lost"), some undesirable consequences + could arise. + + Q4S does have protection mechanisms to overcome these situations. + Examples: + + * If a BEGIN packet or its corresponding answer is lost, after a + certain timeout, the client SHOULD resend another BEGIN packet, + resetting the session + + * If a READY packet is lost, after a certain timeout, the client + SHOULD resend another READY packet. + + * If a Q4S-ALERT request or its corresponding answer is lost, after + a certain timeout, the originator SHOULD resend another Q4S-ALERT + packet. + + * If a CANCEL request or its corresponding answer is lost, after a + certain timeout, the originator SHOULD resend another CANCEL + packet. + +9.6.2. Outlier Samples + + Outlier samples are those jitter or latency values far from the + general/average values of most samples. + + Hence, the Q4S default measurement method uses the statistical median + formula for latency calculation, and the outlier samples are + neutralized. This is a very common filter for noise or errors on + signal and image processing. + +9.7. Scenarios + + Q4S could be used in two scenarios: + + * client to ACP + + * client to client (peer-to-peer scenario) + +9.7.1. Client to ACP + + One server: + + It is the common scenario in which the client contacts the server to + establish a Q4S session. + + N servers: + + In Content Delivery Networks and in general applications where + delivery of contents can be achieved by different delivery nodes, two + working mechanisms can be defined: + + Starting mode: the end user may run Q4S against several delivery + nodes and after some seconds choose the best one to start the + multimedia session. + + Prevention mode: during a streaming session, the user keeps several + Q4S dialogs against different alternative delivery nodes. In case + of congestion, the end user MAY change to the best alternative + delivery node. + +9.7.2. Client to Client + + In order to solve the client-to-client scenario, a Q4S register + function MUST be implemented. This allows clients to contact each + other for sending the BEGIN message. In this scenario, the Register + server would be used by peers to publish their Q4S-Resource-Server + header and their public IP address to enable the assumption of the + server role. + + The register function is out of scope of this protocol version + because different HTTP mechanisms can be used, and Q4S MUST NOT force + any. + +10. Security Considerations + +10.1. Confidentiality Issues + + Because Q4S does not transport any application data, Q4S does not + jeopardize the security of application data. However, other certain + considerations may take place, like identity impersonation and + measurements privacy and integrity. + +10.2. Integrity of Measurements and Authentication + + Identity impersonation could potentially produce anomalous Q4S + measurements. If this attack is based on spoofing of the server IP + address, it can be avoided using the digital signature mechanism + included in the SDP. The network can easily validate this digital + signature using the public key of the server certificate. + + Integrity of Q4S measurements under any malicious manipulation (such + as a Man-in-the-Middle (MITM) attack) relies on the same mechanism, + the SDP signature. + + The Signature header field contains the signed hash value of the SDP + body in order to protect all the SDP data, including the + measurements. This signature not only protects the integrity of data + but also authenticates the server. + +10.3. Privacy of Measurements + + This protocol could be supported over IPsec. Q4S relies on UDP and + TCP, and IPsec supports both. If Q4S is used for application-based + QoS, then IPsec is operationally valid; however, if Q4S is used to + trigger network-based actions, then measurements could be incorrect + unless the IPsec ports can be a target of potential action over the + network (such as prioritizing IPsec flows to measure the new, + upgraded state of certain application flows). + +10.4. Availability Issues + + 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. + + In order to mitigate availability issues caused by malicious attacks + (such as DoS and DDoS), a good practice is to enable the Q4S service + only for authenticated users. Q4S can be launched after the 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. Otherwise, the Q4S service should appear unreachable. + +10.5. Bandwidth Occupancy Issues + + Q4S bandwidth measurement is limited to the application needs. It + means that all available bandwidth is not measured, but only the + fraction required by the application. This allows other applications + to use the rest of available bandwidth normally. + + However, a malicious Q4S client could restart Q4S sessions just after + finishing the Negotiation phase. The consequence would be to waste + bandwidth for nothing. + + In order to mitigate this possible anomalous behavior, it is + RECOMMENDED to configure the server to reject sessions from the same + endpoint when this situation is detected. + +11. Future Code Point Requirements + + If the ideas described in this document are pursued to become a + protocol specification, then the code points described in this + document will need to be assigned by IANA. + +11.1. Service Port + + 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 network elements in + charge of making possible reactive decisions. Therefore, the need + for a port assignment by IANA may be postponed until there is the + need for a future Q4S-aware network. + + Service Name: Q4S + + Transport Protocol(s): TCP + + Assignee: + Name: Jose Javier Garcia Aranda + + Email: jose_javier.garcia_aranda@nokia.com + + Contact: + Name: Jose Javier Garcia Aranda + + Email: jose_javier.garcia_aranda@nokia.com + + Description: The service associated with this request is in charge + of the establishment of new Q4S sessions, and during the + session, manages the handoff to a new protocol phase + (Handshake, Negotiation and Continuity) as well as sends alerts + when measurements do not meet the requirements. + + Reference: This document. This service does not use IP-layer + broadcast, multicast, or anycast communication. + +12. IANA Considerations + + This document has no IANA actions. + +13. References + +13.1. Normative References + + [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer + Protocol (HTTP/1.1): Message Syntax and Routing", + RFC 7230, DOI 10.17487/RFC7230, June 2014, + <https://www.rfc-editor.org/info/rfc7230>. + + [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer + Protocol (HTTP/1.1): Semantics and Content", RFC 7231, + DOI 10.17487/RFC7231, June 2014, + <https://www.rfc-editor.org/info/rfc7231>. + + [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer + Protocol (HTTP/1.1): Conditional Requests", RFC 7232, + DOI 10.17487/RFC7232, June 2014, + <https://www.rfc-editor.org/info/rfc7232>. + + [RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., + "Hypertext Transfer Protocol (HTTP/1.1): Range Requests", + RFC 7233, DOI 10.17487/RFC7233, June 2014, + <https://www.rfc-editor.org/info/rfc7233>. + + [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, + Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", + RFC 7234, DOI 10.17487/RFC7234, June 2014, + <https://www.rfc-editor.org/info/rfc7234>. + + [RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer + Protocol (HTTP/1.1): Authentication", RFC 7235, + DOI 10.17487/RFC7235, June 2014, + <https://www.rfc-editor.org/info/rfc7235>. + + [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, + DOI 10.17487/RFC2818, May 2000, + <https://www.rfc-editor.org/info/rfc2818>. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", STD 66, + RFC 3986, DOI 10.17487/RFC3986, January 2005, + <https://www.rfc-editor.org/info/rfc3986>. + + [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO + 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November + 2003, <https://www.rfc-editor.org/info/rfc3629>. + + [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, + DOI 10.17487/RFC5322, October 2008, + <https://www.rfc-editor.org/info/rfc5322>. + + [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax + Specifications: ABNF", STD 68, RFC 5234, + DOI 10.17487/RFC5234, January 2008, + <https://www.rfc-editor.org/info/rfc5234>. + + [RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms + (SHA and SHA-based HMAC and HKDF)", RFC 6234, + DOI 10.17487/RFC6234, May 2011, + <https://www.rfc-editor.org/info/rfc6234>. + + [RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, + "PKCS #1: RSA Cryptography Specifications Version 2.2", + RFC 8017, DOI 10.17487/RFC8017, November 2016, + <https://www.rfc-editor.org/info/rfc8017>. + + [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model + with Session Description Protocol (SDP)", RFC 3264, + DOI 10.17487/RFC3264, June 2002, + <https://www.rfc-editor.org/info/rfc3264>. + + [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session + Description Protocol", RFC 4566, DOI 10.17487/RFC4566, + July 2006, <https://www.rfc-editor.org/info/rfc4566>. + +13.2. Informative References + + [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. + Jacobson, "RTP: A Transport Protocol for Real-Time + Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, + July 2003, <https://www.rfc-editor.org/info/rfc3550>. + + [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, + RFC 793, DOI 10.17487/RFC0793, September 1981, + <https://www.rfc-editor.org/info/rfc793>. + + [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, + RFC 792, DOI 10.17487/RFC0792, September 1981, + <https://www.rfc-editor.org/info/rfc792>. + + [QUIC] Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed + and Secure Transport", Work in Progress, Internet-Draft, + draft-ietf-quic-transport-29, 9 June 2020, + <https://tools.ietf.org/html/draft-ietf-quic-transport- + 29>. + + [RFC4656] Shalunov, S., Teitelbaum, B., Karp, A., Boote, J., and M. + Zekauskas, "A One-way Active Measurement Protocol + (OWAMP)", RFC 4656, DOI 10.17487/RFC4656, September 2006, + <https://www.rfc-editor.org/info/rfc4656>. + + [RFC5357] Hedayat, K., Krzanowski, R., Morton, A., Yum, K., and J. + Babiarz, "A Two-Way Active Measurement Protocol (TWAMP)", + RFC 5357, DOI 10.17487/RFC5357, October 2008, + <https://www.rfc-editor.org/info/rfc5357>. + + [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, + A., Peterson, J., Sparks, R., Handley, M., and E. + Schooler, "SIP: Session Initiation Protocol", RFC 3261, + DOI 10.17487/RFC3261, June 2002, + <https://www.rfc-editor.org/info/rfc3261>. + + [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, + DOI 10.17487/RFC0768, August 1980, + <https://www.rfc-editor.org/info/rfc768>. + + [RENO] Mathis, M., Semke, J., Mahdavi, J., and T. Ott, "The + Macroscopic Behavior of the TCP Congestion Avoidance + Algorithm", ACM SIGCOMM Computer Communication Review, pp. + 67-82, DOI 10.1145/263932.264023, July 1997, + <https://doi.org/10.1145/263932.264023>. + + [RFC3649] Floyd, S., "HighSpeed TCP for Large Congestion Windows", + RFC 3649, DOI 10.17487/RFC3649, December 2003, + <https://www.rfc-editor.org/info/rfc3649>. + + [CUBIC] Rhee, I., Xu, L., and S. Ha, "CUBIC for Fast Long-Distance + Networks", Work in Progress, Internet-Draft, draft-rhee- + tcpm-cubic-02, 26 August 2008, + <https://tools.ietf.org/html/draft-rhee-tcpm-cubic-02>. + + [CTCP] Sridharan, M., Tan, K., Bansal, D., and D. Thaler, + "Compound TCP: A New TCP Congestion Control for High-Speed + and Long Distance Networks", Work in Progress, Internet- + Draft, draft-sridharan-tcpm-ctcp-02, 11 November 2008, + <https://tools.ietf.org/html/draft-sridharan-tcpm-ctcp- + 02>. + +Acknowledgements + + Many people have made comments and suggestions contributing to this + document. In particular, we would like to thank: + + Victor Villagra, Sonia Herranz, Clara Cubillo Pastor, Francisco Duran + Pina, Michael Scharf, Jesus Soto Viso, and Federico Guillen. + + Additionally, we want to thank the Spanish Centre for the Development + of Industrial Technology (CDTI) as well as the Spanish Science and + Tech Ministry, which funds this initiative through their innovation + programs. + +Contributors + + Jacobo Perez Lajo + Nokia Spain + + 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 + Nokia Spain + + Email: manuel.alarcon_granero.ext@nokia.com + + + Francisco Jose Juan Quintanilla + Nokia Spain + + Email: francisco_jose.juan_quintanilla.ext@nokia.com + + + Carlos Barcenilla + Universidad Politecnica de Madrid + + + Juan Quemada + Universidad Politecnica de Madrid + + Email: jquemada@dit.upm.es + + + Ignacio Maestro + Tecnalia Research & Innovation + + Email: ignacio.maestro@tecnalia.com + + + Lara Fajardo Ibañez + Optiva Media + + Email: lara.fajardo@optivamedia.com + + + Pablo López Zapico + Optiva Media + + Email: Pablo.lopez@optivamedia.com + + + David Muelas Recuenco + Universidad Autonoma de Madrid + + Email: dav.muelas@uam.es + + + Jesus Molina Merchan + Universidad Autonoma de Madrid + + Email: jesus.molina@uam.es + + + Jorge E. Lopez de Vergara Mendez + Universidad Autonoma de Madrid + + Email: jorge.lopez_vergara@uam.es + + + Victor Manuel Maroto Ortega + Optiva Media + + Email: victor.maroto@optivamedia.com + + +Authors' Addresses + + Jose Javier Garcia Aranda + Nokia + María Tubau 9 + 28050 Madrid + Spain + + Phone: +34 91 330 4348 + Email: jose_javier.garcia_aranda@nokia.com + + + Mónica Cortés + Nokia + María Tubau 9 + 28050 Madrid + Spain + + Email: monica.cortes_sack@nokia.com + + + Joaquín Salvachúa + Universidad Politecnica de Madrid + Avenida Complutense 30 + 28040 Madrid + Spain + + Phone: +34 91 0672134 + Email: Joaquin.salvachua@upm.es + + + Maribel Narganes + Tecnalia Research & Innovation + Parque Científico y Tecnológico de Bizkaia + Astondo Bidea, Edificio 700 + E-48160 Derio Bizkaia + Spain + + Phone: +34 946 430 850 + Email: maribel.narganes@tecnalia.com + + + Iñaki Martínez-Sarriegui + Optiva Media + Edificio Europa II, + Calle Musgo 2, 1G, + 28023 Madrid + Spain + + Phone: +34 91 297 7271 + Email: inaki.martinez@optivamedia.com |