INTERNET-DRAFT S. Deering February 21, 1993 Xerox PARC Obsoletes: draft-deering-sip-00.txt Simple Internet Protocol Plus (SIPP) Specification draft-ietf-sipp-spec-00.txt Abstract This document specifies a proposed new version of the Internet Protocol. Changes from the previous specification (SIP) are listed in Appendix A. Status of this Memo Internet Drafts are working documents of the Internet Engineering Task Force (IETF), its Areas, and its Working Groups. Note that other groups may also distribute working documents as Internet Drafts. Internet Drafts are draft documents valid for a maximum of six months. This Internet Draft expires on September 21, 1994. Internet Drafts may be updated, replaced, or obsoleted by other documents at any time. It is not appropriate to use Internet Drafts as reference material or to cite them other than as a "working draft" or "work in progress." Please check the I-D abstract listing contained in each Internet Draft directory to learn the current status of this or any other Internet Draft. Distribution of this memo is unlimited. Expires: September 21, 1994 [Page 1] INTERNET DRAFT SIPP Specification February 21, 1994 Contents Status of this Memo 1. Introduction 2. Terminology 3. SIPP Header Format 4. SIPP Options 4.1 Fragment Header 4.2 Routing Header 4.3 Authentication Header 4.4 Hop-by-Hop Options Header 4.5 Option Header Order 5. Packet Size Issues 6. Flow Labels 7. Transport-Layer Protocol Issues 7.1 Transport-Layer Checksums 7.2 Maximum Packet Lifetime Appendix A. Changes from the SIP Draft of November 10, 1992 Security Considerations Acknowledgments Author's Address References Expires: September 21, 1994 [Page 2] INTERNET DRAFT SIPP Specification February 21, 1994 1. Introduction The Simple Internet Protocol Plus (SIPP) is a new version of the Internet Protocol, designed as a successor to IP version 4 (IPv4) [RFC-791]. The changes from IPv4 to SIPP fall primarily into the following categories: o Expanded Addressing Capabilities SIPP increases the IP address size from 32 bits to 64 bits, to support more levels of addressing hierarchy and a much greater number of addressable nodes. SIPP addressing can be further extended, in units of 64 bits, by a facility equivalent to IPv4's Loose Source and Record Route option, in combination with a new address type called "cluster addresses" which identify topological regions rather than individual nodes. The scalability of multicast routing is improved by adding a "scope" field to multicast addresses. o Header Format Simplification Some IPv4 header fields have been dropped or made optional, to reduce the common-case processing cost of packet handling and to keep the bandwidth cost of the SIPP header almost as low as that of IPv4, despite the increased size of the addresses. o Improved Support for Options Changes in the way IP header options are encoded allows for more efficient forwarding, less stringent limits on the length of options, and greater flexibility for introducing new options in the future. o Flow Labeling Capability A new capability is added to enable the labeling of packets belonging to particular traffic "flows" for which the sender requests special handling, such as non-default quality of service or "real-time" service. This document specifies the basic SIPP header and the initially-defined SIPP options. It also discusses packet size issues, the semantics of Flow Labels, and the effects of SIPP on transport-layer protocols. Other aspects of SIPP are specified in separate documents, including the following: o Simple Internet Protocol Plus (SIPP): Routing and Addressing [SIPP- ROAD] o ICMP and IGMP for SIPP Specification [SIPP-ICMP] o IPAE: The SIPP Interoperability and Transition Mechanism [IPAE] Expires: September 21, 1994 [Page 3] INTERNET DRAFT SIPP Specification February 21, 1994 2. Terminology node - a protocol module that implements SIPP. router - a node that forwards SIPP packets not explicitly addressed to itself. host - any node that is not a router. address - a SIPP-layer identifier for a node or set of nodes. subnet - in the SIPP unicast addressing hierarchy, a lowest-level (finest-grain) aggregation of addresses sharing a common prefix, i.e., high- order address bits. link - a communication facility or medium over which nodes can communicate at the link layer, i.e., the layer immediately below SIPP. interface - a node's attachment to a link. neighbors - nodes attached to the same link. link MTU - the maximum transmission unit, i.e., maximum packet size in octets, that can be conveyed in one piece over a link (where a packet is a SIPP header plus payload). path MTU - the minimum link MTU of all the links in a path between a source node and a destination node. packetization layer - any protocol layer above SIPP that is responsible for packetizing data to fit within outgoing SIPP packets. Typically, transport-layer protocols, such as TCP, are packetization protocols, but there may also be higher- layer packetization protocols, such as protocols implemented on top of UDP. Expires: September 21, 1994 [Page 4] INTERNET DRAFT SIPP Specification February 21, 1994 3. SIPP Header Format +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Flow Label | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Length | Payload Type | Hop Limit | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Source Address + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Destination Address + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version 4-bit Internet Protocol version number = 6. Flow Label 28-bit field. See "Flow Labels" section, below. Payload Length 16-bit unsigned integer. Length of payload, i.e., the rest of the packet following the SIPP header, in octets. Payload Type 8-bit selector. Identifies the type of header immediately following the SIPP header. Uses the same values as the IPv4 Protocol field [RFC-1340]. Hop Limit 8-bit unsigned integer. Decremented by 1 by each node that forwards the packet. The packet is discarded if Hop Limit is decremented to zero. Source Address 64 bits. An address of the initial sender of the packet. See [SIPP-ROAD] for details. Destination Address 64 bits. An address of the intended recipient of the packet (possibly not the ultimate recipient, if an optional Routing Header is present). See section 4.2 and [SIPP-ROAD] for details. 4. SIPP Options In SIPP, optional internet-layer information is encoded in separate headers that may be placed between the SIPP header and the transport- layer header in a packet. There are a small number of such optional headers, each identified by a distinct Payload Type. As illustrated in these examples, a Expires: September 21, 1994 [Page 5] INTERNET DRAFT SIPP Specification February 21, 1994 SIPP packet may carry zero, one, or more optional headers, each identified by the Payload Type field of the preceding header: +-------------+------------------------ | SIPP header | TCP header + data | | | Pyld Type = | | TCP | +-------------+------------------------ +-------------+----------------+------------------------ | SIPP header | Routing header | TCP header + data | | | | Pyld Type = | Payload Type = | | Routing | TCP | +-------------+----------------+------------------------ +-------------+----------------+-----------------+----------------- | SIPP header | Routing header | Fragment header | fragment of TCP | | | | header + data | Pyld Type = | Payload Type = | Payload Type = | | Routing | Fragment | TCP | +-------------+----------------+-----------------+----------------- With one exception, optional headers are not examined or processed by any node along a packet's delivery path, until the packet reaches the node (or set of nodes, in the case of multicast) identified in the Destination Address field of the SIPP header. There, normal demultiplexing on the Payload Type field of the SIPP header invokes the module to process the first optional header, or the transport header if no optional header is present. The contents and semantics of each header determine whether or not to proceed to the next header. The one exception is the Hop-by-Hop Options header, which carries options that must be examined by every node along a packet's delivery path. The Hop-by-Hop options header, when present, must immediately follow the SIPP header. Its presence is indicated by the special value zero in the Payload Type field of the SIPP header. Each optional header is an integer multiple of 8 octets long, in order to retain 8-octet alignment for subsequent headers. Multi-octet fields within each optional header are aligned on their natural boundaries, i.e., fields of width n octets are placed at an integer multiple of n octets from the start of the header. 4.1 Routing Header The Routing header is used by a SIPP source to list one or more Expires: September 21, 1994 [Page 6] INTERNET DRAFT SIPP Specification February 21, 1994 intermediate nodes (or topological clusters) to be "visited" on the way to a packet's destination. This function is very similar to IPv4's Loose Source and Record Route option. The Routing header is identified by a Payload Type of 43 in the immediately preceding header, and has the following format: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Type | Num Addrs | Next Addr | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Address[0] + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Address[1] + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . . . . . . . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Address[Num Addrs - 1] + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload Type 8-bit selector. Identifies the type of header immediately following the Routing header. Uses the same values as the IPv4 Protocol field [RFC-1340]. Num Addrs 8-bit unsigned integer. Number of addresses in the Routing header. Next Addr 8-bit unsigned integer. Index of next address to be processed; initialized to 0 by the originating node. Reserved 40-bit field. Initialized to zero for transmission; ignored on reception. A Routing header is not examined or processed until it reaches the node identified in the Destination Address field of the SIPP header. In that node, dispatching on the Payload Type of the immediately preceding header causes the Routing module to be invoked, which performs the following algorithm: o If Next Addr < Num Addrs, swap the SIPP Destination Address and Address[Next Addr], increment Next Addr by one, and re-submit the Expires: September 21, 1994 [Page 7] INTERNET DRAFT SIPP Specification February 21, 1994 packet to the SIPP module for forwarding to the next destination. o If Next Addr = Num Addrs, dispatch to the local protocol module identified by the Payload Type field in the Routing header. o If Next Addr > Num Addrs, send an ICMP Parameter Problem message to the Source Address, pointing to the Num Addrs field. Multicast addresses may not appear in a Routing header. 4.2 Fragment Header The Fragment header is used by a SIPP source to send payloads larger than would fit in the path MTU to their destinations. (Note: unlike IPv4, fragmentation in SIPP is performed only by source nodes, not by routers along a packet's delivery path -- see section 5.) The Fragment header is identified by a Payload Type of 44 in the immediately preceding header, and has the following format: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Type | Reserved |M| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload Type 8-bit selector. Identifies the type of header immediately following the Fragment header. Uses the same values as the IPv4 Protocol field [RFC-1340]. Reserved 10-bit field. Initialized to zero for transmission; ignored on reception. M flag 1 = more fragments; 0 = last fragment. Fragment Offset 13-bit unsigned integer. The offset, in 8-octet units, of the following payload, relative to the start of the original, unfragmented payload. Identification 32 bits. See description below. The fragmentation algorithm is as follows: The payload (including any optional headers that need be processed only by the destination node(s)) is divided into fragments, each, except possibly the last, being an integer multiple of 8 octets long. Each fragment is prepended with a Fragment header and sent in a separate SIPP packet. The M ("more") flag is set to 1 on all fragments of the same payload except the last. The original payload is assigned an Identification value that is different than that of any other fragmented payload sent recently* with the same SIPP Source Address, SIPP Destination Address, and Fragment Payload Type. (If an optional Expires: September 21, 1994 [Page 8] INTERNET DRAFT SIPP Specification February 21, 1994 Routing header is present, the SIPP Destination Address is that of the final destination.) The Identification value is carried in the Fragment header of all of the original payload's fragments, and is used by the destination to identify all fragments belonging to the same original payload. * "recently" means within the maximum likely lifetime of a packet, including transit time from source to destination and time spent awaiting reassembly with other fragments of the same payload. However, it is not required that a source node know the maximum packet lifetime. Rather, it is assumed that the requirement can be met by maintaining the Identification value as a simple, 32-bit, "wrap- around" counter, incremented each time a payload must be fragmented. It is an implementation choice whether to maintain a single counter for the node or multiple counters, e.g., one for each of the node's possible source addresses, or one for each active (source address, destination address, payload type) combination. In a packet with a Fragment header, the Payload Length field of the SIPP header contains the length of that packet only (excluding the SIPP header itself), not the length of the original, unfragmented payload. 4.3 Authentication Header The Authentication header is used to provide authentication and integrity assurance for SIPP packets. Non-repudiation may be provided by an authentication algorithm used with the Authentication header, but it is not provided with all authentication algorithms that might be used with this header. Privacy of the payload following the Authentication header may optionally be provided by encryption, using an algorithm and keying information that has been pre-established as part of a security association. The Authentication header is identified by a Payload Type of TBD in the immediately preceding header, and has the following format: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Type | Auth Data Len | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Security Association ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Authentication Data . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload Type 8-bit selector. Identifies the type of header immediately following the Authentication header. Uses the same values as the IPv4 Protocol field [RFC-1340]. Expires: September 21, 1994 [Page 9] INTERNET DRAFT SIPP Specification February 21, 1994 Auth Data Len 8-bit unsigned integer. Length of the Authentication Data field in 8-octet units. Sequence Number 16-bit wrap-around counter. The sequence number of this packet, relative to other packets sent in the same security association. Security Assoc. ID 32 bits. When combined with the SIPP Source Address, identifies to the receiver(s) the pre-established security association to which this packet belongs. Authentication Data Variable-length field, an integer multiple of 8 octets long. Algorithm-specific information required authenticate the source of the packet and assure its integrity, as specified for the pre-established security association. The usage of the Authentication header is specified in [SIPP_AUTH]. All SIPP nodes are required to support the keyed MD5 algorithm used used with the Authentication header as described in that document. 4.4 Hop-by-Hop Options Header The Hop-by-Hop (HBH) Options header is used to carry optional information that must be examined by every node along a packet's delivery path. The HBH Options header is identified by a Payload Type of 0 in the SIPP header, and has the following format: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Type | Hdr Ext Len | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | . Options . . . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload Type 8-bit selector. Identifies the type of header immediately following the HBH Options header. Uses the same values as the IPv4 Protocol field [RFC-1340]. Hdr Ext Len 8-bit unsigned integer. Length of the HBH Options header in 8-octet units, not including the first 8 octets. Options Variable-length field, an integer multiple of 8 octets long. One or more individual TLV- Expires: September 21, 1994 [Page 10] INTERNET DRAFT SIPP Specification February 21, 1994 encoded options, as described below. The individual options within the Options area are each encoded in a Type- Length-Value (TLV) format, as follows: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - | Option Type | Opt Data Len | Option Data +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - Option Type 8-bit identifier of the type of option. Opt Data Len 8-bit unsigned integer. Length of the Option Data field of this option, in octets. Option Data Variable-length field. Option-Type-specific data. The Option Type identifiers are internally encoded such that their highest-order two bits specify the action that must be taken if the processing SIPP node does not recognize the Option Type: 00 - skip over this option and continue processing the HBH Options header. 01 - discard the packet. 10 - discard the packet and send an ICMP Parameter Problem message to the packet's Source Address, pointing to the unrecognized Option Type. 11 - discard the packet and, only if the packet's Destination Address is not a multicast address, send an ICMP Parameter Problem message to the packet's Source Address, pointing to the unrecognized Option Type. The third-highest-order bit of the Option Type specifies whether or not the Option Data of this option shall be included in the integrity assurance computation performed when an Authentication header is present. Option data that changes en route must be excluded from that computation. 0 - include in integrity computation 1 - exclude from integrity computation Individual options may have alignment requirements, to ensure that multi- octet values within Option Data fields fall on natural boundaries. The alignment requirement of an option is specified using the notation xn+y, meaning the Option Type must appear at an integer multiple of x octets from the start of the HBH Options header, plus y octets. For example: 2n means any 2-octet offset from the start of the header. Expires: September 21, 1994 [Page 11] INTERNET DRAFT SIPP Specification February 21, 1994 8n+2 means any 8-octet offset from the start of the header, plus 2 octets. The only hop-by-hop options initially defined are padding options, which are used when necessary to align subsequent options and to pad out the Options area of the header to a multiple of 8 octets in length. These padding options must be recognized by all SIPP implementations: Pad1 option (alignment requirement: none) +-+-+-+-+-+-+-+-+ | 0 | +-+-+-+-+-+-+-+-+ NOTE! the format of the Pad1 option is a special case -- it does not have length and value fields. The Pad1 option is used to insert one octet of padding into the Options area of an HBH Options header. If more than one octet of padding is required, the PadN option, described next, should be used, rather than multiple Pad1 options. PadN option (alignment requirement: none) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - | 1 | Opt Data Len | Option Data +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - The PadN option is used to insert two or more octets of padding into the Options area of an HBH Options header. For N octets of padding, the Opt Data Len field contains the value N-2, and the Option Data consists of N-2 zero-valued octets. 4.5 Option Header Order When more than one optional header is used in the same packet, they should appear in the following order: SIPP header Hop-by-Hop Options header Routing header Fragment header Authentication header If and when other optional headers are defined, their ordering constraints relative to the above listed headers must be specified. SIPP nodes are not required to verify that the order of headers in received Expires: September 21, 1994 [Page 12] INTERNET DRAFT SIPP Specification February 21, 1994 packets satifies the above order; sending packets with optional headers in some other order may or may not achieve useful effects. 5. Packet Size Issues SIPP requires that every link in the internet have an MTU of 576 octets or greater. On any link that cannot convey a 576-octet packet in one piece, link-specific fragmentation and reassembly must be provided at a layer below SIPP. (Note: this minimum link MTU is NOT the same as the one in IPv4. In IPv4, the minimum link MTU is 68 octets [RFC-791, page 25]; 576 octets is the minimum reassembly buffer size required in an IPv4 node, which has nothing to do with link MTUs.) From each link to which a node is directly attached, the node must be able to accept packets as large as that link's MTU. Links that have a configurable MTU, such as PPP links [RFC-1548], should be configured with an MTU of 600 octets or greater. SIPP nodes are expected to implement Path MTU Discovery [RFC-1191], in order to discover and take advantage of paths with MTU greater than 576 octets. However, a minimal SIPP implementation (e.g., in a boot ROM) may simply restrict itself to sending packets no larger than 576 octets, and omit implementation of Path MTU Discovery. In order to send a packet larger than a path's MTU, a node may use the optional SIPP Fragment Header to fragment the packet at the source and have it reassembled at the destination(s). However, the use of such fragmentation is discouraged in any application that is able to adapt its packets to fit the measured path MTU (i.e., down to 576 octets). A node must not send a packet larger than the path MTU (i.e., fragments that reassemble to a size larger than the path MTU) unless it has explicit knowledge that the destination(s) can reassemble a packet of that size. In response to a SIPP packet that is sent to an IPv4 destination (i.e., a packet that undergoes translation from SIPP to IPv4), the originating SIPP node may receive an ICMP Packet Too Big message reporting a Next-Hop MTU less than 576. In that case, the SIPP node is not required to reduce the size of subsequent packets to less than 576, but must include a Fragment Header in those packets so that the SIPP-to-IPv4 translating router can obtain a suitable Identification value to use in resulting IPv4 fragments. Note that this means the payload may have to be reduced to 544 octets (576 minus 24 for the SIPP Header and 8 for the Fragment Header), and smaller still if additional optional SIPP headers are used. Note: Since SIPP allows a subnet to span more than one link, Path MTU Discovery must be performed even between nodes on the same subnet. Note: Unlike IPv4, it is unnecessary in SIPP to set a "Don't Fragment" Expires: September 21, 1994 [Page 13] INTERNET DRAFT SIPP Specification February 21, 1994 flag in the packet header in order to perform Path MTU Discovery; that is an implicit attribute of every SIPP packet. Also, those parts of the RFC-1191 procedures that involve use of a table of MTU "plateaus" do not apply to SIPP, because the SIPP version of the "Datagram Too Big" message always identifies the exact MTU to be used. 6. Flow Label The Flow Label field in the SIPP header may be used by a source to label those packets for which it requests special handling by the SIPP routers, such as non-default quality of service or "real-time" service. This aspect of SIPP is, at the time of writing, still experimental and subject to change as the requirements for flow support in the Internet become clearer. Hosts or routers that do not support the functions of the Flow Label field are required to set the field to zero when originating a packet, and to ignore the field when receiving a packet. The Flow Label is a 28-bit field, internally structured into two subfields as follows: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |TClass | Flow ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TClass 4-bit traffic class, described below. Flow ID 24-bit flow identifier, described below. A flow is a sequence of packets sent from a particular source to a particular (unicast or multicast) destination for which the source desires special handling by the intervening routers. The nature of that special handling might be conveyed to the routers by a control protocol, such as a resource reservation protocol, or by information within the flow's packets themselves, e.g., in a hop-by-hop option. The details of such control protocols or options are beyond the scope of this document. There may be multiple active flows from a source to a destination, as well as traffic that is not associated with any flow. A flow is identified by the combination of a Source Address and a non-zero Flow ID. Packets that do not belong to a flow carry a Flow ID of zero. A Flow ID is assigned to a flow by the flow's source node. New Flow IDs must be chosen (pseudo-)randomly and uniformly from the range 1 to FFFFFF hex. The purpose of the random allocation is to make any set of bits within the Flow ID suitable for use as a hash key by the routers, for looking up the special-handling state associated with the flow. A Flow ID must not be re-used by a source for a new flow while any state associated with the previous usage still exists in any router. The lifetime of flow state in routers depends on the method by which that state is created, and is beyond the scope of this document. Expires: September 21, 1994 [Page 14] INTERNET DRAFT SIPP Specification February 21, 1994 All packets sent with the same Source Address and same non-zero Flow ID must also carry the same Destination Address, same Hop-by-Hop Options header contents (if present), and same Routing header contents (if present). The routers or destinations are permitted, but not required, to verify that this condition is satisfied. If a violation is detected, it should be reported to the source by an ICMP Parameter Problem message, pointing to any one of the invalid fields. The TClass subfield provides a means separate from the Flow ID for a source to identify the desired delivery priority of its packets, relative to other packets from the same source. The TClass values are divided into two ranges: values 0 through 7 are used to label flow-controlled packets, e.g., packets that belong to a TCP connection, and values 8 through 15 are used to label non-flow-controlled packets, e.g., "real-time" packets being sent without any flow-control feedback from the receivers. For flow-controlled traffic, the following TClass values are recommended for particular application categories: 0 - uncharacterized traffic 1 - "filler" traffic (e.g., netnews) 2 - unattended data transfer (e.g., email) 3 - 4 - attended bulk transfer (e.g., FTP, NFS) 5 - 6 - interactive traffic (e.g., telnet, X) 7 - internet control traffic (e.g., routing protocols, SNMP) For non-flow-controlled traffic, the lowest TClass value (8) should be used for those packets that the sender is most willing to have discarded under conditions of congestion (e.g., high-fidelity video traffic), and the highest value (15) should be used for those packets that the sender is least willing to have discarded (e.g., low-fidelity audio traffic). There is no relative ordering implied between the flow-controlled classes and the non-flow-controlled classes. For packets bearing non-zero Flow IDs, the method by which the flow requirements are conveyed (e.g., a control protocol or a hop-by-hop option) may include the ability to redefine the semantics of the TClass subfield, for example, to define it as a priority relative to packets belonging to the same flow or set of related flows. 7. Transport-Layer Protocol Issues 7.1 Transport-Layer Checksums When TCP, UDP, ICMP, or IGMP (subsequently referred to as "transport" protocols) is used between two or more SIPP systems, the transport checksum computation includes a "pseudo-header" of the following form: Expires: September 21, 1994 [Page 15] INTERNET DRAFT SIPP Specification February 21, 1994 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Source Address + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Destination Address + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | zero | Payload Type | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ o If the packet contains a Routing header, the Destination Address used in the pseudo-header is that of the final destination. At the originating system, that address will be in the last element of the Routing header; at the recipient(s), that address will be in the Destination Address field of the SIP header. o The Payload Type used in the pseudo-header is that of the transport protocol (6 for TCP, 17 for UDP, 1 for ICMP, or 2 for IGMP). It will differ from the Payload Type in the SIPP header if there are additional headers between the SIPP header and the transport header. o The Payload Length used in the pseudo-header is the length of the transport packet, incluing the transport header. It will be less than the Payload Length in the SIPP header if there are additional headers between the SIP header and the transport header. o The UDP checksum is not optional when UDP is used between SIPP systems. At a recipient, a UDP checksum value of zero is considered valid only if the checksum computation across the the pseudo-header, UDP header, and UDP data yields a result of either zero or hex FFFF (which are equal values in ones-complement arithmetic). For TCP or UDP, if the remote address (i.e., the Source Address in an incoming packet, or the Destination Address in an outgoing packet) is that of an IPv4 system, i.e., has a C-bit value of 1, then the following pseudo-header is used, instead of the one shown above: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | low-order 32 bits of Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | low-order 32 bits of Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | zero | Payload Type | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ When the remote address is that of an IPv4 system, a UDP Checksum field of zero in an incoming packet indicates the absence of a UDP checksum. Such Expires: September 21, 1994 [Page 16] INTERNET DRAFT SIPP Specification February 21, 1994 packets shall be accepted as is. However, a SIPP system must always compute a checksum for outgoing UDP outgoing packets, and it must be non- zero if the remote address is that of an IPv4 system (i.e., if the result of the checksum computation is zero, the value hex FFFF must be sent in the UDP Checksum field). For ICMP or IGMP, if the remote address is that of an IPv4 system, then the following pseudo-header is used, instead of the one shown above: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Source Address + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Destination Address + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | zero | Payload Type | zero | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ It is different from the TCP and UDP case because IPv4 systems do not include a pseudo-header in the ICMP or IGMP checksums, and therefore those checksums have to be adjusted when translating between SIPP and IPv4. The Payload Length is omitted because, otherwise, translating gateways would not be able to adjust the checksum properly when translating between a SIPP fragment and an IPv4 fragment, since the Payload Length would not be known to the translating gateway. Note that this makes ICMP and IGMP packets between SIPP and IPv4 systems vulnerable to undetected padding or truncation, if the SIPP Payload Length field is corrupted en route. Truncation would be undetected only if the missing original octets were all zero; padding would be undetected only if the added octets were all zero. 7.2 Maximum Packet Lifetime SIPP does not enforce maximum packet lifetime. Any transport protocol that relies on IPv4 to limit packet lifetime must take this change into account, for example, by providing its own mechanisms for detecting and discarding obsolete packets. Expires: September 21, 1994 [Page 17] INTERNET DRAFT SIPP Specification February 21, 1994 Appendix A. Changes from the SIP Draft of November 10, 1992 o Changed name from "SIP" to "SIPP" as part of merger with Pip. o Revised Introduction section. o Changed the term "system" to "node", in the terminology section. o Changed Reserved field in SIP header to Flow Label. o In the section on packet size issues, added reference to possible use of the Fragment Header, described handling of path MTUs less than 576 (due to SIPP-to-IPv4 translation), and specified that PMTU Discovery must be performed even between nodes on the same subnet. o Added discussion of general structure of option headers and the ordering constraints on option headers. o Changed "Source Routing Header" to "Routing Header", and changed the field layout. o Changed "Fragmentation Header" to "Fragment Header", changed the field layout, and changed the text describing the option, including dropping the requirement that all nodes be able to reassemble packets up to 1024 octets in length. o Added the Authentication header. o Added the Hop-by-Hop Options header. o Added section on Flow Labels. o Addresses section moved to a separate SIPP Routing and Addressing Specification, in which the following changes were made: - Addresses now identify nodes, not interfaces. - Added some introductory text to the Addressing section, discussing the binding of addresses to interfaces, and the independence of subnets from physical links. - Changed text representation of SIPP addresses. - Eliminated discussion of address masks; changed to refer to prefix lengths instead. - Added definition of local-use addresses. - Changed the term "anyone address" to "cluster address", and changed definition to include only boundary routers of a cluster, not internal nodes. Expires: September 21, 1994 [Page 18] INTERNET DRAFT SIPP Specification February 21, 1994 - Added specification of "C-bit = 1" unicast addresses. - Changed the names of some of the multicast scope levels from geographic terms (metro, country) to administrative terms (organization, community). o Subsections on ICMP and IGMP changes moved to a separate document. o Deleted subsection on Changes to Link-Layer Protocols, and revised subsection on Changes to Transport-Layer Protocols (renamed Transport-Layer Protocol Issues). o Deleted appendix on SIP Design Rationale. o Deleted appendix on Future Directions. Important differences from the SIP paper that appeared in the May 1993 issue of IEEE Network Magazine: o First 32 values of Flow Label field no longer correspond to IPv4 TOS values. o Change in the way Hop-by-Hop Options are encoded. Expires: September 21, 1994 [Page 19] INTERNET DRAFT SIPP Specification February 21, 1994 Security Considerations Acknowledgments The author gratefully acknowledges the many helpful suggestions of the members of the SIPP working group (formerly the SIP, IPAE, and Pip working groups), the End-to-End Protocols research group, and the Internet Community At Large. Author's Address Steve Deering Xerox Palo Alto Research Center 3333 Coyote Hill Road Palo Alto, CA 94304 phone: (415) 812-4839 email: deering@parc.xerox.com Expires: September 21, 1994 [Page 20] INTERNET DRAFT SIPP Specification February 21, 1994 References [RFC-791] J. Postel. Internet Protocol. RFC-791, September, 1981. [RFC-1191] J. Mogul and S. Deering. Path MTU Discovery. RFC-1191, November 1990. [RFC-1340] J. Reynolds and J. Postel. Assigned Numbers. RFC-1340, July 1992. [RFC-1548] W. Simpson. The Point-to-Point Protocol (PPP). RFC-1548, December, 1993. [SIPP-AUTH] R. Atkinson. SIPP Authentication Header. Internet Draft, December 1993. [SIPP-ICMP] R. Govindan and S. Deering. ICMP and IGMP for SIPP Specification. Internet Draft, February 1994. [SIPP-ROAD] S. Deering, P. Francis, and R. Govindan. Simple Internet Protocol Plus (SIPP): Routing and Addressing. Internet Draft, January 1994. [IPAE] R. Gilligan, E. Nordmark, and B. Hinden. IPAE: The SIPP Interoperability and Transition Mechanism. Internet Draft, October 1993. Expires: September 21, 1994 [Page 21]