| < draft-ietf-lpwan-ipv6-static-context-hc-05.txt | draft-ietf-lpwan-ipv6-static-context-hc-06.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: January 2, 2018 IMT-Atlantique | Expires: March 16, 2018 IMT-Atlantique | |||
| C. Gomez | C. Gomez | |||
| Universitat Politecnica de Catalunya | Universitat Politecnica de Catalunya | |||
| July 01, 2017 | September 12, 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-05 | draft-ietf-lpwan-ipv6-static-context-hc-06 | |||
| Abstract | Abstract | |||
| This document describes a header compression scheme and fragmentation | This document describes a header compression scheme and fragmentation | |||
| functionality for very low bandwidth networks. 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. | |||
| 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 and must be used for | flexibility when processing the header fields and must be used for | |||
| these kind of networks. A common context stored in a LPWAN device | these kind of networks. A common context stored in a LPWAN device | |||
| and in the network is used. This context keeps information that will | and in the network is used. This context keeps information that will | |||
| not be transmitted in the constrained network. Static context means | not be transmitted in the constrained network. Static context means | |||
| that information stored in the context which describes field values, | that information stored in the context, which describes field values, | |||
| does not change during packet transmission, avoiding complex | does not change during packet transmission. This avoids complex | |||
| resynchronization mechanisms, incompatible with LPWAN | resynchronization mechanisms, which are incompatible with LPWAN | |||
| characteristics. In most of the cases, IPv6/UDP headers are reduced | characteristics. In most cases, IPv6/UDP headers are reduced to a | |||
| to a small identifier called Rule ID. But sometimes the SCHC header | small identifier called Rule ID. But sometimes, a packet will not be | |||
| compression mechanisms will not be enough to send the compressed | compressed enough by SCHC to fit in one L2 PDU, and the SCHC | |||
| packet in one L2 PDU, so the SCHC Fragmentation protocol must be used | fragmentation protocol will be used. | |||
| when needed. | ||||
| This document describes SCHC compression/decompression mechanism | This document describes the SCHC compression/decompression framework | |||
| framework and applies it to IPv6/UDP headers. Similar solutions for | and applies it to IPv6/UDP headers. Similar solutions for other | |||
| other protocols such as CoAP will be described in separate documents. | protocols such as CoAP will be described in separate documents. | |||
| Moreover, this document specifies fragmentation and reassembly | Moreover, this document specifies a fragmentation and reassembly | |||
| mechanim for SCHC compressed packets exceeding the L2 PDU size and | mechanism that is used in two situations: for SCHC-compressed packets | |||
| for the case where the SCHC compression is not possible then the | that still exceed the L2 PDU size; and for the case where the SCHC | |||
| packet is sent using the fragmentation protocol. | compression cannot be performed. | |||
| 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 https://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 January 2, 2018. | This Internet-Draft will expire on March 16, 2018. | |||
| 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 | (https://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. LPWAN Architecture . . . . . . . . . . . . . . . . . . . . . 4 | 2. LPWAN Architecture . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. Static Context Header Compression . . . . . . . . . . . . . . 6 | 4. Static Context Header Compression . . . . . . . . . . . . . . 6 | |||
| 4.1. SCHC Rules . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. SCHC Rules . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.2. Rule ID . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Rule ID . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Packet processing . . . . . . . . . . . . . . . . . . . . 9 | 4.3. Packet processing . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. Matching operators . . . . . . . . . . . . . . . . . . . . . 10 | 4.4. Matching operators . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. Compression Decompression Actions (CDA) . . . . . . . . . . . 11 | 4.5. Compression Decompression Actions (CDA) . . . . . . . . . 11 | |||
| 6.1. not-sent CDA . . . . . . . . . . . . . . . . . . . . . . 12 | 4.5.1. not-sent CDA . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.2. value-sent CDA . . . . . . . . . . . . . . . . . . . . . 12 | 4.5.2. value-sent CDA . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.3. mapping-sent . . . . . . . . . . . . . . . . . . . . . . 12 | 4.5.3. mapping-sent . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.4. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.5.4. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 6.5. DEViid, APPiid CDA . . . . . . . . . . . . . . . . . . . 13 | 4.5.5. DEViid, APPiid CDA . . . . . . . . . . . . . . . . . 13 | |||
| 6.6. Compute-* . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.5.6. Compute-* . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 7. Application to IPv6 and UDP headers . . . . . . . . . . . . . 14 | 5. Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 7.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 14 | 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 7.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 14 | 5.2. Reliability options: definition . . . . . . . . . . . . . 14 | |||
| 7.3. Flow label field . . . . . . . . . . . . . . . . . . . . 14 | 5.3. Reliability options: discussion . . . . . . . . . . . . . 15 | |||
| 7.4. Payload Length field . . . . . . . . . . . . . . . . . . 15 | 5.4. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7.5. Next Header field . . . . . . . . . . . . . . . . . . . . 15 | 5.5. Formats . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . . 15 | 5.5.1. Fragment format . . . . . . . . . . . . . . . . . . . 17 | |||
| 7.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . . 16 | 5.5.2. Fragmentation header formats . . . . . . . . . . . . 17 | |||
| 7.7.1. IPv6 source and destination prefixes . . . . . . . . 16 | 5.5.3. ACK format . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.7.2. IPv6 source and destination IID . . . . . . . . . . . 16 | 5.6. Baseline mechanism . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . . 17 | 5.7. Supporting multiple window sizes . . . . . . . . . . . . 24 | |||
| 7.9. UDP source and destination port . . . . . . . . . . . . . 17 | 5.8. Aborting fragmented IPv6 datagram transmissions . . . . . 24 | |||
| 7.10. UDP length field . . . . . . . . . . . . . . . . . . . . 17 | 5.9. Downlink fragment transmission . . . . . . . . . . . . . 24 | |||
| 7.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 18 | 6. SCHC Compression for IPv6 and UDP headers . . . . . . . . . . 25 | |||
| 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 6.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 25 | |||
| 8.1. IPv6/UDP compression . . . . . . . . . . . . . . . . . . 18 | 6.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 25 | |||
| 9. Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . 21 | 6.3. Flow label field . . . . . . . . . . . . . . . . . . . . 25 | |||
| 9.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 21 | 6.4. Payload Length field . . . . . . . . . . . . . . . . . . 26 | |||
| 9.2. Reliability options: definition . . . . . . . . . . . . . 22 | 6.5. Next Header field . . . . . . . . . . . . . . . . . . . . 26 | |||
| 9.3. Reliability options: discussion . . . . . . . . . . . . . 23 | 6.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 9.4. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 6.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . . 27 | |||
| 9.5. Formats . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 6.7.1. IPv6 source and destination prefixes . . . . . . . . 27 | |||
| 9.5.1. Fragment format . . . . . . . . . . . . . . . . . . . 24 | 6.7.2. IPv6 source and destination IID . . . . . . . . . . . 27 | |||
| 9.5.2. Fragmentation header formats . . . . . . . . . . . . 25 | 6.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 9.5.3. ACK format . . . . . . . . . . . . . . . . . . . . . 27 | 6.9. UDP source and destination port . . . . . . . . . . . . . 28 | |||
| 9.6. Baseline mechanism . . . . . . . . . . . . . . . . . . . 28 | 6.10. UDP length field . . . . . . . . . . . . . . . . . . . . 28 | |||
| 9.7. Supporting multiple window sizes . . . . . . . . . . . . 31 | 6.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 29 | |||
| 9.8. Aborting fragmented IPv6 datagram transmissions . . . . . 31 | 7. Security considerations . . . . . . . . . . . . . . . . . . . 29 | |||
| 9.9. Downlink fragment transmission . . . . . . . . . . . . . 31 | 7.1. Security considerations for header compression . . . . . 29 | |||
| 10. Security considerations . . . . . . . . . . . . . . . . . . . 31 | 7.2. Security considerations for fragmentation . . . . . . . . 29 | |||
| 10.1. Security considerations for header compression . . . . . 31 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 10.2. Security considerations for fragmentation . . . . . . . 32 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 30 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 9.2. Informative References . . . . . . . . . . . . . . . . . 31 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 33 | Appendix A. SCHC Compression Examples . . . . . . . . . . . . . 31 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 33 | Appendix B. Fragmentation Examples . . . . . . . . . . . . . . . 33 | |||
| Appendix A. Fragmentation examples . . . . . . . . . . . . . . . 33 | Appendix C. Allocation of Rule IDs for fragmentation . . . . . . 37 | |||
| Appendix B. Rule IDs for fragmentation . . . . . . . . . . . . . 36 | Appendix D. Note . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| Appendix C. Note . . . . . . . . . . . . . . . . . . . . . . . . 37 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 37 | ||||
| 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. Some LPWAN networks | connectivity to the node within a LPWAN network. Some LPWAN networks | |||
| properties can be exploited to get an efficient header compression: | properties can be exploited to get 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 | |||
| skipping to change at page 5, line 46 ¶ | skipping to change at page 5, line 43 ¶ | |||
| 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 Dev-IID: Device Interface Identifier. Second part of the IPv6 | o Dev-IID: Device Interface Identifier. Second part of the IPv6 | |||
| address to identify the device interface | address to identify the device interface | |||
| o DI: Direction Indicator is a differentiator for matching in order | o DI: Direction Indicator is a differentiator for matching in order | |||
| to be able to have different values for both sides. | to be able to have different values for both sides. | |||
| o DTag: Datagram Tag is a fragmentation header field that is set to | ||||
| the same value for all fragments carrying the same IPv6 datagram. | ||||
| o Dw: Down Link direction for compression, from SCHC C/D to Dev | o Dw: Down Link direction for compression, from SCHC C/D to Dev | |||
| o FCN: Fragment Compressed Number is a fragmentation header field | ||||
| that carries an efficient representation of a larger-sized | ||||
| fragment number. | ||||
| o FID: Field Indentifier is an index to describe the header fields | o FID: Field Indentifier is an index to describe the header fields | |||
| in the Rule | in the Rule | |||
| o FP: Field Position is a list of possible correct values that a | o FP: Field Position is a list of possible correct values that a | |||
| field may use | field may use | |||
| o IID: Interface Identifier. See the IPv6 addressing architecture | o IID: Interface Identifier. See the IPv6 addressing architecture | |||
| [RFC7136] | [RFC7136] | |||
| o MIC: Message Integrity Check. A fragmentation header field | ||||
| computed over an IPv6 packet before fragmentation, used for error | ||||
| detection after IPv6 packet reassembly. | ||||
| o MO: Matching Operator. An operator used to match 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 for a specific flow. | |||
| o SCHC C/D: Static Context Header Compression Compressor/ | o SCHC C/D: Static Context Header Compression Compressor/ | |||
| Decompressor. A process in the network to achieve compression/ | Decompressor. A process in the network to achieve compression/ | |||
| decompressing headers. SCHC C/D uses SCHC rules to perform | decompressing headers. SCHC C/D uses SCHC rules to perform | |||
| compression and decompression. | compression and decompression. | |||
| 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. | |||
| o Up: Up Link direction for compression, from Dev to SCHC C/D | o Up: Up Link direction for compression, from Dev to SCHC C/D. | |||
| o W: Window bit. A fragmentation header field used in Window mode | ||||
| (see section 9), which carries the same value for all fragments of | ||||
| a window. | ||||
| 4. Static Context Header Compression | 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 [RFC5795]. Based on | other header compression mechanisms such as RoHC [RFC5795]. Based on | |||
| the fact 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, some static contexts may be stored on the Device (Dev). | networks, some static contexts may be stored on the Device (Dev). | |||
| The contexts must be stored in both ends, and it can either be | The contexts must be stored in both ends, and it can either be | |||
| learned by a provisioning protocol or by out of band means or it can | learned by a provisioning protocol or by out of band means or it can | |||
| be pre-provosioned, etc. The way the context is learned on both | be pre-provisioned, etc. The way the context is learned on both | |||
| sides is out of the scope of this document. | sides is out of the scope of this document. | |||
| Dev App | 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 | | | | |||
| skipping to change at page 9, line 32 ¶ | skipping to change at page 9, line 32 ¶ | |||
| decompression phases. | decompression phases. | |||
| 4.2. 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, it is | The size of the Rule ID is not specified in this document, it is | |||
| implementation-specific and can vary regarding the LPWAN technology, | implementation-specific and can vary regarding the LPWAN technology, | |||
| the number of flows, among others. | 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 as fragmentation. (See Section 9). | header compression as fragmentation. (See Section 5). | |||
| Rule IDs are specific to a Dev. Two Devs may use the same Rule ID for | Rule IDs are specific to a Dev. Two Devs may use the same Rule ID for | |||
| different header compression. To identify the correct Rule ID, the | different header compression. To identify the correct Rule ID, the | |||
| SCHC C/D needs to combine the Rule ID with the Dev L2 identifier to | SCHC C/D needs to combine the Rule ID with the Dev L2 identifier to | |||
| find the appropriate Rule. | find the appropriate Rule. | |||
| 4.3. 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 packet's headers. When doing | will be used to compress the packet's headers. When doing | |||
| compression from Dw to Up the SCHC C/D needs to find the correct | compression from Dw to Up the SCHC C/D needs to find the correct | |||
| Rule to use by identifying its Dev-ID and the Rule-ID. In the Up | Rule to use by identifying its Dev-ID and the Rule-ID. In the Up | |||
| situation only the Rule-ID is used. The next step is to choose | situation only the Rule-ID is used. The next step is to choose | |||
| the fields by their direction, using the direction indicator (DI), | the fields by their direction, using the direction indicator (DI), | |||
| so the fields that do not correspond to the appropiated DI will be | so the fields that do not correspond to the appropriated DI will | |||
| excluded. Next, then the fields are identified according to their | be excluded. Next, then the fields are identified according to | |||
| field identifier (FID) and field position (FP). If the field | their field identifier (FID) and field position (FP). If the | |||
| position does not correspond then the Rule is not use and the SCHC | field position does not correspond then the Rule is not use and | |||
| take next Rule. Once the DI and the FP correspond to the header | the SCHC take next Rule. Once the DI and the FP correspond to the | |||
| information, each field's value is then compared to the | header information, each field's value is then compared to the | |||
| corresponding target value (TV) stored in the Rule for that | corresponding target value (TV) stored in the Rule for that | |||
| specific field using the matching operator (MO). If all the | specific field using the matching operator (MO). If all the | |||
| fields in the packet's header satisfy all the matching operators | fields in the packet's header satisfy all the matching operators | |||
| (MOs) of a Rule (i.e. all results are True), the fields of the | (MOs) of a Rule (i.e. all results are True), the fields of the | |||
| header are then processed according to the Compression/ | header are then processed according to the Compression/ | |||
| Decompession Actions (CDAs) and a compressed header is obtained. | Decompression Actions (CDAs) and a compressed header is obtained. | |||
| Otherwise the next rule is tested. If no eligible rule is found, | Otherwise the next rule is tested. If no eligible rule is found, | |||
| then the header must be sent without compression, in which case | then the header must be sent without compression, in which case | |||
| the fragmentation process must be required. | 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, | information resulting from the compression of header fields, | |||
| directly followed by the payload. The product of field | directly followed by the payload. The product of field | |||
| compression is sent in the order expressed in the Rule for the | compression is sent in the order expressed in the Rule for the | |||
| matching fields. The way the Rule ID is sent depends on the | matching fields. The way the Rule ID is sent depends on the | |||
| specific LPWAN layer two technology and will be specified in a | specific LPWAN layer two technology and will be specified in a | |||
| skipping to change at page 10, line 38 ¶ | skipping to change at page 10, line 38 ¶ | |||
| appropriate Rule through the Rule ID. This Rule gives the | appropriate Rule through the Rule ID. This Rule gives the | |||
| compressed header format and associates these values to the header | compressed header format and associates these values to the header | |||
| fields. It applies the CDA action to reconstruct the original | fields. It applies the CDA action to reconstruct the original | |||
| header fields. The CDA application order can be different of the | header fields. The CDA application order can be different of the | |||
| order given by the Rule. For instance Compute-* may be applied at | order given by the Rule. For instance Compute-* may be applied at | |||
| end, after the other CDAs. | end, after the other CDAs. | |||
| If after using SCHC compression and adding the payload to the L2 | If after using SCHC compression and adding the payload to the L2 | |||
| frame the datagram is not multiple of 8 bits, padding may be used. | frame the datagram is not multiple of 8 bits, padding may be used. | |||
| +--- ... ---+-------------- ... --------------+-------------+--...--+ | +--- ... --+-------------- ... --------------+-----------+--...--+ | |||
| | Rule ID |Compressed Hdr Fields information| payload |padding| | | Rule ID |Compressed Hdr Fields information| payload |padding| | |||
| +--- ... ---+-------------- ... --------------+-------------+--...--+ | +--- ... --+-------------- ... --------------+-----------+--...--+ | |||
| Figure 4: LPWAN Compressed Format Packet | Figure 4: LPWAN Compressed Format Packet | |||
| 5. Matching operators | 4.4. Matching operators | |||
| Matching Operators (MOs) are functions used by both SCHC C/D | Matching Operators (MOs) are functions used by both SCHC C/D | |||
| endpoints involved in the header compression/decompression. They are | endpoints involved in the header compression/decompression. They are | |||
| not typed and can be applied indifferently to integer, string or any | not typed and can be applied indifferently to integer, string or any | |||
| other data type. The result of the operation can either be True or | other data type. The result of the operation can either be True or | |||
| False. MOs are defined as follows: | False. MOs are defined as follows: | |||
| o equal: A field value in a packet matches with a TV in a Rule if | o equal: A field value in a packet matches with a TV in a 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 | |||
| TV in the Rule. The result of the matching is always true. | TV in the Rule. The result of the matching is always true. | |||
| o MSB(length): A matching is obtained if the most significant bits | o MSB(length): A matching is obtained if the most significant bits | |||
| of the length field value bits of the header are equal to the TV | of the length field value bits of the header are equal to the TV | |||
| in the rule. The MSB Matching Operator needs a parameter, | in the rule. The MSB Matching Operator needs a parameter, | |||
| indicating the number of bits, to proceed to the matching. | 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 values. Each value is idenfied by a short ID (or index). | list of values. Each value is identified by a short ID (or | |||
| This operator matches if a field value is equal to one of those | index). This operator matches if a field value is equal to one of | |||
| target values. | those target values. | |||
| 6. Compression Decompression Actions (CDA) | 4.5. Compression Decompression Actions (CDA) | |||
| The Compression Decompression Action (CDA) describes the actions | The Compression Decompression Action (CDA) describes the actions | |||
| 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 | | |||
| skipping to change at page 12, line 18 ¶ | skipping to change at page 12, line 18 ¶ | |||
| first using the following coding: | first using the following coding: | |||
| o If the size is between 0 and 14 bytes it is sent using 4 bits. | 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 | o For values between 15 and 255, the first 4 bit sent are set to 1 | |||
| and the size is sent using 8 bits. | and the size is sent using 8 bits. | |||
| o For higher value, the first 12 bits are set to 1 and the size is | o For higher value, the first 12 bits are set to 1 and the size is | |||
| sent on 2 bytes. | sent on 2 bytes. | |||
| 6.1. not-sent CDA | 4.5.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 | |||
| the 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. | |||
| 6.2. value-sent CDA | 4.5.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. | |||
| 6.3. mapping-sent | 4.5.3. mapping-sent | |||
| mapping-sent is used to send a smaller index associated to the list | mapping-sent is used to send a smaller index associated to the list | |||
| of values in the Target Value. This function is used together with | of values in the Target Value. This function is used together with | |||
| the "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 bits sent is the minimal size to code all the possible | The number of bits sent is the minimal size to code all the possible | |||
| indexes. | indexes. | |||
| 6.4. LSB CDA | 4.5.4. LSB CDA | |||
| LSB action is used to avoid sending the known part of the packet | LSB action is used to avoid sending the known part of the packet | |||
| field header to the other end. This action is used together with the | 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 | "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 | 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 | sent are the field length minus the bits length specified in the MSB | |||
| MO. | MO. | |||
| The compressor sends the "length" Least Significant Bits. The | The compressor sends the "length" Least Significant Bits. The | |||
| decompressor combines the value received with the Target Value. | decompressor combines the value received with the Target Value. | |||
| If this action is made on a variable length field, the remaning size | If this action is made on a variable length field, the remaining size | |||
| in byte has to be sent before. | in byte has to be sent before. | |||
| 6.5. DEViid, APPiid CDA | 4.5.5. DEViid, APPiid CDA | |||
| These functions are used to process respectively the Dev and the App | These functions are used to process respectively the Dev and the App | |||
| Interface Identifiers (Deviid and Appiid) of the IPv6 addresses. | Interface Identifiers (Deviid and Appiid) of the IPv6 addresses. | |||
| Appiid CDA is less common, since current LPWAN technologies frames | Appiid CDA is less common, since current LPWAN technologies frames | |||
| contain a single address. | contain a single address. | |||
| The IID value may be computed from the Device ID present in the Layer | The IID value may be computed from the Device ID present in the Layer | |||
| 2 header. The computation is specific for each LPWAN technology and | 2 header. The computation is specific for each LPWAN technology and | |||
| may depend on the Device ID size. | may depend on the Device ID size. | |||
| In the downstream direction, these CDA may be used to determine the | In the downstream direction, these CDA may be used to determine the | |||
| L2 addresses used by the LPWAN. | L2 addresses used by the LPWAN. | |||
| 6.6. Compute-* | 4.5.6. Compute-* | |||
| These classes of functions are used by the decompressor to compute | These classes of functions are used by the decompressor to compute | |||
| the compressed field value based on received information. Compressed | the compressed field value based on received information. Compressed | |||
| fields are elided during compression and reconstructed during | 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. | |||
| 7. Application to IPv6 and UDP headers | 5. Fragmentation | |||
| This section lists the different IPv6 and UDP header fields and how | ||||
| they can be compressed. | ||||
| 7.1. IPv6 version field | ||||
| This field always holds the same value, therefore the TV is 6, the MO | ||||
| is "equal" and the "CDA "not-sent"". | ||||
| 7.2. IPv6 Traffic class field | ||||
| 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 well-known | ||||
| 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 | ||||
| time or is not known by both sides, then there are two possibilities | ||||
| depending on the variability of the value, the first one is to do not | ||||
| compressed the field and sends the original value, or the second | ||||
| where the values can be computed by sending only the LSB bits: | ||||
| o TV is not set to any value, MO is set to "ignore" and CDA is set | ||||
| to "value-sent" | ||||
| o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | ||||
| 7.3. Flow label field | ||||
| 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- | ||||
| known value, the MO should be "equal" and the CDA should be "not- | ||||
| sent". | ||||
| 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 | ||||
| possibilities depending on the variability of the value, the first | ||||
| 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 | ||||
| compute the original value: | ||||
| o TV is not set, MO is set to "ignore" and CDA is set to "value- | ||||
| sent" | ||||
| o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | ||||
| 7.4. Payload Length field | ||||
| If the LPWAN technology does not add padding, this field can be | ||||
| elided for the transmission on the LPWAN network. The SCHC C/D | ||||
| recomputes the original payload length value. The TV is not set, the | ||||
| MO is set to "ignore" and the CDA is "compute-IPv6-length". | ||||
| If the payload length needs to be sent and does not need to be coded | ||||
| in 16 bits, the TV can be set to 0x0000, the MO set to "MSB (16-s)" | ||||
| 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 | ||||
| replaced by "value-sent". | ||||
| 7.5. Next Header field | ||||
| 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 | ||||
| Header value, the MO should be "equal" and the CDA should be "not- | ||||
| sent". | ||||
| 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 | ||||
| set to "ignore" and CDA is set to "value-sent". A matching-list may | ||||
| also be used. | ||||
| 7.6. Hop Limit field | ||||
| 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 | ||||
| default value, the MO is set to "equal" and the CDA is set to "not- | ||||
| sent". | ||||
| Otherwise the value is sent on the LPWAN: TV is not set, MO is set to | ||||
| ignore and CDA is set to "value-sent". | ||||
| Note that the field behavior differs in upstream and downstream. In | ||||
| 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 | ||||
| downstream value depends of Internet routing and may change more | ||||
| frequently. One solution could be to use the Direction Indicator | ||||
| (DI) to distinguish both directions to elide the field in the | ||||
| upstream direction and send the value in the downstream direction. | ||||
| 7.7. IPv6 addresses fields | ||||
| As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit | ||||
| long fields; one for the prefix and one for the Interface Identifier | ||||
| (IID). These fields should be compressed. To allow a single rule, | ||||
| 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 | ||||
| must be aware of the traffic direction (upstream, downstream) to | ||||
| select the appropriate field. | ||||
| 7.7.1. IPv6 source and destination prefixes | ||||
| Both ends must be synchronized with the appropriate prefixes. For a | ||||
| 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 | ||||
| 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 | ||||
| set to "not-sent". | ||||
| In case the rule allows several prefixes, mapping-list must be used. | ||||
| 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- | ||||
| sent". | ||||
| Otherwise the TV contains the prefix, the MO is set to "equal" and | ||||
| the CDA is set to value-sent. | ||||
| 7.7.2. IPv6 source and destination IID | ||||
| 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 | ||||
| that case, the TV is not set, the MO is set to "ignore" and the CDA | ||||
| is set to "DEViid" or "APPiid". Note that the LPWAN technology is | ||||
| generally carrying a single device identifier corresponding to the | ||||
| DEV. The SCHC C/D may also not be aware of these values. | ||||
| If the DEV address has a static value that is not derivated from an | ||||
| IEEE EUI-64, then TV contains the actual Dev address value, the MO | ||||
| operator is set to "equal" and the CDA is set to "not-sent". | ||||
| If several IIDs are possible, then the TV contains the list of | ||||
| possible IIDs, the MO is set to "match-mapping" and the CDA is set to | ||||
| "mapping-sent". | ||||
| 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 | ||||
| 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 | ||||
| not set, the MO is set to "ignore" and the CDA is set to "value- | ||||
| sent". | ||||
| 7.8. IPv6 extensions | ||||
| No extension rules are currently defined. They can be based on the | ||||
| MOs and CDAs described above. | ||||
| 7.9. UDP source and destination port | ||||
| 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 | ||||
| destination). The SCHC C/D must be aware of the traffic direction | ||||
| (upstream, downstream) to select the appropriate field. The | ||||
| following rules apply for DEV and APP port numbers. | ||||
| If both ends know the port number, it can be elided. The TV contains | ||||
| the port number, the MO is set to "equal" and the CDA is set to "not- | ||||
| sent". | ||||
| 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 | ||||
| "LSB". | ||||
| 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 | ||||
| "mapping-sent". | ||||
| 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". | ||||
| 7.10. UDP length field | ||||
| 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 | ||||
| set, the MO is set to "ignore" and the CDA is set to "compute-UDP- | ||||
| length". | ||||
| If the payload is small, the TV can be set to 0x0000, the MO set to | ||||
| "MSB" and the CDA to "LSB". | ||||
| On other cases, the length must be sent and the CDA is replaced by | ||||
| "value-sent". | ||||
| 7.11. UDP Checksum field | ||||
| 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 | ||||
| over the L2 (such as in the LPWAN fragmentation process (see section | ||||
| Section 9)), the UDP checksum transmission can be avoided. In that | ||||
| case, the TV is not set, the MO is set to "ignore" and the CDA is set | ||||
| to "compute-UDP-checksum". | ||||
| 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". | ||||
| 8. Examples | ||||
| This section gives some scenarios of the compression mechanism for | ||||
| IPv6/UDP. The goal is to illustrate the SCHC behavior. | ||||
| 8.1. IPv6/UDP compression | ||||
| The most common case using the mechanisms defined in this document | ||||
| will be a LPWAN Dev that embeds some applications running over CoAP. | ||||
| In this example, three flows are considered. The first flow is for | ||||
| the device management based on CoAP using Link Local IPv6 addresses | ||||
| 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 | ||||
| ports 5683) and Global IPv6 Address prefixes alpha::IID/64 to | ||||
| beta::1/64. The last flow is for legacy applications using different | ||||
| ports numbers, the destination IPv6 address prefix is gamma::1/64. | ||||
| Figure 6 presents the protocol stack for this Device. IPv6 and UDP | ||||
| are represented with dotted lines since these protocols are | ||||
| compressed on the radio link. | ||||
| Managment Data | ||||
| +----------+---------+---------+ | ||||
| | CoAP | CoAP | legacy | | ||||
| +----||----+---||----+---||----+ | ||||
| . UDP . UDP | UDP | | ||||
| ................................ | ||||
| . IPv6 . IPv6 . IPv6 . | ||||
| +------------------------------+ | ||||
| | SCHC Header compression | | ||||
| | and fragmentation | | ||||
| +------------------------------+ | ||||
| | LPWAN L2 technologies | | ||||
| +------------------------------+ | ||||
| DEV or NGW | ||||
| Figure 6: Simplified Protocol Stack for LP-WAN | ||||
| Note that in some LPWAN technologies, only the Devs have a device ID. | ||||
| Therefore, when such technologies are used, it is necessary to define | ||||
| statically an IID for the Link Local address for the SCHC C/D. | ||||
| Rule 0 | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| | Field |FP|DI| Value | Match | Comp Decomp || Sent | | ||||
| | | | | | Opera. | Action ||[bits]| | ||||
| +----------------+--+--+---------+----------------------++------+ | ||||
| |IPv6 version |1 |Bi|6 | equal | not-sent || | | ||||
| |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Length |1 |Bi| | ignore | comp-length || | | ||||
| |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Bi|255 | ignore | not-sent || | | ||||
| |IPv6 DEVprefix |1 |Bi|FE80::/64| equal | not-sent || | | ||||
| |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | ||||
| |IPv6 APPprefix |1 |Bi|FE80::/64| equal | not-sent || | | ||||
| |IPv6 APPiid |1 |Bi|::1 | equal | not-sent || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| |UDP DEVport |1 |Bi|123 | equal | not-sent || | | ||||
| |UDP APPport |1 |Bi|124 | equal | not-sent || | | ||||
| |UDP Length |1 |Bi| | ignore | comp-length || | | ||||
| |UDP checksum |1 |Bi| | ignore | comp-chk || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| Rule 1 | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| | Field |FP|DI| Value | Match | Action || Sent | | ||||
| | | | | | Opera. | Action ||[bits]| | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| |IPv6 version |1 |Bi|6 | equal | not-sent || | | ||||
| |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Length |1 |Bi| | ignore | comp-length || | | ||||
| |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Bi|255 | ignore | not-sent || | | ||||
| |IPv6 DEVprefix |1 |Bi|[alpha/64, match- | mapping-sent|| [1] | | ||||
| | |1 |Bi|fe80::/64] mapping| || | | ||||
| |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | ||||
| |IPv6 APPprefix |1 |Bi|[beta/64,| match- | mapping-sent|| [2] | | ||||
| | | | |alpha/64,| mapping| || | | ||||
| | | | |fe80::64]| | || | | ||||
| |IPv6 APPiid |1 |Bi|::1000 | equal | not-sent || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| |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 | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| | Field |FP|DI| Value | Match | Action || Sent | | ||||
| | | | | | Opera. | Action ||[bits]| | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| |IPv6 version |1 |Bi|6 | equal | not-sent || | | ||||
| |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Length |1 |Bi| | ignore | comp-length || | | ||||
| |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Up|255 | ignore | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Dw| | ignore | value-sent || [8] | | ||||
| |IPv6 DEVprefix |1 |Bi|alpha/64 | equal | not-sent || | | ||||
| |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | ||||
| |IPv6 APPprefix |1 |Bi|gamma/64 | equal | not-sent || | | ||||
| |IPv6 APPiid |1 |Bi|::1000 | equal | not-sent || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| |UDP DEVport |1 |Bi|8720 | MSB(12)| LSB(4) || [4] | | ||||
| |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 7: Context rules | ||||
| All the fields described in the three rules depicted on Figure 7 are | ||||
| present in the IPv6 and UDP headers. The DEViid-DID value is found | ||||
| in the L2 header. | ||||
| The second and third rules use global addresses. The way the Dev | ||||
| learns the prefix is not in the scope of the document. | ||||
| The third rule compresses port numbers to 4 bits. | ||||
| 9. Fragmentation | ||||
| 9.1. Overview | 5.1. Overview | |||
| Fragmentation supported in LPWAN is mandatory when the underlying | Fragmentation supported in LPWAN is mandatory when the underlying | |||
| LPWAN technology is not capable of fulfilling the IPv6 MTU | LPWAN technology is not capable of fulfilling the IPv6 MTU | |||
| requirement. Fragmentation is used if, after SCHC header | requirement. Fragmentation is used after SCHC header compression | |||
| compression, the size of the resulting IPv6 packet is larger than the | when the size of the resulting compressed packet is larger than the | |||
| L2 data unit maximum payload. Fragmentation is also used if SCHC | L2 data unit maximum payload. In LPWAN technologies, the L2 data | |||
| header compression has not been able to compress an IPv6 packet that | unit size typically varies from tens to hundreds of bytes. If the | |||
| is larger than the L2 data unit maximum payload. In LPWAN | entire datagram fits within a single L2 data unit, the fragmentation | |||
| technologies, the L2 data unit size typically varies from tens to | mechanism is not used and the packet is sent unfragmented. | |||
| hundreds of bytes. If the entire IPv6 datagram fits within a single | Otherwise, the datagram does not fit a single L2 data unit, it SHALL | |||
| L2 data unit, the fragmentation mechanism is not used and the packet | ||||
| is sent unfragmented. | ||||
| 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 datagram. On the other hand, in order to | |||
| to preserve energy, Devices are sleeping most of the time and may | preserve energy, Devices are sleeping most of the time and may | |||
| receive data during a short period of time after transmission. In | receive data during a short period of time after transmission. In | |||
| order to adapt to the capabilities of various LPWAN technologies, | order to adapt to the capabilities of various LPWAN technologies, | |||
| this specification allows for a gradation of fragment delivery | this specification allows a gradation of fragment delivery | |||
| reliability. This document does not make any decision with regard to | reliability. This document does not make any decision with regard to | |||
| which fragment delivery reliability option is used over a specific | which fragment delivery reliability option was used over a 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. | |||
| 9.2. Reliability options: definition | 5.2. Reliability options: definition | |||
| This specification defines the following three fragment delivery | This specification defines the following three fragment delivery | |||
| reliability options: | reliability options: | |||
| o No ACK | o No ACK | |||
| o Window mode - ACK "always" | o Window mode - ACK "always" | |||
| o Window mode - ACK on error | o Window mode - ACK on error | |||
| skipping to change at page 22, line 33 ¶ | skipping to change at page 15, line 18 ¶ | |||
| on top of an L2 LPWAN technology with symmetric characteristics for | on top of an L2 LPWAN technology with symmetric characteristics for | |||
| uplink and downlink). | 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 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. Upon receipt | and/or missed fragments from the window of fragments. Upon receipt | |||
| of an ACK that informs about any lost fragments, the sender | of an ACK that informs about any lost fragments, the sender | |||
| retransmits the lost fragments, as long as a maximum of | retransmits the lost fragments. When an ACK is not received by the | |||
| MAX_FRAG_RETRIES is not exceeded for each one of those fragments. | fragment sender, the latter retransmits a fragment, which serves as | |||
| The default value of MAX_FRAG_RETRIES is not stated in this document, | an ACK request. The maximum number of ACK requests is | |||
| and it is expected to be defined in other documents (e.g. technology- | MAX_ACK_REQUESTS. The default value of MAX_ACK_REQUESTS is not | |||
| specific profiles). | stated in this document, and it is expected to be defined in other | |||
| documents (e.g. technology- specific profiles). | ||||
| 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 missed fragments from | |||
| the window of fragments. Upon receipt of an ACK that informs about | the window of fragments. Upon receipt of an ACK that informs about | |||
| any lost fragments, the sender retransmits the lost fragments. The | any lost fragments, the sender retransmits the lost fragments. The | |||
| maximum number of ACKs to be sent by the receiver for a specific | maximum number of ACKs to be sent by the receiver for a specific | |||
| window, denoted MAX_ACKS_PER_WINDOW, is not stated in this document, | 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- | and it is expected to be defined in other documents (e.g. technology- | |||
| specific profiles). | 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) are supported by a specific LPWAN | |||
| LPWAN technology. | 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. | |||
| 9.3. Reliability options: discussion | 5.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. | reliability option defined in the previous section. | |||
| 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. | |||
| The Window mode - ACK on error option is based on the optimistic | The Window mode - ACK on error option is based on the optimistic | |||
| expectation that the underlying links will offer relatively low L2 | expectation that the underlying links will offer relatively low L2 | |||
| data unit loss probability. This option reduces the number of ACKs | data unit loss probability. This option reduces the number of ACKs | |||
| transmitted by the fragment receiver compared to the Window mode - | transmitted by the fragment receiver compared to the Window mode - | |||
| ACK "always" option. This may be especially beneficial in asymmetric | ACK "always" option. This may be specially beneficial in asymmetric | |||
| scenarios, e.g. where fragmented data are sent uplink and the | scenarios, e.g. where fragmented data are sent uplink and the | |||
| underlying LPWAN technology downlink capacity or message rate is | underlying LPWAN technology downlink capacity or message rate is | |||
| lower than the uplink one. However, if an ACK is lost, the sender | lower than the uplink one. However, if an ACK is lost, the sender | |||
| assumes that all fragments covered by the ACK have been successfully | assumes that all fragments covered by the ACK have been successfully | |||
| delivered. In contrast, the Window mode - ACK "always" option does | delivered. In contrast, the Window mode - ACK "always" option does | |||
| not suffer that issue, at the expense of an ACK overhead increase. | not suffer that issue, at the expense of an ACK overhead increase. | |||
| The Window mode - ACK "always" option provides flow control. In | The Window mode - ACK "always" option provides flow control. In | |||
| addition, it is able to handle long bursts of lost fragments, since | addition, it is able to handle long bursts of lost fragments, since | |||
| detection of such events can be done before end of the IPv6 packet | detection of such events can be done before end of the IPv6 packet | |||
| transmission, as long as the window size is short enough. However, | transmission, as long as the window size is short enough. However, | |||
| such benefit comes at the expense of higher ACK overhead. | such benefit comes at the expense of higher ACK overhead. | |||
| 9.4. Tools | 5.4. Tools | |||
| This subsection describes the different tools that are used to enable | This subsection describes the different tools that are used to enable | |||
| the described fragmentation functionality and the different | the described fragmentation functionality and the different | |||
| reliability options supported. Each tool has a corresponding header | reliability options supported. Each tool has a corresponding header | |||
| field format that is defined in the next subsection. The list of | field format that is defined in the next subsection. The list of | |||
| tools follows: | tools follows: | |||
| o Rule ID. The Rule ID is used in fragments and in ACKs. The Rule | o Rule ID. The Rule ID is used in fragments and in ACKs. The Rule | |||
| ID in a fragment is set to a value that indicates that the data unit | 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- | being carried is a fragment. This also allows to interleave non- | |||
| fragmented IPv6 datagrams with fragments that carry a larger IPv6 | fragmented IPv6 datagrams with fragments that carry a larger IPv6 | |||
| datagram. Rule ID may also be used to signal which reliability | datagram. Rule ID may also be used to signal which reliability | |||
| option is in use for the IPv6 packet being carried. In an ACK, the | option is in use for the IPv6 packet being carried. Rule ID may also | |||
| Rule ID signals that the message this Rule ID is prepended to is an | be used to signal the window size if multiple sizes are supported | |||
| ACK. | (see 9.7). In an ACK, the Rule ID signals that the message this Rule | |||
| ID is prepended to is an ACK. | ||||
| o Compressed Fragment Number (CFN). The CFN is included in all | o Fragment Compressed Number (FCN). The FCN is included in all | |||
| fragments. This field can be understood as a truncated, efficient | fragments. This field can be understood as a truncated, efficient | |||
| representation of a larger-sized fragment number, and does not | representation of a larger-sized fragment number, and does not carry | |||
| necessarily carry an absolute fragment number. A special CFN value | an absolute fragment number. A special FCN value denotes the last | |||
| signals the last fragment that carries a fragmented IPv6 packet. In | fragment that carries a fragmented IPv6 packet. In Window mode, the | |||
| Window mode, the CFN is augmented with the W bit, which has the | FCN is augmented with the W bit, which has the purpose of avoiding | |||
| purpose of avoiding possible ambiguity for the receiver that might | possible ambiguity for the receiver that might arise under certain | |||
| arise under certain conditions | conditions. | |||
| o Datagram Tag (DTag). The DTag field, if present, is set to the | o Datagram Tag (DTag). The DTag field, if present, is set to the | |||
| same value for all fragments carrying the same IPv6 datagram, allows | same value for all fragments carrying the same IPv6 datagram, allows | |||
| to interleave fragments that correspond to different IPv6 datagrams. | to interleave fragments that correspond to different IPv6 datagrams. | |||
| o Message Integrity Check (MIC). It is computed by the sender over | o Message Integrity Check (MIC). It is computed by the sender over | |||
| the complete IPv6 packet before fragmentation by using the TBD | the complete IPv6 packet before fragmentation by using the TBD | |||
| algorithm. The MIC allows the receiver to check for errors in the | algorithm. The MIC allows the receiver to check for errors in the | |||
| reassembled IPv6 packet, while it also enables compressing the UDP | reassembled IPv6 packet, while it also enables compressing the UDP | |||
| checksum by use of SCHC. | checksum by use of SCHC. | |||
| o Bitmap. The bitmap is a sequence of bits included in the ACK for a | 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 | given window, that provides feedback on whether each fragment of the | |||
| current window has been received or not. | current window has been received or not. | |||
| 9.5. Formats | 5.5. Formats | |||
| This section defines the fragment format, the fragmentation header | This section defines the fragment format, the fragmentation header | |||
| formats, and the ACK format. | formats, and the ACK format. | |||
| 9.5.1. Fragment format | 5.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 6. The fragment payload | |||
| carries a subset of either the IPv6 packet after header compression | carries a subset of either an IPv6 packet after header compression or | |||
| or an IPv6 packet which could not be compressed. A fragment is the | 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 6: Fragment format. | |||
| 9.5.2. Fragmentation header formats | 5.5.2. Fragmentation header formats | |||
| In the No ACK option, fragments except the last one SHALL contain the | In the No ACK option, fragments except the last one SHALL contain the | |||
| fragmentation header as defined in Figure 9. The total size of this | fragmentation header as defined in Figure 7. The total size of this | |||
| fragmentation header is R bits. | fragmentation header is R bits. | |||
| <------------ R ----------> | <------------ R ----------> | |||
| <--T--> <--N--> | <--T--> <--N--> | |||
| +-- ... --+- ... -+- ... -+ | +-- ... --+- ... -+- ... -+ | |||
| | Rule ID | DTag | CFN | | | Rule ID | DTag | FCN | | |||
| +-- ... --+- ... -+- ... -+ | +-- ... --+- ... -+- ... -+ | |||
| Figure 9: Fragmentation Header for Fragments except the Last One, No | Figure 7: Fragmentation Header for Fragments except the Last One, No | |||
| ACK option | ACK option | |||
| In any of the Window mode options, fragments except the last one | In any of the Window mode options, fragments except the last one | |||
| SHALL | SHALL | |||
| contain the fragmentation header as defined in Figure 10. The total | contain the fragmentation header as defined in Figure 8. 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| FCN | | |||
| +-- ... --+- ... -+-+- ... -+ | +-- ... --+- ... -+-+- ... -+ | |||
| Figure 10: Fragmentation Header for Fragments except the Last One, | Figure 8: Fragmentation Header for Fragments except the Last One, | |||
| Window mode | Window mode | |||
| In the No ACK option, the last fragment of an IPv6 datagram SHALL | In the No ACK option, the last fragment of an IPv6 datagram SHALL | |||
| contain a fragmentation header that conforms to the format shown in | contain a fragmentation header that conforms to the format shown in | |||
| Figure 11. The total size of this fragmentation header is R+M bits. | Figure 9. 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 11: Fragmentation Header for the Last Fragment, No ACK option | Figure 9: Fragmentation Header for the Last Fragment, No ACK option | |||
| In any of the Window modes, the last fragment of an IPv6 datagram | In any of the Window modes, the last fragment of an IPv6 datagram | |||
| SHALL contain a fragmentation header that conforms to the format | SHALL contain a fragmentation header that conforms to the format | |||
| shown in Figure 12. The total size of this fragmentation header is | shown in Figure 10. The total size of this fragmentation header is | |||
| R+M bits. | R+M bits. | |||
| <------------ R ------------> | <------------ R ------------> | |||
| <- T -> 1 <- N -> <---- M -----> | <- T -> 1 <- N -> <---- M -----> | |||
| +-- ... --+- ... -+-+- ... -+---- ... ----+ | +-- ... --+- ... -+-+- ... -+---- ... ----+ | |||
| | Rule ID | DTag |W| 11..1 | MIC | | | Rule ID | DTag |W| 11..1 | MIC | | |||
| +-- ... --+- ... -+-+- ... -+---- ... ----+ | +-- ... --+- ... -+-+- ... -+---- ... ----+ | |||
| Figure 12: Fragmentation Header for the Last Fragment, Window mode | Figure 10: Fragmentation Header for the Last Fragment, Window mode | |||
| o Rule ID: This field has a size of R - T - N - 1 bits when Window | o Rule ID: This field has a size of R - T - N - 1 bits when Window | |||
| mode is used. In No ACK mode, the Rule ID field has a size of R - | mode is used. In No ACK mode, the Rule ID field has a size of R - | |||
| T - N bits. | T - N bits. | |||
| o DTag: The size of the DTag field is T bits, which may be set to a | o DTag: The size of the DTag field is T bits, which may be set to a | |||
| value greater than or equal to 0 bits. The DTag field in all | value greater than or equal to 0 bits. The DTag field in all | |||
| fragments that carry the same IPv6 datagram MUST be set to the | fragments that carry the same IPv6 datagram MUST be set to the | |||
| same value. DTag MUST be set sequentially increasing from 0 to | same value. DTag MUST be set sequentially increasing from 0 to | |||
| 2^T - 1, and MUST wrap back from 2^T - 1 to 0. | 2^T - 1, and MUST wrap back from 2^T - 1 to 0. | |||
| o CFN: This field is an unsigned integer, with a size of N bits, | o FCN: This field is an unsigned integer, with a size of N bits, | |||
| that carries the CFN of the fragment. In the No ACK option, N=1. | that carries the FCN of the fragment. In the No ACK option, N=1. | |||
| For the rest of options, N equal to or greater than 3 is | For the rest of options, N equal to or greater than 3 is | |||
| recommended. The CFN MUST be set sequentially decreasing from the | recommended. The FCN MUST be set sequentially decreasing from the | |||
| highest CFN in the window (which will be used for the first | highest FCN in the window (which will be used for the first | |||
| fragment), and MUST wrap from 0 back to the highest CFN in the | fragment), and MUST wrap from 0 back to the highest FCN in the | |||
| window. The highest CFN in the window MUST be a value equal to or | window. The highest FCN in the window, denoted MAX_WIND_FCN, MUST | |||
| smaller than 2^N-2. (Example 1: for N=5, the highest CFN value | be a value equal to or smaller than 2^N-2, see further details on | |||
| may be configured to be 30, then subsequent CFNs are set | this at the end of 9.5.3. (Example 1: for N=5, MAX_WIND_FCN may | |||
| sequentially and in decreasing order, and CFN will wrap from 0 | be configured to be 30, then subsequent FCNs are set sequentially | |||
| back to 30. Example 2: for N=5, the highest CFN value may be set | and in decreasing order, and FCN will wrap from 0 back to 30. | |||
| to 23, then subsequent CFNs are set sequentially and in decreasing | Example 2: for N=5, MAX_WIND_FCN may be set to 23, then subsequent | |||
| order, and the CFN will wrap from 0 back to 23). The CFN for the | FCNs are set sequentially and in decreasing order, and the FCN | |||
| last fragment has all bits set to 1. Note that, by this | will wrap from 0 back to 23). The FCN for the last fragment has | |||
| definition, the CFN value of 2^N - 1 is only used to identify a | all bits set to 1. Note that, by this definition, the FCN value | |||
| fragment as the last fragment carrying a subset of the IPv6 packet | of 2^N - 1 is only used to identify a fragment as the last | |||
| being transported, and thus the CFN does not strictly correspond | fragment carrying a subset of the IPv6 packet being transported, | |||
| to the N least significant bits of the actual absolute fragment | and thus the FCN does not correspond to the N least significant | |||
| number. It is also important to note that, for N=1, the last | bits of the actual absolute fragment number. It is also important | |||
| fragment of the packet will carry a CFN equal to 1, while all | to note that, for N=1, the last fragment of the packet will carry | |||
| previous fragments will carry a CFN of 0. | a FCN equal to 1, while all previous fragments will carry a FCN of | |||
| 0. | ||||
| o W: W is a 1-bit field. This field carries the same value for all | o W: W is a 1-bit field. This field carries the same value for all | |||
| fragments of a window, and it is complemented for the next window. | fragments of a window, and it is complemented for the next window. | |||
| The initial value for this field is 1. | The initial value for this field is 1. | |||
| o MIC: This field, which has a size of M bits, carries the MIC for | o MIC: This field, which has a size of M bits, carries the MIC for | |||
| the IPv6 packet. | the IPv6 packet. | |||
| The values for R, N, T and M are not specified in this document, and | The values for R, N, MAX_WIND_FCN, T and M are not specified in this | |||
| have to be determined in other documents (e.g. technology-specific | document, and have to be determined in other documents (e.g. | |||
| profile documents). | technology-specific profile documents). | |||
| 9.5.3. ACK format | 5.5.3. ACK format | |||
| The format of an ACK is shown in Figure 13: | The format of an ACK is shown in Figure 11: | |||
| <-------- R -------> | <-------- R -------> | |||
| <- T -> 1 | <- T -> 1 | |||
| +---- ... --+-... -+-+----- ... ---+ | +---- ... --+-... -+-+----- ... ---+ | |||
| | Rule ID | DTag |W| bitmap | | | Rule ID | DTag |W| bitmap | | |||
| +---- ... --+-... -+-+----- ... ---+ | +---- ... --+-... -+-+----- ... ---+ | |||
| Figure 13: Format of an ACK | Figure 11: Format of an ACK | |||
| Rule ID: In all ACKs, Rule ID has a size of R - T - 1 bits. | Rule ID: In all ACKs, Rule ID has a size of R - T - 1 bits. | |||
| 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. | |||
| W: This field has a size of 1 bit. In all ACKs, the W bit carries | W: This field has a size of 1 bit. In all ACKs, the W bit carries | |||
| the same value as the W bit carried by the fragments whose reception | the same value as the W bit carried by the fragments whose reception | |||
| is being positively or negatively acknowledged by the ACK. | is being positively or negatively acknowledged by the ACK. | |||
| skipping to change at page 27, line 43 ¶ | skipping to change at page 20, line 27 ¶ | |||
| received or not. Size of the bitmap field of an ACK can be equal to | 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 | 0 or Ceiling(Number_of_Fragments/8) octets, where Number_of_Fragments | |||
| denotes the number of fragments of a window. The bitmap is a | 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 | sequence of bits, where the n-th bit signals whether the n-th | |||
| fragment transmitted in the current window has been correctly | 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 | 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 | 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 | 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 | 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 | been correctly received, and 0 otherwise. Feedback on reception of | |||
| the fragment with CFN = 2^N - 1 (last fragment carrying an IPv6 | the fragment with FCN = 2^N - 1 (last fragment carrying an IPv6 | |||
| packet) is only given by the last bit of the corresponding bitmap. | packet) is only given by the last bit of the corresponding bitmap. | |||
| Absence of the bitmap in an ACK confirms correct reception of all | Absence of the bitmap in an ACK confirms correct reception of all | |||
| fragments to be acknowledged by means of the ACK. | fragments to be acknowledged by means of the ACK. Note that absence | |||
| of the bitmap in an ACK may be determined based on the size of the L2 | ||||
| payload. | ||||
| Figure 14 shows an example of an ACK (N=3), where the bitmap | Figure 12 shows an example of an ACK (N=3), where the bitmap | |||
| indicates that the second and the fifth fragments have not been | indicates that the second and the fifth fragments have not 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 |W|1|0|1|1|0|1|1|1| | | Rule ID | DTag |W|1|0|1|1|0|1|1|1| | |||
| +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | |||
| Figure 14: Example of the bitmap in an ACK (in Window mode, for N=3) | Figure 12: Example of the bitmap in an ACK (in Window mode, for N=3) | |||
| Figure 15 illustrates an ACK without a bitmap. | Figure 13 illustrates an ACK without a bitmap. | |||
| <------- R -------> | <------- R -------> | |||
| <- T -> | <- T -> | |||
| +---- ... --+-... -+-+ | +---- ... --+-... -+-+ | |||
| | Rule ID | DTag |W| | | Rule ID | DTag |W| | |||
| +---- ... --+-... -+-+ | +---- ... --+-... -+-+ | |||
| Figure 15: Example of an ACK without a bitmap | Figure 13: Example of an ACK without a bitmap | |||
| Note that, in order to exploit the available L2 payload space to the | 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 | 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. | 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, | 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 | N can be set to 6, and the window size can be set to a maximum of 56 | |||
| fragments. | fragments, thus MAX_WIND_FCN will be equal to 55 in this example. | |||
| 9.6. Baseline mechanism | 5.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 (the latter, if present) to identify all the | (3) Rule ID and (4) DTag (the latter, if present) to identify all the | |||
| fragments that belong to a given IPv6 datagram. The fragment | fragments that belong to a given IPv6 datagram. The fragment | |||
| receiver may determine the fragment delivery reliability option in | receiver may determine the fragment delivery reliability option in | |||
| use for the fragment based on the Rule ID field in that fragment. | use for the fragment based on 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 FCN 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 FCN 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 bit 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 Window mode - ACK on error is used, the fragment receiver starts | When Window mode - ACK on error is used, the fragment receiver starts | |||
| a timer (denoted "ACK on Error Timer") upon reception of the first | a timer (denoted "ACK on Error Timer") upon reception of the first | |||
| fragment for an IPv6 datagram. The initial value for this timer is | fragment for an IPv6 datagram. The initial value for this timer is | |||
| not provided by this specification, and is expected to be defined in | not provided by this specification, and is expected to be defined in | |||
| additional documents. This timer is reset and restarted every time | additional documents. This timer is reset and restarted every time | |||
| that a new fragment carrying data from the same IPv6 datagram is | that a new fragment carrying data from the same IPv6 datagram is | |||
| received. In Window mode - ACK on error, after reception of the last | received. In Window mode - ACK on error, after reception of the last | |||
| fragment of a window (i.e. the fragment with CFN=0 or CFN=2^N-1), if | fragment of a window (i.e. the fragment with FCN=0 or FCN=2^N-1), if | |||
| fragment losses have been detected by the fragment receiver in the | fragment losses have been detected by the fragment receiver in the | |||
| current window, the fragment receiver MUST transmit an ACK reporting | current window, the fragment receiver MUST transmit an ACK reporting | |||
| its available information with regard to sucessfully received and | its available information with regard to successfully received and | |||
| missing fragments from the current window. Upon expiration of the | missing fragments from the current window. Upon expiration of the | |||
| "ACK on Error Timer", if the receiver knows that at least one | "ACK on Error Timer", an ACK MUST be transmitted by the fragment | |||
| fragment of the current window has been lost, an ACK MUST be | receiver to report received and not received fragments for the | |||
| transmitted by the fragment receiver to report received and not | current window. The "ACK on Error Timer" is then reset and | |||
| received fragments for the current window. The "ACK on Error Timer" | restarted. When the last fragment of the IPv6 datagram is received, | |||
| is then reset and restarted. In Window mode - ACK on error, the | if all fragments of that last window of the packet have been | |||
| fragment sender retransmits any lost fragments reported in an ACK. | received, the "ACK on Error Timer" is stopped. In Window mode - ACK | |||
| The maximum number of ACKs to be sent by the receiver for a specific | on error, the fragment sender retransmits any lost fragments reported | |||
| window, denoted MAX_ACKS_PER_WINDOW, is not stated in this document, | in an ACK. The maximum number of ACKs to be sent by the receiver for | |||
| and it is expected to be defined in other documents (e.g. technology- | a specific window, denoted MAX_ACKS_PER_WINDOW, is not stated in this | |||
| specific profiles). | document, and it is expected to be defined in other documents (e.g. | |||
| technology-specific profiles). In Window mode - ACK on error, when a | ||||
| fragment sender has transmitted the last fragment of a window, or it | ||||
| has retransmitted the last fragment within the set of lost fragments | ||||
| reported in an ACK, it is assumed that the time the fragment sender | ||||
| will wait to receive an ACK is smaller than the transmission time of | ||||
| MAX_WIND_FCN + 1 fragments (i.e. the time required to transmit a | ||||
| complete window of fragments). This aspect must be carefully | ||||
| considered if Window mode - ACK on error is used, in particular | ||||
| taking into account the latency characteristics of the underlying L2 | ||||
| technology. | ||||
| 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 with CFN=2^N-2. Also note that, in Window mode, the fragment | one with FCN set to MAX_WIND_FCN. Also note that, in Window mode, | |||
| with CFN=0 is considered the last fragment of its window, except for | the fragment with FCN=0 is considered the last fragment of its | |||
| the last fragment of the whole packet (with all CFN bits set to 1, | window, except for the last fragment of the whole packet (with all | |||
| i.e. CFN=2^N-1), which is also the last fragment of the last window. | FCN bits set to 1, i.e. FCN=2^N-1), which is also the last fragment | |||
| of the last window. | ||||
| If Window mode - ACK "always" is used, upon receipt of the last | If Window mode - ACK "always" is used, upon receipt of the last | |||
| fragment of a window (i.e. the fragment with CFN=0 or CFN=2^N-1), the | fragment of a window (i.e. the fragment with CFN=0 or CFN=2^N-1), or | |||
| fragment receiver MUST send an ACK to the fragment sender. The ACK | upon receipt of the last retransmitted fragment from the set of lost | |||
| provides feedback on the fragments received and those not received | fragments reported by the last ACK sent by the fragment receiver (if | |||
| that correspond to the last window. Once all fragments of a window | any), the fragment receiver MUST send an ACK to the fragment sender. | |||
| have been received by the fragment receiver (including retransmitted | The ACK provides feedback on the fragments received and those not | |||
| fragments, if any), the latter sends an ACK without a bitmap to the | received that correspond to the last window. Once all fragments of a | |||
| sender, in order to report sucessful reception of all fragments of | window have been received by the fragment receiver (including | |||
| the window to the fragment sender. | retransmitted fragments, if any), the latter sends an ACK without a | |||
| bitmap to the sender, in order to report successful reception of all | ||||
| fragments of the window to the fragment sender. | ||||
| When Window mode - ACK "always" is used, the fragment sender starts a | When Window mode - ACK "always" is used, the fragment sender starts a | |||
| timer (denoted "ACK Always Timer") after the first transmission | timer (denoted "ACK Always Timer") after the first transmission | |||
| attempt of the last fragment of a window (i.e. the fragment with | attempt of the last fragment of a window (i.e. the fragment with | |||
| CFN=0 or CFN=2^N-1). In the same reliability option, if one or more | FCN=0 or FCN=2^N-1). In the same reliability option, if one or more | |||
| fragments are reported by an ACK to be lost, the sender retransmits | fragments are reported by an ACK to be lost, the sender retransmits | |||
| those fragments and starts the "ACK Always Timer" after the last | those fragments and starts the "ACK Always Timer" after the last | |||
| retransmitted fragment (i.e. the fragment with the lowest CFN) among | retransmitted fragment (i.e. the fragment with the lowest FCN) among | |||
| the set of lost fragments reported by the ACK. The initial value for | the set of lost fragments reported by the ACK. The initial value for | |||
| the "ACK Always Timer" is not provided by this specification, and it | the "ACK Always Timer" is not provided by this specification, and it | |||
| is expected to be defined in additional documents. Upon expiration | is expected to be defined in additional documents. Upon expiration | |||
| of the timer, if no ACK has been received since the timer start, the | of the timer, if no ACK has been received since the timer start, the | |||
| sender retransmits the last fragment sent, and it reinitializes and | next action to be performed by the fragment sender depends on whether | |||
| restarts the timer. Note that retransmitting the last fragment sent | the current window is the last window of the IPv6 packet or not. If | |||
| as described serves as an ACK request. The maximum number of | the current window is not the last one, the sender retransmits the | |||
| requests for a specific ACK, denoted MAX_ACK_REQUESTS, is not stated | last fragment sent at the moment of timer expiration (which may or | |||
| in this document, and it is expected to be defined in other documents | may not be the fragment with FCN=0), and it reinitializes and | |||
| (e.g. technology-specific profiles). In Window mode - ACK "Always", | restarts the timer. Otherwise (i.e. the current window is the last | |||
| the fragment sender retransmits any lost fragments reported in an | one), the sender retransmits the fragment with FCN=2^N-1; if the | |||
| ACK, as long as the number of retries for each one of those fragments | fragment sender knows that the fragment with FCN=2^N-1 has already | |||
| does not exceed MAX_FRAG_RETRIES. The default value for | been successfully received, the fragment sender MAY opt to send a | |||
| MAX_FRAG_RETRIES is not provided in this document and it is expected | fragment with FCN=2^N-1 and without a data payload. Note that | |||
| to be defined in additional documents. When the fragment sender | retransmitting a fragment sent as described serves as an ACK request. | |||
| receives an ACK that confirms correct reception of all fragments of a | The maximum number of requests for a specific ACK, denoted | |||
| window, if there are further fragments to be sent for the same IPv6 | MAX_ACK_REQUESTS, is not stated in this document, and it is expected | |||
| datagram, the fragment sender proceeds to transmitting subsequent | to be defined in other documents (e.g. technology-specific profiles). | |||
| fragments of the next window. | In Window mode - ACK "Always", the fragment sender retransmits any | |||
| lost fragments reported in an ACK. When the fragment sender receives | ||||
| an ACK that confirms correct reception of all fragments of a window, | ||||
| if there are further fragments to be sent for the same IPv6 datagram, | ||||
| the fragment sender proceeds to transmitting subsequent fragments of | ||||
| the next window. | ||||
| If the recipient receives the last fragment of an IPv6 datagram (i.e. | If the recipient receives the last fragment of an IPv6 datagram (i.e. | |||
| the fragment with CFN=2^N-1), it checks for the integrity of the | the fragment with FCN=2^N-1), it checks for the integrity of the | |||
| reassembled IPv6 datagram, based on the MIC received. In No ACK | reassembled IPv6 datagram, based on the MIC received. In No ACK, if | |||
| mode, if the integrity check indicates that the reassembled IPv6 | the integrity check indicates that the reassembled IPv6 datagram does | |||
| datagram does not match the original IPv6 datagram (prior to | not match the original IPv6 datagram (prior to fragmentation), the | |||
| fragmentation), the reassembled IPv6 datagram MUST be discarded. If | reassembled IPv6 datagram MUST be discarded. In Window mode, a MIC | |||
| Window mode - ACK "Always" is used, the recipient MUST transmit an | check is also performed by the fragment receiver after reception of | |||
| ACK to the fragment sender. The ACK provides feedback on the | each subsequent fragment retransmitted after the first MIC check. In | |||
| fragments from the last window that have been received or not per the | Window mode - ACK "always", if a MIC check indicates that the IPv6 | |||
| information available at the receiver. If Window mode - ACK on error | datagram has been successfully reassembled, the fragment receiver | |||
| is used, the recipient MUST NOT transmit an ACK to the sender if no | sends an ACK without a bitmap to the fragment sender. In the same | |||
| losses have been detected for the last window. If losses have been | reliability option, after receiving a fragment with FCN=2^N-1, the | |||
| detected, the recipient MUST then transmit an ACK to the sender to | fragment receiver sends an ACK to the fragment sender, even if it is | |||
| provide feedback on the transmission of the last window of fragments. | not the first fragment with FCN=2^N-1 received by the fragment | |||
| receiver. | ||||
| 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 either end of the | |||
| receives a fragment of a packet, it starts a reassembly timer. When | LPWAN link first receives a fragment of a packet, it starts a | |||
| this time expires, if the entire packet has not been reassembled, the | reassembly timer. When this time expires, if the entire packet has | |||
| existing fragments MUST be discarded and the reassembly state MUST be | not been reassembled, the existing fragments MUST be discarded and | |||
| flushed. The value for this timer is not provided by this | the reassembly state MUST be flushed. The value for this timer is | |||
| specification, and is expected to be defined in technology-specific | not provided by this specification, and is expected to be defined in | |||
| profile documents. | technology-specific profile documents. | |||
| 9.7. Supporting multiple window sizes | 5.7. Supporting multiple window sizes | |||
| For Window mode operation, implementers may opt to support a single | For Window mode operation, implementers may opt to support a single | |||
| window size or multiple window sizes. The latter, when feasible, may | window size or multiple window sizes. The latter, when feasible, may | |||
| provide performance optimizations. For example, a large window size | provide performance optimizations. For example, a large window size | |||
| may be used for IPv6 packets that need to be carried by a large | may be used for IPv6 packets that need to be carried by a large | |||
| number of fragments. However, when the number of fragments required | number of fragments. However, when the number of fragments required | |||
| to carry an IPv6 packet is low, a smaller window size, and thus a | to carry an IPv6 packet is low, a smaller window size, and thus a | |||
| shorter bitmap, may be sufficient to provide feedback on all | shorter bitmap, may be sufficient to provide feedback on all | |||
| fragments. If multiple window sizes are supported, the Rule ID may | 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 | be used to signal the window size in use for a specific IPv6 packet | |||
| transmission. | transmission. | |||
| 9.8. Aborting fragmented IPv6 datagram transmissions | 5.8. Aborting fragmented IPv6 datagram transmissions | |||
| For several reasons, a fragment sender or a fragment receiver may | For several reasons, a fragment sender or a fragment receiver may | |||
| want to abort the on-going transmission of one or several fragmented | want to abort the on-going transmission of one or several fragmented | |||
| IPv6 datagrams. The entity (either the fragment sender or the | IPv6 datagrams. The entity (either the fragment sender or the | |||
| fragment receiver) that triggers abortion transmits to the other | fragment receiver) that triggers abortion transmits to the other | |||
| endpoint a format that only comprises a Rule ID (of size R bits), | endpoint a data unit with an L2 payload that only comprises a Rule ID | |||
| which signals abortion of all on-going fragmented IPv6 packet | (of size R bits), which signals abortion of all on-going fragmented | |||
| transmissions. The specific value to be used for the Rule ID of this | IPv6 packet transmissions. The specific value to be used for the | |||
| abortion signal is not defined in this document, and is expected to | Rule ID of this abortion signal is not defined in this document, and | |||
| be defined in future documents. | is expected to be defined in future documents. | |||
| Upon transmission or reception of the abortion signal, both entities | Upon transmission or reception of the abortion signal, both entities | |||
| MUST release any resources allocated for the fragmented IPv6 datagram | MUST release any resources allocated for the fragmented IPv6 datagram | |||
| transmissions being aborted. | transmissions being aborted. | |||
| 9.9. Downlink fragment transmission | 5.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. | |||
| 10. Security considerations | 6. SCHC Compression for IPv6 and UDP headers | |||
| 10.1. Security considerations for header compression | This section lists the different IPv6 and UDP header fields and how | |||
| they can be compressed. | ||||
| 6.1. IPv6 version field | ||||
| This field always holds the same value, therefore the TV is 6, the MO | ||||
| is "equal" and the "CDA "not-sent"". | ||||
| 6.2. IPv6 Traffic class field | ||||
| 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 well-known | ||||
| 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 | ||||
| time or is not known by both sides, then there are two possibilities | ||||
| depending on the variability of the value, the first one is to do not | ||||
| compressed the field and sends the original value, or the second | ||||
| where the values can be computed by sending only the LSB bits: | ||||
| o TV is not set to any value, MO is set to "ignore" and CDA is set | ||||
| to "value-sent" | ||||
| o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | ||||
| 6.3. Flow label field | ||||
| 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- | ||||
| known value, the MO should be "equal" and the CDA should be "not- | ||||
| sent". | ||||
| 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 | ||||
| possibilities depending on the variability of the value, the first | ||||
| 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 | ||||
| compute the original value: | ||||
| o TV is not set, MO is set to "ignore" and CDA is set to "value- | ||||
| sent" | ||||
| o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | ||||
| 6.4. Payload Length field | ||||
| If the LPWAN technology does not add padding, this field can be | ||||
| elided for the transmission on the LPWAN network. The SCHC C/D | ||||
| recomputes the original payload length value. The TV is not set, the | ||||
| MO is set to "ignore" and the CDA is "compute-IPv6-length". | ||||
| If the payload length needs to be sent and does not need to be coded | ||||
| in 16 bits, the TV can be set to 0x0000, the MO set to "MSB (16-s)" | ||||
| 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 | ||||
| replaced by "value-sent". | ||||
| 6.5. Next Header field | ||||
| 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 | ||||
| Header value, the MO should be "equal" and the CDA should be "not- | ||||
| sent". | ||||
| 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 | ||||
| set to "ignore" and CDA is set to "value-sent". A matching-list may | ||||
| also be used. | ||||
| 6.6. Hop Limit field | ||||
| 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 | ||||
| default value, the MO is set to "equal" and the CDA is set to "not- | ||||
| sent". | ||||
| Otherwise the value is sent on the LPWAN: TV is not set, MO is set to | ||||
| ignore and CDA is set to "value-sent". | ||||
| Note that the field behavior differs in upstream and downstream. In | ||||
| 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 | ||||
| downstream value depends of Internet routing and may change more | ||||
| frequently. One solution could be to use the Direction Indicator | ||||
| (DI) to distinguish both directions to elide the field in the | ||||
| upstream direction and send the value in the downstream direction. | ||||
| 6.7. IPv6 addresses fields | ||||
| As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit | ||||
| long fields; one for the prefix and one for the Interface Identifier | ||||
| (IID). These fields should be compressed. To allow a single rule, | ||||
| 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 | ||||
| must be aware of the traffic direction (upstream, downstream) to | ||||
| select the appropriate field. | ||||
| 6.7.1. IPv6 source and destination prefixes | ||||
| Both ends must be synchronized with the appropriate prefixes. For a | ||||
| 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 | ||||
| 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 | ||||
| set to "not-sent". | ||||
| In case the rule allows several prefixes, mapping-list must be used. | ||||
| 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- | ||||
| sent". | ||||
| Otherwise the TV contains the prefix, the MO is set to "equal" and | ||||
| the CDA is set to value-sent. | ||||
| 6.7.2. IPv6 source and destination IID | ||||
| 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 | ||||
| that case, the TV is not set, the MO is set to "ignore" and the CDA | ||||
| is set to "DEViid" or "APPiid". Note that the LPWAN technology is | ||||
| generally carrying a single device identifier corresponding to the | ||||
| DEV. The SCHC C/D may also not be aware of these values. | ||||
| If the DEV address has a static value that is not derived from an | ||||
| IEEE EUI-64, then TV contains the actual Dev address value, the MO | ||||
| operator is set to "equal" and the CDA is set to "not-sent". | ||||
| If several IIDs are possible, then the TV contains the list of | ||||
| possible IIDs, the MO is set to "match-mapping" and the CDA is set to | ||||
| "mapping-sent". | ||||
| 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 | ||||
| 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 | ||||
| not set, the MO is set to "ignore" and the CDA is set to "value- | ||||
| sent". | ||||
| 6.8. IPv6 extensions | ||||
| No extension rules are currently defined. They can be based on the | ||||
| MOs and CDAs described above. | ||||
| 6.9. UDP source and destination port | ||||
| 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 | ||||
| destination). The SCHC C/D must be aware of the traffic direction | ||||
| (upstream, downstream) to select the appropriate field. The | ||||
| following rules apply for DEV and APP port numbers. | ||||
| If both ends know the port number, it can be elided. The TV contains | ||||
| the port number, the MO is set to "equal" and the CDA is set to "not- | ||||
| sent". | ||||
| 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 | ||||
| "LSB". | ||||
| 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 | ||||
| "mapping-sent". | ||||
| 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". | ||||
| 6.10. UDP length field | ||||
| 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 | ||||
| set, the MO is set to "ignore" and the CDA is set to "compute-UDP- | ||||
| length". | ||||
| If the payload is small, the TV can be set to 0x0000, the MO set to | ||||
| "MSB" and the CDA to "LSB". | ||||
| On other cases, the length must be sent and the CDA is replaced by | ||||
| "value-sent". | ||||
| 6.11. UDP Checksum field | ||||
| 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 | ||||
| over the L2 (such as in the LPWAN fragmentation process (see section | ||||
| Section 5)), the UDP checksum transmission can be avoided. In that | ||||
| case, the TV is not set, the MO is set to "ignore" and the CDA is set | ||||
| to "compute-UDP-checksum". | ||||
| 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". | ||||
| 7. Security considerations | ||||
| 7.1. Security considerations for header compression | ||||
| A malicious header compression could cause the reconstruction of a | A malicious header compression could cause the reconstruction of a | |||
| wrong packet that does not match with the original one, such | wrong packet that does not match with the original one, such | |||
| corruption may be detected with end-to-end authentication and | corruption may be detected with end-to-end authentication and | |||
| integrity mechanisms. Denial of Service may be produced but its | integrity mechanisms. Denial of Service may be produced but its | |||
| arise other security problems that may be solved with or without | arise other security problems that may be solved with or without | |||
| header compression. | header compression. | |||
| 10.2. Security considerations for fragmentation | 7.2. Security considerations for fragmentation | |||
| This subsection describes potential attacks to LPWAN fragmentation | This subsection describes potential attacks to LPWAN fragmentation | |||
| and suggests possible countermeasures. | and suggests possible countermeasures. | |||
| 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 IPv6 packet. Other incoming fragmented packets will be | for the IPv6 packet. 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. | |||
| skipping to change at page 32, line 32 ¶ | skipping to change at page 29, line 52 ¶ | |||
| 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 | |||
| behavior, which may help identify which fragments have been sent by | behavior, which may help identify which fragments have been sent by | |||
| an attacker. | an attacker. | |||
| In another type of attack, the malicious node is required to have | In another type of attack, the malicious node is required to have | |||
| overhearing capabilities. If an attacker can overhear a fragment, it | overhearing capabilities. If an attacker can overhear a fragment, it | |||
| can send a spoofed duplicate (e.g. with random payload) to the | can send a spoofed duplicate (e.g. with random payload) to the | |||
| destination. A receiver cannot distinguish legitimate from spoofed | destination. If the LPWAN technology does not support suitable | |||
| fragments. Therefore, the original IPv6 packet will be considered | protection (e.g. source authentication and frame counters to prevent | |||
| corrupt and will be dropped. To protect resource-constrained nodes | replay attacks), a receiver cannot distinguish legitimate from | |||
| from this attack, it has been proposed to establish a binding among | spoofed fragments. Therefore, the original IPv6 packet will be | |||
| the fragments to be transmitted by a node, by applying content- | considered corrupt and will be dropped. To protect resource- | |||
| chaining to the different fragments, based on cryptographic hash | constrained nodes from this attack, it has been proposed to establish | |||
| functionality. The aim of this technique is to allow a receiver to | a binding among the fragments to be transmitted by a node, by | |||
| identify illegitimate fragments. | applying content-chaining to the different fragments, based on | |||
| cryptographic hash functionality. The aim of this technique is to | ||||
| allow a receiver to 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. | |||
| 11. Acknowledgements | 8. 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 and Diego Dujovne for useful design | Thubert, Juan Carlos Zuniga and Diego Dujovne for useful design | |||
| consideration and comments. | consideration and comments. | |||
| 12. References | 9. References | |||
| 12.1. Normative References | 9.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, <https://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>. | <https://www.rfc-editor.org/info/rfc4944>. | |||
| [RFC5795] Sandlund, K., Pelletier, G., and L-E. Jonsson, "The RObust | [RFC5795] Sandlund, K., Pelletier, G., and L-E. Jonsson, "The RObust | |||
| Header Compression (ROHC) Framework", RFC 5795, | Header Compression (ROHC) Framework", RFC 5795, | |||
| DOI 10.17487/RFC5795, March 2010, | DOI 10.17487/RFC5795, March 2010, | |||
| <http://www.rfc-editor.org/info/rfc5795>. | <https://www.rfc-editor.org/info/rfc5795>. | |||
| [RFC7136] Carpenter, B. and S. Jiang, "Significance of IPv6 | [RFC7136] Carpenter, B. and S. Jiang, "Significance of IPv6 | |||
| Interface Identifiers", RFC 7136, DOI 10.17487/RFC7136, | Interface Identifiers", RFC 7136, DOI 10.17487/RFC7136, | |||
| February 2014, <http://www.rfc-editor.org/info/rfc7136>. | February 2014, <https://www.rfc-editor.org/info/rfc7136>. | |||
| 12.2. Informative References | 9.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-04 (work in progress), June 2017. | overview-06 (work in progress), July 2017. | |||
| Appendix A. Fragmentation examples | Appendix A. SCHC Compression Examples | |||
| This section gives some scenarios of the compression mechanism for | ||||
| IPv6/UDP. The goal is to illustrate the SCHC behavior. | ||||
| The most common case using the mechanisms defined in this document | ||||
| will be a LPWAN Dev that embeds some applications running over CoAP. | ||||
| In this example, three flows are considered. The first flow is for | ||||
| the device management based on CoAP using Link Local IPv6 addresses | ||||
| 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 | ||||
| ports 5683) and Global IPv6 Address prefixes alpha::IID/64 to | ||||
| beta::1/64. The last flow is for legacy applications using different | ||||
| ports numbers, the destination IPv6 address prefix is gamma::1/64. | ||||
| Figure 14 presents the protocol stack for this Device. IPv6 and UDP | ||||
| are represented with dotted lines since these protocols are | ||||
| compressed on the radio link. | ||||
| Management Data | ||||
| +----------+---------+---------+ | ||||
| | CoAP | CoAP | legacy | | ||||
| +----||----+---||----+---||----+ | ||||
| . UDP . UDP | UDP | | ||||
| ................................ | ||||
| . IPv6 . IPv6 . IPv6 . | ||||
| +------------------------------+ | ||||
| | SCHC Header compression | | ||||
| | and fragmentation | | ||||
| +------------------------------+ | ||||
| | LPWAN L2 technologies | | ||||
| +------------------------------+ | ||||
| DEV or NGW | ||||
| Figure 14: Simplified Protocol Stack for LP-WAN | ||||
| Note that in some LPWAN technologies, only the Devs have a device ID. | ||||
| Therefore, when such technologies are used, it is necessary to define | ||||
| statically an IID for the Link Local address for the SCHC C/D. | ||||
| Rule 0 | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| | Field |FP|DI| Value | Match | Comp Decomp || Sent | | ||||
| | | | | | Opera. | Action ||[bits]| | ||||
| +----------------+--+--+---------+----------------------++------+ | ||||
| |IPv6 version |1 |Bi|6 | equal | not-sent || | | ||||
| |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Length |1 |Bi| | ignore | comp-length || | | ||||
| |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Bi|255 | ignore | not-sent || | | ||||
| |IPv6 DEVprefix |1 |Bi|FE80::/64| equal | not-sent || | | ||||
| |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | ||||
| |IPv6 APPprefix |1 |Bi|FE80::/64| equal | not-sent || | | ||||
| |IPv6 APPiid |1 |Bi|::1 | equal | not-sent || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| |UDP DEVport |1 |Bi|123 | equal | not-sent || | | ||||
| |UDP APPport |1 |Bi|124 | equal | not-sent || | | ||||
| |UDP Length |1 |Bi| | ignore | comp-length || | | ||||
| |UDP checksum |1 |Bi| | ignore | comp-chk || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| Rule 1 | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| | Field |FP|DI| Value | Match | Action || Sent | | ||||
| | | | | | Opera. | Action ||[bits]| | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| |IPv6 version |1 |Bi|6 | equal | not-sent || | | ||||
| |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Length |1 |Bi| | ignore | comp-length || | | ||||
| |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Bi|255 | ignore | not-sent || | | ||||
| |IPv6 DEVprefix |1 |Bi|[alpha/64, match- | mapping-sent|| [1] | | ||||
| | |1 |Bi|fe80::/64] mapping| || | | ||||
| |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | ||||
| |IPv6 APPprefix |1 |Bi|[beta/64,| match- | mapping-sent|| [2] | | ||||
| | | | |alpha/64,| mapping| || | | ||||
| | | | |fe80::64]| | || | | ||||
| |IPv6 APPiid |1 |Bi|::1000 | equal | not-sent || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| |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 | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| | Field |FP|DI| Value | Match | Action || Sent | | ||||
| | | | | | Opera. | Action ||[bits]| | ||||
| +----------------+--+--+---------+--------+-------------++------+ | ||||
| |IPv6 version |1 |Bi|6 | equal | not-sent || | | ||||
| |IPv6 DiffServ |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Flow Label |1 |Bi|0 | equal | not-sent || | | ||||
| |IPv6 Length |1 |Bi| | ignore | comp-length || | | ||||
| |IPv6 Next Header|1 |Bi|17 | equal | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Up|255 | ignore | not-sent || | | ||||
| |IPv6 Hop Limit |1 |Dw| | ignore | value-sent || [8] | | ||||
| |IPv6 DEVprefix |1 |Bi|alpha/64 | equal | not-sent || | | ||||
| |IPv6 DEViid |1 |Bi| | ignore | DEViid || | | ||||
| |IPv6 APPprefix |1 |Bi|gamma/64 | equal | not-sent || | | ||||
| |IPv6 APPiid |1 |Bi|::1000 | equal | not-sent || | | ||||
| +================+==+==+=========+========+=============++======+ | ||||
| |UDP DEVport |1 |Bi|8720 | MSB(12)| LSB(4) || [4] | | ||||
| |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 15: Context rules | ||||
| All the fields described in the three rules depicted on Figure 15 are | ||||
| present in the IPv6 and UDP headers. The DEViid-DID value is found | ||||
| in the L2 header. | ||||
| The second and third rules use global addresses. The way the Dev | ||||
| learns the prefix is not in the scope of the document. | ||||
| The third rule compresses port numbers to 4 bits. | ||||
| Appendix B. 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 16 illustrates the transmission of an IPv6 packet that needs | Figure 16 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-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=0-------->| | |-------FCN=0-------->| | |||
| |-------CFN=1-------->|MIC checked => | |-------FCN=1-------->|MIC checked => | |||
| Figure 16: Transmission of an IPv6 packet carried by 11 fragments in | Figure 16: Transmission of an IPv6 packet carried by 11 fragments in | |||
| the No ACK option | the No ACK option | |||
| Figure 17 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, 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, FCN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, CFN=4----->| | |-----W=1, FCN=4----->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, FCN=3----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, FCN=2----->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, FCN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, FCN=0----->| | |||
| (no ACK) | (no ACK) | |||
| |-----W=0, CFN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, CFN=4----->| | |-----W=0, FCN=4----->| | |||
| |-----W=0, CFN=7----->|MIC checked => | |-----W=0, FCN=7----->|MIC checked => | |||
| (no ACK) | (no ACK) | |||
| Figure 17: 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, without losses. | Window mode - ACK on error, for N=3 and MAX_WIND_FCN=6, without | |||
| losses. | ||||
| Figure 18 illustrates the transmission of an IPv6 packet that needs | Figure 18 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, FCN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, CFN=4--X-->| | |-----W=1, FCN=4--X-->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, FCN=3----->| | |||
| |-----W=1, CFN=2--X-->| | |-----W=1, FCN=2--X-->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, FCN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, FCN=0----->| | |||
| |<-----ACK, W=1-------|Bitmap:11010111 | |<-----ACK, W=1-------|Bitmap:11010111 | |||
| |-----W=1, CFN=4----->| | |-----W=1, FCN=4----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, FCN=2----->| | |||
| (no ACK) | (no ACK) | |||
| |-----W=0, CFN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, CFN=4--X-->| | |-----W=0, FCN=4--X-->| | |||
| |-----W=0, CFN=7----->|MIC checked | |-----W=0, FCN=7----->|MIC checked | |||
| |<-----ACK, W=0-------|Bitmap:11000001 | |<-----ACK, W=0-------|Bitmap:11000001 | |||
| |-----W=0, CFN=4----->|MIC checked => | |-----W=0, FCN=4----->|MIC checked => | |||
| (no ACK) | (no ACK) | |||
| Figure 18: 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 on error, for N=3, three losses. | Window mode - ACK on error, for N=3 and MAX_WIND_FCN=6, three losses. | |||
| Figure 19 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, without losses. | 11 fragments in Window mode - ACK "always", for N=3 and | |||
| Note: in Window mode, an additional bit will be needed to number | MAX_WIND_FCN=6, without losses. Note: in Window mode, an additional | |||
| windows. | bit will be needed to number windows. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=1, CFN=6----->| | |-----W=1, FCN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, CFN=4----->| | |-----W=1, FCN=4----->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, FCN=3----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, FCN=2----->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, FCN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, FCN=0----->| | |||
| |<-----ACK, W=1-------|no bitmap | |<-----ACK, W=1-------|no bitmap | |||
| |-----W=0, CFN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, CFN=4----->| | |-----W=0, FCN=4----->| | |||
| |-----W=0, CFN=7----->|MIC checked => | |-----W=0, FCN=7----->|MIC checked => | |||
| |<-----ACK, W=0-------|no bitmap | |<-----ACK, W=0-------|no bitmap | |||
| (End) | (End) | |||
| Figure 19: 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, no losses. | Window mode - ACK "always", for N=3 and MAX_WIND_FCN=6, no losses. | |||
| Figure 20 illustrates the transmission of an IPv6 packet that needs | Figure 20 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 and | |||
| losses. | MAX_WIND_FCN=6, with three losses. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=1, CFN=6----->| | |-----W=1, FCN=6----->| | |||
| |-----W=1, CFN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, CFN=4--X-->| | |-----W=1, FCN=4--X-->| | |||
| |-----W=1, CFN=3----->| | |-----W=1, FCN=3----->| | |||
| |-----W=1, CFN=2--X-->| | |-----W=1, FCN=2--X-->| | |||
| |-----W=1, CFN=1----->| | |-----W=1, FCN=1----->| | |||
| |-----W=1, CFN=0----->| | |-----W=1, FCN=0----->| | |||
| |<-----ACK, W=1-------|bitmap:11010111 | |<-----ACK, W=1-------|bitmap:11010111 | |||
| |-----W=1, CFN=4----->| | |-----W=1, FCN=4----->| | |||
| |-----W=1, CFN=2----->| | |-----W=1, FCN=2----->| | |||
| |<-----ACK, W=1-------|no bitmap | |<-----ACK, W=1-------|no bitmap | |||
| |-----W=0, CFN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, CFN=4--X-->| | |-----W=0, FCN=4--X-->| | |||
| |-----W=0, CFN=7----->|MIC checked | |-----W=0, FCN=7----->|MIC checked | |||
| |<-----ACK, W=0-------|bitmap:11000001 | |<-----ACK, W=0-------|bitmap:11000001 | |||
| |-----W=0, CFN=4----->|MIC checked => | |-----W=0, FCN=4----->|MIC checked => | |||
| |<-----ACK, W=0-------|no bitmap | |<-----ACK, W=0-------|no bitmap | |||
| (End) | (End) | |||
| Figure 20: Transmission of an IPv6 packet carried by 11 fragments in | Figure 20: 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, and MAX_WIND_FCN=6, with three | |||
| losses. | ||||
| Appendix B. Rule IDs for fragmentation | Appendix C illustrates the transmission of an IPv6 packet that needs | |||
| 28 fragments in Window mode - ACK "always", for N=5 and | ||||
| MAX_WIND_FCN=23, with two losses. Note that MAX_WIND_FCN=23 may be | ||||
| useful when the maximum possible bitmap size, considering the maximum | ||||
| lower layer technology payload size and the value of R, is 3 bytes. | ||||
| Note also that the FCN of the last fragment of the packet is the one | ||||
| with FCN=31 (i.e. FCN=2^N-1 for N=5, or equivalently, all FCN bits | ||||
| set to 1). | ||||
| Different Rule IDs may be used for different aspects of fragmentation | Sender Receiver | |||
| functionality as per this document. A summary of such Rule IDs | |-----W=1, CFN=23----->| | |||
| follows: | |-----W=1, CFN=22----->| | |||
| |-----W=1, CFN=21--X-->| | ||||
| |-----W=1, CFN=20----->| | ||||
| |-----W=1, CFN=19----->| | ||||
| |-----W=1, CFN=18----->| | ||||
| |-----W=1, CFN=17----->| | ||||
| |-----W=1, CFN=16----->| | ||||
| |-----W=1, CFN=15----->| | ||||
| |-----W=1, CFN=14----->| | ||||
| |-----W=1, CFN=13----->| | ||||
| |-----W=1, CFN=12----->| | ||||
| |-----W=1, CFN=11----->| | ||||
| |-----W=1, CFN=10--X-->| | ||||
| |-----W=1, CFN=9 ----->| | ||||
| |-----W=1, CFN=8 ----->| | ||||
| |-----W=1, CFN=7 ----->| | ||||
| |-----W=1, CFN=6 ----->| | ||||
| |-----W=1, CFN=5 ----->| | ||||
| |-----W=1, CFN=4 ----->| | ||||
| |-----W=1, CFN=3 ----->| | ||||
| |-----W=1, CFN=2 ----->| | ||||
| |-----W=1, CFN=1 ----->| | ||||
| |-----W=1, CFN=0 ----->| | ||||
| |<------ACK, W=1-------|bitmap:110111111111101111111111 | ||||
| |-----W=1, CFN=21----->| | ||||
| |-----W=1, CFN=10----->| | ||||
| |<------ACK, W=1-------|no bitmap | ||||
| |-----W=0, CFN=23----->| | ||||
| |-----W=0, CFN=22----->| | ||||
| |-----W=0, CFN=21----->| | ||||
| |-----W=0, CFN=31----->|MIC checked => | ||||
| |<------ACK, W=0-------|no bitmap | ||||
| (End) | ||||
| o A fragment, and the reliability option in use for the IPv6 | Appendix C. Allocation of Rule IDs for fragmentation | |||
| 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. | A set of Rule IDs are allocated to support different aspects of | |||
| fragmentation functionality as per this document. The allocation of | ||||
| IDs is to be defined in other documents. The set MAY include: | ||||
| o A message to abort all on-going transmissions. | o one ID or a subset of IDs to identify a fragment as well as its | |||
| reliability option and its window size, if multiple of these are | ||||
| supported. | ||||
| Appendix C. Note | o one ID to identify the ACK message. | |||
| o one ID to identify the Abort message as per Section 9.8. | ||||
| Appendix D. 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. 129 change blocks. | ||||
| 676 lines changed or deleted | 756 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/ | ||||