ipsecme | D. Migault, Ed. |
Internet-Draft | Ericsson |
Intended status: Standards Track | T. Guggemos, Ed. |
Expires: May 19, 2017 | LMU Munich |
C. Bormann | |
Universitaet Bremen TZI | |
November 15, 2016 |
ESP Header Compression and Diet-ESP
draft-mglt-ipsecme-diet-esp-03.txt
ESP Header Compression (EHC) defines a flexible framework to compress communications protected with IPsec/ESP. Compression and decompression is defined by EHC Rules orchestrated by EHC Strategies.
The document specifies the Diet-ESP EHC Strategy and associated EHC Rules. Diet-ESP compresses up to 32 bytes per packet for traditional IPv6 VPN and up to 66 bytes for IPv6 VPN set over a single TCP or UDP session.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 19, 2017.
Copyright (c) 2016 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 (http://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. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
IPsec/ESP [RFC4303] secures communications either using end-to-end security or by building a VPN where the traffic is carried to a secure domain via the security gateway.
IPsec/ESP was not designed to reduce the networking overhead of the communications. In fact, reducing bandwidth often adds computational overhead that may negatively impact large infrastructures in which bandwidth usage is not a constraint. On the other hand, IoT devices have completely different constraints. In IoT communications, sending any extra bytes can significantly impact the battery life of devices. These devices are also often expected to be sleeping nodes, for which IPsec sessions have a very different meaning.
This document defines ESP Header Compression (EHC), a framework that compresses ESP protected communications. EHC is highly flexible to address any use case where compression is necessary. EHC takes advantage of the negotiation between the communication endpoint to agree on the cryptographic parameters. In some cases, the agreement already includes parameters that remain constant during the communications (like port value, or IP address value). EHC takes advantage of these already agreed parameters, and defines addition parameters that could be agreed for the purpose of compression. Similarly, EHC also defines EHC Rules which define how fields may be compressed and decompressed given the provided parameters. Finally, EHC defines EHC Strategy which defines how a set of EHC Rule is coordinated.
The document specifies the Diet-ESP EHC Strategy and associated EHC Rules. Diet-ESP compresses up to 32 bytes per packet for traditional VPN and up to 66 bytes for VPN set over a single TCP or UDP session.
This document uses the following terminology:
ESP Header Compression (EHC) compresses IPsec ESP packets, thus reducing the size of the packet sent on the wire, while carrying an equivalent level of information with an equivalent level of security.
The primarily motivation for payload size reduction was IoT were the cost of sending extra bytes largely overcomes additional computations and thus considerably reduces the life time of battery powered devices. As a result, IoT communication rather favor expensive compression over additional bandwidth. Standard IPsec VPN may also consider reduction of their bandwidth, but on the other hand, the acceptable computation overhead must remain very low. The ESP Header Compression designated in this document as Diet-ESP attempts to reach theses two goals.
ESP Header Compression compresses the standard ESP payload by compressing different fields with a specific compression rules performed in the ESP stack. Concerned fields include fields of the ESP protocol, as well as other protocols in the ESP payload such as the IP header when the tunnel mode is used, the UDP or the TCP header. In fact non ESP fields may be compressed by ESP under certain circumstances, and ESP Header Compression is not intended to provide a generic way, outside of ESP to compress these protocols. Further compression of the ESP payload may be performed by generic mechanism and outside ESP with more generic mechanisms such as for example ROHCoverIPsec [RFC5858] or SCHC [I-D.toutain-6lpwa-ipv6-static-context-hc] which are orthogonal to ESP Header Compression.
As depicted in Figure 1, in order to compress the ESP packets, the two peers are expected to agree on the EHC Strategy - Diet-ESP in our case - as well as some extra parameters needed to derive the EHC Rules and EHC Context.
EHC Strategy, EHC Strategy, EHC Context <==================> EHC Context | | EHC Rules | EHC Rules | | | | | v v v v +====================+ +====================+ | ESP | | ESP | +====================+ +====================+ | < pre-esp > | | < pre-esp > | +--------------------+ +--------------------+ | < clear text esp > | | < clear text esp > | +--------------------+ +--------------------+ | < encryption > | | < encryption > | +--------------------+ +--------------------+ | < post-esp > | | < post-esp > | +--------------------+ +--------------------+
Figure 1: ESP Header Compression Overview
In Figure 1, the ESP stack is represented by various sub layers describing the packet processing inside the ESP. The "pre-esp" layer represents treatment performed to a non ESP packet, i.e. before ESP encapsulation or decapsulation is being proceeded. "clear text esp" designates the ESP encapsulation / decapsulation processing performed on an non encrypted ESP packet. "encryption" designates the encryption/decryption phase and "post-esp" the processing performed on an ESP encrypted packet. EHC Rules may be processed at any of these layers - except for "encryption" layer, and thus impact differently the standard ESP. More specifically, EHC Rules performed at the "pre-esp" or "post-esp" layer does not require the current ESP stack to be updated and can simply be appended to the current ESP stack. On the other hand, EHC Rules at the "clear text esp" may require modification of the current ESP stack.
The set of EHC rules described in this document as well as the EHC Strategies may be extended in the future. There is nothing to prevent such EHC Rules and Strategies to be updated.
The EHC Context provides the necessary information so the two peers can proceed to the appropriated compression and decompression defined by the EHC Strategy. As this document is limited to the Diet-ESP strategy, the EHC Context in this section is also designated as Diet-ESP Context and is used by the Diet-ESP Strategy to activate specific EHC Rules as well as to execute the EHC Rule by providing the necessary parameters..
The Diet-ESP Context is defined on a per-SA basis. It is composed of attributes that are not Diet-ESP specific, as well as attributes that are Diet-ESP specific. Attributes that are not Diet-ESP specific are already stored in some form in the SA. Such attributes are designated by "Yes" in the "In SA" column. Diet-ESP specific attributes may need to be specified so Diet-ESP can be executed properly.
Context Attribute | In SA | Possible Values |
---|---|---|
esp_mode | Yes | "Tunnel" or "Transport" |
outer_version | Yes | "IPv4" "IPv6" |
esp_spi | Yes | ESP SPI |
esp_spi_lsb | No | 0, 1, 2, 3, 4 |
esp_sn | Yes | ESP Sequence Number |
esp_sn_lsb | No | 0, 1, 2, 3, 4 |
esp_sn_gen | No | "Time", "Incremental" |
esp_align | No | 8, 16, 24, 32 |
esp_encr | Yes | ESP Encryption Algorithm |
Parameters associated to the Inner IP addresses are only specified when the SA has been configured with the tunnel mode. As a result when esp_mode is set to "Transport" the parameters below MUST NOT be considered and are considered as "Undefined"
Context Attribute | In SA | Possible Values |
---|---|---|
ip_version | Yes | "IPv4" "IPv6" |
Context Attribute | In SA | Possible Values |
---|---|---|
ip6_tcfl_comp | No | "Outer", "Value", "UnComp" |
ip6_tc | No | IPv6 Traffic Class |
ip6_fl | No | IPv6 Flow Label |
ip6_hl_comp | No | "Outer", "Value", "UnComp" |
ip6_hl | No | Hop Limit Value |
ip6_src | Yes | IPv6 Source Address |
ip6_dst | Yes | IPv6 Destination Address |
ip6_tcfl_comp indicates how Traffic Class and Flow Label fields of the inner IP Header are expected to be compressed. When set to "UnComp", or "Outer", values associated to ip6_tc and ip6_fl MUST NOT be considered and are considered as "Undefined". Values associated to ip6_tc and ip6_fl are only considered when ip6_tcfl_comp is set to "Provide Values".
ip6_hl_comp indicates how Hop Limit field of the inner IP Header is not expected to be compressed. When set to "Outer" or "UnComp", values associated to ip6_hl MUST NOT be considered and is considered as "Undefined". ip6_hl is only considered when ip6_hl_comp is set to "Value".
ip6_dst designates the Destination IPv6 Address of the inner IP header. The IP address is provided by the TS, and can be defined as a range of IP addresses. Compression is only considered when ip6_dst indicates a single IP Address. When the TS defines more than a single IP address ip6_dst is considered as "Unspecified" and its value MUST NOT be considered for compression.
Context Attribute | In SA | Possible Values |
---|---|---|
ip4_options | No | "Options", "No_Options" |
ip4_id | No | IPv4 Identification |
ip4_id_lsb | No | 0,1,2 |
ip4_ttl_compression | No | "Outer", "Value", "UnComp" |
ip4_ttl | No | IPv4 Time To Live |
ip4_src | yes | IPv4 Source Address |
ip4_dst | yes | IPv4 Destination Address |
ip4_frag_enable | No | "True", "False" |
The following parameters are provided by the SA but the SA may specify single value or a range of values. When the SA specifies a range of values, these parameters MUST NOT be considered and are considered as Unspecified.
Context Attribute | In SA | Possible Values |
---|---|---|
l4_proto | Yes | IPv6/ESP Next Header,IPv4 Protocol |
l4_src | Yes | UDP/UDP-Lite/TCP Source Port |
l4_dst | Yes | UDP/UDP-Lite/TCP Destination Port |
Context Attribute | In SA | Possible Values |
---|---|---|
udplite_coverage | No | 8-16535, "Length", "UnComp" |
Context Attribute | In SA | Possible Values |
---|---|---|
tcp_sn | No | TCP Sequence Number |
tcp_ack | No | TCP Acknowledgment Number |
tcp_lsb | No | 0, 1, 2, 3, 4 |
tcp_options | No | "True" "False" |
tcp_urgent | No | "True" "False" |
This section describes the EHC Rules involved in Diet-ESP. The EHC Rules defined by Diet-ESP may be used in the future by EHC Strategies other than Diet-ESP, so they are described in an independent way.
EHC Rule defines the compression and decompression of one or more fields and EHC Rules are represented this way:
+---------------+-------+---------+----------------+ | EHC Rule | Field | Action | Parameters | +---------------+-------+---------+----------------+ | | f1 | a1 | p1_1, ... p1_n | | +-------+---------+----------------+ | EHC_RULE_NAME ~ ... ~ | +-------+---------+----------------+ | | fm | am | pm_1, ... pm_n | +---------------+-------+---------+----------------+
Figure 2: EHC Rules
The EHC Rule is designated by a name (EHC_RULE_NAME) which indicates the concerned Fields (f1, ..., fm). Each field compression and decompression is represented by an Action (a1, ..., am). Parameters indicates the necessary parameters for the action to be completed, i.e, to perform both the compression and the decompression.
The table below provides a high level description of the Actions used by Diet-ESP. As these Action may take different arguments and may operate differently for each field a compete description is provided in the next sections as part of the EHC Rule description.
Function | Compression | Decompression |
---|---|---|
send-value | No | No |
elided | Not send | Get from EHC Context |
lsb(_lsb_size) | Sent LSB | Get from EHC Context |
lower | Not send | Get from lower layer |
checksum | Not send | Compute checksum. |
padding(_align) | Compute padding | Get padding |
For all actions, the function can be performed only when the appropriated parameters and fields are provided. When a field or a parameters does not have an appropriated value its value is designated as "Unspecified". Specifically some fields such as inner IP addresses, ports or transport protocols are agreed during the SA negotiation and are specified by the SA. Their value in the SA may take various values that are not appropriated to enable a compression. For example, when these fields are defined as a range of values, or by selectors such as OPAQUE or ANY these fields cannot be retrieved from a local value. Instead, when they are defined as a "Single" value (i.e a single IP address, or a single port number or a single transport protocol number) compression and decompression can be performed. These SA related fields are considered as "Unspecified" when not limited to a "Single" value.
When a field or a parameter is "Unspecified", the EHC Rule MUST NOT be activated. This is the purpose of the EHC Strategy to avoid ending in such case. In any case, when one of these condition is not met, the EHC Rule MUST NOT perform any compression or decompression action and the packet MUST be discarded. When possible, an error SHOULD be raised and logged.
This section describes the EHC Rules for ESP which are summed up in the table below.
EHC Rule | Field | Action | Parameters |
---|---|---|---|
ESP_SPI | SPI | lsb | esp_spi_lsb, esp_spi |
ESP_SN | Sequence Number | lsb | esp_sn_lsb, esp_sn_gen, esp_sn |
ESP_NH | Next Header | elided | l4_proto, ipsec_mode |
ESP_PAD | Pad Length, Padding | padding | esp_align, esp_encr |
ESP_SPI designates the EHC Rule compressing / decompressing the SPI. ESP_SPI is performed in the "post-esp" phase. The SPI is compressed using "lsb". The sending peer only places the LSB bytes of the SPI and the receiving peer retrieve the SPI from the LSB bytes carried in the packets as well as from the SPI value stored in the SA. The SPI MUST be retrieved as its full value is included in the signature check. The two peers MUST agree on the number of LSB bytes to be sent: "esp_spi_lsb". Upon agreeing on "esp_spi_lsb", the receiving peer MUST NOT agree on a value not carrying sufficient information to retrieve the full SPI.
ESP_SN designates the EHC Rule compressing / decompressing the ESP Sequence Number. ESP_SN is performed in the "post-esp" phase. ESP_SN is only activated if the SN ("esp_sn"), the LSB significant bytes ("esp_sn_lsb") and the method used to generate the SN ("esp_sn_gen") are defined. The Sequence Number is compressed using "lsb". Similarly to the SPI, the Sequence Number MUST be retrieved in order to complete the signature check of the ESP packet. Unlike the SPI, the Sequence Number is not agreed by the peers, but is changing for every packet. As a result, in order to retrieve the Sequence Number from the LSB "esp_sn_lsb", the peers MUST agree on generating Sequence Number in a similar way. This is negotiated with "esp_sn_gen" and the receiver MUST ensure that "esp_sn_lsb" is big enough to absorb minor packet losses or time differences between the peers.
ESP_NH designates the EHC Rule compressing / decompressing the ESP Next Header. ESP_NH is performed in the "clear text esp" phase. ESP_NH is only activated if the Next Header is specified. The Next Header can be specified as IP (IPv4 or IPv6) when the IPsec tunnel mode is used ("esp_mode" set to "Tunnel") or when the transport mode is used when the Traffic Selectors defines a "Single" Protocol ID ("l4_proto"). The Next Header, is compressed using "elided". The Next Header indicates the Header in the Payload Data. When the Tunnel mode is chosen, the type of the header is known to be an IP header. Similarly, the TS may also hold transport layer protocol, which specifies the Next Header value for Transport mode. The Next Header value is only there to provide sufficient information for decapsulating ESP. In other words decompressing this fields would occur in the "clear text esp" phase and striped but directly removed again by the ESP stack. For these reasons, implementation may simply omit decompressing this field.
ESP_PAD designates the EHC Rule compressing / decompressing the Pad Length and Padding fields. ESP_PAD is performed in the "clear text exp" phase. Pad Length and Padding define the padding. The purpose of padding is to respect a 32 bit alignment for ESP or block sizes of the used cryptographic suite. As the ESP trailer is encrypted, Padding and Pad Length MUST to be performed by ESP and not by the encryption algorithm. Thus, ESP_PAD always needs to respect the cipher alignment ("esp_encr"), if applicable. Compression may be performed especially when device support alignment smaller than 32 bit. Such alignment is designated as "esp_align" and the padding bytes are the necessary bytes so the ESP packet has a length that is a multiple of "esp_align".
When "esp_align" is set to an 8-bit alignment padding bytes are not necessary, and Padding as well as Pad Length are removed. For values that are different from 8-bit alignment, padding bytes needs to be computed according to the ESP packet length why ESP_PAD MUST be the last action of "clear text esp". The resulting number of padding byte is then expressed in Padding and Pad Length fields with Pad Length set to padding bytes number - 1 and Padding is generated as described in [RFC4303].
Combining the Pad Length and Padding fields could potentially add an overhead on fixed size padding. In fact some applications may only send the same type of fixed size data, in which case the Pad Length would not be necessary to be specified. However, the only corner case Pad Length fields would actually add an overhead is when padding is expected to be of zero size. In this case, specifying an 8-bit alignment solve this issue.
All IPv4 EHC Rules MUST be performed during the "clear text esp" phase. The EHC Rules are only defined for compressing the inner IPv4 header and thus can only be used when the SA is using the Tunnel mode.
EHC Rule | Field | Action | Parameters |
---|---|---|---|
IP4_OPT_DIS | Version | elided | ip_version |
Header Length | elided | ||
IP4_LENGTH | Total Length | lower | |
IP4_ID | Identification | lsb | ip4_id, ip4_id_lsb |
IP4_FRAG_DIS | Flags | elided | |
Fragment Offset | elided | ||
IP4_TTL_OUTER | Time To Live | elided | ip4-ttl |
IP4_TTL_VALUE | Time To Live | elided | ip4-ttl |
IP4_PROT | Protocol | elided | l4_proto |
IP4_CHECK | Header Checksum | checksum | |
IP4_SRC | Source Address | elided | ipv4-source |
IP4_DST | Dest. Address | elided | ipv4-dest |
IP4_OPT_DIS designates that the IPv4 header does not include any options and indicates if the first byte of the IPv4 header - consisting of IP version and IPv4 Header Length, are compressed. The Version "ip_version" is defined by the SA and is thus compressed using "elided". The Header Length is static, if the header does not contain any options, thus it is compressed with "elided" and decompressed "20", the default length of the IPv4 header.
IP4_LENGTH designates the EHC Rule compressing / decompressing the Total Length Field of the inner IPv4 header. The Total Length is compressed by the sender and not sent. The receiver decompresses it by recomputing the Total Length from the outer IP header. The outer IP header can be IPv4 or IPv6 and IP4_LENGTH MUST support both versions if both versions are supported by the device. Note that the length of the inner IP payload may also be subject to updates if decompression of the upper layers occurs.
IP4_ID designates the EHC Rule compressing / decompressing the Identification Field. IP4_ID is only activated if the ID ("ip4_id"), the LSB significant bytes ("ip4_id_lsb") are defined. Upon agreeing on "ip4_id_lsb", the receiving peer MUST NOT agree on a value not carrying sufficient information to retrieve the full IP Identification. Note also that unlike the ESP SN, the IPv4 Identification is not part of the SA. As a result, when the ID is compressed, its value MUST be stored in the EHC Context. The reserved attribute for that is "ip4_id"
IP4_FRAG_DIS designates that the inner IPv4 header does not support fragmentation. If activated, IP4_FRAG_DIS indicates compression of Flags and Fragment Offset field in the IPv4 header which consists of 2 bytes. Both fields are compressed with "elided" and decompressed with their default value according to [RFC0791], which is 0b010 for Flags and 0 for Fragment Offset.
IP4_TTL_OUTER designates an EHC Rule compressing / decompressing the Time To Live field of the inner IP header. IP4_TTL_OUTER is only activated when both the outer and inner IP header are IPv6 header. The Time To Live field is compressed / decompressed using the "lower". More specifically, the field is not sent. The receiver decompresses them by reading their value from the outer IPv4 header.
IP4_TTL_VALUE designates an EHC Rule compressing / decompressing the Time To Live field of the inner IP header. IP4_TTL_VALUE is only activated when the Hop Limit ("ip4_ttl") has been agreed. Time To Live is compressed / decompressed using the "elided" method.
IP4_PROTO designates the EHC Rule compressing / decompressing the Protocol field of the inner IPv4 header. IP4_PROTO is only activated if the Protocol is specified, that is when the Traffic Selectors defines a "Single" Protocol ID ("l4_proto"). When the Protocol ID identified by the SA has a "Single" value, the Protocol is compressed and decompressed using the "elided" method.
IP4_CHECK designates the EHC rule compressing / decompressing the Header Checksum field of the inner IPv4 header. The IPv4 header checksum is not sent by the sender and the receiver computes from the decompressed inner IPv4 header. IP4_CHECK MUST compute the checksum and not fill the checksum field with zeros. As a result, IP4_CHECK is the last decompressing EHC Rule to be performed on the decompressed IPv4 header.
IP4_SRC compresses the source IP address of the inner IPv4 header. IP4_SRC_IP is only be activated when the Traffic Selectors agreed by the SA defines a "Single" source IP address ("ip4_src"). The Source IP address is compressed / decompressed using the "elided" method.
IP4_DST works in a similar way as IP4_SRC_IP but for the destination IP address ("ip4_dst")
All IPv6 EHC Rules MUST be performed during the "clear text esp" phase. The EHC Rules are only defined for compressing the inner IPv6 header and thus can only be used when the SA is using the Tunnel mode.
EHC Rule | Field | Action | Parameters |
---|---|---|---|
IP6_OUTER | Version | elided | ip_version |
Traffic Class | lower | ||
Flow Label | lower | ||
IP6_VALUE | Version | elided | ip_version |
Traffic Class | elided | ip6_tc | |
Flow Label | elided | ip6_fl | |
IP6_LENGTH | Payload Length | lower | |
IP6_NH | Next Header | elided | l4_proto |
IP6_HL_OUTER | Hop Limit | lower | |
IP6_HL_VALUE | Hop Limit | elided | ip6_hl |
IP6_SRC | Source Address | elided | ip6_source |
IP6_DST | Dest. Address | elided | ip6_dest |
IP6_OUTER designates an EHC Rule for compressing / decompressing the first 32 bits of the inner IPv6 header formed by the Version, Traffic Class and Flow Label. IP6_OUTER is only activated when both the outer and inner IP header are IPv6 header. The Version "ip_version" is defined by the SA and is thus compressed using "elided". The other parameters Traffic Class and Flow Label are compressed using "lower". More specifically, the fields are not sent. The receiver decompresses them by reading their value from the outer IPv6 header.
IP6_VALUE designates an EHC Rule for compressing / decompressing the first 32 bits of the inner IPv6 header formed by the Version, Traffic Class and Flow Label. IP6_VALUE is only activated if the Version of the inner IP header agreed by the SA is set to "Version 6" ("ip_version" set to "Version 6") and the specific values of the Traffic Class ("ip6_tc") and the Flow Label ("ip6_fl") are specified. With IP6_VALUE all fields are compressed and decompressed using "elided". Version is provided by the SA ("ip_version") while other fields are explicitly provided (ip6_tc, ip6_fl.
IP6_LENGTH designates the EHC Rule compressing / decompressing the Payload Length Field of the inner IPv6 header. The Payload Length is compressed by the sender and is not sent. The receiver decompress it by recomputing the Payload Length from the outer IP header. The IP header can be IPv4 or IPv6 and IP6_LENGTH MUST support both versions if both versions are supported by the device. Note that the length of the inner IP payload may also be subject to updates if decompression of the upper layers occurs.
IP6_NH designates the EHC Rule compressing / decompressing the Next Header field of the inner IPv6 header. IP6_NH is only activated if the Next Header is specified, that is when the Traffic Selectors defines a "Single" Protocol ID ("l4_proto"). When the Protocol ID identified by the SA has a "Single" value, the Next Header is compressed and decompressed using the "elided" method.
IP6_HL_OUTER designates an EHC Rule compressing / decompressing the Hop Limit field of the inner IP header. IP6_HL_OUTER is only activated when both the outer and inner IP header are IPv6 header. The Hop Limit field is compressed / decompressed using the "lower". More specifically, the fields are not sent. The receiver decompresses them by reading their value from the outer IPv6 header.
IP6_HL_VALUE designates an EHC Rule compressing / decompressing the Hop Limit field of the inner IP header. IP6_HL_VALUE is only activated when the Hop Limit ("ip6_hl") has been agreed. The Hop Limit is compressed / decompressed using the "elided" method.
IP6_SRC compresses the source IP address of the inner IP header. IP6_SRC_IP is only be activated when the Traffic Selectors agreed by the SA defines a "Single" source IP address ("ip6_src"). The Source IP address is compressed / decompressed using the "elided" method.
IP6_DST works in a similar way as IP6_SRC_IP but for the destination IP address ("ip6_dst")
All UDP EHC Rules MUST be performed during the "pre-esp" phase. The EHC Rules are only defined when the Traffic Selectors agreed during the SA negotiation results in "Single" Protocol ID ("l4_proto") which is set to UDP (17).
EHC Rule | Field | Action | Parameters |
---|---|---|---|
UDP_SRC | Source Port | elided | l4_source |
UDP_DST | Dest. Port | elided | l4_dest |
UDP_LENGTH | Length | lower | |
UDP_CHECK | UDP Checksum | checksum |
UDP_SRC designates the EHC Rule that compresses / decompresses the UDP Source Port. UDP_SRC is only activated when the Source Port agreed by the SA negotiation ("l4_src") is "Single". The Source Port is then compressed / decompressed using the "elided" method.
UDP_DST works in a similar way as UDP_SRC but for the Destination Port ("l4_dst").
UDP_LENGTH designates the EHC Rule compressing / decompressing the Length Field of the UDP header. The length is compressed by the sender and is not sent. The receiver decompresses it by recomputing the Length from the IP address header. The IP address can be IPv4 or IPv6 and UDP_LENGTH MUST support both versions if both versions are supported by the device.
UDP_CHECK designates the EHC Rule compressing / decompressing the UDP Checksum. The UDP Checksum is not sent by the sender and the receiver computes from the decompressed UDP payload. UDP_CHECK MUST compute the checksum and not fill the checksum field with zeros. As a result, UDP_CHECK is the last decompressing EHC Rule to be performed on the decompressed UDP Payload.
All UDP-lite EHC Rules MUST be performed during the "pre-esp" phase. The EHC Rules are only defined when the Traffic Selectors agreed during the SA negotiation results in a "Single" Protocol ID ("l4_proto") which is set to UDPLite (136).
EHC Rule | Field | Action | Parameters |
---|---|---|---|
UDP-LITE_SRC | Source Port | elided | l4_source |
UDP-LITE_DST | Dest. Port | elided | l4_dest |
UDP-LITE_COVERAGE | Checksum Coverage | elided | udplite_coverage |
UDP-LITE_CHECK | UDP-Lite Checksum | checksum |
UDP-LITE_SRC works similarly to UDP_SRC
UDP-LITE_DST works similarly to UDP_DST
UDP-LITE_COVERAGE designates the EHC Rule compressing / decompressing the UDP-Lite Coverage field. UDP-LITE_COVERAGE is only activated when the Coverage ("udplite_coverage") has been agreed with a valid value. The Coverage is compressed / decompressed using the "elided" method.
UDP-LITE_CHECK designates the EHC Rule compressing / decompressing the UDP-Lite checksum. UDP-LITE_CHECK is only activated if the Coverage is defined either elided or sent. UDP-LITE_CHECK computes the checksum using "checksum" according to the uncompressed UDP packet and the value of the Coverage.
All TCP EHC Rules MUST be performed during the "pre-esp" phase. The EHC Rules are only defined when the Traffic Selectors agreed during the SA negotiation results in a"Single" Protocol ID ("l4_proto") which is set to TCP (6).
EHC Rule | Field | Action | Parameters |
---|---|---|---|
TCP_SRC | Source Port | elided | l4_source |
TCP_DST | Dest. Port | elided | l4_dest |
TCP_SN | Sequence Number | lsb | tcp_sn, tcp_ls |
TCP_ACK | Acknowledgment Number | lsb | tcp_ack, tcp_lsb |
TCP_OPTIONS | Data Offset | elided | tcp_options |
Reserved Bits | elided | ||
TCP_CHECK | TCP Checksum | checksum | |
TCP_URGENT | elided | tcp_urgent |
TCP_SRC works similarly to UDP_SRC.
TCP_DST works similarly to UDP_DST.
TCP_SN designates the EHC Rule compressing / decompressing the TCP Sequence Number. TCP_SN is only activated if the SN ("tcp_sn") and the LSB significant bytes ("tcp_lsb") are defined. The TCP SN is compressed using "lsb". The sending peer only places the LSB bytes of the TCP SN ("tcp_sn") and the receiving peer retrieve the TCP SN from the LSB bytes carried in the packets as well as from the TCP SN value stored in EHC Context ("tcp_sn"). The two peers MUST agree on the number of LSB bytes to be sent: "tcp_lsb". Upon agreeing on "tcp_lsb", the receiving peer MUST NOT agree on a value not carrying sufficient information to retrieve the full TCP SN. Note also that unlike the ESP SN, the TCP SN is not part of the SA. As a result, when the SN is compressed, the value of the TCP SN MUST be stored in the EHC Context. The reserved attribute for that is "tcp_sn"
TCP_ACK designates the EHC Rule compressing / decompressing the TCP Acknowledgment Number and works similarly to TCP SN. Note that "tcp_lsb" is agreed for both TCP SN and TCP Acknowledgment. Similarly the value of the complete TCP Acknowledgment Number MUST be stored in the "tcp_ack" attribute of the EHC Context.
TCP_OPTIONS designates the EHC Rule compressing / decompressing TCP options related fields such as Data Offset and Reserved Bits. TCP_OPTION can only be activated when the TCP Option ("tcp_options") is defined. When "tcp_options" is set to "False" and indicates there are no TCP Options, the Data Offsets and Reserved Bits are compressed / decompressed using the "elided" method with Data Offset and Reserved Bits set to zero.
TCP_CHECK designates the EHC Rule compressing / decompressing the TCP Checksum. TCP_CHECK works similarly as UDP_CHECK.
TCP_URGENT designates the EHC Rule compressing / decompressing the urgent related information. When "tcp_urgent" is set to "False" and indicates there are no TCP Urgent related information, the Urgent Pointer is then "elided" and filled with zeros.
From the attributes of the EHC Context, Diet-ESP, defines as an EHC Strategy which EHC Rules to apply. The EHC Strategy is defined both for outbound packets which compresses the packet as well as for inbound packet where the decompression occurs.
Implementation may differ from the description below. However, the outcome MUST remain the same.
Diet-ESP compression is defined as follows:
UDP compression is defined as below:
UDP-lite compression is defined as below:
TCP compression is defined as below:
Inner IPv6 Header compression is defined as below:
ESP compression is defined as below:
Diet-ESP decompression is defined as follows:
ESP decompression is defined as follows:
Inner IPv6 decompression is defined as follows:
UDP decompression is defined as follows:
UDP-Lite decompression is defined as follows:
TCP decompression is defined as follows:
There are no IANA consideration for this document.
This section lists security considerations related to the Diet-ESP protocol.
We thank Orange and Universitee Pierre et Marie Curie for initiating the work on Diet-ESP. We Would like to thank Sylvain Killian for implementing an open source Diet-ESP on Contiki and testing it on the FIT IoT-LAB [fit-iot-lab] funded by the French Ministry of Higher Education and Research. We thank the IoT-Lab Team and the INRIA for maintaining the FIT IoT-LAB platform and for providing feed backs in an efficient way.
We would like to thank Rob Moskowitz for not copyrighting Diet HIP. The "Diet" terminology is from him.
We woudl like to thank those we received many useful feed backs among others: Dominique Bartel, Anna Minaburo, Suresh Krishnan, Samita Chakrabarti, Michael Richarson, Tero Kivinen.
[RFC0791] | Postel, J., "Internet Protocol", STD 5, RFC 791, DOI 10.17487/RFC0791, September 1981. |
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997. |
[RFC4303] | Kent, S., "IP Encapsulating Security Payload (ESP)", RFC 4303, DOI 10.17487/RFC4303, December 2005. |
[RFC4309] | Housley, R., "Using Advanced Encryption Standard (AES) CCM Mode with IPsec Encapsulating Security Payload (ESP)", RFC 4309, DOI 10.17487/RFC4309, December 2005. |
[RFC5225] | Pelletier, G. and K. Sandlund, "RObust Header Compression Version 2 (ROHCv2): Profiles for RTP, UDP, IP, ESP and UDP-Lite", RFC 5225, DOI 10.17487/RFC5225, April 2008. |
[RFC5858] | Ertekin, E., Christou, C. and C. Bormann, "IPsec Extensions to Support Robust Header Compression over IPsec", RFC 5858, DOI 10.17487/RFC5858, May 2010. |
[I-D.toutain-6lpwa-ipv6-static-context-hc] | Minaburo, A. and L. Toutain, "6LPWA Static Context Header Compression (SCHC) for IPV6 and UDP", Internet-Draft draft-toutain-6lpwa-ipv6-static-context-hc-01, June 2016. |
[I-D.mglt-ipsecme-implicit-iv] | Migault, D., Guggemos, T. and Y. Nir, Implicit IV for Counter-based Ciphers in IPsec", Internet-Draft draft-mglt-ipsecme-implicit-iv-02, November 2016. |
[fit-iot-lab] | Future Internet of Things (FIT) IoT-LAB" | , "
This section considers a IoT IPv6 probe hosting a UDP application. The probe is dedicated to a single application and establishes a single UDP session. As a result, inner IP addresses and UDP Ports have a "Single" value and can be easily compressed. The probes sets an IPsec VPN using IPv6 addresses in order to connect its secure domain - typically a Home Gateway. The use of IPv6 for inner and outer IP addresses, enables to infer inner IP fields from the outer IP address. The probes encrypts with AES-CCM_8 [RFC4309]. AES-CCM does not have padding, so the padding is performed by ESP. The probes uses an 8 bit alignment which enables to fully compress the ESP Trailer. In addition, as the probe SA is indexed using the outer IP addresses (or eventually the radio identifiers) which enables to fully compress the SPI. As the probe provides information every hour, the Sequence Number using time can be derived from the received time, which enables to fully compress the SN.
Figure 3 represents the original UDP packet and Figure 4 represents the corresponding packet compressed with Diet-ESP. The compression with Diet-ESP results in a reduction of 61 bytes overhead. With IPv4 inner IP addressed Diet-ESP results in an 45 byte overhead reduction.
Further compression may be done for example by using an implicit IV [I-D.mglt-ipsecme-implicit-iv] and by compressing the outer IP addresses (not represented) on the figure. In addition, application data may also be compressed with mechanisms outside of the scope of Diet-ESP.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- E| Security Parameters Index (SPI) | ^ S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | P| Sequence Number (SN) | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | IV | | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | I|version| traffic class | flow label |^ | P+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | v| payload length | next header | hop limit || | 6+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | || a | inner source IP || u | |e t | |n h +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+c e | |r n | inner destination IP |y t | |p i | |t c -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+e a U| source port | dest port |d t D+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| e P| length | checksum || d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | || | ~ APPLICATION DATA ~| | | || | -| +-+-+-+-+-+-+-+-+| | E| | Padding || | S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | P| Padding (continue) | Pad Length | Next Header |v v -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- | Integrity Check Value-ICV (variable) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: Standard ESP VPN Packet Description
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-- | | ^ | IV | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ aut | | hen ~ APPLICATION DATA ~ tic | (encrypted) | ate | +-+-+-+-+-+-+-+-+ | | | | V +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |-- | Integrity Check Value-ICV (variable) | | +-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: Diet-ESP Single UDP Session IoT VPN Packet Description
The following table illustrates the activated rules and the attributes of the Diet-ESP Context that needs an explicit agreement to achieve the compression. All other attributes used by the rules are part of the SA agreement. Parameters of not activated rules are left "Unspecified".
EHC Rule | Context Attribute | Value |
---|---|---|
ESP_SPI | esp_spi_lsb | 0 |
ESP_SN | esp_sn_lsb | 0 |
esp_sn_gen | "Incremental" | |
ESP_NH | ||
ESP_PAD | esp_align | 8 |
IP6_OUTER | ip6_tcfl_comp | "Outer" |
ip6_hl_comp | "Outer" | |
IP6_LENGTH | ||
IP6_NH | ||
IP6_HL_OUTER | ||
IP6_SRC | ||
IP6_DST | ||
UDP_SRC | ||
UDP_DST | ||
UDP_LENGTH | ||
UDP_CHECK |
This section considers the same probe as described in Appendix A.1 but instead of using UDP as a transport layer, the probe uses TCP. In this case TCP is used with no options, no urgent pointers and the SN and ACK Number are compressed to 2 bytes as the throughput is expected to be low.
Figure 5 represents the original TCP packet and Figure 6 represents the corresponding packet compressed with Diet-ESP. The compression with Diet-ESP results in a reduction of 66 bytes overhead. With IPv4 inner address Diet-ESP results in a 50 byte overhead reduction.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- E| Security Parameters Index (SPI) | ^ S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | P| Sequence Number (SN) | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | IV | | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | I|version| traffic class | flow label |^ | P+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | v| payload length | next header | hop limit || | 6+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | || a | inner source IP || u | |e t | |n h +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+c e | |r n | inner destination IP |y t | |p i | |t c -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+e a T| source port | dest port |d t C+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| e P| Sequence Number (SN) || d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | ACK Sequence Number || | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | |Off. | Rserv | Flags | Window Size || | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | Checksum | Urgent Pointer || | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | || | ~ APPLICATION DATA ~| | | || | | +-+-+-+-+-+-+-+-+| | E| | Padding || | S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | P| Padding (continue) | Pad Length | Next Header |V V -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- | Integrity Check Value-ICV (variable) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 5: Standard IoT Single TCP Session VPN Packet Description
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---a | | ^u | IV | |t +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--|h | Sequence Number (SN) | ACK Sequence Number |^e|e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|n|n | Flags | Window Size | ||c|t +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ||r|i | ~|y|c ~ APPLICATION DATA ||p|a | ||t|t | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|e|e | | |vdvd +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |--- | Integrity Check Value-ICV (variable) | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 6: Diet-ESP Single TCP Session IoT VPN Packet Description
The following table illustrates the activated rules and the attributes of the Diet-ESP Context that needs an explicit agreement to achieve the compression. All other attributes used by the rules are part of the SA agreement. Parameters of not activated rules are left "Unspecified". Note for simplicity, tcp_sn and tcp_ack are negotiated to start with 0, but it could be any other value as well.
EHC Rule | Context Attribute | Value |
---|---|---|
ESP_SPI | esp_spi_lsb | 0 |
ESP_SN | esp_sn_lsb | 0 |
esp_sn_gen | "Incremental" | |
ESP_NH | ||
ESP_PAD | esp_align | 8 |
IP6_OUTER | ip6_tcfl_comp | "Outer" |
ip6_hl_comp | "Outer" | |
IP6_LENGTH | ||
IP6_NH | ||
IP6_HL_OUTER | ||
IP6_SRC | ||
IP6_DST | ||
TCP_SRC | ||
TCP_DST | ||
TCP_SN | tcp_lsb | 2 |
tcp_sn | 0 | |
TCP_ACK | tcp_lsb | 2 |
tcp_ack | 0 | |
TCP_OPTIONS | tcp_options | "False" |
TCP_CHECK | ||
TCP_URGENT | tcp_urgent | "False" |
This section illustrates the case of an company VPN. The VPN is typically set by a remote host that forwards all its traffic to the security gateway. As transport protocols are "Unspecified", compression is limited to ESP and the inner IP header. For the inner IP header, the Destination IP address is "Unspecified" so the compression of the inner IP address excludes the Destination IP address. Similarly, the inner IP Next Header cannot be compressed as the transport layer is not specified. For ESP, the security gateway may only have a sufficiently low number of remote users with relatively low throughput in which case SPI and SN can be compressed to 2 bytes. As throughput remains relatively low, the alignment may also set to 8 bits.
Figure 7 represents the original TCP packet with IPv6 inner IP addresses and Figure 8 represents the corresponding packet compressed with Diet-ESP. The compression with Diet-ESP results in a reduction of 32 bytes overhead. For IPv4 compression results in a 24 byte overhead compression.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- E| Security Parameters Index (SPI) | ^ S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | P| Sequence Number (SN) | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | IV | | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | I|version| traffic class | flow label |^ | P+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | v| payload length | next header | hop limit || | 6+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | || a | inner source IP || u | |e t | |n h +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+c e | |r n | inner destination IP |y t | |p i | |t c -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+e a T| source port | dest port |d t C+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| e P| Sequence Number (SN) || d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | ACK Sequence Number || | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | |Off. | Rserv | Flags | Window Size || | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | Checksum | Urgent Pointer || | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | || | ~ APPLICATION DATA ~| | | || | -| +-+-+-+-+-+-+-+-+| | E| | Padding || | S+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | P| Padding (continue) | Pad Length | Next Header |V V -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- | Integrity Check Value-ICV (variable) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 7: Standard ESP VPN Packet Description
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- | SPI | SN | ^ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | IV | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--| | Next Header | |^ | +-+-+-+-+-+-+-+-+ || | | || | | inner destination IP || | | || |a | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |u | | source port | dest. port ~|e|t +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|n|h ~ (continue) | TCP Sequence Number (SN) ~|c|e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|r|n ~ (continue) | Sequence Number (SN) ~|y|t +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|p|i ~ (continue) |Off. | Rserv | Flags | Window Size ~|t|c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|e|a ~ (continue) | Checksum | Urgent ~|d|t +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |e ~ Pointer | || |d +-+-+-+-+-+-+-+-+ || | ~ APPLICATION DATA ~| | | || | | |v v +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- | Integrity Check Value-ICV (variable) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 8: Diet-ESP VPN Packet Description
The following table illustrates the activated rules and the attributes of the Diet-ESP Context that needs an explicit agreement to achieve the compression. All other attributes used by the rules are part of the SA agreement. Parameters of not activated rules are left "Unspecified".
EHC Rule | Context Attribute | Value |
---|---|---|
ESP_SPI | esp_spi_lsb | 2 |
ESP_SN | esp_sn_lsb | 2 |
esp_sn_gen | "Incremental" | |
ESP_NH | ||
ESP_PAD | esp_align | 8 |
IP6_OUTER | ip6_tcfl_comp | "Outer" |
ip6_hl_comp | "Outer" | |
IP6_LENGTH | ||
IP6_HL_OUTER | ||
IP6_SRC |
EHC Rules for Header fields depends on the property of the given field. The complete classification for all supported protocols is provided in Appendix B The current classification is based on the classification provided by ROHC (see Appendix A of [RFC5225]). However, as EHC agrees on a context out of band, not all classifications provided by ROHC are necessary and classification may end up differently.
A key difference between ROHC and ESP Header Compression is that ESP needs an explicit agreement between the peers, whereas ROHC does not proceed to any out-of-band agreement. Instead ROHC learns some values by reading them from an initial packet. This learning phase is not anymore needed with ESP Header Compression as these fields can be agreed. For that reason fields classified as STATIC-DEF by ROHC becomes classified as STATIC-KNOWN for ESP Header Compression. In addition, the EHC classification also differs from the ROHC classification as EHC may be able to segment classes according to the ESP context. In that sense, EHC does not consider a single class - which is the one with the least constraints, as ROHC does. Instead, the EHC classification intends to associate the different classes to the ESP context.
EHC requires these four classes, in order to classify the different header fields:
This section details the classification for the currently supported protocol fields. Bbeing ESP encapsulated, a given field may end up with a different classification than without encapsulation. In order to point out these differences, this section also provides for information the classification provided by ROHC. In addition, given the context associated to ESP, a given field may be classified differently. In that case, the multiple classifications are mentioned.
This section provides a EHC classification for the fields of the ESP protocol.
Field | EHC Class | ROHC class |
---|---|---|
Security Policy Index | STATIC-KNOWN | STATIC-DEF |
Sequence Number | PATTERN | PATTERN |
Padding | INFERRED / STATIC-KNOWN | |
Pad Length | INFERRED / STATIC-KNOWN | |
Next Header | STATIC-KNOWN / IRREGULAR |
Fields Padding, Pad Length, Next Header were not classified by ROHC because, they could not be compressed by either ROHCoverIPsec or ROHC. ROHCoverIPsec compresses protocols encapsulated by ESP. These fields are part of ESP and so cannot be compressed by ROHCoverIPsec. ROHC compresses fields sent on the wire but these fields are encrypted by ESP and so cannot be compressed by ROHC.
In EHC, when present, Padding and Pad Length are INFERRED from the necessary protocol alignment, the cipher alignment and the ESP packet length before the encryption occurs. For packet with fixed size, these values will not changed during the session and as a result, may be classified as STATIC-KNOWN. Similarly, for some specific alignment values, such as 8 bit alignment, these fields may also have fixed values and thus may be classified as STATIC-KNOWN too.
Next Header is STATIC-KNOWN when it is part of the TS, in which case it has been agreed between the peers. Otherwise, NH is IRREGULAR and thus cannot be compressed.
This section provides a EHC classification for the fields of the IPv6 protocol. The IPv6 address only considers the inner IP header when used in conjunction of the tunnel mode.
Field | EHC Class | ROHC class |
---|---|---|
Version | STATIC-KNOWN | STATIC-KNOWN |
Traffic Class | STATIC-KNOWN / INFERRED / IRREGULAR | RACH |
Flow Label | STATIC-KNOWN / INFERRED / IRREGULAR | STATIC-DEF |
Payload Length | INFERRED | INFERRED |
Next Header | STATIC-KNOWN / IRREGULAR | STATIC-DEF |
Hop Limit | STATIC-KNOWN / INFERRED | RACH |
Source Address | STATIC-KNOWN | STATIC-DEF |
Destination Address | STATIC-KNOWN | STATIC-DEF |
Traffic Class, Flow Label, Hop Limit are STATIC-KNOWN when part of the TS, in which case it has been agreed between the peers in the EHC context. Alternatively, the inner IPv6 header is INFERRED from the outer IP header if the outer IP header is an IPv6 header. In any other cases, these fields are IRREGULAR.
Next Header is STATIC-KNOWN when it is part of the TS, in which case it has been agreed between the peers. Otherwise, NH is IRREGULAR and thus cannot be compressed.
This section provides a EHC classification for the fields of the IPv6 protocol. The IPv6 address only considers the inner IP header when used in conjunction of the tunnel mode.
Field | EHC Class | ROHC class |
---|---|---|
Version | STATIC-KNOWN | STATIC-KNOWN |
Header Length | ||
. Options enabled | IRREGULAR | RACH |
. Options disabled | STATIC-KNOWN | STATIC-KNOWN |
Type of Service | STATIC-KNOWN | RACH |
Total Length | INFERRED | INFERRED |
Identification | ||
. Sequential | PATTERN | PATTERN |
. Seq. swap | PATTERN | PATTERN |
. Random | IRREGULAR | IRREGULAR |
. Zero | STATIC-KNOWN | STATIC-KNOWN |
Flags | STATIC-KNOWN / IRREGULAR | |
. Reserved | STATIC-KNOWN | |
. Don't Fragment | RACH | |
. More Fragment | STATIC-KNOWN | |
Fragment offset | STATIC-KNOWN / IRREGULAR | STATIC-KNOWN |
Time To Live | STATIC-KNOWN / INFERRED | INFERRED |
Protocol | STATIC-KNOWN / IRREGULAR | STATIC-DEF |
Header Checksum | INFERRED | INFERRED |
Source Address | STATIC-KNOWN | STATIC-DEF |
Destination Address | STATIC-KNOWN | STATIC-DEF |
Options | IRREGULAR | |
Padding | IRREGULAR |
Version, Source and Destination Address and Protocol STATIC-KNOWN when part of the TS, in which case it has been agreed between the peers in the EHC context. Otherwise, they are IRREGULAR and thus cannot be compressed.
Traffic Class, Flow Label, Time To Live and Flags are STATIC-KNOWN if agreed between the two peers. Otherwise the inner IPv4 header may also be inferred from the outer IP header if the outer IP header is an IPv4 header. In any other cases, these fields are IRREGULAR.
Header Length depends on the options, thus when peers agree on disabling options, the Header Length becomes STATIC-KNOWN and IRREGULAR otherwise.
Type of Service (DSCP and ECN) are optional and may be disabled in which case they can be classified as STATIC-KNOWN.
Identification, Flags and Fragment Offset are used to deal with fragmentation. When fragmentation is disabled, these fields may be classified as STATIC-KNOWN. When fragmentation is actived, Identification may be classified as PATTERN or IRREGULAR. Flags or Fragment offset may be classified as IRREGULAR.
Type of Service, Options and Padding cannot be compressed in a static way without in-band signalling, thus they are classified as IRREGULAR.
This section provides an EHC classification for the fields of the UDP header.
Field | EHC Class | ROHC class |
---|---|---|
Source Port | STATIC-KNOWN / IRREGULAR | STATIC-DEF |
Destination Port | STATIC-KNOWN / IRREGULAR | STATIC-DEF |
Length | INFERRED | INFERRED |
Checksum | STATIC-KNOWN / INFERRED | STATIC, IRREGULAR |
Source and Destination Port are STATIC-KNOWN when part of the TS, in which case it has been agreed between the peers. Otherwise, they are IRREGULAR and thus cannot be compressed.
When peers have agreed to disable UDP checksum, the checksum is always zero and so its value is STATIC-KNOWN. Otherwise the checksum needs to be computed once the packet has been decompressed. UDP checksum can be computed as ESP provides an integrity check, thus the received packet is believed to be unchanged. Note also that integrity check does not enable error correction which CRC does, but in case of a bit error encryption will fail, thus this case is considered as irrelevant.
This section provides an EHC classification for the fields of the UDP-Lite header.
Field | EHC Class | ROHC class |
---|---|---|
Source Port | STATIC-KNOWN | STATIC-DEF |
Destination Port | STATIC-KNOWN | STATIC-DEF |
Checksum Coverage | STATIC-KNOWN / INFERRED / IRREGULAR | IRREGULAR |
Checksum | INFERRED | IRREGULAR |
See Appendix B.4 for classification of Source and Destination Port.
The Checksum Coverage is the part of the UDP-Lite packet, and indicates the number of bytes covered by the checksum. The minimal value is 8, which is the UDP-Lite Header. The maximum value is the size of the UDP-Lite packet, which means that the checksum is the same as in UDP. The Coverage can be agreed to be a fixed value or a value that is function of the total length o fthe UDP packet. In these cases, Coverage can be classified as STATIC-KNOWN or INFERRED. Otherwise it is classified as IRREGULAR.
In UDP-Lite the checksum cannot be disabled, but its coverage changes. Thus it will never appear as zero, but it can be INFERRED in every case, according to the value of Checksum Coverage.
This section provides an EHC classification for the fields of the TCP header.
Field | EHC Class | ROHC class RFC4413 |
---|---|---|
Source Port | STATIC-KNOWN | STATIC-DEF |
Destination Port | STATIC-KNOWN | STATIC-DEF |
Sequence Number | PATTERN | CHANGING |
Acknowledgement Number | PATTERN | CHANGING |
Data Offset | INFERRED | |
. Options enabled | IRREGULAR | |
. Options disabled | STATIC-KNOWN | |
Reserved Bits | IRREGULAR | CHANGING |
Flags | IRREGULAR | CHANGING |
Window | IRREGULAR | CHANGING |
Checksum | ||
. Disabled | STATIC-KNOWN | STATIC |
. Enabled | INFERRED | IRREGULAR |
Urgent Pointer | IRREGULAR | CHANGING |
Options | IRREGULAR | CHANGING |
See Appendix B.4 for classification of Source and Destination Port.
The TCP Sequence and Acknowledgement Number increase in a PATTERN but caused by the different TCP-Flags the increase is not performed in every packet.
Data Offset contains the length of the TCP header including the options. If options are agreed to be disabled it is STATIC-KNOWN. If Options are enabled it cannot be decompressed without in-band signalling, thus it is classified as IRREGULAR in that case.
See Appendix B.4 for the checksum classification.
Flags, Windows, Urgent Pointer and Options cannot be compressed without in-band signalling, thus classified as IRREGULAR in every case.
[draft-mglt-6lo-diet-esp-00.txt]:
Changing affiliation
[draft-mglt-6lo-diet-esp-00.txt]:
Updating references
[draft-mglt-ipsecme-diet-esp-01.txt]:
Diet ESP described in the ROHC framework
ESP is not modified.
[draft-mglt-ipsecme-diet-esp-00.txt]:
NAT consideration added.
Comparison actualized to new Version of 6LoWPAN ESP.
[draft-mglt-dice-diet-esp-00.txt]: First version published.