The Session Initiation Protocol (SIP) and Session Description Protocol (SDP) Static Dictionary for Signaling Compression (SigComp)
updated by
- rfc-4896 — Signaling Compression (SigComp) Corrections and Clarifications
Extracted elements (22)
A priority system (1–5) is assigned to each dictionary string: lower numbers indicate higher expected frequency. Strings with low priority numbers are placed at the bottom (end) of the dictionary, increasing efficiency for algorithms such as DEFLATE that benefit from frequently-used strings being located near the end.
Dictionary strings are case-sensitive. Header field entries include the colon ':' and the expected whitespace that follows. Best compression is achieved for SIP messages that follow the recommended formatting guidelines; messages using non-standard whitespace (e.g., a tab before the colon) will benefit less.
For lower-frequency headers (priority 3–5) that share a common prefix, a splitting mechanism is used: one entry holds the common substring (e.g., '[CRLF]Proxy-') and separate entries hold non-common suffixes ('Authenticate: ', 'Authorization: '). This splitting is not applied to high-frequency strings (priority 1 or 2).
SIP header field entries include the CRLF from the preceding line as a prefix (e.g., '[CRLF]From: ') rather than a trailing CRLF. Because header values are typically not part of the static dictionary, the trailing CRLF cannot be incorporated into header entries; the prefix CRLF approach avoids this constraint.
The dictionary is compression algorithm independent. The string subset is usable by all SigComp compression algorithms, while the table subset is additionally useful for LZ78-family algorithms that require an initial set of tokens.
The static dictionary was introduced to boost compression from the very first SIP message. Without it, the first message is only partially compressed because there is no previously stored state to compress against; the dictionary constitutes a pre-shared SigComp state that can be referenced in the first message.
Two entries are included per SIP response code: one with only the status code and a space (e.g., '302 ') and one with the code plus the standard reason phrase (e.g., '302 Moved Temporarily'). This accommodates both messages that use the standard reason phrase and those that substitute a different one.
Best compression performance from the dictionary is expected for SIP messages that follow the recommended formatting guidelines (e.g., header field names formatted as '[CRLF]Header-Name: value'). Messages that conform to SIP ABNF but use non-standard whitespace or tabulator before the colon will benefit less from the dictionary.
The static SIP/SDP dictionary is unique and MUST be available in all SigComp implementations for SIP/SDP. It is defined once and stays as-is forever, eliminating problems of updating, upgrading, and negotiating which dictionary version is supported at the remote end.
All standard SIP request methods are present in the dictionary as priority-1 or priority-2 entries, each with two forms: the method name alone and the method name followed by a space. Methods included: INVITE, ACK, BYE, REGISTER, SUBSCRIBE, NOTIFY, PRACK, UPDATE (priority 1–2); OPTIONS, CANCEL, REFER, INFO, MESSAGE (priority 3–4).
Implementations may load only a priority subset of the dictionary to conserve UDVM memory. The RFC provides string and table offset/length values for five subsets: priority 1 only, 1–2, 1–3, 1–4, and 1–5 (full dictionary), enabling fine-grained resource trade-offs.
RTP transport profile strings included in the dictionary are 'RTP/AVP ' (priority 2), 'RTP/SAVP ' (priority 3), and 'RTP/AVPF ' (priority 3), covering the standard, secure, and feedback-capable RTP profiles used in SDP media descriptions.
SDP session and media description fields are covered by the dictionary, including session-level lines (v=, o=, s=, i=, u=, e=, c=IN IP4/IP6, b=, t=, r=, z=, k=) and media lines (m=audio, m=video, m=application, m=data, m=control), as well as common a= attribute names such as a=rtpmap:, a=fmtp:, a=sendrecv, a=recvonly, a=sendonly, a=inactive.
SIP response codes from 100 through 687 are represented in the dictionary with two entries each: a bare code-plus-space form and a code-plus-standard-reason-phrase form. Both forms share the same bytes in the string subset but have separate entries in the table subset.
The dictionary includes entries for Digest authentication parameters used in Authorization and WWW-Authenticate headers: username=, uri=, qop=, cnonce=, nc=, response=, nextnonce=, rspauth=, realm=, domain=, nonce=, opaque=, stale=, algorithm=, MD5, MD5-sess, AKAv1-MD5, and auth/auth-int qop values.
The SigComp state for the SIP/SDP static dictionary has the following fixed parameters: state_identifier=0xfbe507dfe5e6aa5af2abb914ceaa05f99ce61ba5, state_length=0x12E4, minimum_access_length=6, state_address=0 (not relevant), state_instruction=0 (not relevant).
The string subset is accessed via: STATE-ACCESS (%ps, 6, 0, 0x0D8C, %sa, 0), where %ps points to UDVM memory containing the 6-byte partial identifier 0xfbe507dfe5e6 and %sa is the desired destination address in UDVM memory.
The table subset is accessed via: STATE-ACCESS (%ps, 6, 0x0D8C, 0x0558, %sa, 0), using the same 6-byte partial identifier. Implementations requiring only a priority subset may adjust the third and fourth operands using the offsets and lengths tabulated in Section 3.
This document has no IANA actions. The static dictionary is fully defined in normative binary form in Section 3 and does not create or update any IANA registry.
The security considerations of RFC 3320 (Signaling Compression) apply to this document. This memo does not introduce any additional security risk beyond those already addressed by SigComp.
Each entry in the table subset encodes a (length, offset) pair: the string length is stored as a 1-byte value, and the string offset is stored as a 2-byte value with 1024 (0x0400) added to the actual offset. This allows direct UDVM referencing when the dictionary state is loaded at address 1024.
The binary SigComp dictionary state value is the concatenation of a string subset and a table subset. The string subset contains all dictionary strings arranged roughly so that low-priority-number (high-frequency) strings appear at the end. Total string subset size is 0x0D8C bytes; table subset size is 0x0558 bytes.