| < draft-ietf-lpwan-ipv6-static-context-hc-03.txt | draft-ietf-lpwan-ipv6-static-context-hc-04.txt > | |||
|---|---|---|---|---|
| lpwan Working Group A. Minaburo | lpwan Working Group A. Minaburo | |||
| Internet-Draft Acklio | Internet-Draft Acklio | |||
| Intended status: Informational L. Toutain | Intended status: Informational L. Toutain | |||
| Expires: November 6, 2017 IMT-Atlantique | Expires: December 18, 2017 IMT-Atlantique | |||
| C. Gomez | C. Gomez | |||
| Universitat Politecnica de Catalunya | Universitat Politecnica de Catalunya | |||
| May 05, 2017 | June 16, 2017 | |||
| LPWAN Static Context Header Compression (SCHC) and fragmentation for | LPWAN Static Context Header Compression (SCHC) and fragmentation for | |||
| IPv6 and UDP | IPv6 and UDP | |||
| draft-ietf-lpwan-ipv6-static-context-hc-03 | draft-ietf-lpwan-ipv6-static-context-hc-04 | |||
| Abstract | Abstract | |||
| This document describes a header compression scheme and fragmentation | This document describes a header compression scheme and fragmentation | |||
| functionality for IPv6/UDP protocols. These techniques are | functionality for very low bandwidth networks. These techniques are | |||
| especially tailored for LPWAN (Low Power Wide Area Network) networks | especially tailored for LPWAN (Low Power Wide Area Network) networks. | |||
| and could be extended to other protocol stacks. | ||||
| The Static Context Header Compression (SCHC) offers a great level of | The Static Context Header Compression (SCHC) offers a great level of | |||
| flexibility when processing the header fields. Static context means | flexibility when processing the header fields and must be used for | |||
| that information stored in the context which, describes field values, | this kind of networks. A common context stored in a LPWAN device and | |||
| does not change during the packet transmission, avoiding complex | in the network is used. This context stores information that will | |||
| not be transmitted in the constrained network. Static context means | ||||
| that information stored in the context which describes field values, | ||||
| does not change during packet transmission, avoiding complex | ||||
| resynchronization mechanisms, incompatible with LPWAN | resynchronization mechanisms, incompatible with LPWAN | |||
| characteristics. In most of the cases, IPv6/UDP headers are reduced | characteristics. In most of the cases, IPv6/UDP headers are reduced | |||
| to a small identifier. | to a small identifier called Rule ID. But sometimes the SCHC header | |||
| compression will not be enough to send the packet in one L2 PDU, so | ||||
| this document also describes a Fragmentation protocol that must be | ||||
| used when needed. | ||||
| This document describes the generic compression/decompression process | This document describes the generic compression/decompression | |||
| and applies it to IPv6/UDP headers. Similar mechanisms for other | mechanism and applies it to IPv6/UDP headers. Similar mechanisms for | |||
| protocols such as CoAP will be described in a separate document. | other protocols such as CoAP will be described in separate documents. | |||
| Moreover, this document specifies fragmentation and reassembly | Moreover, this document specifies fragmentation and reassembly | |||
| mechanims for SCHC compressed packets exceeding the L2 pdu size and | mechanims for SCHC compressed packets exceeding the L2 PDU size and | |||
| for the case where the SCHC compression is not possible then the | for the case where the SCHC compression is not possible then the | |||
| IPv6/UDP packet is sent. | IPv6/UDP packet is sent using the fragmentation protocol. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on November 6, 2017. | This Internet-Draft will expire on December 18, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Vocabulary . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. LPWAN Architecture . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Static Context Header Compression . . . . . . . . . . . . . . 5 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Rule ID . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Static Context Header Compression . . . . . . . . . . . . . . 6 | |||
| 3.2. Packet processing . . . . . . . . . . . . . . . . . . . . 7 | 4.1. SCHC Rules . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Matching operators . . . . . . . . . . . . . . . . . . . . . 8 | 4.2. Rule ID . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. Compression Decompression Actions (CDA) . . . . . . . . . . . 9 | 4.3. Packet processing . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1. not-sent CDA . . . . . . . . . . . . . . . . . . . . . . 10 | 5. Matching operators . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.2. value-sent CDA . . . . . . . . . . . . . . . . . . . . . 10 | 6. Compression Decompression Actions (CDA) . . . . . . . . . . . 11 | |||
| 5.3. mapping-sent . . . . . . . . . . . . . . . . . . . . . . 10 | 6.1. not-sent CDA . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.4. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.2. value-sent CDA . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.5. DEViid-DID, APPiid-DID CDA . . . . . . . . . . . . . . . 11 | 6.3. mapping-sent . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.6. Compute-* . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.4. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 6. Application to IPv6 and UDP headers . . . . . . . . . . . . . 11 | 6.5. DEViid, APPiid CDA . . . . . . . . . . . . . . . . . . . 13 | |||
| 6.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 11 | 6.6. Compute-* . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 6.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 12 | 7. Application to IPv6 and UDP headers . . . . . . . . . . . . . 14 | |||
| 6.3. Flow label field . . . . . . . . . . . . . . . . . . . . 12 | 7.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 14 | |||
| 6.4. Payload Length field . . . . . . . . . . . . . . . . . . 12 | 7.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 14 | |||
| 6.5. Next Header field . . . . . . . . . . . . . . . . . . . . 13 | 7.3. Flow label field . . . . . . . . . . . . . . . . . . . . 14 | |||
| 6.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . . 13 | 7.4. Payload Length field . . . . . . . . . . . . . . . . . . 15 | |||
| 6.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . . 13 | 7.5. Next Header field . . . . . . . . . . . . . . . . . . . . 15 | |||
| 6.7.1. IPv6 source and destination prefixes . . . . . . . . 13 | 7.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 6.7.2. IPv6 source and destination IID . . . . . . . . . . . 14 | 7.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . . 16 | |||
| 6.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . . 14 | 7.7.1. IPv6 source and destination prefixes . . . . . . . . 16 | |||
| 6.9. UDP source and destination port . . . . . . . . . . . . . 15 | 7.7.2. IPv6 source and destination IID . . . . . . . . . . . 16 | |||
| 6.10. UDP length field . . . . . . . . . . . . . . . . . . . . 15 | 7.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 6.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 15 | 7.9. UDP source and destination port . . . . . . . . . . . . . 17 | |||
| 7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 7.10. UDP length field . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7.1. IPv6/UDP compression . . . . . . . . . . . . . . . . . . 16 | 7.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . 18 | 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 18 | 8.1. IPv6/UDP compression . . . . . . . . . . . . . . . . . . 18 | |||
| 8.2. Reliability options: definition . . . . . . . . . . . . . 19 | 9. Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 8.3. Reliability options: discussion . . . . . . . . . . . . . 20 | 9.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 8.4. Fragment format . . . . . . . . . . . . . . . . . . . . . 21 | 9.2. Reliability options: definition . . . . . . . . . . . . . 22 | |||
| 8.5. Fragmentation header formats . . . . . . . . . . . . . . 22 | 9.3. Reliability options: discussion . . . . . . . . . . . . . 23 | |||
| 8.6. ACK format . . . . . . . . . . . . . . . . . . . . . . . 24 | 9.4. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8.7. Baseline mechanism . . . . . . . . . . . . . . . . . . . 25 | 9.5. Formats . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 8.8. Aborting a fragmented IPv6 datagram transmission . . . . 28 | 9.5.1. Fragment format . . . . . . . . . . . . . . . . . . . 24 | |||
| 8.9. Downlink fragment transmission . . . . . . . . . . . . . 28 | 9.5.2. Fragmentation header formats . . . . . . . . . . . . 24 | |||
| 9. Security considerations . . . . . . . . . . . . . . . . . . . 29 | 9.5.3. ACK format . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 9.1. Security considerations for header compression . . . . . 29 | 9.6. Baseline mechanism . . . . . . . . . . . . . . . . . . . 28 | |||
| 9.2. Security considerations for fragmentation . . . . . . . . 29 | 9.7. Supporting multiple window sizes . . . . . . . . . . . . 29 | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 | 9.8. Aborting fragmented IPv6 datagram transmissions . . . . . 30 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 9.9. Downlink fragment transmission . . . . . . . . . . . . . 30 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 30 | 10. Security considerations . . . . . . . . . . . . . . . . . . . 30 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 30 | 10.1. Security considerations for header compression . . . . . 30 | |||
| Appendix A. Fragmentation examples . . . . . . . . . . . . . . . 30 | 10.2. Security considerations for fragmentation . . . . . . . 31 | |||
| Appendix B. Note . . . . . . . . . . . . . . . . . . . . . . . . 35 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 32 | ||||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 32 | ||||
| Appendix A. Fragmentation examples . . . . . . . . . . . . . . . 32 | ||||
| Appendix B. Rule IDs for fragmentation . . . . . . . . . . . . . 35 | ||||
| Appendix C. Note . . . . . . . . . . . . . . . . . . . . . . . . 36 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 | ||||
| 1. Introduction | 1. Introduction | |||
| Header compression is mandatory to efficiently bring Internet | Header compression is mandatory to efficiently bring Internet | |||
| connectivity to the node within a LPWAN network | connectivity to the node within a LPWAN network. Some LPWAN networks | |||
| [I-D.minaburo-lp-wan-gap-analysis]. | properties can be exploited for an efficient header compression: | |||
| Some LPWAN networks properties can be exploited for an efficient | ||||
| header compression: | ||||
| o Topology is star oriented, therefore all the packets follow the | o Topology is star-oriented, therefore all the packets follow the | |||
| same path. For the needs of this draft, the architecture can be | same path. For the needs of this draft, the architecture can be | |||
| summarized to Devices (DEV) exchanging information with LPWAN | summarized to Devices (Dev) exchanging information with LPWAN | |||
| Application Server (APP) through a Network Gateway (NGW). | Application Server (App) through a Network Gateway (NGW). | |||
| o Traffic flows are mostly known in advance, since devices embed | o Traffic flows are mostly known in advance, since devices embed | |||
| built-in applications. Contrary to computers or smartphones, new | built-in applications. Contrary to computers or smartphones, new | |||
| applications cannot be easily installed. | applications cannot be easily installed. | |||
| The Static Context Header Compression (SCHC) is defined for this | The Static Context Header Compression (SCHC) is defined for this | |||
| environment. SCHC uses a context where header information is kept in | environment. SCHC uses a context where header information is kept in | |||
| order. This context is static (the values on the header fields do | the header format order. This context is static (the values on the | |||
| not change during time) avoiding complex resynchronization | header fields do not change over time) avoiding complex | |||
| mechanisms, incompatible with LPWAN characteristics. In most of the | resynchronization mechanisms, incompatible with LPWAN | |||
| cases, IPv6/UDP headers are reduced to a small context identifier. | characteristics. In most of the cases, IPv6/UDP headers are reduced | |||
| to a small context identifier. | ||||
| The SCHC header compression is indedependent of the specific LPWAN | The SCHC header compression mechanism is independent of the specific | |||
| technology over which it will be used. | LPWAN technology over which it will be used. | |||
| On the other hand, LPWAN technologies are characterized, among | LPWAN technologies are also characterized, among others, by a very | |||
| others, by a very reduced data unit and/or payload size | reduced data unit and/or payload size [I-D.ietf-lpwan-overview]. | |||
| [I-D.ietf-lpwan-overview]. However, some of these technologies do | However, some of these technologies do not support layer two | |||
| not support layer two fragmentation, therefore the only option for | fragmentation, therefore the only option for these to support the | |||
| these to support the IPv6 MTU requirement of 1280 bytes [RFC2460] is | IPv6 MTU requirement of 1280 bytes [RFC2460] is the use of a | |||
| the use of a fragmentation mechanism at the adaptation layer below | fragmentation protocol at the adaptation layer below IPv6. This | |||
| IPv6. This specification defines fragmentation functionality to | draft defines also a fragmentation functionality to support the IPv6 | |||
| support the IPv6 MTU requirements over LPWAN technologies. Such | MTU requirements over LPWAN technologies. Such functionality has | |||
| functionality has been designed under the assumption that data unit | been designed under the assumption that data unit reordering will not | |||
| reordering will not happen between the entity performing | happen between the entity performing fragmentation and the entity | |||
| fragmentation and the entity performing reassembly. | performing reassembly. | |||
| 2. Vocabulary | 2. LPWAN Architecture | |||
| LPWAN technologies have similar architectures but different | ||||
| terminology. We can identify different types of entities in a | ||||
| typical LPWAN network, see Figure 1: | ||||
| o Devices (Dev) are the end-devices or hosts (e.g. sensors, | ||||
| actuators, etc.). There can be a high density of devices per radio | ||||
| gateway. | ||||
| o The Radio Gateway (RG), which is the end point of the constrained | ||||
| link. | ||||
| o The Network Gateway (NGW) is the interconnection node between the | ||||
| Radio Gateway and the Internet. | ||||
| o LPWAN-AAA Server, which controls the user authentication, the | ||||
| applications. We use the term LPWAN-AAA server because we are not | ||||
| assuming that this entity speaks RADIUS or Diameter as many/most AAA | ||||
| servers do, but equally we don't want to rule that out, as the | ||||
| functionality will be similar. | ||||
| o Application Server (App) | ||||
| +------+ | ||||
| () () () | |LPWAN-| | ||||
| () () () () / \ +---------+ | AAA | | ||||
| () () () () () () / \=======| ^ |====|Server| +-----------+ | ||||
| () () () | | <--|--> | +------+ |APPLICATION| | ||||
| () () () () / \============| v |==============| (App) | | ||||
| () () () / \ +---------+ +-----------+ | ||||
| Dev Radio Gateways NGW | ||||
| Figure 1: LPWAN Architecture | ||||
| 3. Terminology | ||||
| This section defines the terminology and acronyms used in this | This section defines the terminology and acronyms used in this | |||
| document. | document. | |||
| o CDA: Compression/Decompression Action. An action that is perfomed | o CDA: Compression/Decompression Action. An action that is perfomed | |||
| for both functionnalities to compress a header field or to recover | for both functionnalities to compress a header field or to recover | |||
| its original value in the decompression phase. | its original value in the decompression phase. | |||
| o Context: A set of rules used to compress/decompress headers | o Context: A set of rules used to compress/decompress headers | |||
| o DEV: Device. Node connected to the LPWAN. A DEV may implement | o Dev: Device. Node connected to the LPWAN. A Dev may implement | |||
| SCHC. | SCHC. | |||
| o APP: LPWAN Application. An application sending/consuming IPv6 | o App: LPWAN Application. An application sending/receiving IPv6 | |||
| packets to/from the Device. | packets to/from the Device. | |||
| o SCHC C/D: LPWAN Compressor/Decompressor. A process in the network | o SCHC C/D: LPWAN Compressor/Decompressor. A process in the network | |||
| to achieve compression/decompressing headers. SCHC C/D uses SCHC | to achieve compression/decompressing headers. SCHC C/D uses SCHC | |||
| rules to perform compression and decompression. | rules to perform compression and decompression. | |||
| o MO: Matching Operator. An operator used to compare a value | o MO: Matching Operator. An operator used to match a value | |||
| contained in a header field with a value contained in a rule. | contained in a header field with a value contained in a Rule. | |||
| o Rule: A set of header field values. | o Rule: A set of header field values. | |||
| o Rule ID: An identifier for a rule, SCHC C/D and DEV share the same | o Rule ID: An identifier for a rule, SCHC C/D and Dev share the same | |||
| rule ID for a specific flow. Rule ID is sent on the LPWAN. | Rule ID for a specific flow. | |||
| o TV: Target value. A value contained in the rule that will be | o TV: Target value. A value contained in the Rule that will be | |||
| matched with the value of a header field. | matched with the value of a header field. | |||
| 3. Static Context Header Compression | o FID: Field Indentifier is an index to describe the header fields | |||
| in the Rule | ||||
| o FP: Field Position is a list of possible correct values that a | ||||
| field may use | ||||
| o DI: Direction Indicator is a differentiator for matching in order | ||||
| to be able to have different values for both sides. | ||||
| o IID: Interface Identifier. See the IPv6 addressing architecture | ||||
| [RFC7136] | ||||
| o Dev-IID: Device Interface Identifier. Second part of the IPv6 | ||||
| address to identify the device interface | ||||
| o APP-IID: Application Interface Identifier. Second part of the | ||||
| IPv6 address to identify the application interface | ||||
| o Dw: Down Link direction for compression, from SCHC C/D to Dev | ||||
| o Up: Up Link direction for compression, from Dev to SCHC C/D | ||||
| o Bi: Bidirectional, it can be used in both senses | ||||
| 4. Static Context Header Compression | ||||
| Static Context Header Compression (SCHC) avoids context | Static Context Header Compression (SCHC) avoids context | |||
| synchronization, which is the most bandwidth-consuming operation in | synchronization, which is the most bandwidth-consuming operation in | |||
| other header compression mechanisms such as RoHC. Based on the fact | other header compression mechanisms such as RoHC [RFC5795]. Based on | |||
| that the nature of data flows is highly predictable in LPWAN | the fact that the nature of data flows is highly predictable in LPWAN | |||
| networks, a static context may be stored on the Device (DEV). The | networks, a static context may be stored on the Device (Dev). The | |||
| context must be stored in both ends. It can also be learned by using | context must be stored in both ends, and it can either be learned by | |||
| a provisionning protocol that is out of the scope of this draft. | a provisioning protocol or by out of band means or it can be pre- | |||
| provosioned, etc. The way the context is learned on both sides is | ||||
| out of the scope of this document. | ||||
| DEVICE Appl Servers | Dev App | |||
| +---------------+ +---------------+ | +---------------+ +---------------+ | |||
| | APP1 APP2 APP3| |APP1 APP2 APP3| | | APP1 APP2 APP3| |APP1 APP2 APP3| | |||
| | | | | | | | | | | |||
| | UDP | | UDP | | | UDP | | UDP | | |||
| | IPv6 | | IPv6 | | | IPv6 | | IPv6 | | |||
| | | | | | | | | | | |||
| | SCHC C/D | | | | | SCHC C/D | | | | |||
| | (context) | | | | | (context) | | | | |||
| +--------+------+ +-------+-------+ | +--------+------+ +-------+-------+ | |||
| | +--+ +----+ +---------+ . | | +--+ +----+ +---------+ . | |||
| +~~ |RG| === |NGW | === |SCHC C/D |... Internet ... | +~~ |RG| === |NGW | === |SCHC C/D |... Internet ... | |||
| +--+ +----+ |(context)| | +--+ +----+ |(context)| | |||
| +---------+ | +---------+ | |||
| Figure 1: Architecture | Figure 2: Architecture | |||
| Figure 1 based on [I-D.ietf-lpwan-overview] terminology represents | Figure 2 based on [I-D.ietf-lpwan-overview] terminology represents | |||
| the architecture for compression/decompression. The Device is | the architecture for compression/decompression. The Device is | |||
| running applications which produce IPv6 or IPv6/UDP flows. These | sending applications flows using IPv6 or IPv6/UDP protocols. These | |||
| flows are compressed by an Static Context Header Compression | flows are compressed by an Static Context Header Compression | |||
| Compressor/Decompressor (SCHC C/D) to reduce the headers size. | Compressor/Decompressor (SCHC C/D) to reduce headers size. Resulting | |||
| Resulting information is sent on a layer two (L2) frame to the LPWAN | information is sent on a layer two (L2) frame to the LPWAN Radio | |||
| Radio Network to a Radio Gateway (RG) which forwards the frame to a | Network to a Radio Gateway (RG) which forwards the frame to a Network | |||
| Network Gateway (NGW). The NGW sends the data to a SCHC C/D for | Gateway (NGW). The NGW sends the data to a SCHC C/D for | |||
| decompression which shares the same rules with the DEV. The SCHC C/D | decompression which shares the same rules with the Dev. The SCHC C/D | |||
| can be located on the Network Gateway (NGW) or in another places if a | can be located on the Network Gateway (NGW) or in another place as | |||
| tunnel is established between the NGW and the SCHC C/D. This | long as a tunnel is established between the NGW and the SCHC C/D. | |||
| architecture forms a star topology. After decompression, the packet | SCHC C/D in both sides must share the same set of Rules. After | |||
| can be sent on the Internet to one or several LPWAN Application | decompression, the packet can be sent on the Internet to one or | |||
| Servers (APP). | several LPWAN Application Servers (App). | |||
| The principle is exactly the same in the other direction. | The SCHC C/D process is bidirectional, so the same principles can be | |||
| applied in the other direction. | ||||
| The context contains a list of rules (cf. Figure 2). Each rule | 4.1. SCHC Rules | |||
| The main idea of the SCHC compression scheme is to send the Rule id | ||||
| to the other end that match as much as possible the original packet | ||||
| values instead of sending known field values. When a value is known | ||||
| by both ends, it is not necessary sent through the LPWAN network. | ||||
| The context contains a list of rules (cf. Figure 3). Each Rule | ||||
| contains itself a list of fields descriptions composed of a field | contains itself a list of fields descriptions composed of a field | |||
| identifier (FID), a field position (FP), a direction indicator (DI), | identifier (FID), a field position (FP), a direction indicator (DI), | |||
| a target value (TV), a matching operator (MO) and a Compression/ | a target value (TV), a matching operator (MO) and a Compression/ | |||
| Decompression Action (CDA). | Decompression Action (CDA). | |||
| /----------------------------------------------------------------\ | /--------------------------------------------------------------\ | |||
| | Rule N | | | Rule N | | |||
| /----------------------------------------------------------------\| | /--------------------------------------------------------------\| | |||
| | Rule i || | | Rule i || | |||
| /----------------------------------------------------------------\|| | /--------------------------------------------------------------\|| | |||
| | (FID) Rule 1 ||| | | (FID) Rule 1 ||| | |||
| |+-------+---+---+------------+-----------------+---------------+||| | |+-------+--+--+------------+-----------------+---------------+||| | |||
| ||Field 1|Pos|Dir|Target Value|Matching Operator|Comp/Decomp Act|||| | ||Field 1|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|||| | |||
| |+-------+---+---+------------+-----------------+---------------+||| | |+-------+--+--+------------+-----------------+---------------+||| | |||
| ||Field 2|Pos|Dir|Target Value|Matching Operator|Comp/Decomp Act|||| | ||Field 2|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|||| | |||
| |+-------+---+---+------------+-----------------+---------------+||| | |+-------+--+--+------------+-----------------+---------------+||| | |||
| ||... |...|...| ... | ... | ... |||| | ||... |..|..| ... | ... | ... |||| | |||
| |+-------+---+---+------------+-----------------+---------------+||/ | |+-------+--+--+------------+-----------------+---------------+||/ | |||
| ||Field N|Pos|Dir|Target Value|Matching Operator|Comp/Decomp Act||| | ||Field N|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||| | |||
| |+-------+---+---+------------+-----------------+---------------+|/ | |+-------+--+--+------------+-----------------+---------------+|/ | |||
| | | | | | | |||
| \----------------------------------------------------------------/ | \--------------------------------------------------------------/ | |||
| Figure 2: Compression Decompression Context | Figure 3: Compression/Decompression Context | |||
| The rule does not describe the original packet format which must be | The Rule does not describe the original packet format which must be | |||
| known from the compressor/decompressor. The rule just describes the | known from the compressor/decompressor. The rule just describes the | |||
| compression/decompression behavior for the header fields. In the | compression/decompression behavior for the header fields. In the | |||
| rule, the description of the header field must be done in the same | rule, the description of the header field must be performed in the | |||
| order they appear in the packet. | format packet order. | |||
| On the other hand, the rule describes the compressed header which are | The Rule describes also the compressed header fields which are | |||
| transmitted regarding their position in the rule which is used for | transmitted regarding their position in the rule which is used for | |||
| data serialization on the compressor side and data deserialization on | data serialization on the compressor side and data deserialization on | |||
| the decompressor side. | the decompressor side. | |||
| The main idea of the compression scheme is to send the rule id to the | The Context describes the header fields and its values with the | |||
| other end instead of known field values. When a value is known by | following entries: | |||
| both ends, it is not necessary to send it on the LPWAN network. | ||||
| The field description is composed of different entries: | ||||
| o A Field ID (FID) is a unique value to define the field. | o A Field ID (FID) is a unique value to define the header field. | |||
| o A Field Position (FP) indicating if several instances of the field | o A Field Position (FP) indicating if several instances of the field | |||
| exist in the headers which one is targeted. | exist in the headers which one is targeted. The default position | |||
| is 1 | ||||
| o A direction indicator (DI) indicating the packet direction. Three | o A direction indicator (DI) indicating the packet direction. Three | |||
| values are possible: | values are possible: | |||
| * upstream when the field or the value is only present in packets | * UP LINK (Up) when the field or the value is only present in | |||
| sent by the DEV to the APP, | packets sent by the Dev to the App, | |||
| * downstream when the field or the value is only present in | * DOWN LINK (Dw) when the field or the value is only present in | |||
| packet sent from the APP to the DEV and | packet sent from the App to the Dev and | |||
| * bi-directional when the field or the value is present either | * BIDIRECTIONAL (Bi) when the field or the value is present | |||
| upstream or downstream. | either upstream or downstream. | |||
| o A Target Value (TV) is the value used to make the comparison with | o A Target Value (TV) is the value used to make the comparison with | |||
| the packet header field. The Target Value can be of any type | the packet header field. The Target Value can be of any type | |||
| (integer, strings,...). It can be a single value or a more | (integer, strings,...). For instance, it can be a single value or | |||
| complex structure (array, list,...). It can be considered as a | a more complex structure (array, list,...), such as a JSON or a | |||
| CBOR structure. | CBOR structure. | |||
| o A Matching Operator (MO) is the operator used to make the | o A Matching Operator (MO) is the operator used to make the | |||
| comparison between the field value and the Target Value. The | comparison between the Field Value and the Target Value. The | |||
| Matching Operator may require some parameters, which can be | Matching Operator may require some parameters. MO is only used | |||
| considered as a CBOR structure. MO is only used during the | during the compression phase. | |||
| compression phase. | ||||
| o A Compression Decompression Action (CDA) is used to describe the | o A Compression Decompression Action (CDA) is used to describe the | |||
| compression and the decompression process. The CDA may require | compression and the decompression process. The CDA may require | |||
| some parameters, which can be considered as a CBOR structure. | some parameters, CDA are used in both compression and | |||
| decompression phases. | ||||
| 3.1. Rule ID | 4.2. Rule ID | |||
| Rule IDs are sent between both compression/decompression elements. | Rule IDs are sent between both compression/decompression elements. | |||
| The size of the rule ID is not specified in this document and can | The size of the Rule ID is not specified in this document, it is | |||
| vary regarding the LPWAN technology, the number of flows,... | implementation-specific and can vary regarding the LPWAN technology, | |||
| the number of flows, among others. | ||||
| Some values in the rule ID space may be reserved for goals other than | Some values in the Rule ID space may be reserved for goals other than | |||
| header compression, for example fragmentation. | header compression as fragmentation. (See Section 9). | |||
| Rule IDs are specific to a DEV. Two DEVs may use the same rule ID | Rule IDs are specific to a Dev. Two Devs may use the same Rule ID for | |||
| for different header compression. The SCHC C/D needs to combine the | different header compression. To identify the correct Rule ID, the | |||
| rule ID with the DEV L2 address to find the appropriate rule. | SCHC C/D needs to combine the Rule ID with the Dev L2 identifier to | |||
| find the appropriate Rule. | ||||
| 3.2. Packet processing | 4.3. Packet processing | |||
| The compression/decompression process follows several steps: | The compression/decompression process follows several steps: | |||
| o compression rule selection: the goal is to identify which rule(s) | o compression Rule selection: The goal is to identify which Rule(s) | |||
| will be used to compress the headers. Each field is associated to | will be used to compress the packet's headers. When doing | |||
| a matching operator for compression. Each header field's value is | compression from Dw to Up the SCHC C/D needs to find the correct | |||
| compared to the corresponding target value stored in the rule for | Rule to use by identifying its Dev-ID and the Rule-ID. In the Up | |||
| that field using the matching operator. This comparison includes | situation only the Rule-ID is used. The next step is to choose | |||
| the direction indicator and the field position in the header. If | the fields by their direction, using the direction indicator (DI), | |||
| all the fields in the packet's header satisfy all the matching | so the fields that does not correspond to the appropiated DI will | |||
| operators (excluding unappropriate direction or position) of a | be excluded. Next, then fields are identified according to their | |||
| rule, the packet is processed using Compression Decompression | field identifier (FID) and field position (FP). If the field | |||
| Function associated with the fields. Otherwise the next rule is | position does not correspond then the Rule is not use and the SCHC | |||
| tested. If no eligible rule is found, then the packet is sent | take next Rule. Once the DI and the FP correspond to the header | |||
| without compression, which may require using the fragmentation | information, each field's value is then compared to the | |||
| procedure. | corresponding target value (TV) stored in the Rule for that | |||
| specific field using the matching operator (MO). If all the | ||||
| In the downstrean direction, the rule is also used to find the | fields in the packet's header satisfy all the matching operators | |||
| device ID. | (MOs) of a Rule (i.e. all results are True), the fields of the | |||
| header are then processed according to the Compression/ | ||||
| Decompession Actions (CDAs) and a compressed header is obtained. | ||||
| Otherwise the next rule is tested. If no eligible rule is found, | ||||
| then the header must be sent without compression, in which case | ||||
| the fragmentation process must be required. | ||||
| o sending: The rule ID is sent to the other end followed by | o sending: The Rule ID is sent to the other end followed by | |||
| information resulting from the compression of header fields. This | information resulting from the compression of header fields. This | |||
| information is sent in the order expressed in the rule for the | information is sent in the order expressed in the Rule for the | |||
| matching fields. The way the rule ID is sent depends on the layer | matching fields. The way the Rule ID is sent depends on the | |||
| two technology and will be specified in a specific document. For | specific LPWAN layer two technology and will be specified in a | |||
| example, it can either be included in a Layer 2 header or sent in | specific document, and is out of the scope of this document. For | |||
| the first byte of the L2 payload. (cf. Figure 3) | example, it can be either included in a Layer 2 header or sent in | |||
| the first byte of the L2 payload. (cf. Figure 4). | ||||
| o decompression: The receiver identifies the sender through its | o decompression: In both directions, The receiver identifies the | |||
| device-id (e.g. MAC address) and selects the appropriate rule | sender through its device-id (e.g. MAC address) and selects the | |||
| through the rule ID. This rule gives the compressed header format | appropriate Rule through the Rule ID. This Rule gives the | |||
| and associates these values to header fields. It applies the CDA | compressed header format and associates these values to header | |||
| action to reconstruct the original header fields. The CDA order | fields. It applies the CDA action to reconstruct the original | |||
| can be different of the order given by the rule. For instance | header fields. The CDA application order can be different of the | |||
| Compute-* may be applied after the other CDAs. | order given by the Rule. For instance Compute-* may be applied at | |||
| end, after the other CDAs. | ||||
| +--- ... ---+-------------- ... --------------+ | +--- ... ---+-------------- ... --------------+ | |||
| | Rule ID |Compressed Hdr Fields information| | | Rule ID |Compressed Hdr Fields information| | |||
| +--- ... ---+-------------- ... --------------+ | +--- ... ---+-------------- ... --------------+ | |||
| Figure 3: LPWAN Compressed Format Packet | Figure 4: LPWAN Compressed Format Packet | |||
| 4. Matching operators | 5. Matching operators | |||
| This document describes basic matching operators (MO)s which must be | Matching Operators (MOs) are functions used by both SCHC C/D | |||
| known by both SCHC C/D, endpoints involved in the header compression/ | endpoints involved in the header compression/decompression. They are | |||
| decompression. They are not typed and can be applied indifferently | not typed and can be applied indifferently to integer, string or any | |||
| to integer, string or any other type. The MOs and their definitions | other data type. The result of the operation can either be True or | |||
| are provided next: | False. MOs are defined as follows: | |||
| o equal: a field value in a packet matches with a field value in a | o equal: A field value in a packet matches with a TV in a Rule if | |||
| rule if they are equal. | they are equal. | |||
| o ignore: no check is done between a field value in a packet and a | o ignore: No check is done between a field value in a packet and a | |||
| field value in the rule. The result of the matching is always | TV in the Rule. The result of the matching is always true. | |||
| true. | ||||
| o MSB(length): a field value of a size equal to "length" bits in a | o MSB(length): A matching is obtained if the most significant bits | |||
| packet matches with a field value in a rule if the most | of the length field value bits of the header are equal to the TV | |||
| significant "length" bits are equal. | in the rule. The MSB Matching Operator needs a parameter, | |||
| indicating the number of bits, to proceed to the matching. | ||||
| o match-mapping: The goal of mapping-sent is to reduce the size of a | o match-mapping: The goal of mapping-sent is to reduce the size of a | |||
| field by allocating a shorter value. The Target Value contains a | field by allocating a shorter value. The Target Value contains a | |||
| list of pairs. Each pair is composed of a value and a short ID | list of values. Each value is idenfied by a short ID (or index). | |||
| (or index). This operator matches if a field value is equal to | This operator matches if a field value is equal to one of those | |||
| one of the pairs' values. | target values. | |||
| Matching Operators and match-mapping needs a parameter to proceed to | ||||
| the matching. Match-mapping requires a list of values associated to | ||||
| an index and MSB requires an integer indicating the number of bits to | ||||
| test. | ||||
| 5. Compression Decompression Actions (CDA) | 6. Compression Decompression Actions (CDA) | |||
| The Compression Decompression Actions (CDA) describes the action | The Compression Decompression Actions (CDA) describes the action | |||
| taken during the compression of headers fields, and inversely, the | taken during the compression of headers fields, and inversely, the | |||
| action taken by the decompressor to restore the original value. | action taken by the decompressor to restore the original value. | |||
| /--------------------+-------------+----------------------------\ | /--------------------+-------------+----------------------------\ | |||
| | Action | Compression | Decompression | | | Action | Compression | Decompression | | |||
| | | | | | | | | | | |||
| +--------------------+-------------+----------------------------+ | +--------------------+-------------+----------------------------+ | |||
| |not-sent |elided |use value stored in ctxt | | |not-sent |elided |use value stored in ctxt | | |||
| |value-sent |send |build from received value | | |value-sent |send |build from received value | | |||
| |mapping-sent |send index |value from index on a table | | |mapping-sent |send index |value from index on a table | | |||
| |LSB(length) |send LSB |ctxt value OR rcvd value | | |LSB(length) |send LSB |TV OR received value | | |||
| |compute-length |elided |compute length | | |compute-length |elided |compute length | | |||
| |compute-checksum |elided |compute UDP checksum | | |compute-checksum |elided |compute UDP checksum | | |||
| |DEViid-DID |elided |build IID from L2 DEV addr | | |Deviid |elided |build IID from L2 Dev addr | | |||
| |APPiid-DID |elided |build IID from L2 APP addr | | |Appiid |elided |build IID from L2 App addr | | |||
| \--------------------+-------------+----------------------------/ | \--------------------+-------------+----------------------------/ | |||
| Figure 4: Compression and Decompression Functions | Figure 5: Compression and Decompression Functions | |||
| Figure 4 sumarizes the functions defined to compress and decompress a | Figure 5 sumarizes the basics functions defined to compress and | |||
| field. The first column gives the action's name. The second and | decompress a field. The first column gives the action's name. The | |||
| third columns outlines the compression/decompression behavior. | second and third columns outlines the compression/decompression | |||
| behavior. | ||||
| Compression is done in the rule order and compressed values are sent | Compression is done in the rule order and compressed values are sent | |||
| in that order in the compressed message. The receiver must be able | in that order in the compressed message. The receiver must be able | |||
| to find the size of each compressed field which can be given by the | to find the size of each compressed field which can be given by the | |||
| rule or may be sent with the compressed header. | rule or may be sent with the compressed header. | |||
| 5.1. not-sent CDA | If the field is identified as variable, then its size must be sent | |||
| first using the following coding: | ||||
| o If the size is between 0 and 14 bytes it is sent using 4 bits. | ||||
| o For values between 15 and 255, the first 4 bit sent are set to 1 | ||||
| and the size is sent using 8 bits. | ||||
| o For higher value, the first 12 bytes are set to 1 and the size is | ||||
| sent on 2 bytes. | ||||
| 6.1. not-sent CDA | ||||
| Not-sent function is generally used when the field value is specified | Not-sent function is generally used when the field value is specified | |||
| in the rule and therefore known by the both Compressor and | in the rule and therefore known by the both Compressor and | |||
| Decompressor. This action is generally used with the "equal" MO. If | Decompressor. This action is generally used with the "equal" MO. If | |||
| MO is "ignore", there is a risk to have a decompressed field value | MO is "ignore", there is a risk to have a decompressed field value | |||
| different from the compressed field. | different from the compressed field. | |||
| The compressor does not send any value on the compressed header for | The compressor does not send any value on the compressed header for | |||
| that field on which compression is applied. | the field on which compression is applied. | |||
| The decompressor restores the field value with the target value | The decompressor restores the field value with the target value | |||
| stored in the matched rule. | stored in the matched rule. | |||
| 5.2. value-sent CDA | 6.2. value-sent CDA | |||
| The value-sent action is generally used when the field value is not | The value-sent action is generally used when the field value is not | |||
| known by both Compressor and Decompressor. The value is sent in the | known by both Compressor and Decompressor. The value is sent in the | |||
| compressed message header. Both Compressor and Decompressor must | compressed message header. Both Compressor and Decompressor must | |||
| know the size of the field, either implicitly (the size is known by | know the size of the field, either implicitly (the size is known by | |||
| both sides) or explicitly in the compressed header field by | both sides) or explicitly in the compressed header field by | |||
| indicating the length. This function is generally used with the | indicating the length. This function is generally used with the | |||
| "ignore" MO. | "ignore" MO. | |||
| The compressor sends the Target Value stored on the rule in the | The compressor sends the Target Value stored on the rule in the | |||
| compressed header message. The decompressor restores the field value | compressed header message. The decompressor restores the field value | |||
| with the one received from the LPWAN | with the one received from the LPWAN | |||
| 5.3. mapping-sent | 6.3. mapping-sent | |||
| mapping-sent is used to send a smaller index associated to the field | mapping-sent is used to send a smaller index associated to the list | |||
| value in the Target Value. This function is used together with the | of values in the Target Value. This function is used together with | |||
| "match-mapping" MO. | the "match-mapping" MO. | |||
| The compressor looks in the TV to find the field value and send the | The compressor looks in the TV to find the field value and send the | |||
| corresponding index. The decompressor uses this index to restore the | corresponding index. The decompressor uses this index to restore the | |||
| field value. | field value. | |||
| The number of bit sent is the minimal number to code all the indexes. | The number of bits sent is the minimal size to code all the possible | |||
| indexes. | ||||
| 5.4. LSB CDA | ||||
| LSB action is used to send a fixed part of the packet field header to | 6.4. LSB CDA | |||
| the other end. This action is used together with the "MSB" MO. A | ||||
| length can be specified to indicate how many bits have to be sent. | ||||
| If not length is specified, the number of bit sent are the field | LSB action is used to avoid sendind the known part of the packet | |||
| length minus the bit length specified in the MSB MO. | field header to the other end. This action is used together with the | |||
| "MSB" MO. A length can be specified in the rule to indicate how many | ||||
| bits have to be sent. If not length is specified, the number of bits | ||||
| sent are the field length minus the bits length specified in the MSB | ||||
| MO. | ||||
| The compressor sends the "length" Least Significant Bits. The | The compressor sends the "length" Least Significant Bits. The | |||
| decompressor combines with an OR operator the value received with the | decompressor combines the value received with the Target Value. | |||
| Target Value. | ||||
| 5.5. DEViid-DID, APPiid-DID CDA | If this action is made on a variable length field, the remaning size | |||
| in byte has to be sent before. | ||||
| These functions are used to process respectively the Device and the | 6.5. DEViid, APPiid CDA | |||
| Application Device Identifier (DID). APPiid-DID CDA is less common, | ||||
| since current LPWAN technologies frames contain a single address. | ||||
| The IID value is computed from the Device ID present in the Layer 2 | These functions are used to process respectively the Dev and the App | |||
| header. The computation depends on the technology and the Device ID | Interface Identifiers (Deviid and Appiid) of the IPv6 addresses. | |||
| size. | Appiid CDA is less common, since current LPWAN technologies frames | |||
| contain a single address. | ||||
| The IID value can be computed from the Device ID present in the Layer | ||||
| 2 header. The computation is specific for each LPWAN technology and | ||||
| depends on the Device ID size. | ||||
| In the downstream direction, these CDA are used to determine the L2 | In the downstream direction, these CDA are used to determine the L2 | |||
| addresses used by the LPWAN. | addresses used by the LPWAN. | |||
| 5.6. Compute-* | 6.6. Compute-* | |||
| These functions are used by the decompressor to compute the | Thes classes of functions are used by the decompressor to compute the | |||
| compressed field value based on received information. Compressed | compressed field value based on received information. Compressed | |||
| fields are elided during the compression and reconstructed during the | fields are elided during compression and reconstructed during | |||
| decompression. | decompression. | |||
| o compute-length: compute the length assigned to this field. For | o compute-length: compute the length assigned to this field. For | |||
| instance, regarding the field ID, this CDA may be used to compute | instance, regarding the field ID, this CDA may be used to compute | |||
| IPv6 length or UDP length. | IPv6 length or UDP length. | |||
| o compute-checksum: compute a checksum from the information already | o compute-checksum: compute a checksum from the information already | |||
| received by the SCHC C/D. This field may be used to compute UDP | received by the SCHC C/D. This field may be used to compute UDP | |||
| checksum. | checksum. | |||
| 6. Application to IPv6 and UDP headers | 7. Application to IPv6 and UDP headers | |||
| This section lists the different IPv6 and UDP header fields and how | This section lists the different IPv6 and UDP header fields and how | |||
| they can be compressed. | they can be compressed. | |||
| 6.1. IPv6 version field | 7.1. IPv6 version field | |||
| This field always holds the same value, therefore the TV is 6, the MO | This field always holds the same value, therefore the TV is 6, the MO | |||
| is "equal" and the CDA "not-sent". | is "equal" and the "CDA "not-sent"". | |||
| 6.2. IPv6 Traffic class field | 7.2. IPv6 Traffic class field | |||
| If the DiffServ field identified by the rest of the rule do not vary | If the DiffServ field identified by the rest of the rule do not vary | |||
| and is known by both sides, the TV should contain this wellknown | and is known by both sides, the TV should contain this well-known | |||
| value, the MO should be "equal" and the CDA must be "not-sent. | value, the MO should be "equal" and the CDA must be "not-sent. | |||
| If the DiffServ field identified by the rest of the rule varies over | If the DiffServ field identified by the rest of the rule varies over | |||
| time or is not known by both sides, then there are two possibilities | time or is not known by both sides, then there are two possibilities | |||
| depending on the variability of the value, the first one there is | depending on the variability of the value, the first one is to do not | |||
| without compression and the original value is sent, or the sencond | compressed the field and sends the original value, or the second | |||
| where the values can be computed by sending only the LSB bits: | where the values can be computed by sending only the LSB bits: | |||
| o TV is not set, MO is set to "ignore" and CDA is set to "value- | o TV is not set to any value, MO is set to "ignore" and CDA is set | |||
| sent" | to "value-sent" | |||
| o TV contains a stable value, MO is MSB(X) and CDA is set to | o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | |||
| LSB(8-X) | ||||
| 6.3. Flow label field | 7.3. Flow label field | |||
| If the Flow Label field identified by the rest of the rule does not | If the Flow Label field identified by the rest of the rule does not | |||
| vary and is known by both sides, the TV should contain this well- | vary and is known by both sides, the TV should contain this well- | |||
| known value, the MO should be "equal" and the CDA should be "not- | known value, the MO should be "equal" and the CDA should be "not- | |||
| sent". | sent". | |||
| If the Flow Label field identified by the rest of the rule varies | If the Flow Label field identified by the rest of the rule varies | |||
| during time or is not known by both sides, there are two | during time or is not known by both sides, there are two | |||
| possibilities dpending on the variability of the value, the first one | possibilities depending on the variability of the value, the first | |||
| is without compression and then the value is sent and the second | one is without compression and then the value is sent and the second | |||
| where only part of the value is sent and the decompressor needs to | where only part of the value is sent and the decompressor needs to | |||
| compute the original value: | compute the original value: | |||
| o TV is not set, MO is set to "ignore" and CDA is set to "value- | o TV is not set, MO is set to "ignore" and CDA is set to "value- | |||
| sent" | sent" | |||
| o TV contains a stable value, MO is MSB(X) and CDA is set to | o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | |||
| LSB(20-X) | ||||
| 6.4. Payload Length field | 7.4. Payload Length field | |||
| If the LPWAN technology does not add padding, this field can be | If the LPWAN technology does not add padding, this field can be | |||
| elided for the transmission on the LPWAN network. The SCHC C/D | elided for the transmission on the LPWAN network. The SCHC C/D | |||
| recompute the original payload length value. The TV is not set, the | recomputes the original payload length value. The TV is not set, the | |||
| MO is set to "ignore" and the CDA is "compute-IPv6-length". | MO is set to "ignore" and the CDA is "compute-IPv6-length". | |||
| If the payload is small, the TV can be set to 0x0000, the MO set to | If the payload length needs to be sent and does not need to be coded | |||
| "MSB (16-s)" and the CDA to "LSB (s)". The 's' parameter depends on | in 16 bits, the TV can be set to 0x0000, the MO set to "MSB (16-s)" | |||
| the maximum packet length. | and the CDA to "LSB". The 's' parameter depends on the expected | |||
| maximum packet length. | ||||
| On other cases, the payload length field must be sent and the CDA is | On other cases, the payload length field must be sent and the CDA is | |||
| replaced by "value-sent". | replaced by "value-sent". | |||
| 6.5. Next Header field | 7.5. Next Header field | |||
| If the Next Header field identified by the rest of the rule does not | If the Next Header field identified by the rest of the rule does not | |||
| vary and is known by both sides, the TV should contain this Next | vary and is known by both sides, the TV should contain this Next | |||
| Header value, the MO should be "equal" and the CDA should be "not- | Header value, the MO should be "equal" and the CDA should be "not- | |||
| sent". | sent". | |||
| If the Next header field identified by the rest of the rule varies | If the Next header field identified by the rest of the rule varies | |||
| during time or is not known by both sides, then TV is not set, MO is | during time or is not known by both sides, then TV is not set, MO is | |||
| set to "ignore" and CDA is set to "value-sent". A matching-list may | set to "ignore" and CDA is set to "value-sent". A matching-list may | |||
| also be used. | also be used. | |||
| 6.6. Hop Limit field | 7.6. Hop Limit field | |||
| The End System is generally a host and does not forward packets, | The End System is generally a device and does not forward packets, | |||
| therefore the Hop Limit value is constant. So the TV is set with a | therefore the Hop Limit value is constant. So the TV is set with a | |||
| default value, the MO is set to "equal" and the CDA is set to "not- | default value, the MO is set to "equal" and the CDA is set to "not- | |||
| sent". | sent". | |||
| Otherwise the value is sent on the LPWAN: TV is not set, MO is set to | Otherwise the value is sent on the LPWAN: TV is not set, MO is set to | |||
| ignore and CDA is set to "value-sent". | ignore and CDA is set to "value-sent". | |||
| Note that the field behavior differs in upstream and downstream. In | Note that the field behavior differs in upstream and downstream. In | |||
| upstream, since there is no IP forwarding between the DEV and the | upstream, since there is no IP forwarding between the Dev and the | |||
| SCHC C/D, the value is relatively constant. On the other hand, the | SCHC C/D, the value is relatively constant. On the other hand, the | |||
| downstream value depends of Internet routing and may change more | downstream value depends of Internet routing and may change more | |||
| frequently. One solution could be to use the Direction Indicator | frequently. One solution could be to use the Direction Indicator | |||
| (DI) to distinguish both directions to elide the field in the | (DI) to distinguish both directions to elide the field in the | |||
| upstream direction and send the value in the downstream direction. | upstream direction and send the value in the downstream direction. | |||
| 6.7. IPv6 addresses fields | 7.7. IPv6 addresses fields | |||
| As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit | As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit | |||
| long fields; one for the prefix and one for the Interface Identifier | long fields; one for the prefix and one for the Interface Identifier | |||
| (IID). These fields should be compressed. To allow a single rule, | (IID). These fields should be compressed. To allow a single rule, | |||
| these values are identified by their role (DEV or APP) and not by | these values are identified by their role (DEV or APP) and not by | |||
| their position in the frame (source or destination). The SCHC C/D | their position in the frame (source or destination). The SCHC C/D | |||
| must be aware of the traffic direction (upstream, downstream) to | must be aware of the traffic direction (upstream, downstream) to | |||
| select the appropriate field. | select the appropriate field. | |||
| 6.7.1. IPv6 source and destination prefixes | 7.7.1. IPv6 source and destination prefixes | |||
| Both ends must be synchronized with the appropriate prefixes. For a | Both ends must be synchronized with the appropriate prefixes. For a | |||
| specific flow, the source and destination prefix can be unique and | specific flow, the source and destination prefix can be unique and | |||
| stored in the context. It can be either a link-local prefix or a | stored in the context. It can be either a link-local prefix or a | |||
| global prefix. In that case, the TV for the source and destination | global prefix. In that case, the TV for the source and destination | |||
| prefixes contains the values, the MO is set to "equal" and the CDA is | prefixes contains the values, the MO is set to "equal" and the CDA is | |||
| set to "not-sent". | set to "not-sent". | |||
| In case the rule allows several prefixes, mapping-list must be used. | In case the rule allows several prefixes, mapping-list must be used. | |||
| The different prefixes are listed in the TV associated with a short | The different prefixes are listed in the TV associated with a short | |||
| ID. The MO is set to "match-mapping" and the CDA is set to "mapping- | ID. The MO is set to "match-mapping" and the CDA is set to "mapping- | |||
| sent". | sent". | |||
| Otherwise the TV contains the prefix, the MO is set to "equal" and | Otherwise the TV contains the prefix, the MO is set to "equal" and | |||
| the CDA is set to value-sent. | the CDA is set to value-sent. | |||
| 6.7.2. IPv6 source and destination IID | 7.7.2. IPv6 source and destination IID | |||
| If the DEV or APP IID are based on an LPWAN address, then the IID can | If the DEV or APP IID are based on an LPWAN address, then the IID can | |||
| be reconstructed with information coming from the LPWAN header. In | be reconstructed with information coming from the LPWAN header. In | |||
| that case, the TV is not set, the MO is set to "ignore" and the CDA | that case, the TV is not set, the MO is set to "ignore" and the CDA | |||
| is set to "DEViid-DID" or "APPiid-DID". Note that the LPWAN | is set to "DEViid" or "APPiid". Note that the LPWAN technology is | |||
| technology is generally carrying a single device identifier | generally carrying a single device identifier corresponding to the | |||
| corresponding to the DEV. The SCHC C/D may also not be aware of | DEV. The SCHC C/D may also not be aware of these values. | |||
| these values. | ||||
| For privacy reasons or if the DEV address is changing over time, it | If the DEV address has a static value that is not derivated from the | |||
| maybe better to use a static value. In that case, the TV contains | EUI-64, then TV contains the value, the MO operator is set to "equal" | |||
| the value, the MO operator is set to "equal" and the CDA is set to | and the CDA is set to "not-sent". | |||
| "not-sent". | ||||
| If several IIDs are possible, then the TV contains the list of | If several IIDs are possible, then the TV contains the list of | |||
| possible IID, the MO is set to "match-mapping" and the CDA is set to | possible IIDs, the MO is set to "match-mapping" and the CDA is set to | |||
| "mapping-sent". | "mapping-sent". | |||
| Otherwise the value variation of the IID may be reduced to few bytes. | Otherwise the value variation of the IID may be reduced to few bytes. | |||
| In that case, the TV is set to the stable part of the IID, the MO is | In that case, the TV is set to the stable part of the IID, the MO is | |||
| set to MSB and the CDF is set to LSB. | set to MSB and the CDA is set to LSB. | |||
| Finally, the IID can be sent on the LPWAN. In that case, the TV is | Finally, the IID can be sent on the LPWAN. In that case, the TV is | |||
| not set, the MO is set to "ignore" and the CDA is set to "value- | not set, the MO is set to "ignore" and the CDA is set to "value- | |||
| sent". | sent". | |||
| 6.8. IPv6 extensions | 7.8. IPv6 extensions | |||
| No extension rules are currently defined. They can be based on the | No extension rules are currently defined. They can be based on the | |||
| MOs and CDAs described above. | MOs and CDAs described above. | |||
| 6.9. UDP source and destination port | 7.9. UDP source and destination port | |||
| To allow a single rule, the UDP port values are identified by their | To allow a single rule, the UDP port values are identified by their | |||
| role (DEV or APP) and not by their position in the frame (source or | role (DEV or APP) and not by their position in the frame (source or | |||
| destination). The SCHC C/D must be aware of the traffic direction | destination). The SCHC C/D must be aware of the traffic direction | |||
| (upstream, downstream) to select the appropriate field. The | (upstream, downstream) to select the appropriate field. The | |||
| following rules apply for DEV and APP port numbers. | following rules apply for DEV and APP port numbers. | |||
| If both ends knows the port number, it can be elided. The TV | If both ends know the port number, it can be elided. The TV contains | |||
| contains the port number, the MO is set to "equal" and the CDA is set | the port number, the MO is set to "equal" and the CDA is set to "not- | |||
| to "not-sent". | sent". | |||
| If the port variation is on few bits, the TV contains the stable part | If the port variation is on few bits, the TV contains the stable part | |||
| of the port number, the MO is set to "MSB" and the CDA is set to | of the port number, the MO is set to "MSB" and the CDA is set to | |||
| "LSB". | "LSB". | |||
| If some well-known values are used, the TV can contain the list of | If some well-known values are used, the TV can contain the list of | |||
| this values, the MO is set to "match-mapping" and the CDA is set to | this values, the MO is set to "match-mapping" and the CDA is set to | |||
| "mapping-sent". | "mapping-sent". | |||
| Otherwise the port numbers are sent on the LPWAN. The TV is not set, | Otherwise the port numbers are sent on the LPWAN. The TV is not set, | |||
| the MO is set to "ignore" and the CDA is set to "value-sent". | the MO is set to "ignore" and the CDA is set to "value-sent". | |||
| 6.10. UDP length field | 7.10. UDP length field | |||
| If the LPWAN technology does not introduce padding, the UDP length | If the LPWAN technology does not introduce padding, the UDP length | |||
| can be computed from the received data. In that case the TV is not | can be computed from the received data. In that case the TV is not | |||
| set, the MO is set to "ignore" and the CDA is set to "compute-UDP- | set, the MO is set to "ignore" and the CDA is set to "compute-UDP- | |||
| length". | length". | |||
| If the payload is small, the TV can be set to 0x0000, the MO set to | If the payload is small, the TV can be set to 0x0000, the MO set to | |||
| "MSB" and the CDA to "LSB". | "MSB" and the CDA to "LSB". | |||
| On other cases, the length must be sent and the CDA is replaced by | On other cases, the length must be sent and the CDA is replaced by | |||
| "value-sent". | "value-sent". | |||
| 6.11. UDP Checksum field | 7.11. UDP Checksum field | |||
| IPv6 mandates a checksum in the protocol above IP. Nevertheless, if | IPv6 mandates a checksum in the protocol above IP. Nevertheless, if | |||
| a more efficient mechanism such as L2 CRC or MIC is carried by or | a more efficient mechanism such as L2 CRC or MIC is carried by or | |||
| over the L2 (such as in the LPWAN fragmentation process (see XXXX)), | over the L2 (such as in the LPWAN fragmentation process (see section | |||
| the UDP checksum transmission can be avoided. In that case, the TV | Section 9)), the UDP checksum transmission can be avoided. In that | |||
| is not set, the MO is set to "ignore" and the CDA is set to "compute- | case, the TV is not set, the MO is set to "ignore" and the CDA is set | |||
| UDP-checksum". | to "compute-UDP-checksum". | |||
| In other cases the checksum must be explicitly sent. The TV is not | In other cases the checksum must be explicitly sent. The TV is not | |||
| set, the MO is set to "ignore" and the CDF is set to "value-sent". | set, the MO is set to "ignore" and the CDF is set to "value-sent". | |||
| 7. Examples | 8. Examples | |||
| This section gives some scenarios of the compression mechanism for | This section gives some scenarios of the compression mechanism for | |||
| IPv6/UDP. The goal is to illustrate the SCHC behavior. | IPv6/UDP. The goal is to illustrate the SCHC behavior. | |||
| 7.1. IPv6/UDP compression | 8.1. IPv6/UDP compression | |||
| The most common case using the mechanisms defined in this document | The most common case using the mechanisms defined in this document | |||
| will be a LPWAN DEV that embeds some applications running over CoAP. | will be a LPWAN Dev that embeds some applications running over CoAP. | |||
| In this example, three flows are considered. The first flow is for | In this example, three flows are considered. The first flow is for | |||
| the device management based on CoAP using Link Local IPv6 addresses | the device management based on CoAP using Link Local IPv6 addresses | |||
| and UDP ports 123 and 124 for DEV and APP, respectively. The second | and UDP ports 123 and 124 for Dev and App, respectively. The second | |||
| flow will be a CoAP server for measurements done by the Device (using | flow will be a CoAP server for measurements done by the Device (using | |||
| ports 5683) and Global IPv6 Address prefixes alpha::IID/64 to | ports 5683) and Global IPv6 Address prefixes alpha::IID/64 to | |||
| beta::1/64. The last flow is for legacy applications using different | beta::1/64. The last flow is for legacy applications using different | |||
| ports numbers, the destination IPv6 address prefix is gamma::1/64. | ports numbers, the destination IPv6 address prefix is gamma::1/64. | |||
| Figure 5 presents the protocol stack for this Device. IPv6 and UDP | Figure 6 presents the protocol stack for this Device. IPv6 and UDP | |||
| are represented with dotted lines since these protocols are | are represented with dotted lines since these protocols are | |||
| compressed on the radio link. | compressed on the radio link. | |||
| Managment Data | Managment Data | |||
| +----------+---------+---------+ | +----------+---------+---------+ | |||
| | CoAP | CoAP | legacy | | | CoAP | CoAP | legacy | | |||
| +----||----+---||----+---||----+ | +----||----+---||----+---||----+ | |||
| . UDP . UDP | UDP | | . UDP . UDP | UDP | | |||
| ................................ | ................................ | |||
| . IPv6 . IPv6 . IPv6 . | . IPv6 . IPv6 . IPv6 . | |||
| +------------------------------+ | +------------------------------+ | |||
| | SCHC Header compression | | | SCHC Header compression | | |||
| | and fragmentation | | | and fragmentation | | |||
| +------------------------------+ | +------------------------------+ | |||
| | LPWAN L2 technologies | | | LPWAN L2 technologies | | |||
| +------------------------------+ | +------------------------------+ | |||
| DEV or NGW | DEV or NGW | |||
| Figure 5: Simplified Protocol Stack for LP-WAN | Figure 6: Simplified Protocol Stack for LP-WAN | |||
| Note that in some LPWAN technologies, only the DEVs have a device ID. | Note that in some LPWAN technologies, only the Devs have a device ID. | |||
| Therefore, when such technologie are used, it is necessary to define | Therefore, when such technologies are used, it is necessary to define | |||
| statically an IID for the Link Local address for the SCHC C/D. | statically an IID for the Link Local address for the SCHC C/D. | |||
| Rule 0 | Rule 0 | |||
| +----------------+---------+--------+-------------++------+ | +----------------+--+--+---------+--------+-------------++------+ | |||
| | Field | Value | Match | Function || Sent | | | Field |FP|DI| Value | Match | Comp Decomp || Sent | | |||
| +----------------+---------+----------------------++------+ | | | | | | Opera. | Action ||[bits]| | |||
| |IPv6 version |6 | equal | not-sent || | | +----------------+--+--+---------+----------------------++------+ | |||
| |IPv6 DiffServ |0 | equal | not-sent || | | |IPv6 version |1 |Bi|6 | equal | not-sent || | | |||
| |IPv6 Flow Label |0 | equal | not-sent || | | |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | |||
| |IPv6 Length | | ignore | comp-length || | | |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | |||
| |IPv6 Next Header|17 | equal | not-sent || | | |IPv6 Length |1 |Bi| | ignore | comp-length || | | |||
| |IPv6 Hop Limit |255 | ignore | not-sent || | | |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | |||
| |IPv6 DEVprefix |FE80::/64| equal | not-sent || | | |IPv6 Hop Limit |1 |Bi|255 | ignore | not-sent || | | |||
| |IPv6 DEViid | | ignore | DEViid-DID || | | |IPv6 DEVprefix |1 |Bi|FE80::/64| equal | not-sent || | | |||
| |IPv6 APPprefix |FE80::/64| equal | not-sent || | | |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | |||
| |IPv6 APPiid |::1 | equal | not-sent || | | |IPv6 APPprefix |1 |Bi|FE80::/64| equal | not-sent || | | |||
| +================+=========+========+=============++======+ | |IPv6 APPiid |1 |Bi|::1 | equal | not-sent || | | |||
| |UDP DEVport |123 | equal | not-sent || | | +================+==+==+=========+========+=============++======+ | |||
| |UDP APPport |124 | equal | not-sent || | | |UDP DEVport |1 |Bi|123 | equal | not-sent || | | |||
| |UDP Length | | ignore | comp-length || | | |UDP APPport |1 |Bi|124 | equal | not-sent || | | |||
| |UDP checksum | | ignore | comp-chk || | | |UDP Length |1 |Bi| | ignore | comp-length || | | |||
| +================+=========+========+=============++======+ | |UDP checksum |1 |Bi| | ignore | comp-chk || | | |||
| +================+==+==+=========+========+=============++======+ | ||||
| Rule 1 | Rule 1 | |||
| +----------------+---------+--------+-------------++------+ | +----------------+--+--+---------+--------+-------------++------+ | |||
| | Field | Value | Match | Function || Sent | | | Field |FP|DI| Value | Match | Action || Sent | | |||
| +----------------+---------+--------+-------------++------+ | | | | | | Opera. | Action ||[bits]| | |||
| |IPv6 version |6 | equal | not-sent || | | +----------------+--+--+---------+--------+-------------++------+ | |||
| |IPv6 DiffServ |0 | equal | not-sent || | | |IPv6 version |1 |Bi|6 | equal | not-sent || | | |||
| |IPv6 Flow Label |0 | equal | not-sent || | | |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | |||
| |IPv6 Length | | ignore | comp-length || | | |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | |||
| |IPv6 Next Header|17 | equal | not-sent || | | |IPv6 Length |1 |Bi| | ignore | comp-length || | | |||
| |IPv6 Hop Limit |255 | ignore | not-sent || | | |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | |||
| |IPv6 DEVprefix |alpha/64 | equal | not-sent || | | |IPv6 Hop Limit |1 |Bi|255 | ignore | not-sent || | | |||
| |IPv6 DEViid | | ignore | DEViid-DID || | | |IPv6 DEVprefix |1 |Bi|[alpha/64, match- | mapping-sent|| [1] | | |||
| |IPv6 APPprefix |beta/64 | equal | not-sent || | | | |1 |Bi|fe80::/64] mapping| || | | |||
| |IPv6 APPiid |::1000 | equal | not-sent || | | |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | |||
| +================+=========+========+=============++======+ | |IPv6 APPprefix |1 |Bi|[beta/64,| match- | mapping-sent|| [2] | | |||
| |UDP DEVport |5683 | equal | not-sent || | | | | | |alpha/64,| mapping| || | | |||
| |UDP APPport |5683 | equal | not-sent || | | | | | |fe80::64]| | || | | |||
| |UDP Length | | ignore | comp-length || | | |IPv6 APPiid |1 |Bi|::1000 | equal | not-sent || | | |||
| |UDP checksum | | ignore | comp-chk || | | +================+==+==+=========+========+=============++======+ | |||
| +================+=========+========+=============++======+ | |UDP DEVport |1 |Bi|5683 | equal | not-sent || | | |||
| |UDP APPport |1 |Bi|5683 | equal | not-sent || | | ||||
| |UDP Length |1 |Bi| | ignore | comp-length || | | ||||
| |UDP checksum |1 |Bi| | ignore | comp-chk || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| Rule 2 | Rule 2 | |||
| +----------------+---------+--------+-------------++------+ | +----------------+--+--+---------+--------+-------------++------+ | |||
| | Field | Value | Match | Function || Sent | | | Field |FP|DI| Value | Match | Action || Sent | | |||
| +----------------+---------+--------+-------------++------+ | | | | | | Opera. | Action ||[bits]| | |||
| |IPv6 version |6 | equal | not-sent || | | +----------------+--+--+---------+--------+-------------++------+ | |||
| |IPv6 DiffServ |0 | equal | not-sent || | | |IPv6 version |1 |Bi|6 | equal | not-sent || | | |||
| |IPv6 Flow Label |0 | equal | not-sent || | | |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | |||
| |IPv6 Length | | ignore | comp-length || | | |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | |||
| |IPv6 Next Header|17 | equal | not-sent || | | |IPv6 Length |1 |Bi| | ignore | comp-length || | | |||
| |IPv6 Hop Limit |255 | ignore | not-sent || | | |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | |||
| |IPv6 DEVprefix |alpha/64 | equal | not-sent || | | |IPv6 Hop Limit |1 |Up|255 | ignore | not-sent || | | |||
| |IPv6 DEViid | | ignore | DEViid-DID || | | |IPv6 Hop Limit |1 |Dw| | ignore | value-sent || [8] | | |||
| |IPv6 APPprefix |gamma/64 | equal | not-sent || | | |IPv6 DEVprefix |1 |Bi|alpha/64 | equal | not-sent || | | |||
| |IPv6 APPiid |::1000 | equal | not-sent || | | |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | |||
| +================+=========+========+=============++======+ | |IPv6 APPprefix |1 |Bi|gamma/64 | equal | not-sent || | | |||
| |UDP DEVport |8720 | MSB(12)| LSB(4) || lsb | | |IPv6 APPiid |1 |Bi|::1000 | equal | not-sent || | | |||
| |UDP APPport |8720 | MSB(12)| LSB(4) || lsb | | +================+==+==+=========+========+=============++======+ | |||
| |UDP Length | | ignore | comp-length || | | |UDP DEVport |1 |Bi|8720 | MSB(12)| LSB(4) || [4] | | |||
| |UDP checksum | | ignore | comp-chk || | | |UDP APPport |1 |Bi|8720 | MSB(12)| LSB(4) || [4] | | |||
| +================+=========+========+=============++======+ | |UDP Length |1 |Bi| | ignore | comp-length || | | |||
| |UDP checksum |1 |Bi| | ignore | comp-chk || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| Figure 6: Context rules | Figure 7: Context rules | |||
| All the fields described in the three rules Figure 6 are present in | All the fields described in the three rules depicted on Figure 7 are | |||
| the IPv6 and UDP headers. The DEViid-DID value is found in the L2 | present in the IPv6 and UDP headers. The DEViid-DID value is found | |||
| header. | in the L2 header. | |||
| The second and third rules use global addresses. The way the DEV | The second and third rules use global addresses. The way the Dev | |||
| learns the prefix is not in the scope of the document. | learns the prefix is not in the scope of the document. | |||
| The third rule compresses port numbers to 4 bits. | The third rule compresses port numbers to 4 bits. | |||
| 8. Fragmentation | 9. Fragmentation | |||
| 8.1. Overview | 9.1. Overview | |||
| Fragmentation support in LPWAN is mandatory when the underlying LPWAN | Fragmentation support in LPWAN is mandatory when the underlying LPWAN | |||
| technology is not capable of fulfilling the IPv6 MTU requirement. | technology is not capable of fulfilling the IPv6 MTU requirement. | |||
| Fragmentation is used if, after SCHC header compression, the size of | Fragmentation is used if, after SCHC header compression, the size of | |||
| the resulting IPv6 packet is larger than the L2 data unit maximum | the resulting IPv6 packet is larger than the L2 data unit maximum | |||
| payload. Fragmentation is also used if SCHC header compression has | payload. Fragmentation is also used if SCHC header compression has | |||
| not been able to compress an IPv6 packet that is larger than the L2 | not been able to compress an IPv6 packet that is larger than the L2 | |||
| data unit maximum payload. In LPWAN technologies, the L2 data unit | data unit maximum payload. In LPWAN technologies, the L2 data unit | |||
| size typically varies from tens to hundreds of bytes. If the entire | size typically varies from tens to hundreds of bytes. If the entire | |||
| IPv6 datagram fits within a single L2 data unit, the fragmentation | IPv6 datagram fits within a single L2 data unit, the fragmentation | |||
| mechanism is not used and the packet is sent unfragmented. | mechanism is not used and the packet is sent unfragmented. | |||
| If the datagram does not fit within a single L2 data unit, it SHALL | If the datagram does not fit within a single L2 data unit, it SHALL | |||
| be broken into fragments. | be broken into fragments. | |||
| Moreover, LPWAN technologies impose some strict limitations on | Moreover, LPWAN technologies impose some strict limitations on | |||
| traffic; therefore it is desirable to enable optional fragment | traffic; therefore it is desirable to enable optional fragment | |||
| retransmission, while a single fragment loss should not lead to | retransmission, while a single fragment loss should not lead to | |||
| retransmitting the full IPv6 datagram. On the other hand, in order | retransmitting the full IPv6 datagram. On the other hand, in order | |||
| to preserve energy, Things (End Systems) are sleeping most of the | to preserve energy, Devices are sleeping most of the time and may | |||
| time and may receive data during a short period of time after | receive data during a short period of time after transmission. In | |||
| transmission. In order to adapt to the capabilities of various LPWAN | order to adapt to the capabilities of various LPWAN technologies, | |||
| technologies, this specification allows for a gradation of fragment | this specification allows for a gradation of fragment delivery | |||
| delivery reliability. This document does not make any decision with | reliability. This document does not make any decision with regard to | |||
| regard to which fragment delivery reliability option is used over a | which fragment delivery reliability option is used over a specific | |||
| specific LPWAN technology. | LPWAN technology. | |||
| An important consideration is that LPWAN networks typically follow | An important consideration is that LPWAN networks typically follow | |||
| the star topology, and therefore data unit reordering is not expected | the star topology, and therefore data unit reordering is not expected | |||
| in such networks. This specification assumes that reordering will | in such networks. This specification assumes that reordering will | |||
| not happen between the entity performing fragmentation and the entity | not happen between the entity performing fragmentation and the entity | |||
| performing reassembly. This assumption allows to reduce complexity | performing reassembly. This assumption allows to reduce complexity | |||
| and overhead of the fragmentation mechanism. | and overhead of the fragmentation mechanism. | |||
| 8.2. Reliability options: definition | 9.2. Reliability options: definition | |||
| This specification defines the following five fragment delivery | This specification defines the following three fragment delivery | |||
| reliability options: | reliability options: | |||
| o No ACK | o No ACK | |||
| o Packet mode - ACK "always" | ||||
| o Packet mode - ACK on error | ||||
| o Window mode - ACK "always" | o Window mode - ACK "always" | |||
| o Window mode - ACK on error | o Window mode - ACK on error | |||
| The same reliability option MUST be used for all fragments of a | The same reliability option MUST be used for all fragments of a | |||
| packet. It is up to the underlying LPWAN technology to decide which | packet. It is up to implementers and/or representatives of the | |||
| reliability option to use and whether the same reliability option | underlying LPWAN technology to decide which reliability option to use | |||
| applies to all IPv6 packets. Note that the reliability option to be | and whether the same reliability option applies to all IPv6 packets | |||
| used is not necessarily tied to the particular characteristics of the | or not. Note that the reliability option to be used is not | |||
| underlying L2 LPWAN technology (e.g. a reliability option without | necessarily tied to the particular characteristics of the underlying | |||
| receiver feedback may be used on top of an L2 LPWAN technology with | L2 LPWAN technology (e.g. the No ACK reliability option may be used | |||
| symmetric characteristics for uplink and downlink). | on top of an L2 LPWAN technology with symmetric characteristics for | |||
| uplink and downlink). | ||||
| In the No ACK option, the receiver MUST NOT issue acknowledgments | In the No ACK option, the receiver MUST NOT issue acknowledgments | |||
| (ACK). | (ACK). | |||
| In Packet mode - ACK "always", the receiver transmits one ACK after | ||||
| all fragments carrying an IPv6 packet have been transmitted. The ACK | ||||
| informs the sender about received and/or missing fragments from the | ||||
| IPv6 packet. | ||||
| In Packet mode - ACK on error, the receiver transmits one ACK after | ||||
| all fragments carrying an IPv6 packet have been transmitted, only if | ||||
| at least one of those fragments has been lost. The ACK informs the | ||||
| sender about received and/or missing fragments from the IPv6 packet. | ||||
| In Window mode - ACK "always", an ACK is transmitted by the fragment | In Window mode - ACK "always", an ACK is transmitted by the fragment | |||
| receiver after a window of fragments have been sent. A window of | receiver after a window of fragments have been sent. A window of | |||
| fragments is a subset of the full set of fragments needed to carry an | fragments is a subset of the full set of fragments needed to carry an | |||
| IPv6 packet. In this mode, the ACK informs the sender about received | IPv6 packet. In this mode, the ACK informs the sender about received | |||
| and/or missing fragments from the window of fragments. | and/or missing fragments from the window of fragments. | |||
| In Window mode - ACK on error, an ACK is transmitted by the fragment | In Window mode - ACK on error, an ACK is transmitted by the fragment | |||
| receiver after a window of fragments have been sent, only if at least | receiver after a window of fragments have been sent, only if at least | |||
| one of the fragments in the window has been lost. In this mode, the | one of the fragments in the window has been lost. In this mode, the | |||
| ACK informs the sender about received and/or missing fragments from | ACK informs the sender about received and/or missing fragments from | |||
| the window of fragments. | the window of fragments. | |||
| In Packet or Window mode, upon receipt of an ACK that informs about | In Window mode, upon receipt of an ACK that informs about any lost | |||
| any lost fragments, the sender retransmits the lost fragments, up to | fragments, the sender retransmits the lost fragments. The maximum | |||
| a maximum number of ACK and retransmission rounds that is TBD. | number of ACKs to be sent by the receiver for a specific window, | |||
| denoted MAX_ACKS_PER_WINDOW, is not stated in this document, and it | ||||
| is expected to be defined in other documents (e.g. technology- | ||||
| specific profiles). | ||||
| This document does not make any decision as to which fragment | This document does not make any decision as to which fragment | |||
| delivery reliability option(s) need to be supported over a specific | delivery reliability option(s) need to be supported over a specific | |||
| LPWAN technology. | LPWAN technology. | |||
| Examples of the different reliability options described are provided | Examples of the different reliability options described are provided | |||
| in Appendix A. | in Appendix A. | |||
| 8.3. Reliability options: discussion | 9.3. Reliability options: discussion | |||
| This section discusses the properties of each fragment delivery | This section discusses the properties of each fragment delivery | |||
| reliability option defined in the previous section. Figure Figure 7 | reliability option defined in the previous section. | |||
| summarizes advantages and disadvantages of the reliability options | ||||
| that provide receiver feedback. | ||||
| No ACK is the most simple fragment delivery reliability option. With | No ACK is the most simple fragment delivery reliability option. With | |||
| this option, the receiver does not generate overhead in the form of | this option, the receiver does not generate overhead in the form of | |||
| ACKs. However, this option does not enhance delivery reliability | ACKs. However, this option does not enhance delivery reliability | |||
| beyond that offered by the underlying LPWAN technology. | beyond that offered by the underlying LPWAN technology. | |||
| ACK on error options are based on the optimistic expectation that the | The Window mode - ACK on error option is based on the optimistic | |||
| underlying links will offer relatively low L2 data unit loss | expectation that the underlying links will offer relatively low L2 | |||
| probability. ACK on error reduces the number of ACKs transmitted by | data unit loss probability. This option reduces the number of ACKs | |||
| the fragment receiver compared to ACK "always" options. This may be | transmitted by the fragment receiver compared to the Window mode - | |||
| especially beneficial in asymmetric scenarios, e.g. where fragmented | ACK "always" option. This may be especially beneficial in asymmetric | |||
| data are sent uplink and the underlying LPWAN technology downlink | scenarios, e.g. where fragmented data are sent uplink and the | |||
| capacity or message rate is lower than the uplink one. | underlying LPWAN technology downlink capacity or message rate is | |||
| lower than the uplink one. However, if an ACK is lost, the sender | ||||
| assumes that all fragments covered by the ACK have been successfully | ||||
| delivered. In contrast, the Window mode - ACK "always" option does | ||||
| not suffer that issue, at the expense of an ACK overhead increase. | ||||
| The Packet mode - ACK on error option provides reliability with low | The Window mode - ACK "always" option provides flow control. In | |||
| ACK overhead. However, if an ACK is lost, the sender assumes that | addition, it is able to handle long bursts of lost fragments, since | |||
| all fragments carrying the IPv6 datagram have been successfully | detection of such events can be done before end of the IPv6 packet | |||
| delivered. In contrast, the Packet mode - ACK "always" option does | transmission, as long as the window size is short enough. However, | |||
| not suffer that issue, at the expense of a moderate ACK overhead. An | such benefit comes at the expense of higher ACK overhead. | |||
| issue with any of the Packet modes is that detection of a long burst | ||||
| of lost frames is only possible after relatively long time (i.e. at | ||||
| the end of the transmission of all fragments carrying an IPv6 | ||||
| datagram). | ||||
| In contrast with Packet modes, the Window mode - ACK "always" option | 9.4. Tools | |||
| provides flow control. In addition, it is able to better handle long | ||||
| bursts of lost fragments, since detection of such events can be done | ||||
| earlier than with any of the Packet modes. However, the benefits of | ||||
| Window mode - ACK "always" come at the expense of higher ACK | ||||
| overhead. | ||||
| With regard to the Window mode - ACK on error option, there is no | This subsection describes the different tools that are used to enable | |||
| known use case for it at the time of the writing. | the described fragmentation functionality and the different | |||
| reliability options supported. Each tool has a corresponding header | ||||
| field format that is defined in the next subsection. The list of | ||||
| tools follows: | ||||
| +-----------------------+------------------------+ | o Rule ID. The Rule ID is used in fragments and in ACKs. The Rule | |||
| | Packet mode | Window mode | | ID in a fragment is set to a value that indicates that the data unit | |||
| +-----------------+-----------------------+------------------------+ | being carried is a fragment. This also allows to interleave non- | |||
| | | + Low ACK overhead | | | fragmented IPv6 datagrams with fragments that carry a larger IPv6 | |||
| | ACK on error | - Long loss burst | (Use case unknown) | | datagram. Rule ID may also be used to signal which reliability | |||
| | | - No flow control | | | option is in use for the IPv6 packet being carried. In an ACK, the | |||
| +-----------------+-----------------------+------------------------+ | Rule ID signals that the message this Rule ID is prepended to is an | |||
| | | + Moderate ACK overh. | + Flow control | | ACK. | |||
| | ACK "always" | - Long loss burst | + Long loss burst | | ||||
| | | - No flow control | - Higher ACK overhead | | ||||
| +-----------------+-----------------------+------------------------+ | ||||
| Figure 7: Summary of fragment delivery options that provide receiver | o Compressed Fragment Number (CFN). The CFN is included in all | |||
| feedback, and their main advantages (+) and disadvantages (-). | fragments. This field can be understood as a truncated, efficient | |||
| representation of a larger-sized fragment number, and does not | ||||
| necessarily carry an absolute fragment number. A special CFN value | ||||
| signals the last fragment that carries a fragmented IPv6 packet. In | ||||
| Window mode, the CFN is augmented with the W bit, which has the | ||||
| purpose of avoiding possible ambiguity for the receiver that might | ||||
| arise under certain conditions | ||||
| 8.4. Fragment format | o Datagram Tag (DTag). The DTag field, if present, is set to the | |||
| same value for all fragments carrying the same IPv6 datagram, allows | ||||
| to interleave fragments that correspond to different IPv6 datagrams. | ||||
| o Message Integrity Check (MIC). It is computed by the sender over | ||||
| the complete IPv6 packet before fragmentation by using the TBD | ||||
| algorithm. The MIC allows the receiver to check for errors in the | ||||
| reassembled IPv6 packet, while it also enables compressing the UDP | ||||
| checksum by use of SCHC. | ||||
| o Bitmap. The bitmap is a sequence of bits included in the ACK for a | ||||
| given window, that provides feedback on whether each fragment of the | ||||
| current window has been received or not. | ||||
| 9.5. Formats | ||||
| This section defines the fragment format, the fragmentation header | ||||
| formats, and the ACK format. | ||||
| 9.5.1. Fragment format | ||||
| A fragment comprises a fragmentation header and a fragment payload, | A fragment comprises a fragmentation header and a fragment payload, | |||
| and conforms to the format shown in Figure 8. The fragment payload | and conforms to the format shown in Figure 8. The fragment payload | |||
| carries a subset of either the IPv6 packet after header compression | carries a subset of either the IPv6 packet after header compression | |||
| or an IPv6 packet which could not be compressed. A fragment is the | or an IPv6 packet which could not be compressed. A fragment is the | |||
| payload in the L2 protocol data unit (PDU). | payload in the L2 protocol data unit (PDU). | |||
| +---------------+-----------------------+ | +---------------+-----------------------+ | |||
| | Fragm. Header | Fragment payload | | | Fragm. Header | Fragment payload | | |||
| +---------------+-----------------------+ | +---------------+-----------------------+ | |||
| Figure 8: Fragment format. | Figure 8: Fragment format. | |||
| 8.5. Fragmentation header formats | 9.5.2. Fragmentation header formats | |||
| In any of the Window modes, fragments except the last one SHALL | In the No ACK option, fragments except the last one SHALL contain the | |||
| contain the fragmentation header as defined in Figure 9. The total | fragmentation header as defined in Figure 9. The total size of this | |||
| fragmentation header is R bits. | ||||
| <------------ R ----------> | ||||
| <--T--> <--N--> | ||||
| +-- ... --+- ... -+- ... -+ | ||||
| | Rule ID | DTag | CFN | | ||||
| +-- ... --+- ... -+- ... -+ | ||||
| Figure 9: Fragmentation Header for Fragments except the Last One, No | ||||
| ACK option | ||||
| In any of the Window mode options, fragments except the last one | ||||
| SHALL | ||||
| contain the fragmentation header as defined in Figure 10. The total | ||||
| size of this fragmentation header is R bits. | size of this fragmentation header is R bits. | |||
| <------------ R ----------> | <------------ R ----------> | |||
| <--T--> 1 <--N--> | <--T--> 1 <--N--> | |||
| +-- ... --+- ... -+-+- ... -+ | +-- ... --+- ... -+-+- ... -+ | |||
| | Rule ID | DTag |W| CFN | | | Rule ID | DTag |W| CFN | | |||
| +-- ... --+- ... -+-+- ... -+ | +-- ... --+- ... -+-+- ... -+ | |||
| Figure 9: Fragmentation Header for Fragments except the Last One, | Figure 10: Fragmentation Header for Fragments except the Last One, | |||
| Window mode | Window mode | |||
| In any of the Packet modes, fragments (except the last one) that are | The last fragment of an IPv6 datagram SHALL contain a fragmentation | |||
| transmitted for the first time SHALL contain the fragmentation header | header that conforms to the format shown in Figure 11. The total | |||
| shown in Figure 10. The total size of this fragmentation header is R | size of this fragmentation header is R+M bits. | |||
| bits. | ||||
| <------------- R ------------> | ||||
| <- T -> <- N -> | ||||
| +---- ... ---+- ... -+- ... -+ | ||||
| | Rule ID | DTag | CFN | | ||||
| +---- ... ---+- ... -+- ... -+ | ||||
| Figure 10: Fragmentation Header for Fragments except the Last One, in | ||||
| a Packet mode; first transmission attempt | ||||
| In any of the Packet modes, fragments (except the last one) that are | ||||
| retransmitted SHALL | ||||
| contain the fragmentation header as defined in Figure 11. | ||||
| <------------- R ------------> | ||||
| <- T -> <----- A ----> | ||||
| +---- ... ---+- ... -+----- ... ----+ | ||||
| | Rule ID | DTag | AFN | | ||||
| +---- ... ---+- ... -+----- ... ----+ | ||||
| Figure 11: Fragmentation Header for Retransmitted Fragments (Except | ||||
| the Last One) in a Packet mode | ||||
| The last fragment of an IPv6 datagram, regardless of whether a Packet | ||||
| mode or Window mode is in use, SHALL contain a fragmentation header | ||||
| that conforms to the format shown in Figure 12. The total size of | ||||
| this fragmentation header is R+M bits. | ||||
| <------------- R ------------> | <------------- R ------------> | |||
| <- T -> <- N -> <---- M -----> | <- T -> <- N -> <---- M -----> | |||
| +---- ... ---+- ... -+- ... -+---- ... ----+ | +---- ... ---+- ... -+- ... -+---- ... ----+ | |||
| | Rule ID | DTag | 11..1 | MIC | | | Rule ID | DTag | 11..1 | MIC | | |||
| +---- ... ---+- ... -+- ... -+---- ... ----+ | +---- ... ---+- ... -+- ... -+---- ... ----+ | |||
| Figure 12: Fragmentation Header for the Last Fragment | Figure 11: Fragmentation Header for the Last Fragment | |||
| o Rule ID: this field has a size of R - T - N - 1 bits in all | o Rule ID: This field has a size of R - T - N - 1 bits in all | |||
| fragments that are not the last one, when Window mode is used. In | fragments that are not the last one, when Window mode is used. In | |||
| all other fragments, the Rule ID field has a size of R - T - N | all other fragments, the Rule ID field has a size of R - T - N | |||
| bits. The Rule ID in a fragment is set to a value that indicates | bits. | |||
| that the data unit being carried is a fragment. This also allows | ||||
| to interleave non-fragmented IPv6 datagrams with fragments that | ||||
| carry a larger IPv6 datagram. Rule ID may be used to signal which | ||||
| reliability option is in use. In any of the Packet modes, Rule ID | ||||
| is also used to indicate whether the fragment is a first | ||||
| transmission or a retransmission. | ||||
| o DTag: DTag stands for Datagram Tag. The size of the DTag field is | o DTag: The size of the DTag field is T bits, which may be set to a | |||
| T bits, which may be set to a value greater than or equal to 0 | value greater than or equal to 0 bits. The DTag field in all | |||
| bits. The DTag field in all fragments that carry the same IPv6 | fragments that carry the same IPv6 datagram MUST be set to the | |||
| datagram MUST be set to the same value. The DTag field allows to | same value. DTag MUST be set sequentially increasing from 0 to | |||
| interleave fragments that correspond to different IPv6 datagrams. | 2^T - 1, and MUST wrap back from 2^T - 1 to 0. | |||
| DTag MUST be set sequentially increasing from 0 to 2^T - 1, and | ||||
| MUST wrap back from 2^T - 1 to 0. | ||||
| o CFN: CFN stands for Compressed Fragment Number. The size of the | o CFN: This field is an unsigned integer, with a size of N bits, | |||
| CFN field is N bits. In the No ACK option, N=1. For the rest of | that carries the CFN of the fragment. In the No ACK option, N=1. | |||
| options, | For the rest of options, N equal to or greater than 3 is | |||
| N equal to or greater than 3 is recommended. This field is an | recommended. The CFN MUST be set sequentially decreasing from the | |||
| unsigned integer that carries a non-absolute fragment number. The | highest CFN in the window (which will be used for the first | |||
| CFN MUST be set sequentially decreasing from 2^N - 2 for the first | fragment), and MUST wrap from 0 back to the highest CFN in the | |||
| fragment, and MUST wrap from 0 back to 2^N - 2 (e.g. for N=3, the | window. The highest CFN in the window MUST be a value equal to or | |||
| first fragment has CFN=6, subsequent CFNs are set sequentially and | smaller than 2^N-2. (Example 1: for N=5, the highest CFN value | |||
| in decreasing order, and CFN will wrap from 0 back to 6). The CFN | may be configured to be 30, then subsequent CFNs are set | |||
| for the last fragment has all bits set to 1. Note that, by this | sequentially and in decreasing order, and CFN will wrap from 0 | |||
| back to 30. Example 2: for N=5, the highest CFN value may be set | ||||
| to 23, then subsequent CFNs are set sequentially and in decreasing | ||||
| order, and the CFN will wrap from 0 back to 23). The CFN for the | ||||
| last fragment has all bits set to 1. Note that, by this | ||||
| definition, the CFN value of 2^N - 1 is only used to identify a | definition, the CFN value of 2^N - 1 is only used to identify a | |||
| fragment as the last fragment carrying a subset of the IPv6 packet | fragment as the last fragment carrying a subset of the IPv6 packet | |||
| being transported, and thus the CFN does not strictly correspond | being transported, and thus the CFN does not strictly correspond | |||
| to the N least significant bits of the actual absolute fragment | to the N least significant bits of the actual absolute fragment | |||
| number. It is also important to note that, for N=1, the last | number. It is also important to note that, for N=1, the last | |||
| fragment of the packet will carry a CFN equal to 1, while all | fragment of the packet will carry a CFN equal to 1, while all | |||
| previous fragments will carry a CFN of 0. | previous fragments will carry a CFN of 0. | |||
| o W: W is a 1-bit flag that is used in Window mode. Its purpose is | o W: W is a 1-bit field. This field carries the same value for all | |||
| avoiding possible ambiguity for the receiver that might arise | fragments of a window, and it is complemented for the next window. | |||
| under certain conditions. This flag carries the same value for | The initial value for this field is 1. | |||
| all fragments of a window, and it is set to the other value for | ||||
| the next window. The initial value for this flag is 1. | ||||
| o AFN: AFN stands for Absolute Fragment Number. This field has a | ||||
| size of A bits. 'A' may be greater than N. The AFN is an | ||||
| unsigned integer that carries the absolute fragment number that | ||||
| corresponds to a fragment from an IPv6 packet. The AFN MUST be | ||||
| set sequentially and in increasing order, starting from 0. | ||||
| o MIC: MIC stands for Message Integrity Check. This field has a | o MIC: This field, which has a size of M bits, carries the MIC for | |||
| size of M bits. It is computed by the sender over the complete | the IPv6 packet. | |||
| IPv6 packet before fragmentation by using the TBD algorithm. The | ||||
| MIC allows to check for errors in the reassembled IPv6 packet, | ||||
| while it also enables compressing the UDP checksum by use of SCHC. | ||||
| The values for R, N, A and M are not specified in this document, | The values for R, N, T and M are not specified in this document, and | |||
| and have to be determined by the underlying LPWAN technology. | have to be determined in other documents (e.g. technology-specific | |||
| profile documents). | ||||
| 8.6. ACK format | 9.5.3. ACK format | |||
| The format of an ACK is shown in Figure 13: | The format of an ACK is shown in Figure 12: | |||
| <------- R ------> | <-------- R -------> | |||
| <- T -> | <- T -> 1 | |||
| +---- ... --+-... -+----- ... ---+ | +---- ... --+-... -+-+----- ... ---+ | |||
| | Rule ID | DTag | bitmap | | | Rule ID | DTag |W| bitmap | | |||
| +---- ... --+-... -+----- ... ---+ | +---- ... --+-... -+-+----- ... ---+ | |||
| Figure 13: Format of an ACK | Figure 12: Format of an ACK | |||
| Rule ID: In all ACKs, Rule ID has a size of R bits and SHALL be set | Rule ID: In all ACKs, Rule ID has a size of R - T - 1 bits. | |||
| to TBD_ACK to signal that the message is an ACK. | ||||
| DTag: DTag has a size of T bits. DTag carries the same value as the | DTag: DTag has a size of T bits. DTag carries the same value as the | |||
| DTag field in the fragments carrying the IPv6 datagram for which this | DTag field in the fragments carrying the IPv6 datagram for which this | |||
| ACK is intended. | ACK is intended. | |||
| bitmap: size of the bitmap field of an ACK can be equal to 0 or | W: This field has a size of 1 bit. In all ACKs, the W bit carries | |||
| Ceiling(Number_of_Fragments/8) octets, where Number_of_Fragments | the same value as the W bit carried by the fragments whose reception | |||
| denotes the number of fragments of a window (in Window mode) or the | is being positively or negatively acknowledged by the ACK. | |||
| number of fragments that carry the IPv6 packet (in Packet mode). The | ||||
| bitmap is a sequence of bits, where the n-th bit signals whether the | ||||
| n-th fragment transmitted has been correctly received (n-th bit set | ||||
| to 1) or not (n-th bit set to 0). Remaining bits with bit order | ||||
| greater than the number of fragments sent (as determined by the | ||||
| receiver) are set to 0, except for the last bit in the bitmap, which | ||||
| is set to 1 if the last fragment (carrying the MIC) has been | ||||
| correctly received, and 0 otherwise. Absence of the bitmap in an ACK | ||||
| confirms correct reception of all fragments to be acknowledged by | ||||
| means of the ACK. | ||||
| Figure 14 shows an example of an ACK in Packet mode, where the bitmap | ||||
| indicates that the second and the ninth fragments have not been | ||||
| correctly received. In this example, the IPv6 packet is carried by | ||||
| eleven fragments in total, therefore the bitmap has a size of two | ||||
| bytes. | ||||
| <------ R ------> 1 | ||||
| <- T -> 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | ||||
| +---- ... --+-... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Rule ID | DTag |1|0|1|1|1|1|1|1|0|1|1|0|0|0|0|1| | ||||
| +---- ... --+-... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Figure 14: Example of the Bitmap in an ACK | bitmap: This field carries the bitmap sent by the receiver to inform | |||
| the sender about whether fragments in the current window have been | ||||
| received or not. Size of the bitmap field of an ACK can be equal to | ||||
| 0 or Ceiling(Number_of_Fragments/8) octets, where Number_of_Fragments | ||||
| denotes the number of fragments of a window. The bitmap is a | ||||
| sequence of bits, where the n-th bit signals whether the n-th | ||||
| fragment transmitted in the current window has been correctly | ||||
| received (n-th bit set to 1) or not (n-th bit set to 0). Remaining | ||||
| bits with bit order greater than the number of fragments sent (as | ||||
| determined by the receiver) are set to 0, except for the last bit in | ||||
| the bitmap, which is set to 1 if the last fragment of the window has | ||||
| been correctly received, and 0 otherwise. Feedback on reception of | ||||
| the fragment with CFN = 2^N - 1 (last fragment carrying an IPv6 | ||||
| packet) is only given by the last bit of the corresponding window. | ||||
| Absence of the bitmap in an ACK confirms correct reception of all | ||||
| fragments to be acknowledged by means of the ACK. | ||||
| Figure 15 shows an example of an ACK in Window mode (N=3), where the | Figure 13 shows an example of an ACK (N=3), where the bitmap | |||
| bitmap indicates that the second and the fifth fragments have not | indicates that the second and the fifth fragments have not been | |||
| been correctly received. | correctly received. | |||
| <------ R ------> | <------- R -------> | |||
| <- T -> 0 1 2 3 4 5 6 7 | <- T -> 0 1 2 3 4 5 6 7 | |||
| +---- ... --+-... -+-+-+-+-+-+-+-+-+ | +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | |||
| | Rule ID | DTag |1|0|1|1|0|1|1|1| | | Rule ID | DTag |W|1|0|1|1|0|1|1|1| | |||
| +---- ... --+-... -+-+-+-+-+-+-+-+-+ | +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | |||
| Figure 15: Example of the bitmap in an ACK (in Window mode, for N=3) | Figure 13: Example of the bitmap in an ACK (in Window mode, for N=3) | |||
| Figure 16 illustrates an ACK without bitmap. | Figure 14 illustrates an ACK without a bitmap. | |||
| <------ R ------> | <------- R -------> | |||
| <- T -> | <- T -> | |||
| +---- ... --+-... -+ | +---- ... --+-... -+-+ | |||
| | Rule ID | DTag | | | Rule ID | DTag |W| | |||
| +---- ... --+-... -+ | +---- ... --+-... -+-+ | |||
| Figure 16: Example of an ACK without bitmap | Figure 14: Example of an ACK without a bitmap | |||
| 8.7. Baseline mechanism | Note that, in order to exploit the available L2 payload space to the | |||
| fullest, a bitmap may have a size smaller than 2^N bits. In that | ||||
| case, the window in use will have a size lower than 2^N-1 fragments. | ||||
| For example, if the maximum available space for a bitmap is 56 bits, | ||||
| N can be set to 6, and the window size can be set to a maximum of 56 | ||||
| fragments. | ||||
| 9.6. Baseline mechanism | ||||
| The receiver of link fragments SHALL use (1) the sender's L2 source | The receiver of link fragments SHALL use (1) the sender's L2 source | |||
| address (if present), (2) the destination's L2 address (if present), | address (if present), (2) the destination's L2 address (if present), | |||
| (3) Rule ID and (4) DTag to identify all the fragments that belong to | (3) Rule ID and (4) DTag to identify all the fragments that belong to | |||
| a Given IPv6 datagram. The fragment receiver may determine the | a given IPv6 datagram. The fragment receiver may determine the | |||
| fragment delivery reliability option in use for the fragment based on | fragment delivery reliability option in use for the fragment based on | |||
| the Rule ID field in that fragment. | the Rule ID field in that fragment. | |||
| Upon receipt of a link fragment, the receiver starts constructing the | Upon receipt of a link fragment, the receiver starts constructing the | |||
| original unfragmented packet. It uses the CFN and the order of | original unfragmented packet. It uses the CFN and the order of | |||
| arrival of each fragment to determine the location of the individual | arrival of each fragment to determine the location of the individual | |||
| fragments within the original unfragmented packet. For example, it | fragments within the original unfragmented packet. For example, it | |||
| may place the data payload of the fragments within a payload datagram | may place the data payload of the fragments within a payload datagram | |||
| reassembly buffer at the location determined from the CFN and order | reassembly buffer at the location determined from the CFN and order | |||
| of arrival of the fragments, and the fragment payload sizes. In | of arrival of the fragments, and the fragment payload sizes. In | |||
| Window mode, the fragment receiver also uses the W flag in the | Window mode, the fragment receiver also uses the W bit in the | |||
| received fragments. Note that the size of the original, unfragmented | received fragments. Note that the size of the original, unfragmented | |||
| IPv6 packet cannot be determined from fragmentation headers. | IPv6 packet cannot be determined from fragmentation headers. | |||
| When ACK on error is used (for either Packet mode or Window mode), | When Window mode - ACK on error is used, the fragment receiver starts | |||
| the fragment receiver starts a timer (denoted "ACK on Error Timer") | a timer (denoted "ACK on Error Timer") upon reception of the first | |||
| upon reception of the first fragment for an IPv6 datagram. The | fragment for an IPv6 datagram. The initial value for this timer is | |||
| initial value for this timer is not provided by this specification, | not provided by this specification, and is expected to be defined in | |||
| and is expected to be defined in additional documents. This timer is | additional documents. This timer is reset every time that a new | |||
| reset every time that a new fragment carrying data from the same IPv6 | fragment carrying data from the same IPv6 datagram is received. In | |||
| datagram is received. In Packet mode - ACK on error, upon timer | Window mode - ACK on error, upon timer expiration, if neither the | |||
| expiration, if the last fragment of the IPv6 datagram (i.e. carrying | ||||
| all CFN bits set to 1) has not been received, an ACK MUST be | ||||
| transmitted by the fragment receiver to indicate received and not | ||||
| received fragments for that IPv6 datagram. | ||||
| In Window mode - ACK on error, upon timer expiration, if neither the | ||||
| last fragment of the IPv6 datagram nor the last fragment of the | last fragment of the IPv6 datagram nor the last fragment of the | |||
| current window (with CFN=0) have been received, an ACK MUST be | current window (i.e. with CFN=0) have been received, an ACK MUST be | |||
| transmitted by the fragment receiver to indicate received and not | transmitted by the fragment receiver to indicate received and not | |||
| received fragments for the current window. | received fragments for the current window. | |||
| Note that, in Window mode, the first fragment of the window is the | Note that, in Window mode, the first fragment of the window is the | |||
| one sent with CFN=2^N-2. Also note that, in Window mode, the | one sent with CFN=2^N-2. Also note that, in Window mode, the | |||
| fragment with CFN=0 is considered the last fragment of its window, | fragment with CFN=0 is considered the last fragment of its window, | |||
| except for the last fragment of the whole packet (with all CFN bits | except for the last fragment of the whole packet (with all CFN bits | |||
| set to 1), which is also the last fragment of the last window. Upon | set to 1), which is also the last fragment of the last window. Upon | |||
| receipt of the last fragment of a window, if Window mode - ACK | receipt of the last fragment of a window, if Window mode - ACK | |||
| "Always" is used, the fragment receiver MUST send an ACK to the | "Always" is used, the fragment receiver MUST send an ACK to the | |||
| fragment sender. The ACK provides feedback on the fragments received | fragment sender. The ACK provides feedback on the fragments received | |||
| and lost that correspond to the last window. | and lost that correspond to the last window. | |||
| If the recipient receives the last fragment of an IPv6 datagram, it | If the recipient receives the last fragment of an IPv6 datagram, it | |||
| checks for the integrity of the reassembled IPv6 datagram, based on | checks for the integrity of the reassembled IPv6 datagram, based on | |||
| the MIC received. In No ACK mode, if the integrity check indicates | the MIC received. In No ACK mode, if the integrity check indicates | |||
| that the reassembled IPv6 datagram does not match the original IPv6 | that the reassembled IPv6 datagram does not match the original IPv6 | |||
| datagram (prior to fragmentation), the reassembled IPv6 datagram MUST | datagram (prior to fragmentation), the reassembled IPv6 datagram MUST | |||
| be discarded. If ACK "Always" is used, the recipient MUST transmit | be discarded. If Window mode - ACK "Always" is used, the recipient | |||
| an ACK to the fragment sender. The ACK | MUST transmit an ACK to the fragment sender. The ACK provides | |||
| provides feedback on the whole set of fragments sent that carry the | feedback on the fragments that correspond to the last window. If | |||
| complete IPv6 packet (Packet mode) or on the fragments that | Window mode - ACK on error is used, the recipient MUST NOT transmit | |||
| correspond to the last window (Window mode). If ACK on error is | an ACK to the sender if no losses have been detected for the last | |||
| used, the recipient MUST NOT transmit an ACK to the sender if no | window. If losses have been detected, the recipient MUST then | |||
| losses have been detected for the whole IPv6 packet (Packet mode) or | transmit an ACK to the sender to provide feedback on the last window. | |||
| in the last window (Window mode). If losses have been detected, the | ||||
| recipient MUST then transmit an ACK to the sender to provide feedback | ||||
| on the whole IPv6 packet (Packet mode) or in the last window (Window | ||||
| mode). | ||||
| When ACK "Always" is used (in either Packet mode or Window mode), the | ||||
| fragment sender starts a timer (denoted "ACK Always Timer") after | ||||
| transmitting the last fragment of a fragmented IPv6 datagram. The | ||||
| initial value for this timer is not provided by this specification, | ||||
| and is expected to be defined in additional documents. Upon | ||||
| expiration of the timer, if no ACK has been received for this IPv6 | ||||
| datagram, the sender retransmits the last fragment, and it | ||||
| reinitializes and restarts the timer. In Window mode - ACK "Always", | ||||
| the fragment sender also starts the ACK Always Timer after | ||||
| transmitting the last fragment of a window. Upon expiration of the | ||||
| timer, if no ACK has been received for this window, the sender | ||||
| retransmits the last fragment, and it reinitializes and restarts the | ||||
| timer. Note that retransmitting the last fragment of a packet or a | ||||
| window as described serves as an ACK request. The maximum number of | ||||
| ACK requests in Packet mode or in Window mode is TBD. | ||||
| In all reliability options, except for the No ACK option, the | When Window mode - ACK "Always" is used, the fragment sender starts a | |||
| fragment sender retransmits any lost fragments reported in an ACK. | timer (denoted "ACK Always Timer") after transmitting the last | |||
| In Packet modes, in order to minimize the probability of ambiguity | fragment of a fragmented IPv6 datagram. The fragment sender also | |||
| with the CFN of different retransmitted fragments, the fragment | starts the ACK Always Timer after transmitting the last fragment of a | |||
| sender | window. The initial value for this timer is not provided by this | |||
| renumbers the CFNs of the fragments to be retransmitted by following | specification, and is expected to be defined in additional documents. | |||
| the same approach as for a sequence of new fragments: the CFN for | Upon expiration of the timer, if no ACK has been received for the | |||
| retransmitted fragments is set sequentially decreasing from 2^N - 2 | current window, the sender retransmits the last fragment, and it | |||
| for the first fragment, and MUST wrap from 0 back to 2^N - 2. | reinitializes and restarts the timer. Note that retransmitting the | |||
| However, the last fragment of the set of retransmitted fragments only | last fragment of a window as described serves as an ACK request. The | |||
| carries a CFN with all bits set to 1 if it is actually a | maximum number of requests for a specific ACK, denoted | |||
| retransmission of the last fragment of the packet (i.e. the last | MAX_ACK_REQUESTS, is not stated in this document, and it is expected | |||
| fragment had been lost in the first place). Examples of fragment | to be defined in other documents (e.g. technology-specific profiles). | |||
| renumbering for retransmitted fragments in Packet modes can be found | ||||
| in Appendix A. | ||||
| A maximum of TBD iterations of ACK and fragment retransmission rounds | In all Window mode options, the fragment sender retransmits any lost | |||
| are allowed per-window or per-IPv6-packet in Window mode or in Packet | fragments reported in an ACK. | |||
| mode, respectively. | ||||
| If a fragment recipient disassociates from its L2 network, the | If a fragment recipient disassociates from its L2 network, the | |||
| recipient MUST discard all link fragments of all partially | recipient MUST discard all link fragments of all partially | |||
| reassembled payload datagrams, and fragment senders MUST discard all | reassembled payload datagrams, and fragment senders MUST discard all | |||
| not yet transmitted link fragments of all partially transmitted | not yet transmitted link fragments of all partially transmitted | |||
| payload (e.g., IPv6) datagrams. Similarly, when a node first | payload (e.g., IPv6) datagrams. Similarly, when a node first | |||
| receives a fragment of a packet, it starts a reassembly timer. When | receives a fragment of a packet, it starts a reassembly timer. When | |||
| this time expires, if the entire packet has not been reassembled, the | this time expires, if the entire packet has not been reassembled, the | |||
| existing fragments MUST be discarded and the reassembly state MUST be | existing fragments MUST be discarded and the reassembly state MUST be | |||
| flushed. The value for this timer is not provided by this | flushed. The value for this timer is not provided by this | |||
| specification, and is expected to be defined in technology-specific | specification, and is expected to be defined in technology-specific | |||
| profile documents. | profile documents. | |||
| 8.8. Aborting a fragmented IPv6 datagram transmission | 9.7. Supporting multiple window sizes | |||
| For several reasons, a fragment sender or a fragment receiver may | ||||
| want to abort the transmission of a fragmented IPv6 datagram. | ||||
| If the fragment sender triggers abortion, it transmits to the | ||||
| receiver a format equivalent to a fragmentation header (with the | ||||
| format for a fragment that is not the last one), with the Rule ID | ||||
| field (of size R - T - N bits) set to TBD_ABORT_TX and all CFN bits | ||||
| set to 1. No data is carried along with this fragmentation header. | ||||
| If the fragment receiver triggers abortion, it transmits to the | For Window mode operation, implementers may opt to support a single | |||
| fragment sender a Rule ID (of size R bits) set to TBD_ABORT_RX. The | window size or multiple window sizes. The latter, when feasible, may | |||
| entity that triggers abortion (either a fragment sender or a fragment | provide performance optimizations. For example, a large window size | |||
| receiver) MUST release any resources allocated for the fragmented | may be used for IPv6 packets that need to be carried by a large | |||
| IPv6 datagram transmission being aborted. | number of fragments. However, when the number of fragments required | |||
| to carry an IPv6 packet is low, a smaller window size, and thus a | ||||
| shorter bitmap, may be sufficient to provide feedback on all | ||||
| fragments. If multiple window sizes are supported, the Rule ID may | ||||
| be used to signal the window size in use for a specific IPv6 packet | ||||
| transmission. | ||||
| When a fragment receiver receives an L2 frame containing a Rule ID | 9.8. Aborting fragmented IPv6 datagram transmissions | |||
| set to TBD ABORT_TX and a CFN field with all bits set to 1, the | ||||
| receiver MUST release any resources allocated for the fragmented IPv6 | ||||
| datagram transmission being aborted. | ||||
| When a fragment sender receives an L2 frame containing a Rule ID set | For several reasons, a fragment sender or a fragment receiver may | |||
| to TBD_ABORT_RX, the fragment sender MUST abort transmission of the | want to abort the on-going transmission of one or several fragmented | |||
| fragmented IPv6 datagram being transmitted, and MUST release any | IPv6 datagrams. The entity (either the fragment sender or the | |||
| resources allocated for the fragmented IPv6 datagram transmission | fragment receiver) that triggers abortion transmits to the other | |||
| being aborted. | endpoint a format that only comprises a Rule ID (of size R bits), | |||
| which signals abortion of all on-going fragmented IPv6 packet | ||||
| transmissions. The specific value to be used for the Rule ID of this | ||||
| abortion signal is not defined in this document, and is expected to | ||||
| be defined in future documents. | ||||
| A further Rule ID value may be used by an entity to signal abortion | Upon transmission or reception of the abortion signal, both entities | |||
| of all on- going, possibly interleaved, fragmented IPv6 datagram | MUST release any resources allocated for the fragmented IPv6 datagram | |||
| transmissions. | transmissions being aborted. | |||
| 8.9. Downlink fragment transmission | 9.9. Downlink fragment transmission | |||
| In some LPWAN technologies, as part of energy-saving techniques, | In some LPWAN technologies, as part of energy-saving techniques, | |||
| downlink transmission is only possible immediately after an uplink | downlink transmission is only possible immediately after an uplink | |||
| transmission. In order to avoid potentially high delay for | transmission. In order to avoid potentially high delay for | |||
| fragmented IPv6 datagram transmission in the downlink, the fragment | fragmented IPv6 datagram transmission in the downlink, the fragment | |||
| receiver MAY perform an uplink transmission as soon as possible after | receiver MAY perform an uplink transmission as soon as possible after | |||
| reception of a fragment that is not the last one. Such uplink | reception of a fragment that is not the last one. Such uplink | |||
| transmission may be triggered by the L2 (e.g. an L2 ACK sent in | transmission may be triggered by the L2 (e.g. an L2 ACK sent in | |||
| response to a fragment encapsulated in a L2 frame that requires an L2 | response to a fragment encapsulated in a L2 frame that requires an L2 | |||
| ACK) or it may be triggered from an upper layer. | ACK) or it may be triggered from an upper layer. | |||
| 9. Security considerations | 10. Security considerations | |||
| 9.1. Security considerations for header compression | 10.1. Security considerations for header compression | |||
| TBD | A malicious header compression could cause the reconstruction of a | |||
| wrong packet that does not match with the original one, such | ||||
| corruption may be detected with end-to-end authentication and | ||||
| integrity mechanisms. Denial of Service may be produced but its | ||||
| arise other security problems that may be solved with or without | ||||
| header compression. | ||||
| 9.2. Security considerations for fragmentation | 10.2. Security considerations for fragmentation | |||
| This subsection describes potential attacks to LPWAN fragmentation | This subsection describes potential attacks to LPWAN fragmentation | |||
| and proposes countermeasures, based on existing analysis of attacks | and suggests possible countermeasures. | |||
| to 6LoWPAN fragmentation {HHWH}. | ||||
| A node can perform a buffer reservation attack by sending a first | A node can perform a buffer reservation attack by sending a first | |||
| fragment to a target. Then, the receiver will reserve buffer space | fragment to a target. Then, the receiver will reserve buffer space | |||
| for the whole packet on the basis of the datagram size announced in | for the IPv6 packet. Other incoming fragmented packets will be | |||
| that first fragment. Other incoming fragmented packets will be | ||||
| dropped while the reassembly buffer is occupied during the reassembly | dropped while the reassembly buffer is occupied during the reassembly | |||
| timeout. Once that timeout expires, the attacker can repeat the same | timeout. Once that timeout expires, the attacker can repeat the same | |||
| procedure, and iterate, thus creating a denial of service attack. | procedure, and iterate, thus creating a denial of service attack. | |||
| The (low) cost to mount this attack is linear with the number of | The (low) cost to mount this attack is linear with the number of | |||
| buffers at the target node. However, the cost for an attacker can be | buffers at the target node. However, the cost for an attacker can be | |||
| increased if individual fragments of multiple packets can be stored | increased if individual fragments of multiple packets can be stored | |||
| in the reassembly buffer. To further increase the attack cost, the | in the reassembly buffer. To further increase the attack cost, the | |||
| reassembly buffer can be split into fragment-sized buffer slots. | reassembly buffer can be split into fragment-sized buffer slots. | |||
| Once a packet is complete, it is processed normally. If buffer | Once a packet is complete, it is processed normally. If buffer | |||
| overload occurs, a receiver can discard packets based on the sender | overload occurs, a receiver can discard packets based on the sender | |||
| skipping to change at page 30, line 10 ¶ | skipping to change at page 31, line 43 ¶ | |||
| the fragments to be transmitted by a node, by applying content- | the fragments to be transmitted by a node, by applying content- | |||
| chaining to the different fragments, based on cryptographic hash | chaining to the different fragments, based on cryptographic hash | |||
| functionality. The aim of this technique is to allow a receiver to | functionality. The aim of this technique is to allow a receiver to | |||
| identify illegitimate fragments. | identify illegitimate fragments. | |||
| Further attacks may involve sending overlapped fragments (i.e. | Further attacks may involve sending overlapped fragments (i.e. | |||
| comprising some overlapping parts of the original IPv6 datagram). | comprising some overlapping parts of the original IPv6 datagram). | |||
| Implementers should make sure that correct operation is not affected | Implementers should make sure that correct operation is not affected | |||
| by such event. | by such event. | |||
| 10. Acknowledgements | 11. Acknowledgements | |||
| Thanks to Dominique Barthel, Carsten Bormann, Philippe Clavier, | Thanks to Dominique Barthel, Carsten Bormann, Philippe Clavier, | |||
| Arunprabhu Kandasamy, Antony Markovski, Alexander Pelov, Pascal | Arunprabhu Kandasamy, Antony Markovski, Alexander Pelov, Pascal | |||
| Thubert, Juan Carlos Zuniga for useful design consideration. | Thubert, Juan Carlos Zuniga and Diego Dujovne for useful design | |||
| consideration and comments. | ||||
| 11. References | 12. References | |||
| 11.1. Normative References | 12.1. Normative References | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
| December 1998, <http://www.rfc-editor.org/info/rfc2460>. | December 1998, <http://www.rfc-editor.org/info/rfc2460>. | |||
| [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | |||
| "Transmission of IPv6 Packets over IEEE 802.15.4 | "Transmission of IPv6 Packets over IEEE 802.15.4 | |||
| Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | |||
| <http://www.rfc-editor.org/info/rfc4944>. | <http://www.rfc-editor.org/info/rfc4944>. | |||
| 11.2. Informative References | [RFC5795] Sandlund, K., Pelletier, G., and L-E. Jonsson, "The RObust | |||
| Header Compression (ROHC) Framework", RFC 5795, | ||||
| DOI 10.17487/RFC5795, March 2010, | ||||
| <http://www.rfc-editor.org/info/rfc5795>. | ||||
| [RFC7136] Carpenter, B. and S. Jiang, "Significance of IPv6 | ||||
| Interface Identifiers", RFC 7136, DOI 10.17487/RFC7136, | ||||
| February 2014, <http://www.rfc-editor.org/info/rfc7136>. | ||||
| 12.2. Informative References | ||||
| [I-D.ietf-lpwan-overview] | [I-D.ietf-lpwan-overview] | |||
| Farrell, S., "LPWAN Overview", draft-ietf-lpwan- | Farrell, S., "LPWAN Overview", draft-ietf-lpwan- | |||
| overview-01 (work in progress), February 2017. | overview-04 (work in progress), June 2017. | |||
| [I-D.minaburo-lp-wan-gap-analysis] | ||||
| Minaburo, A., Pelov, A., and L. Toutain, "LP-WAN GAP | ||||
| Analysis", draft-minaburo-lp-wan-gap-analysis-01 (work in | ||||
| progress), February 2016. | ||||
| Appendix A. Fragmentation examples | Appendix A. Fragmentation examples | |||
| This section provides examples of different fragment delivery | This section provides examples of different fragment delivery | |||
| reliability options possible on the basis of this specification. | reliability options possible on the basis of this specification. | |||
| Figure 17 illustrates the transmission of an IPv6 packet that needs | Figure 15 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in the No ACK option. | 11 fragments in the No ACK option. | |||
| Sender Receiver | Sender Receiver | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=0-------->| | |-------CFN=0-------->| | |||
| |-------CFN=1-------->|MIC checked => | |-------CFN=1-------->|MIC checked => | |||
| Figure 17: Transmission of an IPv6 packet carried by 11 fragments in | Figure 15: Transmission of an IPv6 packet carried by 11 fragments in | |||
| the No ACK option | the No ACK option | |||
| Figure 18 illustrates the transmission of an IPv6 packet that needs | Figure 16 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in Packet mode - ACK on error, for N=3, without losses. | ||||
| Sender Receiver | ||||
| |-------CFN=6-------->| | ||||
| |-------CFN=5-------->| | ||||
| |-------CFN=4-------->| | ||||
| |-------CFN=3-------->| | ||||
| |-------CFN=2-------->| | ||||
| |-------CFN=1-------->| | ||||
| |-------CFN=0-------->| | ||||
| |-------CFN=6-------->| | ||||
| |-------CFN=5-------->| | ||||
| |-------CFN=4-------->| | ||||
| |-------CFN=7-------->|MIC checked => | ||||
| (no ACK) | ||||
| Figure 18: Transmission of an IPv6 packet carried by 11 fragments in | ||||
| Packet mode - ACK on error, for N=3, no losses. | ||||
| Figure 19 illustrates the transmission of an IPv6 packet that needs | ||||
| 11 fragments in Packet mode - ACK on error, for N=3, with three | ||||
| losses. | ||||
| Sender Receiver | ||||
| (AFN=0) |-------CFN=6-------->| | ||||
| (AFN=1) |-------CFN=5-------->| | ||||
| (AFN=2) |-------CFN=4---X---->| | ||||
| (AFN=3) |-------CFN=3-------->| | ||||
| (AFN=4) |-------CFN=2---X---->| | ||||
| (AFN=5) |-------CFN=1-------->| | ||||
| (AFN=6) |-------CFN=0-------->| | ||||
| (AFN=7) |-------CFN=6-------->| | ||||
| (AFN=8) |-------CFN=5-------->| | ||||
| (AFN=9) |-------CFN=4---X---->| | ||||
| |-------CFN=7-------->|MIC checked | ||||
| |<-------ACK----------|Bitmap:1101011110100001 | ||||
| |-------AFN=2-------->| | ||||
| |-------AFN=4-------->| | ||||
| |-------AFN=9-------->|MIC checked => | ||||
| (no ACK) | ||||
| Figure 19: Transmission of an IPv6 packet carried by 11 fragments in | ||||
| Packet mode - ACK on error, for N=3, three losses. In the figure, | ||||
| (AFN=x) indicates the AFN value computed by the sender for each | ||||
| fragment. | ||||
| Figure 20 illustrates the transmission of an IPv6 packet that needs | ||||
| 11 fragments in Window mode - ACK on error, for N=3, without losses. | 11 fragments in Window mode - ACK on error, for N=3, without losses. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=1, CFN=6----->| | |-----W=1, CFN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, CFN=5----->| | |||
| |-----W=1, CFN=4----->| | |-----W=1, CFN=4----->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, CFN=3----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, CFN=2----->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, CFN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, CFN=0----->| | |||
| (no ACK) | (no ACK) | |||
| |-----W=0, CFN=6----->| | |-----W=0, CFN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, CFN=5----->| | |||
| |-----W=0, CFN=4----->| | |-----W=0, CFN=4----->| | |||
| |-----W=0, CFN=7----->|MIC checked => | |-----W=0, CFN=7----->|MIC checked => | |||
| (no ACK) | (no ACK) | |||
| Figure 20: Transmission of an IPv6 packet carried by 11 fragments in | Figure 16: Transmission of an IPv6 packet carried by 11 fragments in | |||
| Window mode - ACK on error, for N=3, without losses. | Window mode - ACK on error, for N=3, without losses. | |||
| Figure 21 illustrates the transmission of an IPv6 packet that needs | Figure 17 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in Window mode - ACK on error, for N=3, with three | 11 fragments in Window mode - ACK on error, for N=3, with three | |||
| losses. | losses. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=1, CFN=6----->| | |-----W=1, CFN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, CFN=5----->| | |||
| |-----W=1, CFN=4--X-->| | |-----W=1, CFN=4--X-->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, CFN=3----->| | |||
| |-----W=1, CFN=2--X-->| | |-----W=1, CFN=2--X-->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, CFN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, CFN=0----->| | |||
| |<-------ACK----------|Bitmap:11010111 | |<-----ACK, W=1-------|Bitmap:11010111 | |||
| |-----W=1, CFN=4----->| | |-----W=1, CFN=4----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, CFN=2----->| | |||
| (no ACK) | (no ACK) | |||
| |-----W=0, CFN=6----->| | |-----W=0, CFN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, CFN=5----->| | |||
| |-----W=0, CFN=4--X-->| | |-----W=0, CFN=4--X-->| | |||
| |-----W=0, CFN=7----->|MIC checked | |-----W=0, CFN=7----->|MIC checked | |||
| |<-------ACK----------|Bitmap:11010001 | |<-----ACK, W=0-------|Bitmap:11000001 | |||
| |-----W=0, CFN=4----->|MIC checked => | |-----W=0, CFN=4----->|MIC checked => | |||
| (no ACK) | (no ACK) | |||
| Figure 21: Transmission of an IPv6 packet carried by 11 fragments in | Figure 17: Transmission of an IPv6 packet carried by 11 fragments in | |||
| Window mode - ACK on error, for N=3, three losses. | Window mode - ACK on error, for N=3, three losses. | |||
| Figure 22 illustrates the transmission of an IPv6 packet that needs | Figure 18 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in Packet mode - ACK "Always", for N=3, without losses. | 11 fragments in Window mode - ACK "always", for N=3, without losses. | |||
| Sender Receiver | ||||
| |-------CFN=6-------->| | ||||
| |-------CFN=5-------->| | ||||
| |-------CFN=4-------->| | ||||
| |-------CFN=3-------->| | ||||
| |-------CFN=2-------->| | ||||
| |-------CFN=1-------->| | ||||
| |-------CFN=0-------->| | ||||
| |-------CFN=6-------->| | ||||
| |-------CFN=5-------->| | ||||
| |-------CFN=4-------->| | ||||
| |-------CFN=7-------->|MIC checked => | ||||
| |<-------ACK----------|no bitmap | ||||
| (End) | ||||
| Figure 22: Transmission of an IPv6 packet carried by 11 fragments in | ||||
| Packet mode - ACK "Always", for N=3, no losses. | ||||
| Figure 23 illustrates the transmission of an IPv6 packet that needs | ||||
| 11 fragments in Packet mode - ACK "Always", for N=3, with three | ||||
| losses. | ||||
| Sender Receiver | ||||
| (AFN=0) |-------CFN=6-------->| | ||||
| (AFN=1) |-------CFN=5-------->| | ||||
| (AFN=2) |-------CFN=4---X---->| | ||||
| (AFN=3) |-------CFN=3-------->| | ||||
| (AFN=4) |-------CFN=2---X---->| | ||||
| (AFN=5) |-------CFN=1-------->| | ||||
| (AFN=6) |-------CFN=0-------->| | ||||
| (AFN=7) |-------CFN=6-------->| | ||||
| (AFN=8) |-------CFN=5-------->| | ||||
| (AFN=9) |-------CFN=4---X---->| | ||||
| |-------CFN=7-------->|MIC checked | ||||
| |<-------ACK----------|bitmap:1101011110100001 | ||||
| |-------AFN=2-------->| | ||||
| |-------AFN=4-------->| | ||||
| |-------AFN=9-------->|MIC checked => | ||||
| |<-------ACK----------|no bitmap | ||||
| (End) | ||||
| Figure 23: Transmission of an IPv6 packet carried by 11 fragments in | ||||
| Packet mode - ACK "Always", for N=3, with three losses. | ||||
| Figure 24 illustrates the transmission of an IPv6 packet that needs | ||||
| 11 fragments in Window mode - ACK "Always", for N=3, without losses. | ||||
| Note: in Window mode, an additional bit will be needed to number | Note: in Window mode, an additional bit will be needed to number | |||
| windows. | windows. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=1, CFN=6----->| | |-----W=1, CFN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, CFN=5----->| | |||
| |-----W=1, CFN=4----->| | |-----W=1, CFN=4----->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, CFN=3----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, CFN=2----->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, CFN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, CFN=0----->| | |||
| |<-------ACK----------|no bitmap | |<-----ACK, W=1-------|no bitmap | |||
| |-----W=0, CFN=6----->| | |-----W=0, CFN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, CFN=5----->| | |||
| |-----W=0, CFN=4----->| | |-----W=0, CFN=4----->| | |||
| |-----W=0, CFN=7----->|MIC checked => | |-----W=0, CFN=7----->|MIC checked => | |||
| |<-------ACK----------|no bitmap | |<-----ACK, W=0-------|no bitmap | |||
| (End) | (End) | |||
| Figure 24: Transmission of an IPv6 packet carried by 11 fragments in | Figure 18: Transmission of an IPv6 packet carried by 11 fragments in | |||
| Window mode - ACK "Always", for N=3, no losses. | Window mode - ACK "always", for N=3, no losses. | |||
| Figure 25 illustrates the transmission of an IPv6 packet that needs | Figure 19 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in Window mode - ACK "Always", for N=3, with three | 11 fragments in Window mode - ACK "always", for N=3, with three | |||
| losses. | losses. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=1, CFN=6----->| | |-----W=1, CFN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, CFN=5----->| | |||
| |-----W=1, CFN=4--X-->| | |-----W=1, CFN=4--X-->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, CFN=3----->| | |||
| |-----W=1, CFN=2--X-->| | |-----W=1, CFN=2--X-->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, CFN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, CFN=0----->| | |||
| |<-------ACK----------|bitmap:11010111 | |<-----ACK, W=1-------|bitmap:11010111 | |||
| |-----W=1, CFN=4----->| | |-----W=1, CFN=4----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, CFN=2----->| | |||
| |<-------ACK----------|no bitmap | |<-----ACK, W=1-------|no bitmap | |||
| |-----W=0, CFN=6----->| | |-----W=0, CFN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, CFN=5----->| | |||
| |-----W=0, CFN=4--X-->| | |-----W=0, CFN=4--X-->| | |||
| |-----W=0, CFN=7----->|MIC checked | |-----W=0, CFN=7----->|MIC checked | |||
| |<-------ACK----------|bitmap:11010001 | |<-----ACK, W=0-------|bitmap:11000001 | |||
| |-----W=0, CFN=4----->|MIC checked => | |-----W=0, CFN=4----->|MIC checked => | |||
| |<-------ACK----------|no bitmap | |<-----ACK, W=0-------|no bitmap | |||
| (End) | (End) | |||
| Figure 25: Transmission of an IPv6 packet carried by 11 fragments in | Figure 19: Transmission of an IPv6 packet carried by 11 fragments in | |||
| Window mode - ACK "Always", for N=3, with three losses. | Window mode - ACK "Always", for N=3, with three losses. | |||
| Appendix B. Note | Appendix B. Rule IDs for fragmentation | |||
| Different Rule IDs may be used for different aspects of fragmentation | ||||
| functionality as per this document. A summary of such Rule IDs | ||||
| follows: | ||||
| o A fragment, and the reliability option in use for the IPv6 | ||||
| datagram being carried: i) No ACK, ii) Window mode - ACK on error, | ||||
| iii) Window mode - ACK "always". In Window mode, a specific Rule | ||||
| ID may be used for each supported window size. | ||||
| o An ACK message. | ||||
| o A message to abort all on-going transmissions. | ||||
| Appendix C. Note | ||||
| Carles Gomez has been funded in part by the Spanish Government | Carles Gomez has been funded in part by the Spanish Government | |||
| (Ministerio de Educacion, Cultura y Deporte) through the Jose | (Ministerio de Educacion, Cultura y Deporte) through the Jose | |||
| Castillejo grant CAS15/00336, and by the ERDF and the Spanish | Castillejo grant CAS15/00336, and by the ERDF and the Spanish | |||
| Government through project TEC2016-79988-P. Part of his contribution | Government through project TEC2016-79988-P. Part of his contribution | |||
| to this work has been carried out during his stay as a visiting | to this work has been carried out during his stay as a visiting | |||
| scholar at the Computer Laboratory of the University of Cambridge. | scholar at the Computer Laboratory of the University of Cambridge. | |||
| Authors' Addresses | Authors' Addresses | |||
| End of changes. 216 change blocks. | ||||
| 808 lines changed or deleted | 785 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||