RFC 2216

Network Element Service Specification Template

๐Ÿ“… published September 1997, from ietf

RFC 2216: Network Element Service Specification Template ๐ŸŽ€

okay bestie, this one is the Network Element Service Specification Template ๐Ÿ’… It's from Request for Comments: 2216, written by S. Shenker and J. Wroclawski of Xerox PARC/MIT LCS, dated September 1997. It's Informational, so it's sharing good info with the community, not laying down a standard ๐Ÿฆ‹ Its header doesn't list anything it obsoletes or updates.


Status of This Memo ๐Ÿ“

This memo gives information to the Internet community. It does not specify an Internet standard of any kind ๐Ÿ™ˆ Distribution is unlimited, so share it with everyone ๐Ÿ’œ

Abstract โœจ

This doc sets up a framework for describing services that network elements provide to applications inside an internetwork that offers multiple qualities of service ๐ŸŒˆ It starts with some necessary context, including relevant definitions and suggested data formats, and then lays out a "template" that service specification documents should follow. The template covers per-element requirements like how the service handles packets, which parameters the service requires and makes available, traffic specification and policing requirements, and how traffic ordering relationships work. It also has evaluation criteria for elements that provide the service, plus examples of how the service might be implemented by network elements and used by applications ๐Ÿงš

Introduction ๐ŸŒธ

This document defines the framework for specifying what internetwork system components do when they support giving applications multiple, dynamically selectable qualities of service ๐Ÿซถ The behavior of individual routers and subnetworks gets captured as a set of "services," and each element may offer some or all of them. When you chain these services along the end-to-end data paths an application uses, you get overall quality of service control ๐Ÿ‘‘

A service definition says what a router (or any network element, like a switch or subnet) has to do when it supports a particular service ๐Ÿ˜ญ The definition also specifies the parameters used to invoke the service, how those parameters relate to the service that gets delivered, and the end-to-end behavior you get by chaining several instances of the service ๐Ÿ”ฅ

Each service definition also specifies the interface between that service and its environment. That includes the parameters needed to invoke the service, informational parameters the service must make available for setup, routing, and management mechanisms to use, and information that should be carried between end-nodes and network elements by those mechanisms to get the desired end-to-end behavior โœจ A service definition does not describe the specific protocols or mechanisms used to establish state in the network elements for flows that use the described service, though ๐Ÿ’€

Services defined under this document are meant for use both across the global Internet and in private IP networks ๐ŸŒ Sometimes a chain of network element services can provide a range of end-to-end behaviors. Some are better suited to a decentralized internet, and some fit a tightly managed private network better. This document points out places where that distinction may be appropriate ๐Ÿ“

This document has three parts. The first defines terms used both in this document and in the various service specification documents. The second discusses data formats and representations. The third describes the various components of the service specification template ๐ŸŽ€

Definitions ๐Ÿ’–

The following terms are used throughout this document. Service specification documents should use the same terms to express these concepts, so everyone's on the same page ๐Ÿฆ‹

Quality of Service (QoS) ๐ŸŒŸ

In this document, quality of service refers to the nature of the packet delivery service, described by parameters like achieved bandwidth, packet delay, and packet loss rates ๐Ÿ’… Traditionally the Internet has offered a single quality of service, best-effort delivery, where the available bandwidth and delay depend on instantaneous load ๐Ÿ˜ญ You control the quality of service applications see by properly provisioning the network infrastructure. A network with dynamically controllable quality of service is different: individual application sessions can request packet delivery characteristics that match what they need, and different applications can get different qualities of service ๐ŸŒˆ There's a whole range of useful options between no dynamic QoS control at all and extremely precise, accurate control of QoS parameters, and it should be understood that the range is huge ๐Ÿงš

Network Element ๐Ÿ”Œ

A "Network Element" (or the shorter form "Element") is any component of an internetwork that directly handles data packets and so could potentially control QoS for the data flowing through it ๐Ÿ‘‘ Network elements include routers, subnetworks, and end-node operating systems. A QoS-capable network element is one that offers one or more of the services defined under the rules in this document. Note that this definition, by itself, precludes QoS-capable network elements that meet performance goals purely through adequate provisioning rather than active admission and traffic control mechanisms ๐Ÿ™ˆ A "QoS-aware" network element supports the interfaces (described below) that the service definitions require. So a QoS-aware element doesn't have to offer any of the services defined under this document's format. It just needs to know how to deny service requests ๐Ÿ’€

Flow ๐Ÿฆ‹

For this document, a flow is a set of packets traversing a network element that are all covered by the same request for control of quality of service ๐Ÿซถ At a given network element, a flow might be the packets from a single application session, or it might be an aggregation of combined data traffic from several application sessions โœจ

NOTE: this definition of a flow is different from the one used in IPv6, where a flow is defined as the packets with the same source address and FlowID. ๐Ÿ™ˆ

Mechanisms that link a request for quality of service control to the packets covered by that request are beyond the scope of this document ๐Ÿ’…

Service ๐ŸŒธ

The phrase "service" or "QoS Control Service" describes a named, coordinated set of QoS control capabilities provided by a single network element ๐ŸŽ€ The definition of a service includes the functions the network element must perform, the information the element needs to perform them, and the information the element makes available to other parts of the system. Conceptually, a service is implemented inside the "service module" within the network element ๐Ÿงš

NOTE: The above gives "service" a precise meaning. Service is a word with a bunch of meanings across the networking community, and here it refers specifically to the actions and responses of a single network element like a router or subnet ๐Ÿ’… That's different from the more end-to-end meaning the word has in some other networking contexts ๐Ÿซถ

Behavior ๐ŸŒˆ

A "behavior" is the QoS-related end-to-end performance an application session sees ๐Ÿ‘‘ It's the end result of composing the services each network element offers along the path of the application's data flow ๐Ÿ”ฅ

When every network element along a data flow path offers the same service, it's often possible to explain the resulting end-to-end behavior in a straightforward way ๐Ÿ˜ญ A data flow path made of elements using different services is more complicated and may actually be undefined. A future version of this document may add requirements to the service specification about multi-service concatenation ๐Ÿ“

Characterization ๐Ÿ”ฎ

A characterization is a computed approximation of the actual end-to-end behavior a flow would see when requesting specific QoS services from the network ๐Ÿฆ‹ By giving the end-nodes extra information before a flow is set up, characterizations help end-nodes choose which services to request from the network โœจ

Characterization Parameters ๐Ÿงฎ

Characterizations are computed from a set of characterization parameters that each network element on the flow's path provides, plus a composition function that turns those parameters into the end-to-end characterization ๐Ÿ’– The composition function may in practice be run in a distributed way by the setup or routing protocol. Or the characterization parameters may be gathered to a single point and the characterization computed there ๐ŸŒŸ

Several characterizations may be computed for a single candidate data flow. On the flip side, a service may provide no characterizations at all, and under some conditions no characterizations may be available to the end-nodes requesting QoS services ๐Ÿ’€

Composition Function โš™๏ธ

A composition function accepts characterization parameters as input and computes a characterization, as described above ๐Ÿง 

Traffic Specification (TSpec) ๐Ÿ“ฆ

A Traffic Specification, or TSpec, describes the traffic pattern a service is being requested for ๐Ÿ‘‘ Generally, the TSpec is one side of a "contract" between the data flow and the service. Once a service request is accepted, the service module has agreed to provide a specific QoS, as long as the flow's data traffic keeps matching the TSpec ๐Ÿซถ

As examples, this specification might take the form of a token bucket filter (defined below) or an upper bound on the peak rate ๐ŸŒˆ Note that the traffic specification describes the flow's allowed traffic pattern, not the flow's actual traffic pattern ๐Ÿ™ˆ The behavior of a service when a flow's actual traffic doesn't conform to the traffic specification must be defined by the service (see "Policing" below) ๐Ÿ˜ญ

Service Request Specification (RSpec) ๐Ÿ“‹

A Service Request Specification, or RSpec, specifies the quality of service a flow wants to request from a network element ๐ŸŽ€ What goes in a service request specification is highly specific to a particular service. For example, these specifications might include information about bandwidth allocated to the flow, maximum delays, or packet loss rates ๐Ÿ’…

Setup Protocol ๐Ÿ”ง

A setup protocol carries QoS-related information from the end-nodes requesting QoS control to the network elements that have to exercise that control. It also installs and maintains the required QoS control state in those network elements ๐Ÿงš A setup protocol may also collect QoS-related information from interior network elements along an application's data flow path, so it can be delivered to end nodes ๐Ÿซถ Examples of protocols that perform setup functions are RSVP [RFC 2205], ST-II [RFC 1819], and Q.2931 ๐ŸŒธ

Other mechanisms, like network management protocols, may also perform this function. The phrase "setup protocol" usually refers to a protocol that has this function as its main purpose ๐Ÿ’–

Token Bucket

Okay so picking up right where the Token Bucket definition left off ๐Ÿ’– A Token Bucket is a traffic spec with two dials: a token rate r and a bucket size b โœจ. The r is the data rate you can keep up forever, and the b is how far you're allowed to go above that rate for short bursts ๐ŸŽ€. The rule is that over any time period, the amount of data sent can't go past rT+b, where T is how long that period is ๐Ÿฆ‹

[PARTRIDGE] has more on token buckets if you're into that ๐Ÿงš

Token Bucket Filter

A Token Bucket Filter is a filtering or policing function that sorts the packets in a traffic flow. The ones that fit a given token bucket spec count as conforming, and the ones that don't count as nonconforming ๐Ÿ’… This definition doesn't say what happens to nonconforming packets. Common options are dropping them to best effort service, discarding them, or marking them somehow ๐Ÿซถ

Admission Control

Admission control is the process of deciding whether a brand new request for service from a network element can be granted ๐Ÿ‘‘ Any service that wants to promise absolute, quantitative bounds on overall performance must do this. Services that only make relative statements about performance, like the Internet's current best-effort service, don't need it ๐Ÿ™ˆ The exact criteria for the decision are specific to each particular service ๐Ÿ’€

Policing

Policing is the set of actions that kick in when a flow's real traffic characteristics go past the values in its traffic specification ๐Ÿ˜ญ Services that need policing to work correctly have to specify two things: the action to take when this happens, and where in the network those mismatches should be detected ๐Ÿ”ฅ Examples of actions include relegating the packet to best effort service, dropping packets, reshaping the traffic, or marking nonconforming traffic in some way ๐ŸŒˆ

Interfaces

The service module talks to other parts of the network element through a bunch of conceptual interfaces ๐Ÿงš The service specification document should clearly define the specific data that moves across each interface, including the formats. It should also make sure the mapping between those conceptual interfaces and the specific mechanisms of the service is clear ๐Ÿ’œ

Data Format and Representation โœจ

A service module imports and exports a variety of data, depending on the services the network element supports ๐ŸŽ€ Each service definition MUST specify the format of each of those data items in an abstract manner. The info has to be enough for whoever designs a setup protocol to pick a good concrete (packet) format for variables holding that data ๐Ÿ’– At minimum, the following information must be given:

  • Type: whether the quantity is an enumeration, a numerical value, etc.
  • Range: for numerical quantities, the minimum and maximum values the quantity must be able to represent. For enumerated quantities, an estimate of the maximum number of items that may need to be enumerated in the future, even if many of the values are unused right now ๐Ÿฆ‹
  • Precision: the precision a numerical quantity must be represented with, and whether that precision is absolute (meaning an integer quantity) or a percentage of the value (allowing a floating point quantity) ๐ŸŒธ

The service definition SHOULD also specify a preferred concrete format for each data field, using the usual packet-layout format in current Internet Standard documents, or some other accepted spec format โœจ If the service definition includes these concrete definitions, they should be complete and detailed enough that the service definition can be pulled in by reference into setup protocols and other users of the data ๐Ÿซถ

NOTE: The wording above is meant to encourage all protocols carrying data for a specific service to use common data formats ๐Ÿงš It doesn't force that common format, and it doesn't get in the way of protocol designers who want to define data representations with other mechanisms, like ASN.1 or XDR ๐Ÿ’…

Service and Data Element Naming

End-nodes, network elements, setup protocols, and management entities in an integrated services internetwork need to swap info about services, service invocation parameters, characterization parameters, and the intermediate variables and end results of composition functions ๐Ÿ˜ญ So there's one uniform namespace for services and their parameters ๐Ÿ‘‘

The namespace is a two-level hierarchy:

<service_name>.<parameter_name>

Each of these elements is an integer numerical quantity ๐Ÿ”ฅ

<Service Name> is an integer from 1 to 254, and the number space is split into three regions ๐ŸŒˆ

Service number 1 means the associated parameter is "generic" and isn't tied to a specific service. More on generic parameters is in [RFC 2215] ๐Ÿฆ‹

The range 2 to 127 is for services defined by the IETF. Procedures for allocating service numbers here will be set up by the IETF INT-SERV WG and the IANA. Services meant for public use should get a number from this space. The minimum requirement is a published RFC that follows the format in this note ๐Ÿ’–

Service numbers above 127 are reserved for experimental or private services. Designers can pick numbers from this space at random for local experimental use ๐Ÿงš A policy for global but temporary allocation may be set up later if needed ๐Ÿ’œ

The value 0 is left unused so parameter names can map directly to MIB object names, as described below ๐ŸŽ€

The value 255 is reserved for future expansion of the service number space, if that's ever needed โœจ

<Parameter_name> is a number from 1 to 254, allocated per service ๐Ÿซถ Within that range, values 1 to 127 are reserved for parameters with a common, shared meaning across all services. Those are defined in [RFC 2215] ๐ŸŒธ

Numbers for parameters specific to a service come from the range 128-254 and are assigned by the author of the service specification document ๐Ÿ’…

The value 0 is left unused, again so parameter names can map directly to MIB object names ๐Ÿ™ˆ

The value 255 is reserved for future expansion of the parameter number space, if needed ๐Ÿ“

Beyond the integrated services framework, these <service_number>.<parameter_number> pairs should be used as the last two levels of the MIB name whenever the matching values are made available to network management protocols ๐Ÿ”ฅ

Specification Document Format

This part describes the layout and contents of a service specification ๐ŸŽ€ Each service specification document MUST contain the sections marked [required] below, in the order listed. Each document SHOULD contain each of the remaining sections in the list, unless there's a compelling argument that including a section isn't beneficial ๐Ÿ’– Additional material, including references, goes at the end of the document โœจ

Some sections are normative, meaning they describe specific requirements that conformant implementations must follow ๐Ÿ‘‘ Other sections are informational, meaning they give the context and technical considerations that matter to whoever implements the service ๐Ÿงš Each section's nature (required or optional, and informational or normative) is listed below ๐Ÿ’œ

Components

The body of a service specification document includes these sections:

  • End-to-End Behavior [required] [informational]
  • Motivation [required] [informational]
  • Network Element Data Handling Requirements [required] [normative]
  • Invocation Information [required] [normative]
  • Exported Information [required] [normative]
  • Policing [required] [normative]
  • Ordering and Merging [required] [normative]
  • Guidelines for Implementors [optional] [informational]
  • Evaluation Criteria [required] [informational]
  • Examples of Implementation [optional] [informational]
  • Examples of Use [optional] [informational]

End-to-end Behavior

This describes the behavior you get if every network element along the path offers the same service, invoked with a defined set of parameters ๐Ÿฆ‹

In private networks, the required end-to-end behavior usually comes from chaining together network elements that use the same service and make significant use of characterizations ๐ŸŒธ

On the global Internet, that won't always hold ๐Ÿ˜ญ End-to-end behaviors often come from chaining network elements that support different services, and sometimes including elements that do no QoS control at all ๐Ÿ’€ The mechanisms for characterizing end-to-end behavior in this situation aren't fully established yet. Future versions of this document may add requirements to service specifications to help with inter-service composition ๐Ÿ”ฅ

This section is for informational purposes only ๐Ÿซถ

Motivation

This section explains why the service is being defined ๐Ÿ’– It describes what kinds of applications might use the service, and why it might suit those applications better than other choices ๐Ÿงš This section is for informational purposes only ๐ŸŽ€

Network Element Data Handling Requirements

This section describes the QoS properties that data packets see when a network element processes them with this service ๐Ÿ‘‘ The description has to clearly explain which variables are controlled, how much control is exercised, and which parts of the service's handling model are fixed or assumed ๐Ÿ’… Examples of degree-of-control information include "this property must be mathematically assured" and "this property should be met under most conditions" โœจ An example of a stated assumption is "this service is assumed to have extremely low packet loss; delay targets must be met using admission control rather than by discarding packets when overloaded" ๐Ÿ˜ญ

Requirements on packet handling SHOULD, whenever possible, be written as performance requirements instead of naming a particular packet scheduling algorithm ๐ŸŒˆ Performance requirements might specify things like the maximal packet delays or the minimal bandwidth share given to a flow ๐Ÿฆ‹

This section also specifies actions the packet handling path must take to actively give feedback to end-nodes about conditions at the network element ๐Ÿ”ฅ Those actions might include explicitly generated congestion feedback, indicated either as bits set in the header of data packets or as separate control messages sent ๐Ÿซถ

Okay bestie, let's get into the good stuff ๐Ÿ’…โœจ The big goal for this part of the spec is to be super precise about what's required, but still leave room for different hardware, different setups, and different kinds of network boxes ๐Ÿฆ‹ Getting that balance right takes real care, so pay attention ๐ŸŽ€

Invocation Information

This bit covers the set of parameters a service module needs to invoke the service, plus how the module actually uses those values ๐Ÿงš For example, a made-up "bounded delay" service could take a request with a delay target for the network element and the set of packets that target applies to. Then it processes those packets with a delay of the target value or less. Iconic ๐Ÿ™Œ

Most services need two chunks of invocation info: the Traffic Specification (TSpec) and the Service Request Specification (RSpec) ๐Ÿ’– The TSpec describes the characteristics of the data traffic being handled. The RSpec says which properties you want from the service. So a service that promises a mathematical bound on delay might take a TSpec with the flow's bandwidth and burstiness written as a Token Bucket, and an RSpec with the maximum queueing delay you can tolerate ๐Ÿ“

Here's the vibe: when a service accepts an invocation request, it's basically signing a "contract" ๐Ÿ“œ It promises to provide the service described by the RSpec, as long as the flow's traffic keeps matching the TSpec. If the traffic goes outside the TSpec bounds, the QoS the flow gets can change. The exact nature of that change is also spelled out in the service specification (see "Policing" below) ๐Ÿ‘€

The RSpec and TSpec should be specified separately and independently ๐Ÿซถ That's because different parts of the internetwork will often generate them. Also, all the quantitative information in this section should follow the guidelines in the Data Formats section of this document, above ๐Ÿ’œ

Exported Information and Characterization Parameters

This section describes information that the service module must collect and export ๐Ÿ“ฆ Exported info is available to other modules on the network element, and by extension to setup protocols, routing protocols, network management tools, and so on ๐ŸŒˆ

Exported info can be used in a bunch of ways, lowkey all of them useful. For instance, things like how much link bandwidth is dedicated to the service, and which data flows are currently getting the service, are great to expose as network management variables ๐Ÿ“Š

A service definition can pick out a subset of its exported info and call those characterization parameters ๐Ÿฆ‹ These can be used to compute or estimate the end-to-end behavior of a data flow crossing a chain of network service elements. They can also describe parts of the path for use by network elements. For example, to work out how much buffer it needs, an element might need to know something about the service characteristics of the upstream part of the path ๐Ÿงš A service that defines characterization parameters also has to specify the characterizations they generate and the composition functions used to make them ๐Ÿ’…

NOTE: Characterization parameters are identified as such by virtue of being the inputs to a service's defined composition functions. Because characterization parameters are part of a service's overall exported data set, they are also available to other functions, such as network management. The discussion below relates solely to their use as characterization parameters, and is not intended to limit other uses.

Characterization parameters can be pretty static, like the bandwidth available on a specific link, or pretty dynamic, like a running estimate of current packet delay โญ

Support for a service's defined characterization parameters is mandatory ๐Ÿ”ฅ Any network element offering this service must be able to measure, compute, or, if the specification allows it, estimate the service's characterization parameters. Service designers are encouraged to think hard about what it means to specify characterization parameters, especially about not unduly restricting the choice of hardware and software architectures used to build the network element ๐ŸŽ€

Characterization parameters get used by composing the values exported by each network element along a flow's path, according to a composition rule. For every parameter or set of parameters used to build a characterization, the service specification must specify the composition rule to be used. These composition rules should give characterizations that don't depend on the order the elements are composed in. Commutativity and associativity are sufficient for that, but not necessary ๐Ÿง 

Characterization parameters are available through a general interface, and they're provided when some other module asks for them, like a setup protocol or the routing protocol ๐Ÿ’Œ Exactly how (or whether) a specific protocol, such as RSVP, uses characterization parameters to generate characterizations is described in that protocol's own specification ๐ŸŒธ

Whether characterization parameters get used correctly depends on the setup, routing, or management protocol that controls the module ๐Ÿ™ˆ There's no absolute guarantee that characterizations will reach end-nodes that want to use a QoS control service. Service designers aiming for the global Internet may want to make sure a service is still useful when there are no characterizations, and to show that in the "Examples" sections of the service description document ๐ŸŒ

On the flip side, characterizations may be mandatory in some situations, especially for private IP networks giving tightly controlled quality of service to specific applications ๐Ÿ”’ Designers targeting that environment should make sure the service provides adequate characterization parameters and composition functions for the target audience ๐Ÿ’ช It can make sense to specify the same basic service with extra characterizations that meet requirements beyond what the global Internet needs โœจ

Some handy "general" characterization parameters and their composition rules aren't tied to any specific service ๐Ÿงš These include the speed-of-light latency of communication links and the available link bandwidth. These general characterization parameters are defined in [RFC 2215].

Even though every conformant implementation of a service is required to provide that service's characterization parameters, the desired parameters might still not be available for composition at every network element in a path ๐Ÿ˜ญ This can happen when different network element services are used at different points along the end-to-end path, like in a heterogeneous internetworking environment. So characterization parameters and composition function results conceptually include a "validity flag" ๐Ÿšฉ A network element that can't provide the characterization parameter must set this flag, and otherwise leave the parameter or composed value unchanged. Once it's set, the flag is preserved by the composition function, and it tells you whether the data is valid when the final composed result reaches its destination ๐Ÿซถ

Protocols that transport characterization parameters and composition data must define and support a concrete representation for this validity flag, as well as for the characterization parameters themselves ๐ŸŽ€

NOTE: This service specification template does not allow a service definition to require that a setup or invocation mechanism used with the service perform any function other than transport of invocation parameters to the network elements and signalling of errors generated by the network elements to the end nodes. A notable example of this is that service specification documents may not require or assume that characterizations defined in the specification are actually computed or presented to the end nodes.

That said, how useful a specific service is can depend a lot on extra behavior in the networked system ๐Ÿง Examples include computing and presenting characterizations to end-nodes, or reliably making sure every network element on the path from sender to receivers supports the given service. Service specification authors are strongly encouraged to clearly explain where their service stands on this ๐Ÿ’… Statements like these are appropriate:

The characterizations defined by this service serve as useful
hints to the application. However, the service is specifically
intended to be useful even if characterizations are not available.

or

The usefulness of this service depends strongly on the delivery of
both characterizations and the knowledge that all network elements
on the path support the service. Requests for this service when
characterizations are not available are likely to lead to
incorrect or misleading results.

It may also be worth thinking about this point in the "Examples of Use" section described below ๐Ÿฆ‹

NOTE: The possibility of modifying the overall architecture to provide information about the invoking protocol in a service request, and to allow a service to require that the invocation protocol support specific additional functionality, is an area of active study. ๐Ÿ”ฌ

Policing

This part of the service description covers the nature of the policing used to enforce adherence to a flow's Traffic Specification ๐Ÿ‘‘ The specification document must cover the following points:

  • Expected policing action. This is the action taken when packets that don't conform to the TSpec are detected. Example actions include relegating nonconforming packets to best effort, immediately dropping nonconforming packets, delaying these packets until they once again "fit" into the TSpec, or "marking" nonconforming packets in some way ๐ŸŒˆ
  • Legality of alternative policing actions. The section must specify whether actions not specifically mentioned in the specification's description of policing behavior are legal ๐Ÿ’– For example, a service description that says nonconforming packets are to be dropped should state whether an alternate action, such as delaying these packets, is acceptable ๐Ÿค”
  • Location of policing actions in the internetwork. okay so this one is all about where policing happens ๐Ÿ‘€ The description of policing must specify where that policing is done. Options include "at the edges of the network only", "at every hop", "heterogeneous branch points" (where the branches of a multicast tree converge and have different TSpecs reserved downstream), and "source merge points" (where multiple data streams covered by a single resource reservation converge) ๐ŸŒฟ The specification should clearly state requirements about topology information (like "this is an edge node" or "this is a source merge point") that must be available from the setup protocol or another source ๐Ÿงญ

In this section the specification should also spell out whether policing at additional points in the network is legal, beyond those listed above. This matters because of technical effects like the ones in the next paragraph ๐Ÿ’…

  • Applicable additional technical considerations. If policing of data flows is required or legal at points other than the flow's first entry into the network, the service definition should describe any additional technical considerations that affect the design of that policing ๐ŸŽ€ For example, lots of potential services will let a data flow get more bursty as it moves through the network ๐Ÿ˜ฎโ€๐Ÿ’จ If a service like that allows policing somewhere other than the network edge, the traffic specification describing the flow has to be modified from what the application gave the network, to account for that growing burstiness. Otherwise the flow is likely to get overpoliced, meaning packets get penalized for no reason ๐Ÿ˜ญ

Ordering and Merging

Ordering and merging come into play when a network element receives several invocation requests covering the same data flow ๐Ÿฆ‹ This could happen if several receivers of a multicast data flow asked for QoS for that flow using the RSVP setup protocol, or if a flow had both a statically installed permanent invocation request and a dynamic request from a resource setup protocol ๐ŸŒธ

In this situation the service module must be able to answer questions about the ordering between different invocation requests, and it must be able to generate a single new invocation request that meets the semantics of the setup protocol and the requirements of all the original requesters โœจ In practice, the invoking protocol asks the service module, given a set of invocation requests I1...In, to compute a new request that gives the desired behavior ๐Ÿซถ

Five operations must be defined in this section:

  • Ordering. The section must define an ordering relationship between the service's TSpecs and RSpecs. This may be a partial ordering, meaning some TSpecs or RSpecs may be unordered with respect to each other ๐Ÿงฉ
  • Summation. This function computes an invocation request that represents the sum of N input invocation requests. Usually this is used to size a service request for a shared reservation covering N different flows ๐Ÿซง It is desirable, but not required, that this function compute the "least possible sum" ๐Ÿ’œ
  • Minimum. This function computes the minimum of two TSpecs. Usually this is used to get the TSpec for an actual service invocation, given a target TSpec for the service request and a TSpec for the flow's actual traffic pattern ๐Ÿ“ The minimum function must compute the smallest TSpec adequate to describe the minimum of the requested TSpec and the flow's actual traffic ๐ŸŽฏ
  • RSVP-Merge function. This function computes the invocation request used to request service at an RSVP [RFC 2205] merge point. It must a) compute an appropriate invocation request for a set of downstream reservations being merged, and b) generate appropriate reservation parameters to be passed upstream by RSVP ๐Ÿ” This function is described further below and in [RFC 2210] ๐Ÿ“–
  • Least Common Request function. This function computes an invocation request sufficient to provide service at least equivalent to any one of the original requests passed to it. It differs from the RSVP-merge function in that it simply computes an upper bound ๐Ÿ™ˆ It does not need to compute new invocation parameters to be passed upstream by RSVP, and it cannot utilize the second option discussed in "Notes on RSVP Merging" below ๐Ÿšซ

Notes on Ordering

Usually the ordering relation is described separately for the service's TSpec and RSpec ๐Ÿง An invocation request is ordered with respect to another if and only if both its TSpec and its RSpec are similarly ordered with respect to each other ๐Ÿ’–

For TSpecs, the basic ordering relation is well defined ๐ŸŒˆ TSpec A is substitutable for TSpec B if and only if any flow that is compliant with TSpec B is also compliant with TSpec A. The service specification must explain how to compare two TSpecs to determine whether this is true ๐Ÿ”

For RSpecs, the ordering relation depends on the service ๐Ÿช„ RSpec A is substitutable for RSpec B if the quality of service invoked by RSpec A is at least as good as the quality of service invoked by RSpec B. There's no precise mathematical description of "goodness" of quality of service, so these ordering relations must be spelled out explicitly in the service description ๐Ÿซ 

Notes on RSVP Merging

The whole point of the RSVP merging function is to compute an invocation request that gives the merged flow service at least as good as what any of the original requests would get for its corresponding unmerged flow ๐Ÿ’… There are two ways to get that equivalence:

  1. The merged request may be computed as an upper bound on the set of original (unmerged) invocation requests. In this case, the service offered by the merged request to any particular traffic flow is identical to what the largest unmerged request offers, by definition ๐Ÿ”๏ธ
  2. The merged request may be computed as a value smaller than the upper bound on the set of original requests, but the results passed upstream may restrict the traffic sources to behavior that makes the merged and unmerged requests behave identically ๐Ÿค

Note that the merging rules for a particular service may apply either option 1 or option 2 to the different components of a TSpec, as appropriate ๐ŸŽ€ The decision is usually made like this:

When a downstream service module instance can tolerate a flow that exceeds the parameter, the upper bound should be used. For example, if the service supports policing to protect itself against excess traffic, the traffic rate supported by a merged reservation might be an upper bound across the traffic rates supported by each unmerged reservation. The effect is to install the merged reservation at the local node and to inform each traffic source of the largest traffic rate protected by reservation along any one distribution path from the source to a receiver. ๐Ÿ›ก๏ธ
When a downstream service module instance will not function properly if the parameter is exceeded, the merge function should select the least aggressive value of the parameter to install and pass upstream. In this case, the traffic sources will be informed of a parameter value that is appropriate for all distribution paths traversed by the traffic flow. For example, services that can handle only limited packet sizes can incorporate packet size in the TSpec, and treat the parameter as described in option 2. The effect is to limit packet sizes in the flow to those that every instance of the service along the flow's path can handle ๐Ÿ“ฆ

This merging calculation must be performed by the service module, because it is specific to a particular service ๐Ÿง 

Notes on Calculating Upper Bounds

Both the RSVP-Merge function and the Least Common Request function may use calculated upper bounds on TSpec and RSpec parameters ๐Ÿ“

The calculated upper bound doesn't need to be a least upper bound, and the various network elements along the path don't all need to use the same choice of upper bound ๐ŸŒท Any selection of invocation parameters Iu is compliant as long as it is substitutable for each of the parameters I1...In it's calculated from ๐Ÿค Intuitively, one set of parameters is substitutable for another if the resulting quality of service is at least as desirable to all applications ๐Ÿ’ซ The precise "substitutable for" function (the ordering relation) must be specified in the service definition. (It may be specified as the empty set, in which case merging of dissimilar requests will not be allowed ๐Ÿšท) If the ordering function specified in this section gives a partial order (meaning it's possible for two RSpecs or TSpecs to be unordered), then a separate upper bound computation for the parameter must be given as well ๐Ÿงฉ

Notes on Service Substitution

This part of the service description may also note any relationships with other services that are strictly ordered with respect to the service being defined ๐Ÿฆ„ Two services A and B are strictly ordered if it is always possible to substitute service B for service A, given a set of invocation parameters for service A ๐Ÿ”„ This ordering information may let network elements that provide service B respond to requests for service A, even if the element doesn't provide service A directly ๐Ÿชž If the service specification describes such an inter-service ordering, it MUST also include a description of the invocation parameter mapping function for that ordering ๐Ÿ“

Substitution of one service for another in cases where they are not strictly ordered is currently not supported ๐Ÿ™…โ€โ™€๏ธ A future version of this document may augment the service specification format to support this capability ๐Ÿ”ฎ

Guidelines for Implementors

Lots of services can be defined in a way that lets the range of behavior of a compliant network element be pretty broad ๐ŸŒŠ This section should give some guidance on the range of behaviors the author of the service specification expects the community to want in their implementations ๐ŸŽฏ Because these guidelines depend on such imprecise and undefinable notions as "typical loads", they can't be part of a strict compliance test ๐Ÿ™ƒ Instead, they are for informational purposes only ๐Ÿ“š

Evaluation Criteria

The specific functional behaviors required of an implementation to conform to a service specification are detailed in the previous sections ๐Ÿ“œ But service specifications are meant to allow a wide range of implementations, and those implementations will differ in performance ๐ŸŽ๏ธ This section describes tests that can be used to evaluate a network element's implementation of a given service ๐Ÿงชโœจ

Okay bestie, implementors of service modules have to juggle a bunch of tradeoffs ๐Ÿ˜ญ, and honestly there is no single implementation that's "best" in every situation ๐Ÿ’…. Same service spec, totally different vibes: a build for a low-speed link might go all-in on extremely high link utilization ๐Ÿข, while another build tries to shave non-loaded packet forwarding delay down to the minimum โšก, even if the link ends up a little less utilized. The whole point of the tests in this section is to poke at the tradeoffs the implementer made ๐Ÿ” and give the customer metrics to help her pick the right implementation for her needs ๐ŸŽ€.

The tests should be designed to operate on a single network element in isolation ๐Ÿงช. That's what makes them usable in a comparative rating system for QoS-aware network elements ๐Ÿ“Š. In production networks though, users care more about the end-to-end behavior they actually get ๐ŸŒ, and that depends on way more than the elements picked. Things like the setup protocol and the bandwidth of the links matter too ๐Ÿ”—. Some user-relevant performance factors are the rate of admission control rejections ๐Ÿšซ, the range of services offered ๐ŸŽ, and the packet delay and drop rates in the various service classes ๐Ÿ“ฆ. The form of any standardized end-to-end metrics and measurement tools for integrated service internetworks is not specified by this document, or by service specification documents that follow the format given here ๐Ÿ“.

This section is for informational purposes only. ๐Ÿ’–

  • Examples of Implementation ๐Ÿ› ๏ธ

This section describes example instantiations of the service โœจ. Often these will just be references to the literature, or brief sketches of how the service could be implemented ๐Ÿ“š. The goal is to give you a more concrete sense of the service being specified, plus pointers and hints to help the implementor ๐Ÿงš. But the descriptions here are specifically not meant to rule out other implementation strategies, so don't think you're stuck with them ๐Ÿฆ‹.

This section is for informational purposes only. ๐ŸŒธ

  • Examples of Use ๐ŸŽฌ

In order to give a more concrete sense of how this service might be used ๐Ÿ“, this section walks through some example uses of the service, for informational purposes only ๐Ÿ’œ. These examples are not meant to be exhaustive, and they don't exclude any other uses of the service in any way ๐ŸŒˆ.

This section is for informational purposes only. โœจ

Security Considerations ๐Ÿ”

Security considerations are not discussed in this memo. ๐Ÿ˜ฑ Dramatic, I know, but that's the official word, so no spiraling in the replies ๐Ÿ’€.

References ๐Ÿ“š

[PARTRIDGE] C. Partridge, Gigabit Networking, Addison Wesley Publishers (1994).

[RFC 2215] Shenker, S., and J. Wroclawski, "General Characterization Parameters for Integrated Service Network Elements", RFC 2215, September 1997.

[RFC 2205] Braden, R., Ed., et. al., "Resource Reservation Protocol (RSVP) - Version 1 Functional Specification", RFC 2205, September 1997.

[RFC 2212] Shenker, S., Partridge, C., and R. Guerin, "Specification of Guaranteed Quality of Service", RFC 2212, September 1997.

[RFC 2211] Wroclawski, J., "Specification of the Controlled Load Quality of Service", RFC 2211, September 1997.

[RFC 1819] Delgrossi, L., and L. Berger, Editors, "Internet Stream Protocol Version 2 (ST2) Protocol Specification - Version ST2+", RFC 1819, August 1995.

[RFC 2210] Wroclawski, J., "The Use of RSVP with IETF Integrated Services", RFC 2210, September 1997.

Authors' Address ๐Ÿ’Œ

Scott Shenker
Xerox PARC
3333 Coyote Hill Road
Palo Alto, CA  94304-1314

Phone: 415-812-4840
Fax:   415-812-4471
EMail: shenker@parc.xerox.com
John Wroclawski
MIT Laboratory for Computer Science
545 Technology Sq.
Cambridge, MA  02139

Phone: 617-253-7885
Fax:   617-253-2673
EMail: jtw@lcs.mit.edu

That's the whole RFC, bestie! ๐Ÿซถ๐Ÿ‘‘

๐Ÿ“ฆ where this page comes from