| < draft-ietf-lpwan-ipv6-static-context-hc-18.txt | draft-ietf-lpwan-ipv6-static-context-hc-19.txt > | |||
|---|---|---|---|---|
| lpwan Working Group A. Minaburo | lpwan Working Group A. Minaburo | |||
| Internet-Draft Acklio | Internet-Draft Acklio | |||
| Intended status: Standards Track L. Toutain | Intended status: Standards Track L. Toutain | |||
| Expires: June 17, 2019 IMT-Atlantique | Expires: January 5, 2020 IMT-Atlantique | |||
| C. Gomez | C. Gomez | |||
| Universitat Politecnica de Catalunya | Universitat Politecnica de Catalunya | |||
| D. Barthel | D. Barthel | |||
| Orange Labs | Orange Labs | |||
| JC. Zuniga | JC. Zuniga | |||
| SIGFOX | SIGFOX | |||
| December 14, 2018 | July 04, 2019 | |||
| LPWAN Static Context Header Compression (SCHC) and fragmentation for | Static Context Header Compression (SCHC) and fragmentation for LPWAN, | |||
| IPv6 and UDP | application to UDP/IPv6 | |||
| draft-ietf-lpwan-ipv6-static-context-hc-18 | draft-ietf-lpwan-ipv6-static-context-hc-19 | |||
| Abstract | Abstract | |||
| This document defines the Static Context Header Compression (SCHC) | This document defines the Static Context Header Compression (SCHC) | |||
| framework, which provides both header compression and fragmentation | framework, which provides both header compression and fragmentation | |||
| functionalities. SCHC has been designed for Low Power Wide Area | functionalities. SCHC has been designed for Low Power Wide Area | |||
| Networks (LPWAN). | Networks (LPWAN). | |||
| SCHC compression is based on a common static context stored in both | SCHC compression is based on a common static context stored in both | |||
| the LPWAN device and the network side. This document defines a | the LPWAN device and the network side. This document defines a | |||
| skipping to change at page 2, line 20 ¶ | skipping to change at page 2, line 20 ¶ | |||
| 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 https://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 June 17, 2019. | This Internet-Draft will expire on January 5, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2019 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 | |||
| (https://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 | |||
| skipping to change at page 3, line 16 ¶ | skipping to change at page 3, line 16 ¶ | |||
| 7.5.3. not-sent CDA . . . . . . . . . . . . . . . . . . . . 18 | 7.5.3. not-sent CDA . . . . . . . . . . . . . . . . . . . . 18 | |||
| 7.5.4. value-sent CDA . . . . . . . . . . . . . . . . . . . 19 | 7.5.4. value-sent CDA . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.5.5. mapping-sent CDA . . . . . . . . . . . . . . . . . . 19 | 7.5.5. mapping-sent CDA . . . . . . . . . . . . . . . . . . 19 | |||
| 7.5.6. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . 19 | 7.5.6. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.5.7. DevIID, AppIID CDA . . . . . . . . . . . . . . . . . 20 | 7.5.7. DevIID, AppIID CDA . . . . . . . . . . . . . . . . . 20 | |||
| 7.5.8. Compute-* . . . . . . . . . . . . . . . . . . . . . . 20 | 7.5.8. Compute-* . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 8. Fragmentation/Reassembly . . . . . . . . . . . . . . . . . . 20 | 8. Fragmentation/Reassembly . . . . . . . . . . . . . . . . . . 20 | |||
| 8.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 20 | 8.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 8.2. SCHC F/R Protocol Elements . . . . . . . . . . . . . . . 21 | 8.2. SCHC F/R Protocol Elements . . . . . . . . . . . . . . . 21 | |||
| 8.2.1. Messages . . . . . . . . . . . . . . . . . . . . . . 21 | 8.2.1. Messages . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 8.2.2. Tiles, Windows, Bitmaps, Timers, Counters . . . . . . 21 | 8.2.2. Tiles, Windows, Bitmaps, Timers, Counters . . . . . . 22 | |||
| 8.2.3. Integrity Checking . . . . . . . . . . . . . . . . . 24 | 8.2.3. Integrity Checking . . . . . . . . . . . . . . . . . 24 | |||
| 8.2.4. Header Fields . . . . . . . . . . . . . . . . . . . . 24 | 8.2.4. Header Fields . . . . . . . . . . . . . . . . . . . . 24 | |||
| 8.3. SCHC F/R Message Formats . . . . . . . . . . . . . . . . 27 | 8.3. SCHC F/R Message Formats . . . . . . . . . . . . . . . . 27 | |||
| 8.3.1. SCHC Fragment format . . . . . . . . . . . . . . . . 27 | 8.3.1. SCHC Fragment format . . . . . . . . . . . . . . . . 27 | |||
| 8.3.2. SCHC ACK format . . . . . . . . . . . . . . . . . . . 28 | 8.3.2. SCHC ACK format . . . . . . . . . . . . . . . . . . . 28 | |||
| 8.3.3. SCHC ACK REQ format . . . . . . . . . . . . . . . . . 31 | 8.3.3. SCHC ACK REQ format . . . . . . . . . . . . . . . . . 31 | |||
| 8.3.4. SCHC Sender-Abort format . . . . . . . . . . . . . . 31 | 8.3.4. SCHC Sender-Abort format . . . . . . . . . . . . . . 31 | |||
| 8.3.5. SCHC Receiver-Abort format . . . . . . . . . . . . . 31 | 8.3.5. SCHC Receiver-Abort format . . . . . . . . . . . . . 31 | |||
| 8.4. SCHC F/R modes . . . . . . . . . . . . . . . . . . . . . 32 | 8.4. SCHC F/R modes . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 8.4.1. No-ACK mode . . . . . . . . . . . . . . . . . . . . . 33 | 8.4.1. No-ACK mode . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 8.4.2. ACK-Always mode . . . . . . . . . . . . . . . . . . . 35 | 8.4.2. ACK-Always mode . . . . . . . . . . . . . . . . . . . 35 | |||
| 8.4.3. ACK-on-Error mode . . . . . . . . . . . . . . . . . . 41 | 8.4.3. ACK-on-Error mode . . . . . . . . . . . . . . . . . . 41 | |||
| 9. Padding management . . . . . . . . . . . . . . . . . . . . . 47 | 9. Padding management . . . . . . . . . . . . . . . . . . . . . 48 | |||
| 10. SCHC Compression for IPv6 and UDP headers . . . . . . . . . . 48 | 10. SCHC Compression for IPv6 and UDP headers . . . . . . . . . . 49 | |||
| 10.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 48 | 10.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 49 | |||
| 10.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 48 | 10.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 49 | |||
| 10.3. Flow label field . . . . . . . . . . . . . . . . . . . . 49 | 10.3. Flow label field . . . . . . . . . . . . . . . . . . . . 49 | |||
| 10.4. Payload Length field . . . . . . . . . . . . . . . . . . 49 | 10.4. Payload Length field . . . . . . . . . . . . . . . . . . 50 | |||
| 10.5. Next Header field . . . . . . . . . . . . . . . . . . . 49 | 10.5. Next Header field . . . . . . . . . . . . . . . . . . . 50 | |||
| 10.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . 50 | 10.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . 50 | |||
| 10.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . 50 | 10.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . 50 | |||
| 10.7.1. IPv6 source and destination prefixes . . . . . . . . 50 | 10.7.1. IPv6 source and destination prefixes . . . . . . . . 51 | |||
| 10.7.2. IPv6 source and destination IID . . . . . . . . . . 51 | 10.7.2. IPv6 source and destination IID . . . . . . . . . . 51 | |||
| 10.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . 51 | 10.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . 51 | |||
| 10.9. UDP source and destination port . . . . . . . . . . . . 51 | 10.9. UDP source and destination port . . . . . . . . . . . . 52 | |||
| 10.10. UDP length field . . . . . . . . . . . . . . . . . . . . 52 | 10.10. UDP length field . . . . . . . . . . . . . . . . . . . . 52 | |||
| 10.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 52 | 10.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 52 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 12. Security considerations . . . . . . . . . . . . . . . . . . . 53 | 12. Security considerations . . . . . . . . . . . . . . . . . . . 53 | |||
| 12.1. Security considerations for SCHC | 12.1. Security considerations for SCHC | |||
| Compression/Decompression . . . . . . . . . . . . . . . 53 | Compression/Decompression . . . . . . . . . . . . . . . 53 | |||
| 12.2. Security considerations for SCHC | 12.2. Security considerations for SCHC | |||
| Fragmentation/Reassembly . . . . . . . . . . . . . . . . 53 | Fragmentation/Reassembly . . . . . . . . . . . . . . . . 54 | |||
| 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 54 | 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 14.1. Normative References . . . . . . . . . . . . . . . . . . 55 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 55 | |||
| 14.2. Informative References . . . . . . . . . . . . . . . . . 55 | 14.2. Informative References . . . . . . . . . . . . . . . . . 56 | |||
| Appendix A. Compression Examples . . . . . . . . . . . . . . . . 56 | Appendix A. Compression Examples . . . . . . . . . . . . . . . . 57 | |||
| Appendix B. Fragmentation Examples . . . . . . . . . . . . . . . 59 | Appendix B. Fragmentation Examples . . . . . . . . . . . . . . . 59 | |||
| Appendix C. Fragmentation State Machines . . . . . . . . . . . . 66 | Appendix C. Fragmentation State Machines . . . . . . . . . . . . 67 | |||
| Appendix D. SCHC Parameters . . . . . . . . . . . . . . . . . . 72 | Appendix D. SCHC Parameters . . . . . . . . . . . . . . . . . . 73 | |||
| Appendix E. Supporting multiple window sizes for fragmentation . 74 | Appendix E. Supporting multiple window sizes for fragmentation . 75 | |||
| Appendix F. Downlink SCHC Fragment transmission . . . . . . . . 74 | Appendix F. Downlink SCHC Fragment transmission . . . . . . . . 75 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 75 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 76 | |||
| 1. Introduction | 1. Introduction | |||
| This document defines the Static Context Header Compression (SCHC) | This document defines the Static Context Header Compression (SCHC) | |||
| framework, which provides both header compression and fragmentation | framework, which provides both header compression and fragmentation | |||
| functionalities. SCHC has been designed for Low Power Wide Area | functionalities. SCHC has been designed for Low Power Wide Area | |||
| Networks (LPWAN). | Networks (LPWAN). | |||
| LPWAN technologies impose some strict limitations on traffic. For | ||||
| instance, devices sleep most of the time and may only receive data | ||||
| during short periods of time after transmission, in order to preserve | ||||
| battery. LPWAN technologies are also characterized by a greatly | ||||
| reduced data unit and/or payload size (see [RFC8376]). | ||||
| Header compression is needed for efficient Internet connectivity to | Header compression is needed for efficient Internet connectivity to | |||
| the node within an LPWAN network. Some LPWAN networks properties can | the node within an LPWAN network. The following properties of LPWAN | |||
| be exploited to get an efficient header compression: | networks can be exploited to get an efficient header compression: | |||
| o The network topology is star-oriented, which means that all | o The network topology is star-oriented, which means that all | |||
| packets between the same source-destination pair follow the same | packets between the same source-destination pair follow the same | |||
| path. For the needs of this document, the architecture can simply | path. For the needs of this document, the architecture can simply | |||
| be described as Devices (Dev) exchanging information with LPWAN | be described as Devices (Dev) exchanging information with LPWAN | |||
| Application Servers (App) through a Network Gateway (NGW). | Application Servers (App) through a Network Gateway (NGW). | |||
| o Because devices embed built-in applications, the traffic flows to | o Because devices embed built-in applications, the traffic flows to | |||
| be compressed are known in advance. Indeed, new applications are | be compressed are known in advance. Indeed, new applications are | |||
| less frequently installed in an LPWAN device, as they are in a | less frequently installed in an LPWAN device, than they are in a | |||
| computer or smartphone. | computer or smartphone. | |||
| SCHC compression uses a Context (a set of Rules) in which information | SCHC compression uses a Context (a set of Rules) in which information | |||
| about header fields is stored. This Context is static: the values of | about header fields is stored. This Context is static: the values of | |||
| the header fields and the actions to do compression/decompression do | the header fields and the actions to do compression/decompression do | |||
| not change over time. This avoids complex resynchronization | not change over time. This avoids the need for complex | |||
| mechanisms. Indeed, downlink is often more restricted/expensive, | resynchronization mechanisms. Indeed, a return path may be more | |||
| perhaps completely unavailable [RFC8376]. A compression protocol | restricted/expensive, sometimes completely unavailable [RFC8376]. A | |||
| that relies on feedback is not compatible with the characteristics of | compression protocol that relies on feedback is not compatible with | |||
| such LPWANs. | the characteristics of such LPWANs. | |||
| In most cases, a small Rule identifier is enough to represent the | In most cases, a small Rule identifier is enough to represent the | |||
| full IPv6/UDP headers. The SCHC header compression mechanism is | full IPv6/UDP headers. The SCHC header compression mechanism is | |||
| independent of the specific LPWAN technology over which it is used. | independent of the specific LPWAN technology over which it is used. | |||
| LPWAN technologies impose some strict limitations on traffic. For | Furthermore, some LPWAN technologies do not provide a fragmentation | |||
| instance, devices are sleeping most of the time and may receive data | functionality; to support the IPv6 MTU requirement of 1280 bytes | |||
| during short periods of time after transmission to preserve battery. | [RFC8200], they require a fragmentation protocol at the adaptation | |||
| layer below IPv6. Accordingly, this document defines an optional | ||||
| LPWAN technologies are also characterized by a greatly reduced data | fragmentation/reassembly mechanism for LPWAN technologies to support | |||
| unit and/or payload size (see [RFC8376]). However, some LPWAN | the IPv6 MTU requirement. | |||
| technologies do not provide fragmentation functionality; to support | ||||
| the IPv6 MTU requirement of 1280 bytes [RFC8200], they require a | ||||
| fragmentation protocol at the adaptation layer below IPv6. | ||||
| Accordingly, this document defines an optional fragmentation/ | ||||
| reassembly mechanism for LPWAN technologies to support the IPv6 MTU | ||||
| requirement. | ||||
| This document defines generic functionality and offers flexibility | This document defines generic functionality and offers flexibility | |||
| with regard to parameters settings and mechanism choices. | with regard to parameters settings and mechanism choices. | |||
| Technology-specific settings and product-specific choices are | Technology-specific settings and product-specific choices are | |||
| expected to be grouped into Profiles specified in other documents. | expected to be grouped into Profiles specified in other documents. | |||
| 2. Requirements Notation | 2. Requirements Notation | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| skipping to change at page 6, line 36 ¶ | skipping to change at page 6, line 36 ¶ | |||
| o AppIID: Application Interface Identifier. The IID that identifies | o AppIID: Application Interface Identifier. The IID that identifies | |||
| the application server interface. | the application server interface. | |||
| o Bi: Bidirectional. Characterizes a Field Descriptor that applies | o Bi: Bidirectional. Characterizes a Field Descriptor that applies | |||
| to headers of packets traveling in either direction (Up and Dw, | to headers of packets traveling in either direction (Up and Dw, | |||
| see this glossary). | see this glossary). | |||
| o CDA: Compression/Decompression Action. Describes the pair of | o CDA: Compression/Decompression Action. Describes the pair of | |||
| inverse actions that are performed at the compressor to compress a | inverse actions that are performed at the compressor to compress a | |||
| header field and at the decompressor to recover the original | header field and at the decompressor to recover the original value | |||
| header field value. | of the header field. | |||
| o Compression Residue. The bits that remain to be sent (beyond the | o Compression Residue. The bits that remain to be sent (beyond the | |||
| Rule ID itself) after applying the SCHC compression. | Rule ID itself) after applying the SCHC compression. | |||
| o Context: A set of Rules used to compress/decompress headers. | o Context: A set of Rules used to compress/decompress headers. | |||
| o Dev: Device, as defined by [RFC8376]. | o Dev: Device, as defined by [RFC8376]. | |||
| o DevIID: Device Interface Identifier. The IID that identifies the | o DevIID: Device Interface Identifier. The IID that identifies the | |||
| Dev interface. | Dev interface. | |||
| skipping to change at page 7, line 25 ¶ | skipping to change at page 7, line 25 ¶ | |||
| o FID: Field Identifier. This identifies the protocol and field a | o FID: Field Identifier. This identifies the protocol and field a | |||
| Field Description applies to. | Field Description applies to. | |||
| o FL: Field Length is the length of the packet header field. It is | o FL: Field Length is the length of the packet header field. It is | |||
| expressed in bits for header fields of fixed lengths or as a type | expressed in bits for header fields of fixed lengths or as a type | |||
| (e.g. variable, token length, ...) for field lengths that are | (e.g. variable, token length, ...) for field lengths that are | |||
| unknown at the time of Rule creation. The length of a header | unknown at the time of Rule creation. The length of a header | |||
| field is defined in the corresponding protocol specification (such | field is defined in the corresponding protocol specification (such | |||
| as IPv6 or UDP). | as IPv6 or UDP). | |||
| o FP: Field Position is a value that is used to identify the | o FP: when a Field is expected to appear multiple times in a header, | |||
| position where each instance of a field appears in the header. | Field Position specifies the occurence this Field Description | |||
| applies to (for example, first uri-path option, second uri-path, | ||||
| etc. in a CoAP header). The value 1 designates the first | ||||
| occurence. The default value is 1. | ||||
| o IID: Interface Identifier. See the IPv6 addressing architecture | o IID: Interface Identifier. See the IPv6 addressing architecture | |||
| [RFC7136] | [RFC7136] | |||
| o L2: Layer two. The immediate lower layer SCHC interfaces with. | o L2: Layer two. The immediate lower layer SCHC interfaces with. | |||
| It is provided by an underlying LPWAN technology. It does not | It is provided by an underlying LPWAN technology. It does not | |||
| necessarily correspond to the OSI model definition of Layer 2. | necessarily correspond to the OSI model definition of Layer 2. | |||
| o L2 Word: this is the minimum subdivision of payload data that the | o L2 Word: this is the minimum subdivision of payload data that the | |||
| L2 will carry. In most L2 technologies, the L2 Word is an octet. | L2 will carry. In most L2 technologies, the L2 Word is an octet. | |||
| skipping to change at page 8, line 14 ¶ | skipping to change at page 8, line 19 ¶ | |||
| information and with the same set of Rules before the | information and with the same set of Rules before the | |||
| communication starts, so that there is no ambiguity in how they | communication starts, so that there is no ambiguity in how they | |||
| expect to communicate. | expect to communicate. | |||
| o Rule: A set of Field Descriptions. | o Rule: A set of Field Descriptions. | |||
| o Rule ID (Rule Identifier): An identifier for a Rule. SCHC C/D on | o Rule ID (Rule Identifier): An identifier for a Rule. SCHC C/D on | |||
| both sides share the same Rule ID for a given packet. A set of | both sides share the same Rule ID for a given packet. A set of | |||
| Rule IDs are used to support SCHC F/R functionality. | Rule IDs are used to support SCHC F/R functionality. | |||
| o SCHC C/D: Static Context Header Compression Compressor/ | o SCHC C/D: SCHC Compressor/Decompressor. A mechanism used on both | |||
| Decompressor. A mechanism used on both sides, at the Dev and at | sides, at the Dev and at the network, to achieve Compression/ | |||
| the network, to achieve Compression/Decompression of headers. | Decompression of headers. | |||
| o SCHC F/R: SCHC Fragmentation / Reassembly. A mechanism used on | o SCHC F/R: SCHC Fragmentation / Reassembly. A mechanism used on | |||
| both sides, at the Dev and at the network, to achieve | both sides, at the Dev and at the network, to achieve | |||
| Fragmentation / Reassembly of SCHC Packets. | Fragmentation / Reassembly of SCHC Packets. | |||
| o SCHC Packet: A packet (e.g. an IPv6 packet) whose header has been | o SCHC Packet: A packet (e.g. an IPv6 packet) whose header has been | |||
| compressed as per the header compression mechanism defined in this | compressed as per the header compression mechanism defined in this | |||
| document. If the header compression process is unable to actually | document. If the header compression process is unable to actually | |||
| compress the packet header, the packet with the uncompressed | compress the packet header, the packet with the uncompressed | |||
| header is still called a SCHC Packet (in this case, a Rule ID is | header is still called a SCHC Packet (in this case, a Rule ID is | |||
| skipping to change at page 9, line 45 ¶ | skipping to change at page 9, line 45 ¶ | |||
| v | | v | | |||
| +--------------------+ +-----------------+ | +--------------------+ +-----------------+ | |||
| | SCHC Fragmentation | | SCHC Reassembly | | | SCHC Fragmentation | | SCHC Reassembly | | |||
| +--------------------+ +-----------------+ | +--------------------+ +-----------------+ | |||
| | ^ | ^ | | ^ | ^ | |||
| | | | | | | | | | | |||
| | +-------------- SCHC ACK -------------+ | | | +-------------- SCHC ACK -------------+ | | |||
| | | | | | | |||
| +-------------- SCHC Fragments -------------------+ | +-------------- SCHC Fragments -------------------+ | |||
| SENDER RECEIVER | Sender Receiver | |||
| *: the decision to use Fragmentation or not is left to each Profile. | *: the decision to use Fragmentation or not is left to each Profile. | |||
| Figure 3: SCHC operations at the SENDER and the RECEIVER | Figure 3: SCHC operations at the SENDER and the RECEIVER | |||
| 5.1. SCHC Packet format | 5.1. SCHC Packet format | |||
| The SCHC Packet is composed of the Compressed Header followed by the | The SCHC Packet is composed of the Compressed Header followed by the | |||
| payload from the original packet (see Figure 4). The Compressed | payload from the original packet (see Figure 4). The Compressed | |||
| Header itself is composed of the Rule ID and a Compression Residue, | Header itself is composed of the Rule ID and a Compression Residue, | |||
| skipping to change at page 10, line 36 ¶ | skipping to change at page 10, line 36 ¶ | |||
| Dev App | Dev App | |||
| +----------------+ +----+ +----+ +----+ | +----------------+ +----+ +----+ +----+ | |||
| | App1 App2 App3 | |App1| |App2| |App3| | | App1 App2 App3 | |App1| |App2| |App3| | |||
| | | | | | | | | | | | | | | | | | | |||
| | UDP | |UDP | |UDP | |UDP | | | UDP | |UDP | |UDP | |UDP | | |||
| | IPv6 | |IPv6| |IPv6| |IPv6| | | IPv6 | |IPv6| |IPv6| |IPv6| | |||
| | | | | | | | | | | | | | | | | | | |||
| |SCHC C/D and F/R| | | | | | | | |SCHC C/D and F/R| | | | | | | | |||
| +--------+-------+ +----+ +----+ +----+ | +--------+-------+ +----+ +----+ +----+ | |||
| | +--+ +----+ +----+ +----+ . . . | | +---+ +---+ +----+ +----+ . . . | |||
| +~ |RG| === |NGW | == |SCHC| == |SCHC|...... Internet .... | +~ |RGW| === |NGW| == |SCHC| == |SCHC|...... Internet .... | |||
| +--+ +----+ |F/R | |C/D | | +---+ +---+ |F/R | |C/D | | |||
| +----+ +----+ | +----+ +----+ | |||
| Figure 5: Architecture | Figure 5: Architecture | |||
| SCHC C/D and SCHC F/R are located on both sides of the LPWAN | SCHC C/D and SCHC F/R are located on both sides of the LPWAN | |||
| transmission, i.e. on the Dev side and on the Network side. | transmission, i.e. on the Dev side and on the Network side. | |||
| The operation in the Uplink direction is as follows. The Device | The operation in the Uplink direction is as follows. The Device | |||
| application uses IPv6 or IPv6/UDP protocols. Before sending the | application uses IPv6 or IPv6/UDP protocols. Before sending the | |||
| packets, the Dev compresses their headers using SCHC C/D and, if the | packets, the Dev compresses their headers using SCHC C/D and, if the | |||
| SCHC Packet resulting from the compression needs to be fragmented by | SCHC Packet resulting from the compression needs to be fragmented by | |||
| SCHC, SCHC F/R is performed (see Section 8). The resulting SCHC | SCHC, SCHC F/R is performed (see Section 8). The resulting SCHC | |||
| Fragments are sent to an LPWAN Radio Gateway (RG) which forwards them | Fragments are sent to an LPWAN Radio Gateway (RGW) which forwards | |||
| to a Network Gateway (NGW). The NGW sends the data to a SCHC F/R for | them to a Network Gateway (NGW). The NGW sends the data to a SCHC F/ | |||
| re-assembly (if needed) and then to the SCHC C/D for decompression. | R for re-assembly (if needed) and then to the SCHC C/D for | |||
| After decompression, the packet can be sent over the Internet to one | decompression. After decompression, the packet can be sent over the | |||
| or several LPWAN Application Servers (App). | Internet to one or several LPWAN Application Servers (App). | |||
| The SCHC F/R and C/D on the Network side can be located in the NGW, | The SCHC F/R and C/D on the Network side can be located in the NGW, | |||
| or somewhere else as long as a tunnel is established between them and | or somewhere else as long as a tunnel is established between them and | |||
| the NGW. For some LPWAN technologies, it MAY be suitable to locate | the NGW. For some LPWAN technologies, it may be suitable to locate | |||
| the SCHC F/R functionality nearer the NGW, in order to better deal | the SCHC F/R functionality nearer the NGW, in order to better deal | |||
| with time constraints of such technologies. | with time constraints of such technologies. | |||
| The SCHC C/Ds on both sides MUST share the same set of Rules. So do | The SCHC C/Ds on both sides MUST share the same set of Rules. So | |||
| the SCHC F/Rs on both sides. | MUST the SCHC F/Rs on both sides. | |||
| The SCHC C/D and F/R process is symmetrical, therefore the | The operation in the Downlink direction is similar to that in the | |||
| description of the Downlink direction is symmetrical to the one | Uplink direction, only reverting the order in which the architecture | |||
| above. | elements are traversed. | |||
| 6. Rule ID | 6. Rule ID | |||
| Rule IDs are identifiers used for Compression/Decompression or for | Rule IDs identify the Rules used for Compression/Decompression or for | |||
| Fragmentation/Reassembly. | Fragmentation/Reassembly. | |||
| The scope of a Rule ID is the link between the SCHC Compressor and | ||||
| the SCHC Decompressor, or between the SCHC Fragmenter and the SCHC | ||||
| Reassembler. | ||||
| The size of the Rule IDs is not specified in this document, as it is | The size of the Rule IDs is not specified in this document, as it is | |||
| implementation-specific and can vary according to the LPWAN | implementation-specific and can vary according to the LPWAN | |||
| technology and the number of Rules, among others. It is defined in | technology and the number of Rules, among others. It is defined in | |||
| Profiles. | Profiles. | |||
| The Rule IDs are used: | The Rule IDs are used: | |||
| o For SCHC C/D, to identify the Rule (i.e., the set of Field | o For SCHC C/D, to identify the Rule (i.e., the set of Field | |||
| Descriptions) that is used to compress a packet header. | Descriptions) that is used to compress a packet header. | |||
| * At least one Rule ID MAY be allocated to tagging packets for | * At least one Rule ID MUST be allocated to tagging packets for | |||
| which SCHC compression was not possible (no matching Rule was | which SCHC compression was not possible (no matching Rule was | |||
| found). | found). | |||
| o In SCHC F/R, to identify the specific mode and settings of F/R for | o In SCHC F/R, to identify the specific mode and settings of F/R for | |||
| one direction of traffic (Up or Dw). | one direction of traffic (Up or Dw). | |||
| * When F/R is used for both communication directions, at least | * When F/R is used for both communication directions, at least | |||
| two Rule ID values are needed for F/R, one per direction of | two Rule ID values are needed for F/R, one per direction of | |||
| traffic. | traffic. | |||
| 7. Compression/Decompression | 7. Compression/Decompression | |||
| Compression with SCHC is based on using a set of Rules, called the | Compression with SCHC is based on using a set of Rules, called the | |||
| Context, to compress or decompress headers. SCHC avoids Context | Context, to compress or decompress headers. SCHC avoids Context | |||
| synchronization, which consumes considerable bandwidth in other | synchronization traffic, which consumes considerable bandwidth in | |||
| header compression mechanisms such as RoHC [RFC5795]. Since the | other header compression mechanisms such as RoHC [RFC5795]. Since | |||
| content of packets is highly predictable in LPWAN networks, static | the content of packets is highly predictable in LPWAN networks, | |||
| Contexts MAY be stored beforehand to omit transmitting some | static Contexts may be stored beforehand. The Contexts MUST be | |||
| information over the air. The Contexts MUST be stored at both ends, | stored at both ends, and they can be learned by a provisioning | |||
| and they can be learned by a provisioning protocol or by out of band | protocol or by out of band means, or they can be pre-provisioned. | |||
| means, or they can be pre-provisioned. The way the Contexts are | The way the Contexts are provisioned is out of the scope of this | |||
| provisioned is out of the scope of this document. | document. | |||
| 7.1. SCHC C/D Rules | 7.1. SCHC C/D Rules | |||
| The main idea of the SCHC compression scheme is to transmit the Rule | The main idea of the SCHC compression scheme is to transmit the Rule | |||
| ID to the other end instead of sending known field values. This Rule | ID to the other end instead of sending known field values. This Rule | |||
| ID identifies a Rule that matches the original packet values. Hence, | ID identifies a Rule that matches the original packet values. Hence, | |||
| when a value is known by both ends, it is only necessary to send the | when a value is known by both ends, it is only necessary to send the | |||
| corresponding Rule ID over the LPWAN network. The manner by which | corresponding Rule ID over the LPWAN network. The manner by which | |||
| Rules are generated is out of the scope of this document. The Rules | Rules are generated is out of the scope of this document. The Rules | |||
| MAY be changed at run-time but the mechanism is out of scope of this | MAY be changed at run-time but the mechanism is out of scope of this | |||
| skipping to change at page 13, line 27 ¶ | skipping to change at page 13, line 27 ¶ | |||
| |+-------+--+--+--+------------+-----------------+---------------+||/ | |+-------+--+--+--+------------+-----------------+---------------+||/ | |||
| ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||| | ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||| | |||
| |+-------+--+--+--+------------+-----------------+---------------+|/ | |+-------+--+--+--+------------+-----------------+---------------+|/ | |||
| | | | | | | |||
| \-----------------------------------------------------------------/ | \-----------------------------------------------------------------/ | |||
| Figure 6: A Compression/Decompression Context | Figure 6: A Compression/Decompression Context | |||
| A Rule does not describe how the compressor parses a packet header to | A Rule does not describe how the compressor parses a packet header to | |||
| find and identify each field (e.g. the IPv6 Source Address, the UDP | find and identify each field (e.g. the IPv6 Source Address, the UDP | |||
| Destination Port or a CoAP URI path option). This MUST be known from | Destination Port or a CoAP URI path option). It is assumed that | |||
| the compressor/decompressor. Rules only describe the compression/ | there is a protocol parser alongside SCHC that is able to identify | |||
| decompression behavior for each header field. The header fields must | all the fields encountered in the headers to be compressed, and to | |||
| have been identified by the compressor prior to testing for a Rule | label them with a Field ID. Rules only describe the compression/ | |||
| match. | decompression behavior for each header field, after it has been | |||
| identified. | ||||
| In a Rule, the Field Descriptions are listed in the order in which | In a Rule, the Field Descriptions are listed in the order in which | |||
| the fields appear in the packet header. The Field Descriptions | the fields appear in the packet header. The Field Descriptions | |||
| describe the header fields with the following entries: | describe the header fields with the following entries: | |||
| o Field ID (FID) designates a protocol and field (e.g. UDP | o Field ID (FID) designates a protocol and field (e.g. UDP | |||
| Destination Port), unambiguously among all protocols that a SCHC | Destination Port), unambiguously among all protocols that a SCHC | |||
| compressor processes. | compressor processes. In the presence of protocol nesting, the | |||
| Field ID also identifies the nesting. | ||||
| o Field Length (FL) represents the length of the field. It can be | o Field Length (FL) represents the length of the field. It can be | |||
| either a fixed value (in bits) if the length is known when the | either a fixed value (in bits) if the length is known when the | |||
| Rule is created or a type if the length is variable. The length | Rule is created or a type if the length is variable. The length | |||
| of a header field is defined by its own protocol specification | of a header field is defined by its own protocol specification | |||
| (e.g. IPv6 or UDP). If the length is variable, the type defines | (e.g. IPv6 or UDP). If the length is variable, the type defines | |||
| the process to compute the length and its unit (bits, bytes...). | the process to compute the length and its unit (bits, bytes...). | |||
| o Field Position (FP): most often, a field only occurs once in a | o Field Position (FP): most often, a field only occurs once in a | |||
| packet header. Some fields may occur multiple times in a header. | packet header. Some fields may occur multiple times in a header. | |||
| skipping to change at page 15, line 41 ¶ | skipping to change at page 15, line 41 ¶ | |||
| * Once each header field has been associated with a Field | * Once each header field has been associated with a Field | |||
| Description with matching FID, DI and FP, each packet field's | Description with matching FID, DI and FP, each packet field's | |||
| value is then compared to the corresponding Target Value (TV) | value is then compared to the corresponding Target Value (TV) | |||
| stored in the Rule for that specific field, using the matching | stored in the Rule for that specific field, using the matching | |||
| operator (MO). If every field in the packet header satisfies | operator (MO). If every field in the packet header satisfies | |||
| the corresponding matching operators (MO) of a Rule (i.e. all | the corresponding matching operators (MO) of a Rule (i.e. all | |||
| MO results are True), that Rule is used for compressing the | MO results are True), that Rule is used for compressing the | |||
| header. Otherwise, the Rule MUST be disregarded. | header. Otherwise, the Rule MUST be disregarded. | |||
| * If no eligible compression Rule is found, then the header MUST | * If no eligible compression Rule is found, then the header MUST | |||
| be sent in its entirety using a Rule ID dedicated to this | be sent in its entirety using the Rule ID of the "default" Rule | |||
| purpose. Sending an uncompressed header may require SCHC F/R. | dedicated to this purpose. Sending an uncompressed header may | |||
| require SCHC F/R. | ||||
| o Compression: each field of the header is compressed according to | o Compression: each field of the header is compressed according to | |||
| the Compression/Decompression Actions (CDAs). The fields are | the Compression/Decompression Actions (CDAs). The fields are | |||
| compressed in the order that the Field Descriptions appear in the | compressed in the order that the Field Descriptions appear in the | |||
| Rule. The compression of each field results in a residue, which | Rule. The compression of each field results in a residue, which | |||
| may be empty. The Compression Residue for the packet header is | may be empty. The Compression Residue for the packet header is | |||
| the concatenation of the non-empty residues for each field of the | the concatenation of the non-empty residues for each field of the | |||
| header, in the order the Field Descriptions appear in the Rule. | header, in the order the Field Descriptions appear in the Rule. | |||
| |------------------- Compression Residue -------------------| | |------------------- Compression Residue -------------------| | |||
| skipping to change at page 17, line 9 ¶ | skipping to change at page 17, line 9 ¶ | |||
| packet and the TV in the Rule. The result is always true. | packet and the TV in the Rule. The result is always true. | |||
| o MSB(x): A match is obtained if the most significant x bits of the | o MSB(x): A match is obtained if the most significant x bits of the | |||
| packet header field value are equal to the TV in the Rule. The x | packet header field value are equal to the TV in the Rule. The x | |||
| parameter of the MSB MO indicates how many bits are involved in | parameter of the MSB MO indicates how many bits are involved in | |||
| the comparison. If the FL is described as variable, the length | the comparison. If the FL is described as variable, the length | |||
| must be a multiple of the unit. For example, x must be multiple | must be a multiple of the unit. For example, x must be multiple | |||
| of 8 if the unit of the variable length is in bytes. | of 8 if the unit of the variable length is in bytes. | |||
| o match-mapping: With match-mapping, the Target Value is a list of | o match-mapping: With match-mapping, the Target Value is a list of | |||
| values. Each value of the list is identified by a short ID (or | values. Each value of the list is identified by an index. | |||
| index). Compression is achieved by sending the index instead of | Compression is achieved by sending the index instead of the | |||
| the original header field value. This operator matches if the | original header field value. This operator matches if the header | |||
| header field value is equal to one of the values in the target | field value is equal to one of the values in the target list. | |||
| list. | ||||
| 7.5. Compression Decompression Actions (CDA) | 7.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 the inverse action | taken during the compression of header fields and the inverse action | |||
| taken by the decompressor to restore the original value. | taken by the decompressor to restore the original value. | |||
| /--------------------+-------------+----------------------------\ | +--------------+-------------+-------------------------------+ | |||
| | Action | Compression | Decompression | | | Action | Compression | Decompression | | |||
| | | | | | +--------------+-------------+-------------------------------+ | |||
| +--------------------+-------------+----------------------------+ | | | | | | |||
| |not-sent |elided |use value stored in Context | | | not-sent | elided | use TV stored in Rule | | |||
| |value-sent |send |build from received value | | | value-sent | send | use received value | | |||
| |mapping-sent |send index |value from index on a table | | | mapping-sent | send index | retrieve value from TV list | | |||
| |LSB |send LSB |TV, received value | | | LSB | send LSB | concat. TV and received value | | |||
| |compute-length |elided |compute length | | | compute-* | elided | recompute at decompressor | | |||
| |compute-checksum |elided |compute UDP checksum | | | DevIID | elided | build IID from L2 Dev addr | | |||
| |DevIID |elided |build IID from L2 Dev addr | | | AppIID | elided | build IID from L2 App addr | | |||
| |AppIID |elided |build IID from L2 App addr | | +--------------+-------------+-------------------------------+ | |||
| \--------------------+-------------+----------------------------/ | ||||
| Figure 8: Compression and Decompression Actions | Table 1: Compression and Decompression Actions | |||
| Figure 8 summarizes the basic actions that can be used to compress | Table 1 summarizes the basic actions that can be used to compress and | |||
| and decompress a field. The first column shows the action's name. | decompress a field. The first column shows the action's name. The | |||
| The second and third columns show the compression and decompression | second and third columns show the compression and decompression | |||
| behaviors for each action. | behaviors for each action. | |||
| 7.5.1. processing fixed-length fields | 7.5.1. processing fixed-length fields | |||
| If the field is identified in the Field Description as being of fixed | If the field is identified in the Field Description as being of fixed | |||
| length, then aplying the CDA to compress this field results in a | length, then aplying the CDA to compress this field results in a | |||
| fixed amount of bits. The residue for that field is simply the bits | fixed amount of bits. The residue for that field is simply the bits | |||
| resulting from applying the CDA to the field. This value may be | resulting from applying the CDA to the field. This value may be | |||
| empty (e.g. not-sent CDA), in which case the field residue is absent | empty (e.g. not-sent CDA), in which case the field residue is absent | |||
| from the Compression Residue. | from the Compression Residue. | |||
| |- field residue -| | |- field residue -| | |||
| +-----------------+ | +-----------------+ | |||
| | value | | | value | | |||
| +-----------------+ | +-----------------+ | |||
| Figure 9: fixed sized field residue structure | Figure 8: fixed sized field residue structure | |||
| 7.5.2. processing variable-length fields | 7.5.2. processing variable-length fields | |||
| If the field is identified in the Field Description as being of | If the field is identified in the Field Description as being of | |||
| variable length, then aplying the CDA to compress this field may | variable length, then aplying the CDA to compress this field may | |||
| result in a value of fixed size (e.g. not-sent or mapping-sent) or of | result in a value of fixed size (e.g. not-sent or mapping-sent) or of | |||
| variable size (e.g. value-sent or LSB). In the latter case, the | variable size (e.g. value-sent or LSB). In the latter case, the | |||
| residue for that field is the bits that result from applying the CDA | residue for that field is the bits that result from applying the CDA | |||
| to the field, preceded with the size of the value. | to the field, preceded with the size of the value. The most | |||
| significant bit of the size is stored first (left of the residue bit | ||||
| field). | ||||
| |--- field residue ---| | |--- field residue ---| | |||
| +-------+-------------+ | +-------+-------------+ | |||
| | size | value | | | size | value | | |||
| +-------+-------------+ | +-------+-------------+ | |||
| Figure 10: variable sized field residue structure | Figure 9: variable sized field residue structure | |||
| The size (using the unit defined in the FL) is encoded as follows: | The size (using the unit defined in the FL) is encoded on 4, 12 or 28 | |||
| bits as follows: | ||||
| o If the size is between 0 and 14, it is sent as a 4-bits unsigned | o If the size is between 0 and 14, it is encoded as a 4 bits | |||
| integer. | unsigned integer. | |||
| o For values between 15 and 254, 0b1111 is transmitted and then the | o Sizes between 15 and 254 are encoded as 0b1111 followed by the 8 | |||
| size is sent as an 8 bits unsigned integer. | bits unsigned integer. | |||
| o For larger values of the size, 0xfff is transmitted and then the | o Larger sizes are encoded as 0xfff followed by the 16 bits unsigned | |||
| next two bytes contain the size value as a 16 bits unsigned | ||||
| integer. | integer. | |||
| If the field is identified in the Field Description as being of | If the field is identified in the Field Description as being of | |||
| variable length and this field is not present in the packet header | variable length and this field is not present in the packet header | |||
| being compressed, size 0 MUST be sent to denote its absence. | being compressed, size 0 MUST be sent to denote its absence. | |||
| 7.5.3. not-sent CDA | 7.5.3. not-sent CDA | |||
| The not-sent action can be used when the field value is specified in | The not-sent action can be used when the field value is specified in | |||
| a Rule and therefore known by both the Compressor and the | a Rule and therefore known by both the Compressor and the | |||
| skipping to change at page 19, line 30 ¶ | skipping to change at page 19, line 32 ¶ | |||
| This action is generally used with the "ignore" MO. | This action is generally used with the "ignore" MO. | |||
| 7.5.5. mapping-sent CDA | 7.5.5. mapping-sent CDA | |||
| The mapping-sent action is used to send an index (the index into the | The mapping-sent action is used to send an index (the index into the | |||
| Target Value list of values) instead of the original value. This | Target Value list of values) instead of the original value. This | |||
| action is used together with the "match-mapping" MO. | action is used together with the "match-mapping" MO. | |||
| On the compressor side, the match-mapping Matching Operator searches | On the compressor side, the match-mapping Matching Operator searches | |||
| the TV for a match with the header field value and the mapping-sent | the TV for a match with the header field value. The mapping-sent CDA | |||
| CDA sends the corresponding index as the field residue. On the | then sends the corresponding index as the field residue. The most | |||
| decompressor side, the CDA uses the received index to restore the | significant bit of the index is stored first (left of the residue bit | |||
| field value by looking up the list in the TV. | field). | |||
| On the decompressor side, the CDA uses the received index to restore | ||||
| the field value by looking up the list in the TV. | ||||
| The number of bits sent is the minimal size for coding all the | The number of bits sent is the minimal size for coding all the | |||
| possible indices. | possible indices. | |||
| 7.5.6. LSB CDA | 7.5.6. LSB CDA | |||
| The LSB action is used together with the "MSB(x)" MO to avoid sending | The LSB action is used together with the "MSB(x)" MO to avoid sending | |||
| the most significant part of the packet field if that part is already | the most significant part of the packet field if that part is already | |||
| known by the receiving end. | known by the receiving end. | |||
| skipping to change at page 20, line 26 ¶ | skipping to change at page 20, line 29 ¶ | |||
| The IID value MAY be computed from the Device ID present in the L2 | The IID value MAY be computed from the Device ID present in the L2 | |||
| header, or from some other stable identifier. The computation is | header, or from some other stable identifier. The computation is | |||
| specific to each Profile and MAY depend on the Device ID size. | specific to each Profile and MAY depend on the Device ID size. | |||
| In the downlink direction (Dw), at the compressor, the DevIID CDA may | In the downlink direction (Dw), at the compressor, the DevIID CDA may | |||
| be used to generate the L2 addresses on the LPWAN, based on the | be used to generate the L2 addresses on the LPWAN, based on the | |||
| packet's Destination Address. | packet's Destination Address. | |||
| 7.5.8. Compute-* | 7.5.8. Compute-* | |||
| Some fields may be elided during compression and reconstructed during | Some fields can be elided at the compressor and recomputed locally at | |||
| decompression. This is the case for length and checksum, so: | the decompressor. | |||
| o compute-length: computes the length assigned to this field. This | Because the field is uniquely identified by its Field ID (e.g. UDP | |||
| CDA MAY be used to compute IPv6 length or UDP length. | length), the relevant protocol specification unambiguously defines | |||
| the algorithm for such computation. | ||||
| o compute-checksum: computes a checksum from the information already | Examples of fields that know how to recompute themselves are UDP | |||
| received by the SCHC C/D. This field MAY be used to compute UDP | length, IPv6 length and UDP checksum. | |||
| checksum. | ||||
| 8. Fragmentation/Reassembly | 8. Fragmentation/Reassembly | |||
| 8.1. Overview | 8.1. Overview | |||
| In LPWAN technologies, the L2 MTU typically ranges from tens to | In LPWAN technologies, the L2 MTU typically ranges from tens to | |||
| hundreds of bytes. Some of these technologies do not have an | hundreds of bytes. Some of these technologies do not have an | |||
| internal fragmentation/reassembly mechanism. | internal fragmentation/reassembly mechanism. | |||
| The optional SCHC Fragmentation/Reassembly (SCHC F/R) functionality | The optional SCHC Fragmentation/Reassembly (SCHC F/R) functionality | |||
| skipping to change at page 22, line 5 ¶ | skipping to change at page 22, line 13 ¶ | |||
| to abort the transmission of a fragmented SCHC Packet. | to abort the transmission of a fragmented SCHC Packet. | |||
| 8.2.2. Tiles, Windows, Bitmaps, Timers, Counters | 8.2.2. Tiles, Windows, Bitmaps, Timers, Counters | |||
| 8.2.2.1. Tiles | 8.2.2.1. Tiles | |||
| The SCHC Packet is fragmented into pieces, hereafter called tiles. | The SCHC Packet is fragmented into pieces, hereafter called tiles. | |||
| The tiles MUST be non-empty and pairwise disjoint. Their union MUST | The tiles MUST be non-empty and pairwise disjoint. Their union MUST | |||
| be equal to the SCHC Packet. | be equal to the SCHC Packet. | |||
| See Figure 11 for an example. | See Figure 10 for an example. | |||
| SCHC Packet | SCHC Packet | |||
| +----+--+-----+---+----+-+---+---+-----+...-----+----+---+------+ | +----+--+-----+---+----+-+---+---+-----+...-----+----+---+------+ | |||
| Tiles | | | | | | | | | | | | | | | Tiles | | | | | | | | | | | | | | | |||
| +----+--+-----+---+----+-+---+---+-----+...-----+----+---+------+ | +----+--+-----+---+----+-+---+---+-----+...-----+----+---+------+ | |||
| Figure 11: a SCHC Packet fragmented in tiles | Figure 10: a SCHC Packet fragmented in tiles | |||
| Each SCHC Fragment message carries at least one tile in its Payload, | Each SCHC Fragment message carries at least one tile in its Payload, | |||
| if the Payload field is present. | if the Payload field is present. | |||
| 8.2.2.2. Windows | 8.2.2.2. Windows | |||
| Some SCHC F/R modes may handle successive tiles in groups, called | Some SCHC F/R modes may handle successive tiles in groups, called | |||
| windows. | windows. | |||
| If windows are used | If windows are used | |||
| skipping to change at page 22, line 44 ¶ | skipping to change at page 23, line 5 ¶ | |||
| o the last window MUST contain WINDOW_SIZE tiles or less. | o the last window MUST contain WINDOW_SIZE tiles or less. | |||
| o tiles are numbered within each window. | o tiles are numbered within each window. | |||
| o the tile indices MUST decrement from WINDOW_SIZE - 1 downward, | o the tile indices MUST decrement from WINDOW_SIZE - 1 downward, | |||
| looking from the start of the SCHC Packet toward its end. | looking from the start of the SCHC Packet toward its end. | |||
| o each tile of a SCHC Packet is therefore uniquely identified by a | o each tile of a SCHC Packet is therefore uniquely identified by a | |||
| window number and a tile index within this window. | window number and a tile index within this window. | |||
| See Figure 12 for an example. | See Figure 11 for an example. | |||
| +---------------------------------------------...-------------+ | +---------------------------------------------...-------------+ | |||
| | SCHC Packet | | | SCHC Packet | | |||
| +---------------------------------------------...-------------+ | +---------------------------------------------...-------------+ | |||
| Tile # | 4 | 3 | 2 | 1 | 0 | 4 | 3 | 2 | 1 | 0 | 4 | | 0 | 4 | 3 | | Tile # | 4 | 3 | 2 | 1 | 0 | 4 | 3 | 2 | 1 | 0 | 4 | | 0 | 4 | 3 | | |||
| Window # |-------- 0 --------|-------- 1 --------|- 2 ... 27 -|-- 28 -| | Window # |-------- 0 --------|-------- 1 --------|- 2 ... 27 -|-- 28 -| | |||
| Figure 12: a SCHC Packet fragmented in tiles grouped in 28 windows, | Figure 11: a SCHC Packet fragmented in tiles grouped in 28 windows, | |||
| with WINDOW_SIZE = 5 | with WINDOW_SIZE = 5 | |||
| When windows are used | When windows are used | |||
| o Bitmaps (see Section 8.2.2.3) MAY be sent back by the receiver to | o Bitmaps (see Section 8.2.2.3) MAY be sent back by the receiver to | |||
| the sender in a SCHC ACK message. | the sender in a SCHC ACK message. | |||
| o A Bitmap corresponds to exactly one Window. | o A Bitmap corresponds to exactly one Window. | |||
| 8.2.2.3. Bitmaps | 8.2.2.3. Bitmaps | |||
| skipping to change at page 24, line 13 ¶ | skipping to change at page 24, line 13 ¶ | |||
| abort waiting for a SCHC F/R message. | abort waiting for a SCHC F/R message. | |||
| o Retransmission Timer: a SCHC Fragment sender uses this timer to | o Retransmission Timer: a SCHC Fragment sender uses this timer to | |||
| abort waiting for an expected SCHC ACK. | abort waiting for an expected SCHC ACK. | |||
| o Attempts: this counter counts the requests for SCHC ACKs, up to | o Attempts: this counter counts the requests for SCHC ACKs, up to | |||
| MAX_ACK_REQUESTS. | MAX_ACK_REQUESTS. | |||
| 8.2.3. Integrity Checking | 8.2.3. Integrity Checking | |||
| The reassembled SCHC Packet MUST be checked for integrity at the | The integrity of the fragmentation-reassembly process of a SCHC | |||
| receive end. By default, integrity checking is performed by | Packet MUST be checked at the receive end. By default, integrity | |||
| computing a MIC at the sender side and transmitting it to the | checking is performed by computing a Reassembly Check Sequence (RCS) | |||
| receiver for comparison with the locally computed MIC. | of the SCHC Packet at the sender side before fragmentation and | |||
| transmitting it to the receiver for comparison with the RCS locally | ||||
| computed after reassembly. | ||||
| The MIC supports UDP checksum elision by SCHC C/D (see | The RCS supports UDP checksum elision by SCHC C/D (see | |||
| Section 10.11). | Section 10.11). | |||
| The CRC32 polynomial 0xEDB88320 (i.e. the reverse representation of | The CRC32 polynomial 0xEDB88320 (i.e. the reverse representation of | |||
| the polynomial used e.g. in the Ethernet standard [RFC3385]) is | the polynomial used e.g. in the Ethernet standard [RFC3385]) is | |||
| RECOMMENDED as the default algorithm for computing the MIC. | RECOMMENDED as the default algorithm for computing the RCS. | |||
| Nevertheless, other MIC lengths or other algorithms MAY be required | Nevertheless, other RCS lengths or other algorithms MAY be required | |||
| by the Profile. | by the Profile. | |||
| The MIC MUST be computed on the full SCHC Packet concatenated with | The RCS MUST be computed on the full SCHC Packet concatenated with | |||
| the padding bits, if any, of the SCHC Fragment carrying the last | the padding bits, if any, of the SCHC Fragment carrying the last | |||
| tile. The rationale is that the SCHC reassembler has no way of | tile. The rationale is that the SCHC reassembler has no way of | |||
| knowing the boundary between the last tile and the padding bits. | knowing the boundary between the last tile and the padding bits. | |||
| Indeed, this requires decompressing the SCHC Packet, which is out of | Indeed, this requires decompressing the SCHC Packet, which is out of | |||
| the scope of the SCHC reassembler. | the scope of the SCHC reassembler. | |||
| Note that the concatenation of the complete SCHC Packet and the | Note that the concatenation of the complete SCHC Packet and the | |||
| potential padding bits of the last SCHC Fragment does not generally | potential padding bits of the last SCHC Fragment does not generally | |||
| constitute an integer number of bytes. For implementers to be able | constitute an integer number of bytes. For implementers to be able | |||
| to use byte-oriented CRC libraries, it is RECOMMENDED that the | to use byte-oriented CRC libraries, it is RECOMMENDED that the | |||
| concatenation of the complete SCHC Packet and the last fragment | concatenation of the complete SCHC Packet and the last fragment | |||
| potential padding bits be zero-extended to the next byte boundary and | potential padding bits be zero-extended to the next byte boundary and | |||
| that the MIC be computed on that byte array. A Profile MAY specify | that the RCS be computed on that byte array. A Profile MAY specify | |||
| another behavior. | another behavior. | |||
| 8.2.4. Header Fields | 8.2.4. Header Fields | |||
| The SCHC F/R messages contain the following fields (see the formats | The SCHC F/R messages contain the following fields (see the formats | |||
| in Section 8.3): | in Section 8.3): | |||
| o Rule ID: this field is present in all the SCHC F/R messages. It | o Rule ID: this field is present in all the SCHC F/R messages. It | |||
| is used to identify | is used to identify | |||
| * that a SCHC F/R message is being carried, as opposed to an | * that a SCHC F/R message is being carried, as opposed to an | |||
| unfragmented SCHC Packet, | unfragmented SCHC Packet, | |||
| * which SCHC F/R mode is used | * which SCHC F/R mode is used | |||
| * and for this mode | * and for this mode | |||
| + if windows are used and what the value of WINDOW_SIZE is, | + if windows are used and what the value of WINDOW_SIZE is, | |||
| + what other optional fields are present and what the field | + what other optional fields are present and what the field | |||
| skipping to change at page 26, line 29 ¶ | skipping to change at page 26, line 34 ¶ | |||
| * The FCN value with all the bits equal to 1 (called All-1) | * The FCN value with all the bits equal to 1 (called All-1) | |||
| signals the very last tile of a SCHC Packet. By extension, if | signals the very last tile of a SCHC Packet. By extension, if | |||
| windows are used, the last window of a packet is called the | windows are used, the last window of a packet is called the | |||
| All-1 window. | All-1 window. | |||
| * If windows are used, the FCN value with all the bits equal to 0 | * If windows are used, the FCN value with all the bits equal to 0 | |||
| (called All-0) signals the last tile of a window that is not | (called All-0) signals the last tile of a window that is not | |||
| the last one of the SCHC packet. By extension, such a window | the last one of the SCHC packet. By extension, such a window | |||
| is called an All-0 window. | is called an All-0 window. | |||
| o Message Integrity Check (MIC). This field only appears in the | o Reassembly Check Sequence (RCS). This field only appears in the | |||
| All-1 SCHC Fragments. Its size (called U, in bits) is defined by | All-1 SCHC Fragments. Its size (called U, in bits) is defined by | |||
| each Profile for each Rule ID. | each Profile for each Rule ID. | |||
| See Section 8.2.3 for the MIC default size, default polynomial and | See Section 8.2.3 for the RCS default size, default polynomial and | |||
| details on MIC computation. | details on RCS computation. | |||
| o C (integrity Check): C is a 1-bit field. This field is used in | o C (integrity Check): C is a 1-bit field. This field is used in | |||
| the SCHC ACK message to report on the reassembled SCHC Packet | the SCHC ACK message to report on the reassembled SCHC Packet | |||
| integrity check (see Section 8.2.3). | integrity check (see Section 8.2.3). | |||
| A value of 1 tells that the integrity check was performed and is | A value of 1 tells that the integrity check was performed and is | |||
| successful. A value of 0 tells that the integrity check was not | successful. A value of 0 tells that the integrity check was not | |||
| performed, or that is was a failure. | performed, or that is was a failure. | |||
| o Compressed Bitmap. The Compressed Bitmap is used together with | o Compressed Bitmap. The Compressed Bitmap is used together with | |||
| skipping to change at page 27, line 12 ¶ | skipping to change at page 27, line 15 ¶ | |||
| This field appears in the SCHC ACK message to report on the | This field appears in the SCHC ACK message to report on the | |||
| receiver Bitmap (see Section 8.3.2.1). | receiver Bitmap (see Section 8.3.2.1). | |||
| 8.3. SCHC F/R Message Formats | 8.3. SCHC F/R Message Formats | |||
| This section defines the SCHC Fragment formats, the SCHC ACK format, | This section defines the SCHC Fragment formats, the SCHC ACK format, | |||
| the SCHC ACK REQ format and the SCHC Abort formats. | the SCHC ACK REQ format and the SCHC Abort formats. | |||
| 8.3.1. SCHC Fragment format | 8.3.1. SCHC Fragment format | |||
| A SCHC Fragment conforms to the general format shown in Figure 13. | A SCHC Fragment conforms to the general format shown in Figure 12. | |||
| It comprises a SCHC Fragment Header and a SCHC Fragment Payload. The | It comprises a SCHC Fragment Header and a SCHC Fragment Payload. The | |||
| SCHC Fragment Payload carries one or several tile(s). | SCHC Fragment Payload carries one or several tile(s). | |||
| +-----------------+-----------------------+~~~~~~~~~~~~~~~~~~~~~ | +-----------------+-----------------------+~~~~~~~~~~~~~~~~~~~~~ | |||
| | Fragment Header | Fragment Payload | padding (as needed) | | Fragment Header | Fragment Payload | padding (as needed) | |||
| +-----------------+-----------------------+~~~~~~~~~~~~~~~~~~~~~ | +-----------------+-----------------------+~~~~~~~~~~~~~~~~~~~~~ | |||
| Figure 13: SCHC Fragment general format | Figure 12: SCHC Fragment general format | |||
| 8.3.1.1. Regular SCHC Fragment | 8.3.1.1. Regular SCHC Fragment | |||
| The Regular SCHC Fragment format is shown in Figure 14. Regular SCHC | The Regular SCHC Fragment format is shown in Figure 13. Regular SCHC | |||
| Fragments are generally used to carry tiles that are not the last one | Fragments are generally used to carry tiles that are not the last one | |||
| of a SCHC Packet. The DTag field and the W field are optional. | of a SCHC Packet. The DTag field and the W field are optional. | |||
| |--- SCHC Fragment Header ----| | |--- SCHC Fragment Header ----| | |||
| |-- T --|-M-|-- N --| | |-- T --|-M-|-- N --| | |||
| +-- ... --+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~~ | |||
| | Rule ID | DTag | W | FCN | Fragment Payload | padding (as needed) | | Rule ID | DTag | W | FCN | Fragment Payload | padding (as needed) | |||
| +-- ... --+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~~ | |||
| Figure 14: Detailed Header Format for Regular SCHC Fragments | Figure 13: Detailed Header Format for Regular SCHC Fragments | |||
| The FCN field MUST NOT contain all bits set to 1. | The FCN field MUST NOT contain all bits set to 1. | |||
| The Fragment Payload of a SCHC Fragment with FCN equal to 0 (called | The Fragment Payload of a SCHC Fragment with FCN equal to 0 (called | |||
| an All-0 SCHC Fragment) MUST be distinguishable by size from a SCHC | an All-0 SCHC Fragment) MUST be distinguishable by size from a SCHC | |||
| ACK REQ message (see Section 8.3.3) that has the same T, M and N | ACK REQ message (see Section 8.3.3) that has the same T, M and N | |||
| values, even in the presence of padding. This condition is met if | values, even in the presence of padding. This condition is met if | |||
| the Payload is at least the size of an L2 Word. This condition is | the Payload is at least the size of an L2 Word. This condition is | |||
| also met if the SCHC Fragment Header is a multiple of L2 Words. | also met if the SCHC Fragment Header is a multiple of L2 Words. | |||
| 8.3.1.2. All-1 SCHC Fragment | 8.3.1.2. All-1 SCHC Fragment | |||
| The All-1 SCHC Fragment format is shown in Figure 15. The sender | The All-1 SCHC Fragment format is shown in Figure 14. The sender | |||
| generally uses the All-1 SCHC Fragment format for the message that | generally uses the All-1 SCHC Fragment format for the message that | |||
| completes the emission of a fragmented SCHC Packet. The DTag field, | completes the emission of a fragmented SCHC Packet. The DTag field, | |||
| the W field, the MIC field and the Payload are optional. At least | the W field, the RCS field and the Payload are optional. At least | |||
| one of MIC field or Payload MUST be present. The FCN field is all | one of RCS field or Payload MUST be present. The FCN field is all | |||
| ones. | ones. | |||
| |-------- SCHC Fragment Header -------| | |-------- SCHC Fragment Header -------| | |||
| |-- T --|-M-|-- N --|-- U --| | |-- T --|-M-|-- N --|-- U --| | |||
| +-- ... --+- ... -+---+- ... -+- ... -+------...-----+~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+- ... -+------...-----+~~~~~~~~~~~~~~~~~~ | |||
| | Rule ID | DTag | W | 11..1 | MIC | Frag Payload | pad. (as needed) | | Rule ID | DTag | W | 11..1 | RCS | Frag Payload | pad. (as needed) | |||
| +-- ... --+- ... -+---+- ... -+- ... -+------...-----+~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+- ... -+------...-----+~~~~~~~~~~~~~~~~~~ | |||
| (FCN) | (FCN) | |||
| Figure 15: Detailed Header Format for the All-1 SCHC Fragment | Figure 14: Detailed Header Format for the All-1 SCHC Fragment | |||
| The All-1 SCHC Fragment message MUST be distinguishable by size from | The All-1 SCHC Fragment message MUST be distinguishable by size from | |||
| a SCHC Sender-Abort message (see Section 8.3.4) that has the same T, | a SCHC Sender-Abort message (see Section 8.3.4) that has the same T, | |||
| M and N values, even in the presence of padding. This condition is | M and N values, even in the presence of padding. This condition is | |||
| met if the MIC is present and is at least the size of an L2 Word, or | met if the RCS is present and is at least the size of an L2 Word, or | |||
| if the Payload is present and at least the size an L2 Word. This | if the Payload is present and at least the size an L2 Word. This | |||
| condition is also met if the SCHC Sender-Abort Header is a multiple | condition is also met if the SCHC Sender-Abort Header is a multiple | |||
| of L2 Words. | of L2 Words. | |||
| 8.3.2. SCHC ACK format | 8.3.2. SCHC ACK format | |||
| The SCHC ACK message is shown in Figure 16. The DTag field, the W | The SCHC ACK message is shown in Figure 15. The DTag field, the W | |||
| field and the Compressed Bitmap field are optional. The Compressed | field and the Compressed Bitmap field are optional. The Compressed | |||
| Bitmap field can only be present in SCHC F/R modes that use windows. | Bitmap field can only be present in SCHC F/R modes that use windows. | |||
| |---- SCHC ACK Header ----| | |---- SCHC ACK Header ----| | |||
| |-- T --|-M-| 1 | | |-- T --|-M-| 1 | | |||
| +--- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | +--- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | |||
| | Rule ID | DTag | W |C=1| padding as needed (success) | | Rule ID | DTag | W |C=1| padding as needed (success) | |||
| +--- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | +--- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | |||
| +--- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | +--- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | |||
| | Rule ID | DTag | W |C=0|Compressed Bitmap| pad. as needed (failure) | | Rule ID | DTag | W |C=0|Compressed Bitmap| pad. as needed (failure) | |||
| +--- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | +--- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | |||
| Figure 16: Format of the SCHC ACK message | Figure 15: Format of the SCHC ACK message | |||
| The SCHC ACK Header contains a C bit (see Section 8.2.4). | The SCHC ACK Header contains a C bit (see Section 8.2.4). | |||
| If the C bit is set to 1 (integrity check successful), no Bitmap is | If the C bit is set to 1 (integrity check successful), no Bitmap is | |||
| carried. | carried. | |||
| If the C bit is set to 0 (integrity check not performed or failed) | If the C bit is set to 0 (integrity check not performed or failed) | |||
| and if windows are used, a Compressed Bitmap for the window referred | and if windows are used, a Compressed Bitmap for the window referred | |||
| to by the W field is transmitted as specified in Section 8.3.2.1. | to by the W field is transmitted as specified in Section 8.3.2.1. | |||
| 8.3.2.1. Bitmap Compression | 8.3.2.1. Bitmap Compression | |||
| For transmission, the Compressed Bitmap in the SCHC ACK message is | For transmission, the Compressed Bitmap in the SCHC ACK message is | |||
| defined by the following algorithm (see Figure 17 for a follow-along | defined by the following algorithm (see Figure 16 for a follow-along | |||
| example): | example): | |||
| o Build a temporary SCHC ACK message that contains the Header | o Build a temporary SCHC ACK message that contains the Header | |||
| followed by the original Bitmap (see Section 8.2.2.3 for a | followed by the original Bitmap (see Section 8.2.2.3 for a | |||
| description of Bitmaps). | description of Bitmaps). | |||
| o Position scissors at the end of the Bitmap, after its last bit. | o Position scissors at the end of the Bitmap, after its last bit. | |||
| o While the bit on the left of the scissors is 1 and belongs to the | o While the bit on the left of the scissors is 1 and belongs to the | |||
| Bitmap, keep moving left, then stop. When this is done, | Bitmap, keep moving left, then stop. When this is done, | |||
| skipping to change at page 29, line 35 ¶ | skipping to change at page 29, line 35 ¶ | |||
| scissors | scissors | |||
| When one or more bits have effectively been dropped off as a result | When one or more bits have effectively been dropped off as a result | |||
| of the above algorithm, the SCHC ACK message is a multiple of L2 | of the above algorithm, the SCHC ACK message is a multiple of L2 | |||
| Words, no padding bits will be appended. | Words, no padding bits will be appended. | |||
| Because the SCHC Fragment sender knows the size of the original | Because the SCHC Fragment sender knows the size of the original | |||
| Bitmap, it can reconstruct the original Bitmap from the Compressed | Bitmap, it can reconstruct the original Bitmap from the Compressed | |||
| Bitmap received in the SCH ACK message. | Bitmap received in the SCH ACK message. | |||
| Figure 17 shows an example where L2 Words are actually bytes and | Figure 16 shows an example where L2 Words are actually bytes and | |||
| where the original Bitmap contains 17 bits, the last 15 of which are | where the original Bitmap contains 17 bits, the last 15 of which are | |||
| all set to 1. | all set to 1. | |||
| |---- SCHC ACK Header ----|-------- Bitmap --------| | |---- SCHC ACK Header ----|-------- Bitmap --------| | |||
| |-- T --|-M-| 1 | | |-- T --|-M-| 1 | | |||
| +--- ... -+- ... -+---+---+---------------------------------+ | +--- ... -+- ... -+---+---+---------------------------------+ | |||
| | Rule ID | DTag | W |C=0|1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1| | | Rule ID | DTag | W |C=0|1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1| | |||
| +--- ... -+- ... -+---+---+---------------------------------+ | +--- ... -+- ... -+---+---+---------------------------------+ | |||
| next L2 Word boundary ->| | next L2 Word boundary ->| | |||
| Figure 17: SCHC ACK Header plus uncompressed Bitmap | Figure 16: SCHC ACK Header plus uncompressed Bitmap | |||
| Figure 18 shows that the last 14 bits are not sent. | Figure 17 shows that the last 14 bits are not sent. | |||
| |---- SCHC ACK Header ----|CpBmp| | |---- SCHC ACK Header ----|CpBmp| | |||
| |-- T --|-M-| 1 | | |-- T --|-M-| 1 | | |||
| +--- ... -+- ... -+---+---+-----+ | +--- ... -+- ... -+---+---+-----+ | |||
| | Rule ID | DTag | W |C=0|1 0 1| | | Rule ID | DTag | W |C=0|1 0 1| | |||
| +--- ... -+- ... -+---+---+-----+ | +--- ... -+- ... -+---+---+-----+ | |||
| next L2 Word boundary ->| | next L2 Word boundary ->| | |||
| Figure 18: Resulting SCHC ACK message with Compressed Bitmap | Figure 17: Resulting SCHC ACK message with Compressed Bitmap | |||
| Figure 19 shows an example of a SCHC ACK with tile indices ranging | Figure 18 shows an example of a SCHC ACK with tile indices ranging | |||
| from 6 down to 0, where the Bitmap indicates that the second and the | from 6 down to 0, where the Bitmap indicates that the second and the | |||
| fourth tile of the window have not been correctly received. | fourth tile of the window have not been correctly received. | |||
| |---- SCHC ACK Header ----|--- Bitmap --| | |---- SCHC ACK Header ----|--- Bitmap --| | |||
| |-- T --|-M-| 1 |6 5 4 3 2 1 0| (tile #) | |-- T --|-M-| 1 |6 5 4 3 2 1 0| (tile #) | |||
| +---------+-------+---+---+-------------+ | +---------+-------+---+---+-------------+ | |||
| | Rule ID | DTag | W |C=0|1 0 1 0 1 1 1| uncompressed Bitmap | | Rule ID | DTag | W |C=0|1 0 1 0 1 1 1| uncompressed Bitmap | |||
| +---------+-------+---+---+-------------+ | +---------+-------+---+---+-------------+ | |||
| next L2 Word boundary ->|<-- L2 Word -->| | next L2 Word boundary ->|<-- L2 Word -->| | |||
| +---------+-------+---+---+-------------+~~~+ | +---------+-------+---+---+-------------+~~~+ | |||
| | Rule ID | DTag | W |C=0|1 0 1 0 1 1 1|Pad| transmitted SCHC ACK | | Rule ID | DTag | W |C=0|1 0 1 0 1 1 1|Pad| transmitted SCHC ACK | |||
| +---------+-------+---+---+-------------+~~~+ | +---------+-------+---+---+-------------+~~~+ | |||
| next L2 Word boundary ->|<-- L2 Word -->| | next L2 Word boundary ->|<-- L2 Word -->| | |||
| Figure 19: Example of a SCHC ACK message, missing tiles | Figure 18: Example of a SCHC ACK message, missing tiles | |||
| Figure 20 shows an example of a SCHC ACK with FCN ranging from 6 down | Figure 19 shows an example of a SCHC ACK with FCN ranging from 6 down | |||
| to 0, where integrity check has not been performed or has failed and | to 0, where integrity check has not been performed or has failed and | |||
| the Bitmap indicates that there is no missing tile in that window. | the Bitmap indicates that there is no missing tile in that window. | |||
| |---- SCHC ACK Header ----|--- Bitmap --| | |---- SCHC ACK Header ----|--- Bitmap --| | |||
| |-- T --|-M-| 1 |6 5 4 3 2 1 0| (tile #) | |-- T --|-M-| 1 |6 5 4 3 2 1 0| (tile #) | |||
| +---------+-------+---+---+-------------+ | +---------+-------+---+---+-------------+ | |||
| | Rule ID | DTag | W |C=0|1 1 1 1 1 1 1| with uncompressed Bitmap | | Rule ID | DTag | W |C=0|1 1 1 1 1 1 1| with uncompressed Bitmap | |||
| +---------+-------+---+---+-------------+ | +---------+-------+---+---+-------------+ | |||
| next L2 Word boundary ->| | next L2 Word boundary ->| | |||
| +--- ... -+- ... -+---+---+-+ | +--- ... -+- ... -+---+---+-+ | |||
| | Rule ID | DTag | W |C=0|1| transmitted SCHC ACK | | Rule ID | DTag | W |C=0|1| transmitted SCHC ACK | |||
| +--- ... -+- ... -+---+---+-+ | +--- ... -+- ... -+---+---+-+ | |||
| next L2 Word boundary ->| | next L2 Word boundary ->| | |||
| Figure 20: Example of a SCHC ACK message, no missing tile | Figure 19: Example of a SCHC ACK message, no missing tile | |||
| 8.3.3. SCHC ACK REQ format | 8.3.3. SCHC ACK REQ format | |||
| The SCHC ACK REQ is used by a sender to request a SCHC ACK from the | The SCHC ACK REQ is used by a sender to request a SCHC ACK from the | |||
| receiver. Its format is shown in Figure 21. The DTag field and the | receiver. Its format is shown in Figure 20. The DTag field and the | |||
| W field are optional. The FCN field is all zero. | W field are optional. The FCN field is all zero. | |||
| |---- SCHC ACK REQ Header ----| | |---- SCHC ACK REQ Header ----| | |||
| |-- T --|-M-|-- N --| | |-- T --|-M-|-- N --| | |||
| +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | |||
| | Rule ID | DTag | W | 0..0 | padding (as needed) (no payload) | | Rule ID | DTag | W | 0..0 | padding (as needed) (no payload) | |||
| +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | |||
| Figure 21: SCHC ACK REQ format | Figure 20: SCHC ACK REQ format | |||
| 8.3.4. SCHC Sender-Abort format | 8.3.4. SCHC Sender-Abort format | |||
| When a SCHC Fragment sender needs to abort an on-going fragmented | When a SCHC Fragment sender needs to abort an on-going fragmented | |||
| SCHC Packet transmission, it sends a SCHC Sender-Abort message to the | SCHC Packet transmission, it sends a SCHC Sender-Abort message to the | |||
| SCHC Fragment receiver. | SCHC Fragment receiver. | |||
| The SCHC Sender-Abort format is shown in Figure 22. The DTag field | The SCHC Sender-Abort format is shown in Figure 21. The DTag field | |||
| and the W field are optional. The FCN field is all ones. | and the W field are optional. The FCN field is all ones. | |||
| |---- Sender-Abort Header ----| | |---- Sender-Abort Header ----| | |||
| |-- T --|-M-|-- N --| | |-- T --|-M-|-- N --| | |||
| +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | |||
| | Rule ID | DTag | W | 11..1 | padding (as needed) | | Rule ID | DTag | W | 11..1 | padding (as needed) | |||
| +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~ | |||
| Figure 22: SCHC Sender-Abort format | Figure 21: SCHC Sender-Abort format | |||
| If the W field is present, | If the W field is present, | |||
| o the fragment sender MUST set it to all ones. Other values are | o the fragment sender MUST set it to all ones. Other values are | |||
| RESERVED. | RESERVED. | |||
| o the fragment receiver MUST check its value. If the value is | o the fragment receiver MUST check its value. If the value is | |||
| different from all ones, the message MUST be ignored. | different from all ones, the message MUST be ignored. | |||
| The SCHC Sender-Abort MUST NOT be acknowledged. | The SCHC Sender-Abort MUST NOT be acknowledged. | |||
| 8.3.5. SCHC Receiver-Abort format | 8.3.5. SCHC Receiver-Abort format | |||
| When a SCHC Fragment receiver needs to abort an on-going fragmented | When a SCHC Fragment receiver needs to abort an on-going fragmented | |||
| SCHC Packet transmission, it transmits a SCHC Receiver-Abort message | SCHC Packet transmission, it transmits a SCHC Receiver-Abort message | |||
| to the SCHC Fragment sender. | to the SCHC Fragment sender. | |||
| The SCHC Receiver-Abort format is shown in Figure 23. The DTag field | The SCHC Receiver-Abort format is shown in Figure 22. The DTag field | |||
| and the W field are optional. | and the W field are optional. | |||
| |--- Receiver-Abort Header ---| | |--- Receiver-Abort Header ---| | |||
| |--- T ---|-M-| 1 | | |--- T ---|-M-| 1 | | |||
| +--- ... ---+-- ... --+---+---+-+-+-+-+-+-+-+-+-+-+-+ | +--- ... ---+-- ... --+---+---+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Rule ID | DTag | W |C=1| 1..1| 1..1 | | | Rule ID | DTag | W |C=1| 1..1| 1..1 | | |||
| +--- ... ---+-- ... --+---+---+-+-+-+-+-+-+-+-+-+-+-+ | +--- ... ---+-- ... --+---+---+-+-+-+-+-+-+-+-+-+-+-+ | |||
| next L2 Word boundary ->|<-- L2 Word -->| | next L2 Word boundary ->|<-- L2 Word -->| | |||
| Figure 23: SCHC Receiver-Abort format | Figure 22: SCHC Receiver-Abort format | |||
| If the W field is present, | If the W field is present, | |||
| o the fragment receiver MUST set it to all ones. Other values are | o the fragment receiver MUST set it to all ones. Other values are | |||
| RESERVED. | RESERVED. | |||
| o if the value is different from all ones, the fragment sender MUST | o if the value is different from all ones, the fragment sender MUST | |||
| ignore the message. | ignore the message. | |||
| The SCHC Receiver-Abort has the same header as a SCHC ACK message. | The SCHC Receiver-Abort has the same header as a SCHC ACK message. | |||
| skipping to change at page 33, line 36 ¶ | skipping to change at page 33, line 36 ¶ | |||
| The W field MUST NOT be present in the SCHC F/R messages. SCHC ACK | The W field MUST NOT be present in the SCHC F/R messages. SCHC ACK | |||
| MUST NOT be sent. SCHC ACK REQ MUST NOT be sent. SCHC Sender-Abort | MUST NOT be sent. SCHC ACK REQ MUST NOT be sent. SCHC Sender-Abort | |||
| MAY be sent. SCHC Receiver-Abort MUST NOT be sent. | MAY be sent. SCHC Receiver-Abort MUST NOT be sent. | |||
| The value of N (size of the FCN field) is RECOMMENDED to be 1. | The value of N (size of the FCN field) is RECOMMENDED to be 1. | |||
| Each Profile, for each Rule ID value, MUST define | Each Profile, for each Rule ID value, MUST define | |||
| o the size of the DTag field, | o the size of the DTag field, | |||
| o the size and algorithm for the MIC field, | o the size and algorithm for the RCS field, | |||
| o the expiration time of the Inactivity Timer | o the expiration time of the Inactivity Timer | |||
| Each Profile, for each Rule ID value, MAY define | Each Profile, for each Rule ID value, MAY define | |||
| o a value of N different from the recommended one, | o a value of N different from the recommended one, | |||
| o the meaning of values sent in the FCN field, for values different | o the meaning of values sent in the FCN field, for values different | |||
| from the All-1 value. | from the All-1 value. | |||
| skipping to change at page 34, line 24 ¶ | skipping to change at page 34, line 24 ¶ | |||
| appear in the SCHC Packet. Except for the last tile of a SCHC | appear in the SCHC Packet. Except for the last tile of a SCHC | |||
| Packet, each tile MUST be of a size that complements the SCHC | Packet, each tile MUST be of a size that complements the SCHC | |||
| Fragment Header so that the SCHC Fragment is a multiple of L2 Words | Fragment Header so that the SCHC Fragment is a multiple of L2 Words | |||
| without the need for padding bits. Except for the last one, the SCHC | without the need for padding bits. Except for the last one, the SCHC | |||
| Fragments MUST use the Regular SCHC Fragment format specified in | Fragments MUST use the Regular SCHC Fragment format specified in | |||
| Section 8.3.1.1. The last SCHC Fragment MUST use the All-1 format | Section 8.3.1.1. The last SCHC Fragment MUST use the All-1 format | |||
| specified in Section 8.3.1.2. | specified in Section 8.3.1.2. | |||
| The sender MAY transmit a SCHC Sender-Abort. | The sender MAY transmit a SCHC Sender-Abort. | |||
| Figure 38 shows an example of a corresponding state machine. | Figure 37 shows an example of a corresponding state machine. | |||
| 8.4.1.2. Receiver behavior | 8.4.1.2. Receiver behavior | |||
| Upon receiving each Regular SCHC Fragment, | Upon receiving each Regular SCHC Fragment, | |||
| o the receiver MUST reset the Inactivity Timer, | o the receiver MUST reset the Inactivity Timer, | |||
| o the receiver assembles the payloads of the SCHC Fragments | o the receiver assembles the payloads of the SCHC Fragments | |||
| On receiving an All-1 SCHC Fragment, | On receiving an All-1 SCHC Fragment, | |||
| skipping to change at page 35, line 5 ¶ | skipping to change at page 35, line 5 ¶ | |||
| reassembled SCHC Packet | reassembled SCHC Packet | |||
| o the reassembly operation concludes. | o the reassembly operation concludes. | |||
| On expiration of the Inactivity Timer, the receiver MUST drop the | On expiration of the Inactivity Timer, the receiver MUST drop the | |||
| SCHC Packet being reassembled. | SCHC Packet being reassembled. | |||
| On receiving a SCHC Sender-Abort, the receiver MAY drop the SCHC | On receiving a SCHC Sender-Abort, the receiver MAY drop the SCHC | |||
| Packet being reassembled. | Packet being reassembled. | |||
| Figure 39 shows an example of a corresponding state machine. | Figure 38 shows an example of a corresponding state machine. | |||
| 8.4.2. ACK-Always mode | 8.4.2. ACK-Always mode | |||
| The ACK-Always mode has been designed under the following assumptions | The ACK-Always mode has been designed under the following assumptions | |||
| o Data unit out-of-sequence delivery does not occur between the | o Data unit out-of-sequence delivery does not occur between the | |||
| entity performing fragmentation and the entity performing | entity performing fragmentation and the entity performing | |||
| reassembly | reassembly | |||
| o The L2 MTU value does not change while the fragments of a SCHC | o The L2 MTU value does not change while the fragments of a SCHC | |||
| Packet are being being transmitted. | Packet are being transmitted. | |||
| In ACK-Always mode, windows are used. An acknowledgement, positive | In ACK-Always mode, windows are used. An acknowledgement, positive | |||
| or negative, is transmitted by the fragment receiver to the fragment | or negative, is transmitted by the fragment receiver to the fragment | |||
| sender at the end of the transmission of each window of SCHC | sender at the end of the transmission of each window of SCHC | |||
| Fragments. | Fragments. | |||
| The tiles are not required to be of uniform size. In ACK-Always | The tiles are not required to be of uniform size. In ACK-Always | |||
| mode, only the All-1 SCHC Fragment is padded as needed. The other | mode, only the All-1 SCHC Fragment is padded as needed. The other | |||
| SCHC Fragments are intrinsically aligned to L2 Words. | SCHC Fragments are intrinsically aligned to L2 Words. | |||
| skipping to change at page 35, line 48 ¶ | skipping to change at page 35, line 48 ¶ | |||
| F/R messages operating in this mode. | F/R messages operating in this mode. | |||
| The W field MUST be present and its size M MUST be 1 bit. | The W field MUST be present and its size M MUST be 1 bit. | |||
| Each Profile, for each Rule ID value, MUST define | Each Profile, for each Rule ID value, MUST define | |||
| o the value of N (size of the FCN field), | o the value of N (size of the FCN field), | |||
| o the value of WINDOW_SIZE, which MUST be strictly less than 2^N, | o the value of WINDOW_SIZE, which MUST be strictly less than 2^N, | |||
| o the size and algorithm for the MIC field, | o the size and algorithm for the RCS field, | |||
| o the size of the DTag field, | o the size of the DTag field, | |||
| o the value of MAX_ACK_REQUESTS, | o the value of MAX_ACK_REQUESTS, | |||
| o the expiration time of the Retransmission Timer | o the expiration time of the Retransmission Timer | |||
| o the expiration time of the Inactivity Timer | o the expiration time of the Inactivity Timer | |||
| For each active pair of Rule ID and DTag values, the sender MUST | For each active pair of Rule ID and DTag values, the sender MUST | |||
| maintain | maintain | |||
| skipping to change at page 38, line 9 ¶ | skipping to change at page 38, line 9 ¶ | |||
| At any time, | At any time, | |||
| o on receiving a SCHC Receiver-Abort, the fragment sender MAY exit | o on receiving a SCHC Receiver-Abort, the fragment sender MAY exit | |||
| with an error condition. | with an error condition. | |||
| o on receiving a SCHC ACK that bears a W value different from the W | o on receiving a SCHC ACK that bears a W value different from the W | |||
| value that it currently uses, the fragment sender MUST silently | value that it currently uses, the fragment sender MUST silently | |||
| discard and ignore that SCHC ACK. | discard and ignore that SCHC ACK. | |||
| Figure 40 shows an example of a corresponding state machine. | Figure 39 shows an example of a corresponding state machine. | |||
| 8.4.2.2. Receiver behavior | 8.4.2.2. Receiver behavior | |||
| On receiving a SCHC Fragment with a Rule ID and DTag pair not being | On receiving a SCHC Fragment with a Rule ID and DTag pair not being | |||
| processed at that time | processed at that time | |||
| o the receiver SHOULD check if the DTag value has not recently been | o the receiver SHOULD check if the DTag value has not recently been | |||
| used for that Rule ID value, thereby ensuring that the received | used for that Rule ID value, thereby ensuring that the received | |||
| SCHC Fragment is not a remnant of a prior fragmented SCHC Packet | SCHC Fragment is not a remnant of a prior fragmented SCHC Packet | |||
| transmission. If the SCHC Fragment is determined to be such a | transmission. If the SCHC Fragment is determined to be such a | |||
| skipping to change at page 41, line 10 ¶ | skipping to change at page 41, line 10 ¶ | |||
| Fragment or a SCHC ACK REQ MUST be silently ignored and discarded. | Fragment or a SCHC ACK REQ MUST be silently ignored and discarded. | |||
| o On receiving an All-1 SCHC Fragment or a SCHC ACK REQ, the | o On receiving an All-1 SCHC Fragment or a SCHC ACK REQ, the | |||
| receiver MUST send a SCHC ACK. | receiver MUST send a SCHC ACK. | |||
| At any time, on expiration of the Inactivity Timer, on receiving a | At any time, on expiration of the Inactivity Timer, on receiving a | |||
| SCHC Sender-Abort or when Attempts reaches MAX_ACK_REQUESTS, the | SCHC Sender-Abort or when Attempts reaches MAX_ACK_REQUESTS, the | |||
| receiver MUST send a SCHC Receiver-Abort and it MAY exit the receive | receiver MUST send a SCHC Receiver-Abort and it MAY exit the receive | |||
| process for that SCHC Packet. | process for that SCHC Packet. | |||
| Figure 41 shows an example of a corresponding state machine. | Figure 40 shows an example of a corresponding state machine. | |||
| 8.4.3. ACK-on-Error mode | 8.4.3. ACK-on-Error mode | |||
| The ACK-on-Error mode supports LPWAN technologies that have variable | The ACK-on-Error mode supports LPWAN technologies that have variable | |||
| MTU and out-of-order delivery. | MTU and out-of-order delivery. | |||
| In ACK-on-Error mode, windows are used. All tiles MUST be of equal | In ACK-on-Error mode, windows are used. All tiles MUST be of equal | |||
| size, except for the last one, which MUST be of the same size or | size, except for the last one, which MUST be of the same size or | |||
| smaller than the regular ones. If allowed in a Profile, the | smaller than the regular ones. If allowed in a Profile, the | |||
| penultimate tile MAY be exactly one L2 Word smaller than the regular | penultimate tile MAY be exactly one L2 Word smaller than the regular | |||
| tile size. | tile size. | |||
| A SCHC Fragment message carries one or more tiles, which may span | A SCHC Fragment message carries one or more tiles, which may span | |||
| multiple windows. A SCHC ACK reports on the reception of exactly one | multiple windows. A SCHC ACK reports on the reception of exactly one | |||
| window of tiles. | window of tiles. | |||
| See Figure 24 for an example. | See Figure 23 for an example. | |||
| +---------------------------------------------...-----------+ | +---------------------------------------------...-----------+ | |||
| | SCHC Packet | | | SCHC Packet | | |||
| +---------------------------------------------...-----------+ | +---------------------------------------------...-----------+ | |||
| Tile # | 4 | 3 | 2 | 1 | 0 | 4 | 3 | 2 | 1 | 0 | 4 | | 0 | 4 |3| | Tile # | 4 | 3 | 2 | 1 | 0 | 4 | 3 | 2 | 1 | 0 | 4 | | 0 | 4 |3| | |||
| Window # |-------- 0 --------|-------- 1 --------|- 2 ... 27 -|- 28-| | Window # |-------- 0 --------|-------- 1 --------|- 2 ... 27 -|- 28-| | |||
| SCHC Fragment msg |-----------| | SCHC Fragment msg |-----------| | |||
| Figure 24: a SCHC Packet fragmented in tiles, Ack-on-Error mode | Figure 23: a SCHC Packet fragmented in tiles, Ack-on-Error mode | |||
| The W field is wide enough that it unambiguously represents an | The W field is wide enough that it unambiguously represents an | |||
| absolute window number. The fragment receiver sends SCHC ACKs to the | absolute window number. The fragment receiver sends SCHC ACKs to the | |||
| fragment sender about windows for which tiles are missing. No SCHC | fragment sender about windows for which tiles are missing. No SCHC | |||
| ACK is sent by the fragment receiver for windows that it knows have | ACK is sent by the fragment receiver for windows that it knows have | |||
| been fully received. | been fully received. | |||
| The fragment sender retransmits SCHC Fragments for tiles that are | The fragment sender retransmits SCHC Fragments for tiles that are | |||
| reported missing. It can advance to next windows even before it has | reported missing. It can advance to next windows even before it has | |||
| ascertained that all tiles belonging to previous windows have been | ascertained that all tiles belonging to previous windows have been | |||
| skipping to change at page 42, line 32 ¶ | skipping to change at page 42, line 32 ¶ | |||
| o the tile size (a tile does not need to be multiple of an L2 Word, | o the tile size (a tile does not need to be multiple of an L2 Word, | |||
| but it MUST be at least the size of an L2 Word) | but it MUST be at least the size of an L2 Word) | |||
| o the value of M (size of the W field), | o the value of M (size of the W field), | |||
| o the value of N (size of the FCN field), | o the value of N (size of the FCN field), | |||
| o the value of WINDOW_SIZE, which MUST be strictly less than 2^N, | o the value of WINDOW_SIZE, which MUST be strictly less than 2^N, | |||
| o the size and algorithm for the MIC field, | o the size and algorithm for the RCS field, | |||
| o the size of the DTag field, | o the size of the DTag field, | |||
| o the value of MAX_ACK_REQUESTS, | o the value of MAX_ACK_REQUESTS, | |||
| o the expiration time of the Retransmission Timer | o the expiration time of the Retransmission Timer | |||
| o the expiration time of the Inactivity Timer | o the expiration time of the Inactivity Timer | |||
| o if the last tile is carried in a Regular SCHC Fragment or an All-1 | o if the last tile is carried in a Regular SCHC Fragment or an All-1 | |||
| skipping to change at page 43, line 23 ¶ | skipping to change at page 43, line 23 ¶ | |||
| At the beginning of the fragmentation of a new SCHC Packet, | At the beginning of the fragmentation of a new SCHC Packet, | |||
| o the fragment sender MUST select a Rule ID and DTag value pair for | o the fragment sender MUST select a Rule ID and DTag value pair for | |||
| this SCHC Packet. A Rule MUST NOT be selected if the values of M | this SCHC Packet. A Rule MUST NOT be selected if the values of M | |||
| and WINDOW_SIZE for that Rule are such that the SCHC Packet cannot | and WINDOW_SIZE for that Rule are such that the SCHC Packet cannot | |||
| be fragmented in (2^M) * WINDOW_SIZE tiles or less. | be fragmented in (2^M) * WINDOW_SIZE tiles or less. | |||
| o the fragment sender MUST initialize the Attempts counter to 0 for | o the fragment sender MUST initialize the Attempts counter to 0 for | |||
| that Rule ID and DTag value pair. | that Rule ID and DTag value pair. | |||
| A SCHC Fragment message carries in its payload one or more tiles. If | A Regular SCHC Fragment message carries in its payload one or more | |||
| more than one tile is carried in one SCHC Fragment | tiles. If more than one tile is carried in one Regular SCHC Fragment | |||
| o the selected tiles MUST be consecutive in the original SCHC Packet | o the selected tiles MUST be consecutive in the original SCHC Packet | |||
| o they MUST be placed in the SCHC Fragment Payload adjacent to one | o they MUST be placed in the SCHC Fragment Payload adjacent to one | |||
| another, in the order they appear in the SCHC Packet, from the | another, in the order they appear in the SCHC Packet, from the | |||
| start of the SCHC Packet toward its end. | start of the SCHC Packet toward its end. | |||
| Tiles that are not the last one MUST be sent in Regular SCHC | Tiles that are not the last one MUST be sent in Regular SCHC | |||
| Fragments specified in Section 8.3.1.1. The FCN field MUST contain | Fragments specified in Section 8.3.1.1. The FCN field MUST contain | |||
| the tile index of the first tile sent in that SCHC Fragment. | the tile index of the first tile sent in that SCHC Fragment. | |||
| skipping to change at page 44, line 12 ¶ | skipping to change at page 44, line 12 ¶ | |||
| The fragment sender MUST send SCHC Fragments such that, all together, | The fragment sender MUST send SCHC Fragments such that, all together, | |||
| they contain all the tiles of the fragmented SCHC Packet. | they contain all the tiles of the fragmented SCHC Packet. | |||
| The fragment sender MUST send at least one All-1 SCHC Fragment. | The fragment sender MUST send at least one All-1 SCHC Fragment. | |||
| The fragment sender MUST listen for SCHC ACK messages after having | The fragment sender MUST listen for SCHC ACK messages after having | |||
| sent | sent | |||
| o an All-1 SCHC Fragment | o an All-1 SCHC Fragment | |||
| o or a SCHC ACK REQ with the W field corresponding to the last | o or a SCHC ACK REQ. | |||
| window. | ||||
| A Profile MAY specify other times at which the fragment sender MUST | A Profile MAY specify other times at which the fragment sender MUST | |||
| listen for SCHC ACK messages. For example, this could be after | listen for SCHC ACK messages. For example, this could be after | |||
| sending a complete window of tiles. | sending a complete window of tiles. | |||
| Each time a fragment sender sends an All-1 SCHC Fragment or a SCHC | Each time a fragment sender sends an All-1 SCHC Fragment or a SCHC | |||
| ACK REQ, | ACK REQ, | |||
| o it MUST increment the Attempts counter | o it MUST increment the Attempts counter | |||
| o it MUST reset the Retransmission Timer | o it MUST reset the Retransmission Timer | |||
| On Retransmission Timer expiration | On Retransmission Timer expiration | |||
| o if Attempts is strictly less than MAX_ACK_REQUESTS, the fragment | o if Attempts is strictly less than MAX_ACK_REQUESTS, the fragment | |||
| sender MUST send a SCHC ACK REQ with the W field corresponding to | sender MUST send either the All-1 SCHC Fragment or a SCHC ACK REQ | |||
| the last window and it MUST increment the Attempts counter | with the W field corresponding to the last window, | |||
| o otherwise the fragment sender MUST send a SCHC Sender-Abort and it | o otherwise the fragment sender MUST send a SCHC Sender-Abort and it | |||
| MAY exit with an error condition. | MAY exit with an error condition. | |||
| On receiving a SCHC ACK, | On receiving a SCHC ACK, | |||
| o if the W field in the SCHC ACK corresponds to the last window of | o if the W field in the SCHC ACK corresponds to the last window of | |||
| the SCHC Packet, | the SCHC Packet, | |||
| * if the C bit is set, the sender MAY exit successfully | * if the C bit is set, the sender MAY exit successfully | |||
| * otherwise, | * otherwise, | |||
| + if the SCHC ACK shows no missing tile at the receiver, the | + if the Profile mandates that the last tile be sent in an | |||
| sender | All-1 SCHC Fragment, | |||
| - MUST send a SCHC Sender-Abort | - if the SCHC ACK shows no missing tile at the receiver, | |||
| the sender | ||||
| - MAY exit with an error condition | o MUST send a SCHC Sender-Abort | |||
| + otherwise | o MAY exit with an error condition | |||
| - the fragment sender MUST send SCHC Fragment messages | ||||
| containing all the tiles that are reported missing in the | ||||
| SCHC ACK. | ||||
| - if the last message in this sequence of SCHC Fragment | - otherwise | |||
| messages is not an All-1 SCHC Fragment, then the fragment | ||||
| sender MUST send a SCHC ACK REQ with the W field | o the fragment sender MUST send SCHC Fragment messages | |||
| corresponding to the last window after the sequence. | containing all the tiles that are reported missing in | |||
| the SCHC ACK. | ||||
| o if the last message in this sequence of SCHC Fragment | ||||
| messages is not an All-1 SCHC Fragment, then the | ||||
| fragment sender MUST in addition send a SCHC ACK REQ | ||||
| with the W field corresponding to the last window, | ||||
| after the sequence. | ||||
| + otherwise, | ||||
| - if the SCHC ACK shows no missing tile at the receiver, | ||||
| the sender MUST send the All-1 SCHC Fragment | ||||
| - otherwise | ||||
| o the fragment sender MUST send SCHC Fragment messages | ||||
| containing all the tiles that are reported missing in | ||||
| the SCHC ACK. | ||||
| o the fragment sender MUST then send either the All-1 | ||||
| SCHC Fragment or a SCHC ACK REQ with the W field | ||||
| corresponding to the last window. | ||||
| o otherwise, the fragment sender | o otherwise, the fragment sender | |||
| * MUST send SCHC Fragment messages containing the tiles that are | * MUST send SCHC Fragment messages containing the tiles that are | |||
| reported missing in the SCHC ACK | reported missing in the SCHC ACK | |||
| * then it MAY send a SCHC ACK REQ with the W field corresponding | * then it MAY send a SCHC ACK REQ with the W field corresponding | |||
| to the last window | to the last window | |||
| See Figure 42 for one among several possible examples of a Finite | See Figure 41 for one among several possible examples of a Finite | |||
| State Machine implementing a sender behavior obeying this | State Machine implementing a sender behavior obeying this | |||
| specification. | specification. | |||
| 8.4.3.2. Receiver behavior | 8.4.3.2. Receiver behavior | |||
| On receiving a SCHC Fragment with a Rule ID and DTag pair not being | On receiving a SCHC Fragment with a Rule ID and DTag pair not being | |||
| processed at that time | processed at that time | |||
| o the receiver SHOULD check if the DTag value has not recently been | o the receiver SHOULD check if the DTag value has not recently been | |||
| used for that Rule ID value, thereby ensuring that the received | used for that Rule ID value, thereby ensuring that the received | |||
| skipping to change at page 47, line 29 ¶ | skipping to change at page 47, line 46 ¶ | |||
| o a Sender-Abort has been received | o a Sender-Abort has been received | |||
| o or the Inactivity Timer has expired | o or the Inactivity Timer has expired | |||
| o or the Attempts counter has exceeded MAX_ACK_REQUESTS | o or the Attempts counter has exceeded MAX_ACK_REQUESTS | |||
| o or when at least an All-1 SCHC Fragment has been received and | o or when at least an All-1 SCHC Fragment has been received and | |||
| integrity checking of the reassembled SCHC Packet is successful. | integrity checking of the reassembled SCHC Packet is successful. | |||
| See Figure 43 for one among several possible examples of a Finite | See Figure 42 for one among several possible examples of a Finite | |||
| State Machine implementing a receiver behavior obeying this | State Machine implementing a receiver behavior obeying this | |||
| specification, and that is meant to match the sender Finite State | specification, and that is meant to match the sender Finite State | |||
| Machine of Figure 42. | Machine of Figure 41. | |||
| 9. Padding management | 9. Padding management | |||
| SCHC C/D and SCHC F/R operate on bits, not bytes. SCHC itself does | SCHC C/D and SCHC F/R operate on bits, not bytes. SCHC itself does | |||
| not have any alignment prerequisite. The size of SCHC Packets can be | not have any alignment prerequisite. The size of SCHC Packets can be | |||
| any number of bits. | any number of bits. | |||
| If the layer below SCHC constrains the payload to align to some | If the layer below SCHC constrains the payload to align to some | |||
| boundary, called L2 Words (for example, bytes), the SCHC messages | boundary, called L2 Words (for example, bytes), the SCHC messages | |||
| MUST be padded. When padding occurs, the number of appended bits | MUST be padded. When padding occurs, the number of appended bits | |||
| MUST be strictly less than the L2 Word size. | MUST be strictly less than the L2 Word size. | |||
| If a SCHC Packet is sent unfragmented (see Figure 25), it is padded | If a SCHC Packet is sent unfragmented (see Figure 24), it is padded | |||
| as needed for transmission. | as needed for transmission. | |||
| If a SCHC Packet needs to be fragmented for transmission, it is not | If a SCHC Packet needs to be fragmented for transmission, it is not | |||
| padded in itself. Only the SCHC F/R messages are padded as needed | padded in itself. Only the SCHC F/R messages are padded as needed | |||
| for transmission. Some SCHC F/R messages are intrinsically aligned | for transmission. Some SCHC F/R messages are intrinsically aligned | |||
| to L2 Words. | to L2 Words. | |||
| A packet (e.g. an IPv6 packet) | A packet (e.g. an IPv6 packet) | |||
| | ^ (padding bits | | ^ (padding bits | |||
| v | dropped) | v | dropped) | |||
| skipping to change at page 48, line 25 ¶ | skipping to change at page 48, line 44 ¶ | |||
| v | checked) | v | checked) | |||
| +--------------------+ +-----------------+ | +--------------------+ +-----------------+ | |||
| | SCHC Fragmentation | | SCHC Reassembly | | | SCHC Fragmentation | | SCHC Reassembly | | |||
| +--------------------+ +-----------------+ | +--------------------+ +-----------------+ | |||
| | ^ | ^ | | ^ | ^ | |||
| | | | | | | | | | | |||
| | +------------- SCHC ACK ------------+ | | | +------------- SCHC ACK ------------+ | | |||
| | | | | | | |||
| +------- SCHC Fragments + padding as needed---------+ | +------- SCHC Fragments + padding as needed---------+ | |||
| SENDER RECEIVER | Sender Receiver | |||
| Figure 25: SCHC operations, including padding as needed | Figure 24: SCHC operations, including padding as needed | |||
| Each Profile MUST specify the size of the L2 Word. The L2 Word might | Each Profile MUST specify the size of the L2 Word. The L2 Word might | |||
| actually be a single bit, in which case no padding will take place at | actually be a single bit, in which case no padding will take place at | |||
| all. | all. | |||
| A Profile MAY define the value of the padding bits. The RECOMMENDED | A Profile MAY define the value of the padding bits. The RECOMMENDED | |||
| value is 0. | value is 0. | |||
| 10. SCHC Compression for IPv6 and UDP headers | 10. SCHC Compression for IPv6 and UDP headers | |||
| This section lists the IPv6 and UDP header fields and describes how | This section lists the IPv6 and UDP header fields and describes how | |||
| they can be compressed. | they can be compressed. | |||
| 10.1. IPv6 version field | 10.1. IPv6 version field | |||
| This field always holds the same value. In the Rule, TV is set to 6, | The IPv6 version field is labeled by the protocol parser as being the | |||
| MO to "equal" and CDA to "not-sent". | "version" field of the IPv6 protocol. Therefore, it only exists for | |||
| IPv6 packets. In the Rule, TV is set to 6, MO to "ignore" and CDA to | ||||
| "not-sent". | ||||
| 10.2. IPv6 Traffic class field | 10.2. IPv6 Traffic class field | |||
| If the DiffServ field does not vary and is known by both sides, the | If the DiffServ field does not vary and is known by both sides, the | |||
| Field Descriptor in the Rule SHOULD contain a TV with this well-known | Field Descriptor in the Rule SHOULD contain a TV with this well-known | |||
| value, an "equal" MO and a "not-sent" CDA. | value, an "equal" MO and a "not-sent" CDA. | |||
| Otherwise (e.g. ECN bits are to be transmitted), two possibilities | Otherwise (e.g. ECN bits are to be transmitted), two possibilities | |||
| can be considered depending on the variability of the value: | can be considered depending on the variability of the value: | |||
| skipping to change at page 49, line 39 ¶ | skipping to change at page 50, line 12 ¶ | |||
| o If some upper bits in the field are constant and known, a better | o If some upper bits in the field are constant and known, a better | |||
| option is to only send the LSBs. In the Rule, TV is set to a | option is to only send the LSBs. In the Rule, TV is set to a | |||
| value with the stable known upper part, MO is set to MSB(x) and | value with the stable known upper part, MO is set to MSB(x) and | |||
| CDA to LSB. | CDA to LSB. | |||
| 10.4. Payload Length field | 10.4. Payload Length field | |||
| This field can be elided for the transmission on the LPWAN network. | This field can be elided for the transmission on the LPWAN network. | |||
| The SCHC C/D recomputes the original payload length value. In the | The SCHC C/D recomputes the original payload length value. In the | |||
| Field Descriptor, TV is not set, MO is set to "ignore" and CDA is | Field Descriptor, TV is not set, MO is set to "ignore" and CDA is | |||
| "compute-IPv6-length". | "compute-*". | |||
| 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) | ||||
| where 's' is the number of bits to code the maximum length, and CDA | ||||
| is set to LSB. | ||||
| 10.5. Next Header field | 10.5. Next Header field | |||
| If the Next Header field does not vary and is known by both sides, | If the Next Header field does not vary and is known by both sides, | |||
| the Field Descriptor in the Rule SHOULD contain a TV with this Next | the Field Descriptor in the Rule SHOULD contain a TV with this Next | |||
| Header value, the MO SHOULD be "equal" and the CDA SHOULD be "not- | Header value, the MO SHOULD be "equal" and the CDA SHOULD be "not- | |||
| sent". | sent". | |||
| Otherwise, TV is not set in the Field Descriptor, MO is set to | Otherwise, TV is not set in the Field Descriptor, MO is set to | |||
| "ignore" and CDA is set to "value-sent". Alternatively, a matching- | "ignore" and CDA is set to "value-sent". Alternatively, a matching- | |||
| skipping to change at page 50, line 22 ¶ | skipping to change at page 50, line 38 ¶ | |||
| downlink (Dw). In Up, since there is no IP forwarding between the | downlink (Dw). In Up, since there is no IP forwarding between the | |||
| Dev and the SCHC C/D, the value is relatively constant. On the other | Dev and the SCHC C/D, the value is relatively constant. On the other | |||
| hand, the Dw value depends on Internet routing and can change more | hand, the Dw value depends on Internet routing and can change more | |||
| frequently. The Direction Indicator (DI) can be used to distinguish | frequently. The Direction Indicator (DI) can be used to distinguish | |||
| both directions: | both directions: | |||
| o in the Up, elide the field: the TV in the Field Descriptor is set | o in the Up, elide the field: the TV in the Field Descriptor is set | |||
| to the known constant value, the MO is set to "equal" and the CDA | to the known constant value, the MO is set to "equal" and the CDA | |||
| is set to "not-sent". | is set to "not-sent". | |||
| o in the Dw, send the value: TV is not set, MO is set to "ignore" | o in the Dw, the Hop Limit is elided for transmission and forced to | |||
| and CDA is set to "value-sent". | 1 at the receiver, by setting TV to 1, MO to "ignore" and CDA to | |||
| "not-sent". This prevents any further forwarding. | ||||
| 10.7. IPv6 addresses fields | 10.7. IPv6 addresses fields | |||
| As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit | As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit | |||
| long fields; one for the prefix and one for the Interface Identifier | long fields; one for the prefix and one for the Interface Identifier | |||
| (IID). These fields SHOULD be compressed. To allow for a single | (IID). These fields SHOULD be compressed. To allow for a single | |||
| Rule being used for both directions, these values are identified by | Rule being used for both directions, these values are identified by | |||
| their role (Dev or App) and not by their position in the header | their role (Dev or App) and not by their position in the header | |||
| (source or destination). | (source or destination). | |||
| 10.7.1. IPv6 source and destination prefixes | 10.7.1. IPv6 source and destination prefixes | |||
| Both ends MUST be configured with the appropriate prefixes. For a | Both ends MUST be configured with the appropriate prefixes. For a | |||
| specific flow, the source and destination prefixes can be unique and | specific flow, the source and destination prefixes can be unique and | |||
| stored in the Context. It can be either a link-local prefix or a | stored in the Context. In that case, the TV for the source and | |||
| global prefix. In that case, the TV for the source and destination | destination prefixes contain the values, the MO is set to "equal" and | |||
| prefixes contain the values, the MO is set to "equal" and the CDA is | the CDA is set to "not-sent". | |||
| set to "not-sent". | ||||
| If the Rule is intended to compress packets with different prefix | If the Rule is intended to compress packets with different prefix | |||
| values, match-mapping SHOULD be used. The different prefixes are | values, match-mapping SHOULD be used. The different prefixes are | |||
| listed in the TV, the MO is set to "match-mapping" and the CDA is set | listed in the TV, the MO is set to "match-mapping" and the CDA is set | |||
| to "mapping-sent". See Figure 27 | to "mapping-sent". See Figure 26. | |||
| Otherwise, the TV contains the prefix, the MO is set to "equal" and | Otherwise, the TV is not set, the MO is set to "ignore" and the CDA | |||
| the CDA is set to "value-sent". | is set to "value-sent". | |||
| 10.7.2. IPv6 source and destination IID | 10.7.2. IPv6 source and destination IID | |||
| If the Dev or App IID are based on an LPWAN address, then the IID can | If the Dev or App IID are based on an LPWAN address, then the IID can | |||
| be reconstructed with information coming from the LPWAN header. In | be reconstructed with information coming from the LPWAN header. In | |||
| that case, the TV is not set, the MO is set to "ignore" and the CDA | that case, the TV is not set, the MO is set to "ignore" and the CDA | |||
| is set to "DevIID" or "AppIID". The LPWAN technology generally | is set to "DevIID" or "AppIID". On LPWAN technologies where the | |||
| carries a single identifier corresponding to the Dev. AppIID cannot | frames carry a single identifier (corresponding to the Dev.), AppIID | |||
| be used. | cannot be used. | |||
| For privacy reasons or if the Dev address is changing over time, a | As described in [RFC8065], it may be undesirable to build the Dev | |||
| static value that is not equal to the Dev address SHOULD be used. In | IPv6 IID out of the Dev address. Another static value is used | |||
| that case, the TV contains the static value, the MO operator is set | instead. In that case, the TV contains the static value, the MO | |||
| to "equal" and the CDA is set to "not-sent". [RFC7217] provides some | operator is set to "equal" and the CDA is set to "not-sent". | |||
| methods that MAY be used to derive this static identifier. | [RFC7217] provides some methods to derive this static identifier. | |||
| If several IIDs are possible, then the TV contains the list of | If several IIDs are possible, then the TV contains the list of | |||
| possible IIDs, the MO is set to "match-mapping" and the CDA is set to | possible IIDs, the MO is set to "match-mapping" and the CDA is set to | |||
| "mapping-sent". | "mapping-sent". | |||
| It MAY also happen that the IID variability only expresses itself on | It may also happen that the IID variability only expresses itself on | |||
| a few bytes. In that case, the TV is set to the stable part of the | a 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". | IID, the MO is set to "MSB" and the CDA is set to "LSB". | |||
| Finally, the IID can be sent in its entirety on the LPWAN. In that | Finally, the IID can be sent in its entirety on the LPWAN. In that | |||
| case, the TV is not set, the MO is set to "ignore" and the CDA is set | case, the TV is not set, the MO is set to "ignore" and the CDA is set | |||
| to "value-sent". | to "value-sent". | |||
| 10.8. IPv6 extensions | 10.8. IPv6 extensions | |||
| No Rule is currently defined that processes IPv6 extensions. | This document does not provide recommendations on how to compress | |||
| IPv6 extensions. | ||||
| 10.9. UDP source and destination port | 10.9. UDP source and destination port | |||
| To allow for a single Rule being used for both directions, the UDP | To allow for a single Rule being used for both directions, the UDP | |||
| port values are identified by their role (Dev or App) and not by | port values are identified by their role (Dev or App) and not by | |||
| their position in the header (source or destination). The SCHC C/D | their position in the header (source or destination). The SCHC C/D | |||
| MUST be aware of the traffic direction (Uplink, Downlink) to select | MUST be aware of the traffic direction (Uplink, Downlink) to select | |||
| the appropriate field. The following Rules apply for Dev and App | the appropriate field. The following Rules apply for Dev and App | |||
| port numbers. | port numbers. | |||
| skipping to change at page 52, line 14 ¶ | skipping to change at page 52, line 31 ¶ | |||
| If some well-known values are used, the TV can contain the list of | If some well-known values are used, the TV can contain the list of | |||
| these values, the MO is set to "match-mapping" and the CDA is set to | these values, the MO is set to "match-mapping" and the CDA is set to | |||
| "mapping-sent". | "mapping-sent". | |||
| Otherwise the port numbers are sent over the LPWAN. The TV is not | Otherwise the port numbers are sent over the LPWAN. The TV is not | |||
| set, the MO is set to "ignore" and the CDA is set to "value-sent". | set, the MO is set to "ignore" and the CDA is set to "value-sent". | |||
| 10.10. UDP length field | 10.10. UDP length field | |||
| The UDP length can be computed from the received data. In that case, | The UDP length can be computed from the received data. The TV is not | |||
| the TV is not set, the MO is set to "ignore" and the CDA is set to | set, the MO is set to "ignore" and the CDA is set to "compute-*". | |||
| "compute-length". | ||||
| If the payload is small, the TV can be set to 0x0000, the MO set to | ||||
| "MSB" and the CDA to "LSB". | ||||
| In other cases, the length SHOULD be sent and the CDA is replaced by | ||||
| "value-sent". | ||||
| 10.11. UDP Checksum field | 10.11. UDP Checksum field | |||
| The UDP checksum operation is mandatory with IPv6 for most packets | The UDP checksum operation is mandatory with IPv6 for most packets | |||
| but there are exceptions [RFC8200]. | but there are exceptions [RFC8200]. | |||
| For instance, protocols that use UDP as a tunnel encapsulation may | For instance, protocols that use UDP as a tunnel encapsulation may | |||
| enable zero-checksum mode for a specific port (or set of ports) for | enable zero-checksum mode for a specific port (or set of ports) for | |||
| sending and/or receiving. [RFC8200] requires any node implementing | sending and/or receiving. [RFC8200] requires any node implementing | |||
| zero-checksum mode to follow the requirements specified in | zero-checksum mode to follow the requirements specified in | |||
| "Applicability Statement for the Use of IPv6 UDP Datagrams with Zero | "Applicability Statement for the Use of IPv6 UDP Datagrams with Zero | |||
| Checksums" [RFC6936]. | Checksums" [RFC6936]. | |||
| 6LoWPAN Header Compression [RFC6282] also specifies that a UDP | 6LoWPAN Header Compression [RFC6282] also specifies that a UDP | |||
| datagram can be sent without a checksum when an upper layer | checksum can be elided by the compressor and re-computed by the | |||
| guarantees the integrity of the UDP payload and pseudo-header. A | decompressor when an upper layer guarantees the integrity of the UDP | |||
| specific example of this is when a Message Integrity Check (MIC) | payload and pseudo-header. A specific example of this is when a | |||
| protects the compressed message between the compressor that elides | Message Integrity Check protects the compressed message between the | |||
| the UDP checksum and the decompressor that computes it, with a | compressor that elides the UDP checksum and the decompressor that | |||
| strength that is identical or better to the UDP checksum. | computes it, with a strength that is identical or better to the UDP | |||
| checksum. | ||||
| Similarly, a SCHC compressor MAY elide the UDP checksum when another | Similarly, a SCHC compressor MAY elide the UDP checksum when another | |||
| layer guarantees at least equal integrity protection for the UDP | layer guarantees at least equal integrity protection for the UDP | |||
| payload and the pseudo-header. In this case, the TV is not set, the | payload and the pseudo-header. In this case, the TV is not set, the | |||
| MO is set to "ignore" and the CDA is set to "compute-checksum". | MO is set to "ignore" and the CDA is set to "compute-*". | |||
| In particular, when SCHC fragmentation is used, a fragmentation MIC | In particular, when SCHC fragmentation is used, a fragmentation RCS | |||
| of 2 bytes or more provides equal or better protection than the UDP | of 2 bytes or more provides equal or better protection than the UDP | |||
| checksum; in that case, if the compressor is collocated with the | checksum; in that case, if the compressor is collocated with the | |||
| fragmentation point and the decompressor is collocated with the | fragmentation point and the decompressor is collocated with the | |||
| packet reassembly point, and if the SCHC Packet is fragmented even | packet reassembly point, and if the SCHC Packet is fragmented even | |||
| when it would fit unfragmented in the L2 MTU, then the compressor MAY | when it would fit unfragmented in the L2 MTU, then the compressor MAY | |||
| elide the UDP checksum. Whether and when the UDP Checksum is elided | verify and then elide the UDP checksum. Whether and when the UDP | |||
| is to be specified in the Profile. | Checksum is elided is to be specified in the Profile. | |||
| Since the compression happens before the fragmentation, implementors | Since the compression happens before the fragmentation, implementors | |||
| should understand the risks when dealing with unprotected data below | should understand the risks when dealing with unprotected data below | |||
| the transport layer and take special care when manipulating that | the transport layer and take special care when manipulating that | |||
| data. | data. | |||
| In other cases, the checksum SHOULD be explicitly sent. The TV is | In other cases, the checksum SHOULD be explicitly sent. The TV is | |||
| not set, the MO is set to "ignore" and the CDA is set to "value- | not set, the MO is set to "ignore" and the CDA is set to "value- | |||
| sent". | sent". | |||
| 11. IANA Considerations | 11. IANA Considerations | |||
| This document has no request to IANA. | This document has no request to IANA. | |||
| 12. Security considerations | 12. Security considerations | |||
| Wireless networks are subjects to various sorts of attacks, which are | ||||
| not specific to SCHC. In this section, we'll assume that an attacker | ||||
| was able to break into the network despite the latter's security | ||||
| measures and that it can now send packets to a target node. What is | ||||
| specific to SCHC is the amplification of the effects that this break- | ||||
| in could allow. Our analysis equally applies to legitimate nodes | ||||
| "going crazy". | ||||
| 12.1. Security considerations for SCHC Compression/Decompression | 12.1. Security considerations for SCHC Compression/Decompression | |||
| A malicious header compression could cause the reconstruction of a | Let's assume that an attacker is able to send a forged SCHC Packet to | |||
| wrong packet that does not match with the original one. Such a | a SCHC Decompressor. | |||
| corruption MAY be detected with end-to-end authentication and | ||||
| integrity mechanisms. Header Compression does not add more security | ||||
| problem than what is already needed in a transmission. For instance, | ||||
| to avoid an attack, never re-construct a packet bigger than | ||||
| MAX_PACKET_SIZE (with 1500 bytes as generic default). | ||||
| 12.2. Security considerations for SCHC Fragmentation/Reassembly | Let's first consider the case where the Rule ID contained in that | |||
| forged SCHC Packet does not correspond to a Rule allocated in the | ||||
| Rule table. An implementation should detect that the Rule ID is | ||||
| invalid and should silently drop the offending SCHC Packet. | ||||
| This subsection describes potential attacks to LPWAN SCHC F/R and | Let's now consider that the Rule ID corresponds to a Rule in the | |||
| suggests possible countermeasures. | table. With the CDAs defined in this document, the reconstructed | |||
| packet is at most a constant number of bits bigger than the SCHC | ||||
| Packet that was received. This assumes that the compute-* | ||||
| decompression actions produce a bounded number of bits, irrespective | ||||
| of the incoming SCHC Packet. This property is true for IPv6 Length, | ||||
| UDP Length and UDP Checksum, for which the compute-* CDA is | ||||
| recommended by this document. | ||||
| A node can perform a buffer reservation attack by sending a first | As a consequence, SCHC Decompression does not amplify attacks, beyond | |||
| SCHC Fragment to a target. Then, the receiver will reserve buffer | adding a bounded number of bits to the SCHC Packet received. This | |||
| space for the IPv6 packet. Other incoming fragmented SCHC Packets | bound is determined by the Rule stored in the receiving device. | |||
| will be dropped while the reassembly buffer is occupied during the | ||||
| reassembly timeout. Once that timeout expires, the attacker can | ||||
| repeat the same procedure, and iterate, thus creating a denial of | ||||
| service attack. The (low) cost to mount this attack is linear with | ||||
| the number of buffers at the target node. However, the cost for an | ||||
| attacker can be increased if individual SCHC Fragments of multiple | ||||
| packets can be stored in the reassembly buffer. To further increase | ||||
| the attack cost, the reassembly buffer can be split into SCHC | ||||
| Fragment-sized buffer slots. Once a packet is complete, it is | ||||
| processed normally. If buffer overload occurs, a receiver can | ||||
| discard packets based on the sender behavior, which MAY help identify | ||||
| which SCHC Fragments have been sent by an attacker. | ||||
| In another type of attack, the malicious node is required to have | As a general safety measure, a SCHC Decompressor should never re- | |||
| overhearing capabilities. If an attacker can overhear a SCHC | construct a packet larger than MAX_PACKET_SIZE (defined in a Profile, | |||
| Fragment, it can send a spoofed duplicate (e.g. with random payload) | with 1500 bytes as generic default). | |||
| to the destination. If the LPWAN technology does not support | ||||
| suitable protection (e.g. source authentication and frame counters to | ||||
| prevent replay attacks), a receiver cannot distinguish legitimate | ||||
| from spoofed SCHC Fragments. The original IPv6 packet will be | ||||
| considered corrupt and will be dropped. To protect resource- | ||||
| constrained nodes from this attack, it has been proposed to establish | ||||
| a binding among the SCHC Fragments to be transmitted by a node, by | ||||
| applying content-chaining to the different SCHC Fragments, based on | ||||
| cryptographic hash functionality. The aim of this technique is to | ||||
| allow a receiver to identify illegitimate SCHC Fragments. | ||||
| Further attacks can involve sending overlapped fragments (i.e. | 12.2. Security considerations for SCHC Fragmentation/Reassembly | |||
| comprising some overlapping parts of the original IPv6 datagram). | ||||
| Implementers MUST ensure that the correct operation is not affected | ||||
| by such event. | ||||
| In ACK-on-Error, a malicious node MAY force a SCHC Fragment sender to | Let's assume that an attacker is able to send to a forged SCHC | |||
| resend a SCHC Fragment a number of times, with the aim to increase | Fragment to a SCHC Reassembler. | |||
| consumption of the SCHC Fragment sender's resources. To this end, | ||||
| the malicious node MAY repeatedly send a fake ACK to the SCHC | A node can perform a buffer reservation attack: the receiver will | |||
| Fragment sender, with a Bitmap that reports that one or more SCHC | reserve buffer space for the SCHC Packet. If the implementation has | |||
| Fragments have been lost. In order to mitigate this possible attack, | only one buffer, other incoming fragmented SCHC Packets will be | |||
| MAX_ACK_RETRIES MAY be set to a safe value which allows to limit the | dropped while the reassembly buffer is occupied during the reassembly | |||
| maximum damage of the attack to an acceptable extent. However, note | timeout. Once that timeout expires, the attacker can repeat the same | |||
| that a high setting for MAX_ACK_RETRIES benefits SCHC Fragment | procedure, and iterate, thus creating a denial of service attack. An | |||
| reliability modes, therefore the trade-off needs to be carefully | implementation may have multiple reassembly buffers. The cost to | |||
| considered. | mount this attack is linear with the number of buffers at the target | |||
| node. Better, the cost for an attacker can be increased if | ||||
| individual fragments of multiple SCHC Packets can be stored in the | ||||
| reassembly buffer. The finer grained the reassembly buffer (downto | ||||
| the smallest tile size), the higher the cost of the attack. If | ||||
| buffer overload does occur, a smart receiver could selectively | ||||
| discard SCHC Packets being reassembled based on the sender behavior, | ||||
| which may help identify which SCHC Fragments have been sent by the | ||||
| attacker. Another mild counter-measure is for the target to abort | ||||
| the fragmentation/reassembly session as early as it detects a non- | ||||
| identical SCHC Fragment duplicate, anticipating for an eventual | ||||
| corrupt SCHC Packet, so as to save the sender the hassle of sending | ||||
| the rest of the fragments for this SCHC Packet. | ||||
| In another type of attack, the malicious node is additionally assumed | ||||
| to be able to hear an incoming communication destined to the target | ||||
| node. It can then send a forged SCHC Fragment that looks like it | ||||
| belongs to a SCHC Packet already being reassembled at the target | ||||
| node. This can cause the SCHC Packet to be considered corrupt and be | ||||
| dropped by the receiver. The amplification happens here by a single | ||||
| spoofed SCHC Fragment rendering a full sequence of legit SCHC | ||||
| Fragments useless. If the target uses ACK-Always or ACK-on-Error | ||||
| mode, such a malicious node can also interfere with the | ||||
| acknowledgement and repetition algorithm of SCHC F/R. A single | ||||
| spoofed ACK, with all bitmap bits set to 0, will trigger the | ||||
| repetition of WINDOW_SIZE tiles. This protocol loop amplification | ||||
| depletes the energy source of the target node and consumes the | ||||
| channel bandwidth. Similarly, a spoofed ACK REQ will trigger the | ||||
| sending of a SCHC ACK, which may be much larger than the ACK REQ if | ||||
| WINDOW_SIZE is large. These consequences should be borne in mind | ||||
| when defining profiles for SCHC over specific LPWAN technologies. | ||||
| 13. Acknowledgements | 13. Acknowledgements | |||
| Thanks to Carsten Bormann, Philippe Clavier, Diego Dujovne, Eduardo | Thanks to Sergio Aguilar Romero, Carsten Bormann, Philippe Clavier, | |||
| Ingles Sanchez, Arunprabhu Kandasamy, Rahul Jadhav, Sergio Lopez | Daniel Ducuara Beltran Diego Dujovne, Eduardo Ingles Sanchez, | |||
| Arunprabhu Kandasamy, Suresh Krishnan, Rahul Jadhav, Sergio Lopez | ||||
| Bernal, Antony Markovski, Alexander Pelov, Charles Perkins, Edgar | Bernal, Antony Markovski, Alexander Pelov, Charles Perkins, Edgar | |||
| Ramos, Shoichi Sakane, and Pascal Thubert for useful design | Ramos, Shoichi Sakane, and Pascal Thubert for useful design | |||
| consideration and comments. | consideration and comments. | |||
| 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. | |||
| skipping to change at page 56, line 15 ¶ | skipping to change at page 56, line 47 ¶ | |||
| [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, <https://www.rfc-editor.org/info/rfc7136>. | February 2014, <https://www.rfc-editor.org/info/rfc7136>. | |||
| [RFC7217] Gont, F., "A Method for Generating Semantically Opaque | [RFC7217] Gont, F., "A Method for Generating Semantically Opaque | |||
| Interface Identifiers with IPv6 Stateless Address | Interface Identifiers with IPv6 Stateless Address | |||
| Autoconfiguration (SLAAC)", RFC 7217, | Autoconfiguration (SLAAC)", RFC 7217, | |||
| DOI 10.17487/RFC7217, April 2014, | DOI 10.17487/RFC7217, April 2014, | |||
| <https://www.rfc-editor.org/info/rfc7217>. | <https://www.rfc-editor.org/info/rfc7217>. | |||
| [RFC8065] Thaler, D., "Privacy Considerations for IPv6 Adaptation- | ||||
| Layer Mechanisms", RFC 8065, DOI 10.17487/RFC8065, | ||||
| February 2017, <https://www.rfc-editor.org/info/rfc8065>. | ||||
| [RFC8376] Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN) | [RFC8376] Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN) | |||
| Overview", RFC 8376, DOI 10.17487/RFC8376, May 2018, | Overview", RFC 8376, DOI 10.17487/RFC8376, May 2018, | |||
| <https://www.rfc-editor.org/info/rfc8376>. | <https://www.rfc-editor.org/info/rfc8376>. | |||
| Appendix A. Compression Examples | Appendix A. Compression Examples | |||
| This section gives some scenarios of the compression mechanism for | This section gives some scenarios of the compression mechanism for | |||
| IPv6/UDP. The goal is to illustrate the behavior of SCHC. | IPv6/UDP. The goal is to illustrate the behavior of SCHC. | |||
| The mechanisms defined in this document can be applied to a Dev that | The mechanisms defined in this document can be applied to a Dev that | |||
| embeds some applications running over CoAP. In this example, three | embeds some applications running over CoAP. In this example, three | |||
| flows are considered. The first flow is for the device management | flows are considered. The first flow is for the device management | |||
| based on CoAP using Link Local IPv6 addresses and UDP ports 123 and | 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 | 124 for Dev and App, respectively. The second flow will be a CoAP | |||
| server for measurements done by the Dev (using ports 5683) and Global | server for measurements done by the Dev (using ports 5683) and Global | |||
| IPv6 Address prefixes alpha::IID/64 to beta::1/64. The last flow is | IPv6 Address prefixes alpha::IID/64 to beta::1/64. The last flow is | |||
| for legacy applications using different ports numbers, the | for legacy applications using different ports numbers, the | |||
| destination IPv6 address prefix is gamma::1/64. | destination IPv6 address prefix is gamma::1/64. | |||
| Figure 26 presents the protocol stack. IPv6 and UDP are represented | Figure 25 presents the protocol stack. IPv6 and UDP are represented | |||
| with dotted lines since these protocols are compressed on the radio | with dotted lines since these protocols are compressed on the radio | |||
| link. | link. | |||
| Management Data | Management Data | |||
| +----------+---------+---------+ | +----------+---------+---------+ | |||
| | CoAP | CoAP | legacy | | | CoAP | CoAP | legacy | | |||
| +----||----+---||----+---||----+ | +----||----+---||----+---||----+ | |||
| . UDP . UDP | UDP | | . UDP . UDP | UDP | | |||
| ................................ | ................................ | |||
| . IPv6 . IPv6 . IPv6 . | . IPv6 . IPv6 . IPv6 . | |||
| +------------------------------+ | +------------------------------+ | |||
| | SCHC Header compression | | | SCHC Header compression | | |||
| | and fragmentation | | | and fragmentation | | |||
| +------------------------------+ | +------------------------------+ | |||
| | LPWAN L2 technologies | | | LPWAN L2 technologies | | |||
| +------------------------------+ | +------------------------------+ | |||
| Dev or NGW | Dev or NGW | |||
| Figure 26: Simplified Protocol Stack for LP-WAN | Figure 25: Simplified Protocol Stack for LP-WAN | |||
| In some LPWAN technologies, only the Devs have a device ID. When | In some LPWAN technologies, only the Devs have a device ID. When | |||
| such technologies are used, it is necessary to statically define an | such technologies are used, it is necessary to statically define an | |||
| IID for the Link Local address for the SCHC C/D. | IID for the Link Local address for the SCHC C/D. | |||
| Rule 0 | Rule 0 | |||
| +----------------+--+--+--+---------+--------+------------++------+ | +----------------+--+--+--+---------+--------+------------++------+ | |||
| | Field |FL|FP|DI| Value | Match | Comp Decomp|| Sent | | | Field |FL|FP|DI| Value | Match | Comp Decomp|| Sent | | |||
| | | | | | | Opera. | Action ||[bits]| | | | | | | | Opera. | Action ||[bits]| | |||
| +----------------+--+--+--+---------+---------------------++------+ | +----------------+--+--+--+---------+---------------------++------+ | |||
| skipping to change at page 58, line 48 ¶ | skipping to change at page 59, line 23 ¶ | |||
| |IPv6 DevIID |64|1 |Bi| | ignore | DevIID || | | |IPv6 DevIID |64|1 |Bi| | ignore | DevIID || | | |||
| |IPv6 AppPrefix |64|1 |Bi|gamma/64 | equal | not-sent || | | |IPv6 AppPrefix |64|1 |Bi|gamma/64 | equal | not-sent || | | |||
| |IPv6 AppIID |64|1 |Bi|::1000 | equal | not-sent || | | |IPv6 AppIID |64|1 |Bi|::1000 | equal | not-sent || | | |||
| +================+==+==+==+=========+========+============++======+ | +================+==+==+==+=========+========+============++======+ | |||
| |UDP DevPort |16|1 |Bi|8720 | MSB(12)| LSB || 4 | | |UDP DevPort |16|1 |Bi|8720 | MSB(12)| LSB || 4 | | |||
| |UDP AppPort |16|1 |Bi|8720 | MSB(12)| LSB || 4 | | |UDP AppPort |16|1 |Bi|8720 | MSB(12)| LSB || 4 | | |||
| |UDP Length |16|1 |Bi| | ignore | comp-length|| | | |UDP Length |16|1 |Bi| | ignore | comp-length|| | | |||
| |UDP checksum |16|1 |Bi| | ignore | comp-chk || | | |UDP checksum |16|1 |Bi| | ignore | comp-chk || | | |||
| +================+==+==+==+=========+========+============++======+ | +================+==+==+==+=========+========+============++======+ | |||
| Figure 27: Context Rules | Figure 26: Context Rules | |||
| All the fields described in the three Rules depicted on Figure 27 are | All the fields described in the three Rules depicted on Figure 26 are | |||
| present in the IPv6 and UDP headers. The DevIID-DID value is found | present in the IPv6 and UDP headers. The DevIID-DID value is found | |||
| in the L2 header. | in the L2 header. | |||
| The second and third Rules use global addresses. The way the Dev | The second and third Rules use global addresses. The way the Dev | |||
| learns the prefix is not in the scope of the document. | learns the prefix is not in the scope of the document. | |||
| The third Rule compresses each port number to 4 bits. | The third Rule compresses each port number to 4 bits. | |||
| Appendix B. Fragmentation Examples | Appendix B. Fragmentation Examples | |||
| This section provides examples for the various fragment reliability | This section provides examples for the various fragment reliability | |||
| modes specified in this document. In the drawings, Bitmaps are shown | modes specified in this document. In the drawings, Bitmaps are shown | |||
| in their uncompressed form. | in their uncompressed form. | |||
| Figure 28 illustrates the transmission in No-ACK mode of a SCHC | Figure 27 illustrates the transmission in No-ACK mode of a SCHC | |||
| Packet that needs 11 SCHC Fragments. FCN is 1 bit wide. | Packet that needs 11 SCHC Fragments. FCN is 1 bit wide. | |||
| Sender Receiver | Sender Receiver | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-------FCN=0-------->| | |-------FCN=0-------->| | |||
| |-----FCN=1 + MIC --->| Integrity check: success | |-----FCN=1 + RCS --->| Integrity check: success | |||
| (End) | (End) | |||
| Figure 28: No-ACK mode, 11 SCHC Fragments | Figure 27: No-ACK mode, 11 SCHC Fragments | |||
| In the following examples, N (the size of the FCN field) is 3 bits. | In the following examples, N (the size of the FCN field) is 3 bits. | |||
| The All-1 FCN value is 7. | The All-1 FCN value is 7. | |||
| Figure 29 illustrates the transmission in ACK-on-Error mode of a SCHC | Figure 28 illustrates the transmission in ACK-on-Error mode of a SCHC | |||
| Packet fragmented in 11 tiles, with one tile per SCHC Fragment, | Packet fragmented in 11 tiles, with one tile per SCHC Fragment, | |||
| WINDOW_SIZE=7 and no lost SCHC Fragment. | WINDOW_SIZE=7 and no lost SCHC Fragment. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, FCN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, FCN=4----->| | |-----W=0, FCN=4----->| | |||
| |-----W=0, FCN=3----->| | |-----W=0, FCN=3----->| | |||
| |-----W=0, FCN=2----->| | |-----W=0, FCN=2----->| | |||
| |-----W=0, FCN=1----->| | |-----W=0, FCN=1----->| | |||
| |-----W=0, FCN=0----->| | |-----W=0, FCN=0----->| | |||
| (no ACK) | (no ACK) | |||
| |-----W=1, FCN=6----->| | |-----W=1, FCN=6----->| | |||
| |-----W=1, FCN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, FCN=4----->| | |-----W=1, FCN=4----->| | |||
| |--W=1, FCN=7 + MIC-->| Integrity check: success | |--W=1, FCN=7 + RCS-->| Integrity check: success | |||
| |<-- ACK, W=1, C=1 ---| C=1 | |<-- ACK, W=1, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 29: ACK-on-Error mode, 11 tiles, one tile per SCHC Fragment, | Figure 28: ACK-on-Error mode, 11 tiles, one tile per SCHC Fragment, | |||
| no lost SCHC Fragment. | no lost SCHC Fragment. | |||
| Figure 30 illustrates the transmission in ACK-on-Error mode of a SCHC | Figure 29 illustrates the transmission in ACK-on-Error mode of a SCHC | |||
| Packet fragmented in 11 tiles, with one tile per SCHC Fragment, | Packet fragmented in 11 tiles, with one tile per SCHC Fragment, | |||
| WINDOW_SIZE=7 and three lost SCHC Fragments. | WINDOW_SIZE=7 and three lost SCHC Fragments. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, FCN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, FCN=4--X-->| | |-----W=0, FCN=4--X-->| | |||
| |-----W=0, FCN=3----->| | |-----W=0, FCN=3----->| | |||
| |-----W=0, FCN=2--X-->| | |-----W=0, FCN=2--X-->| | |||
| |-----W=0, FCN=1----->| | |-----W=0, FCN=1----->| | |||
| |-----W=0, FCN=0----->| 6543210 | |-----W=0, FCN=0----->| 6543210 | |||
| |<-- ACK, W=0, C=0 ---| Bitmap:1101011 | |<-- ACK, W=0, C=0 ---| Bitmap:1101011 | |||
| |-----W=0, FCN=4----->| | |-----W=0, FCN=4----->| | |||
| |-----W=0, FCN=2----->| | |-----W=0, FCN=2----->| | |||
| (no ACK) | (no ACK) | |||
| |-----W=1, FCN=6----->| | |-----W=1, FCN=6----->| | |||
| |-----W=1, FCN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, FCN=4--X-->| | |-----W=1, FCN=4--X-->| | |||
| |- W=1, FCN=7 + MIC ->| Integrity check: failure | |- W=1, FCN=7 + RCS ->| Integrity check: failure | |||
| |<-- ACK, W=1, C=0 ---| C=0, Bitmap:1100001 | |<-- ACK, W=1, C=0 ---| C=0, Bitmap:1100001 | |||
| |-----W=1, FCN=4----->| Integrity check: success | |-----W=1, FCN=4----->| Integrity check: success | |||
| |<-- ACK, W=1, C=1 ---| C=1 | |<-- ACK, W=1, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 30: ACK-on-Error mode, 11 tiles, one tile per SCHC Fragment, | Figure 29: ACK-on-Error mode, 11 tiles, one tile per SCHC Fragment, | |||
| lost SCHC Fragments. | lost SCHC Fragments. | |||
| Figure 31 shows an example of a transmission in ACK-on-Error mode of | Figure 30 shows an example of a transmission in ACK-on-Error mode of | |||
| a SCHC Packet fragmented in 73 tiles, with N=5, WINDOW_SIZE=28, M=2 | a SCHC Packet fragmented in 73 tiles, with N=5, WINDOW_SIZE=28, M=2 | |||
| and 3 lost SCHC Fragments. | and 3 lost SCHC Fragments. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=27----->| 4 tiles sent | |-----W=0, FCN=27----->| 4 tiles sent | |||
| |-----W=0, FCN=23----->| 4 tiles sent | |-----W=0, FCN=23----->| 4 tiles sent | |||
| |-----W=0, FCN=19----->| 4 tiles sent | |-----W=0, FCN=19----->| 4 tiles sent | |||
| |-----W=0, FCN=15--X-->| 4 tiles sent (not received) | |-----W=0, FCN=15--X-->| 4 tiles sent (not received) | |||
| |-----W=0, FCN=11----->| 4 tiles sent | |-----W=0, FCN=11----->| 4 tiles sent | |||
| |-----W=0, FCN=7 ----->| 4 tiles sent | |-----W=0, FCN=7 ----->| 4 tiles sent | |||
| skipping to change at page 61, line 34 ¶ | skipping to change at page 62, line 30 ¶ | |||
| |-----W=2, FCN=27----->| 4 tiles sent | |-----W=2, FCN=27----->| 4 tiles sent | |||
| |-----W=2, FCN=23----->| 4 tiles sent | |-----W=2, FCN=23----->| 4 tiles sent | |||
| ^ |-----W=2, FCN=19----->| 1 tile sent | ^ |-----W=2, FCN=19----->| 1 tile sent | |||
| | |-----W=2, FCN=18----->| 1 tile sent | | |-----W=2, FCN=18----->| 1 tile sent | |||
| | |-----W=2, FCN=17----->| 1 tile sent | | |-----W=2, FCN=17----->| 1 tile sent | |||
| |-----W=2, FCN=16----->| 1 tile sent | |-----W=2, FCN=16----->| 1 tile sent | |||
| s |-----W=2, FCN=15----->| 1 tile sent | s |-----W=2, FCN=15----->| 1 tile sent | |||
| m |-----W=2, FCN=14----->| 1 tile sent | m |-----W=2, FCN=14----->| 1 tile sent | |||
| a |-----W=2, FCN=13--X-->| 1 tile sent (not received) | a |-----W=2, FCN=13--X-->| 1 tile sent (not received) | |||
| l |-----W=2, FCN=12----->| 1 tile sent | l |-----W=2, FCN=12----->| 1 tile sent | |||
| l |---W=2, FCN=31 + MIC->| Integrity check: failure | l |---W=2, FCN=31 + RCS->| Integrity check: failure | |||
| e |<--- ACK, W=0, C=0 ---| C=0, Bitmap:1111111111110000111111111111 | e |<--- ACK, W=0, C=0 ---| C=0, Bitmap:1111111111110000111111111111 | |||
| r |-----W=0, FCN=15----->| 1 tile sent | r |-----W=0, FCN=15----->| 1 tile sent | |||
| |-----W=0, FCN=14----->| 1 tile sent | |-----W=0, FCN=14----->| 1 tile sent | |||
| L |-----W=0, FCN=13----->| 1 tile sent | L |-----W=0, FCN=13----->| 1 tile sent | |||
| 2 |-----W=0, FCN=12----->| 1 tile sent | 2 |-----W=0, FCN=12----->| 1 tile sent | |||
| |<--- ACK, W=1, C=0 ---| C=0, Bitmap:1111111111111111111111110000 | |<--- ACK, W=1, C=0 ---| C=0, Bitmap:1111111111111111111111110000 | |||
| M |-----W=1, FCN=3 ----->| 1 tile sent | M |-----W=1, FCN=3 ----->| 1 tile sent | |||
| T |-----W=1, FCN=2 ----->| 1 tile sent | T |-----W=1, FCN=2 ----->| 1 tile sent | |||
| U |-----W=1, FCN=1 ----->| 1 tile sent | U |-----W=1, FCN=1 ----->| 1 tile sent | |||
| |-----W=1, FCN=0 ----->| 1 tile sent | |-----W=1, FCN=0 ----->| 1 tile sent | |||
| | |<--- ACK, W=2, C=0 ---| C=0, Bitmap:1111111111111101000000000001 | | |<--- ACK, W=2, C=0 ---| C=0, Bitmap:1111111111111101000000000001 | |||
| | |-----W=2, FCN=13----->| Integrity check: success | | |-----W=2, FCN=13----->| Integrity check: success | |||
| V |<--- ACK, W=2, C=1 ---| C=1 | V |<--- ACK, W=2, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 31: ACK-on-Error mode, variable MTU. | Figure 30: ACK-on-Error mode, variable MTU. | |||
| In this example, the L2 MTU becomes reduced just before sending the | In this example, the L2 MTU becomes reduced just before sending the | |||
| "W=2, FCN=19" fragment, leaving space for only 1 tile in each | "W=2, FCN=19" fragment, leaving space for only 1 tile in each | |||
| forthcoming SCHC Fragment. Before retransmissions, the 73 tiles are | forthcoming SCHC Fragment. Before retransmissions, the 73 tiles are | |||
| carried by a total of 25 SCHC Fragments, the last 9 being of smaller | carried by a total of 25 SCHC Fragments, the last 9 being of smaller | |||
| size. | size. | |||
| Note: other sequences of events (e.g. regarding when ACKs are sent by | Note: other sequences of events (e.g. regarding when ACKs are sent by | |||
| the Receiver) are also allowed by this specification. Profiles may | the Receiver) are also allowed by this specification. Profiles may | |||
| restrict this flexibility. | restrict this flexibility. | |||
| Figure 32 illustrates the transmission in ACK-Always mode of a SCHC | Figure 31 illustrates the transmission in ACK-Always mode of a SCHC | |||
| Packet fragmented in 11 tiles, with one tile per SCHC Fragment, with | Packet fragmented in 11 tiles, with one tile per SCHC Fragment, with | |||
| N=3, WINDOW_SIZE=7 and no loss. | N=3, WINDOW_SIZE=7 and no loss. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, FCN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, FCN=4----->| | |-----W=0, FCN=4----->| | |||
| |-----W=0, FCN=3----->| | |-----W=0, FCN=3----->| | |||
| |-----W=0, FCN=2----->| | |-----W=0, FCN=2----->| | |||
| |-----W=0, FCN=1----->| | |-----W=0, FCN=1----->| | |||
| |-----W=0, FCN=0----->| | |-----W=0, FCN=0----->| | |||
| |<-- ACK, W=0, C=0 ---| Bitmap:1111111 | |<-- ACK, W=0, C=0 ---| Bitmap:1111111 | |||
| |-----W=1, FCN=6----->| | |-----W=1, FCN=6----->| | |||
| |-----W=1, FCN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, FCN=4----->| | |-----W=1, FCN=4----->| | |||
| |--W=1, FCN=7 + MIC-->| Integrity check: success | |--W=1, FCN=7 + RCS-->| Integrity check: success | |||
| |<-- ACK, W=1, C=1 ---| C=1 | |<-- ACK, W=1, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 32: ACK-Always mode, 11 tiles, one tile per SCHC Fragment, no | Figure 31: ACK-Always mode, 11 tiles, one tile per SCHC Fragment, no | |||
| loss. | loss. | |||
| Figure 33 illustrates the transmission in ACK-Always mode of a SCHC | Figure 32 illustrates the transmission in ACK-Always mode of a SCHC | |||
| Packet fragmented in 11 tiles, with one tile per SCHC Fragment, N=3, | Packet fragmented in 11 tiles, with one tile per SCHC Fragment, N=3, | |||
| WINDOW_SIZE=7 and three lost SCHC Fragments. | WINDOW_SIZE=7 and three lost SCHC Fragments. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, FCN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, FCN=4--X-->| | |-----W=0, FCN=4--X-->| | |||
| |-----W=0, FCN=3----->| | |-----W=0, FCN=3----->| | |||
| |-----W=0, FCN=2--X-->| | |-----W=0, FCN=2--X-->| | |||
| |-----W=0, FCN=1----->| | |-----W=0, FCN=1----->| | |||
| |-----W=0, FCN=0----->| 6543210 | |-----W=0, FCN=0----->| 6543210 | |||
| |<-- ACK, W=0, C=0 ---| Bitmap:1101011 | |<-- ACK, W=0, C=0 ---| Bitmap:1101011 | |||
| |-----W=0, FCN=4----->| | |-----W=0, FCN=4----->| | |||
| |-----W=0, FCN=2----->| | |-----W=0, FCN=2----->| | |||
| |<-- ACK, W=0, C=0 ---| Bitmap:1111111 | |<-- ACK, W=0, C=0 ---| Bitmap:1111111 | |||
| |-----W=1, FCN=6----->| | |-----W=1, FCN=6----->| | |||
| |-----W=1, FCN=5----->| | |-----W=1, FCN=5----->| | |||
| |-----W=1, FCN=4--X-->| | |-----W=1, FCN=4--X-->| | |||
| |--W=1, FCN=7 + MIC-->| Integrity check: failure | |--W=1, FCN=7 + RCS-->| Integrity check: failure | |||
| |<-- ACK, W=1, C=0 ---| C=0, Bitmap:11000001 | |<-- ACK, W=1, C=0 ---| C=0, Bitmap:11000001 | |||
| |-----W=1, FCN=4----->| Integrity check: success | |-----W=1, FCN=4----->| Integrity check: success | |||
| |<-- ACK, W=1, C=1 ---| C=1 | |<-- ACK, W=1, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 33: ACK-Always mode, 11 tiles, one tile per SCHC Fragment, | Figure 32: ACK-Always mode, 11 tiles, one tile per SCHC Fragment, | |||
| three lost SCHC Fragments. | three lost SCHC Fragments. | |||
| Figure 34 illustrates the transmission in ACK-Always mode of a SCHC | Figure 33 illustrates the transmission in ACK-Always mode of a SCHC | |||
| Packet fragmented in 6 tiles, with one tile per SCHC Fragment, N=3, | Packet fragmented in 6 tiles, with one tile per SCHC Fragment, N=3, | |||
| WINDOW_SIZE=7, three lost SCHC Fragments and only one retry needed to | WINDOW_SIZE=7, three lost SCHC Fragments and only one retry needed to | |||
| recover each lost SCHC Fragment. | recover each lost SCHC Fragment. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, FCN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, FCN=4--X-->| | |-----W=0, FCN=4--X-->| | |||
| |-----W=0, FCN=3--X-->| | |-----W=0, FCN=3--X-->| | |||
| |-----W=0, FCN=2--X-->| | |-----W=0, FCN=2--X-->| | |||
| |--W=0, FCN=7 + MIC-->| Integrity check: failure | |--W=0, FCN=7 + RCS-->| Integrity check: failure | |||
| |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001 | |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001 | |||
| |-----W=0, FCN=4----->| Integrity check: failure | |-----W=0, FCN=4----->| Integrity check: failure | |||
| |-----W=0, FCN=3----->| Integrity check: failure | |-----W=0, FCN=3----->| Integrity check: failure | |||
| |-----W=0, FCN=2----->| Integrity check: success | |-----W=0, FCN=2----->| Integrity check: success | |||
| |<-- ACK, W=0, C=1 ---| C=1 | |<-- ACK, W=0, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 34: ACK-Always mode, 6 tiles, one tile per SCHC Fragment, | Figure 33: ACK-Always mode, 6 tiles, one tile per SCHC Fragment, | |||
| three lost SCHC Fragments. | three lost SCHC Fragments. | |||
| Figure 35 illustrates the transmission in ACK-Always mode of a SCHC | Figure 34 illustrates the transmission in ACK-Always mode of a SCHC | |||
| Packet fragmented in 6 tiles, with one tile per SCHC Fragment, N=3, | Packet fragmented in 6 tiles, with one tile per SCHC Fragment, N=3, | |||
| WINDOW_SIZE=7, three lost SCHC Fragments, and the second SCHC ACK | WINDOW_SIZE=7, three lost SCHC Fragments, and the second SCHC ACK | |||
| lost. | lost. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, FCN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, FCN=4--X-->| | |-----W=0, FCN=4--X-->| | |||
| |-----W=0, FCN=3--X-->| | |-----W=0, FCN=3--X-->| | |||
| |-----W=0, FCN=2--X-->| | |-----W=0, FCN=2--X-->| | |||
| |--W=0, FCN=7 + MIC-->| Integrity check: failure | |--W=0, FCN=7 + RCS-->| Integrity check: failure | |||
| |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001 | |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001 | |||
| |-----W=0, FCN=4----->| Integrity check: failure | |-----W=0, FCN=4----->| Integrity check: failure | |||
| |-----W=0, FCN=3----->| Integrity check: failure | |-----W=0, FCN=3----->| Integrity check: failure | |||
| |-----W=0, FCN=2----->| Integrity check: success | |-----W=0, FCN=2----->| Integrity check: success | |||
| |<-X-ACK, W=0, C=1 ---| C=1 | |<-X-ACK, W=0, C=1 ---| C=1 | |||
| timeout | | | timeout | | | |||
| |--- W=0, ACK REQ --->| ACK REQ | |--- W=0, ACK REQ --->| ACK REQ | |||
| |<-- ACK, W=0, C=1 ---| C=1 | |<-- ACK, W=0, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 35: ACK-Always mode, 6 tiles, one tile per SCHC Fragment, SCHC | Figure 34: ACK-Always mode, 6 tiles, one tile per SCHC Fragment, SCHC | |||
| ACK loss. | ACK loss. | |||
| Figure 36 illustrates the transmission in ACK-Always mode of a SCHC | Figure 35 illustrates the transmission in ACK-Always mode of a SCHC | |||
| Packet fragmented in 6 tiles, with N=3, WINDOW_SIZE=7, with three | Packet fragmented in 6 tiles, with N=3, WINDOW_SIZE=7, with three | |||
| lost SCHC Fragments, and one retransmitted SCHC Fragment lost again. | lost SCHC Fragments, and one retransmitted SCHC Fragment lost again. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=6----->| | |-----W=0, FCN=6----->| | |||
| |-----W=0, FCN=5----->| | |-----W=0, FCN=5----->| | |||
| |-----W=0, FCN=4--X-->| | |-----W=0, FCN=4--X-->| | |||
| |-----W=0, FCN=3--X-->| | |-----W=0, FCN=3--X-->| | |||
| |-----W=0, FCN=2--X-->| | |-----W=0, FCN=2--X-->| | |||
| |--W=0, FCN=7 + MIC-->| Integrity check: failure | |--W=0, FCN=7 + RCS-->| Integrity check: failure | |||
| |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001 | |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001 | |||
| |-----W=0, FCN=4----->| Integrity check: failure | |-----W=0, FCN=4----->| Integrity check: failure | |||
| |-----W=0, FCN=3----->| Integrity check: failure | |-----W=0, FCN=3----->| Integrity check: failure | |||
| |-----W=0, FCN=2--X-->| | |-----W=0, FCN=2--X-->| | |||
| timeout| | | timeout| | | |||
| |--- W=0, ACK REQ --->| ACK REQ | |--- W=0, ACK REQ --->| ACK REQ | |||
| |<-- ACK, W=0, C=0 ---| C=0, Bitmap: 1111101 | |<-- ACK, W=0, C=0 ---| C=0, Bitmap: 1111101 | |||
| |-----W=0, FCN=2----->| Integrity check: success | |-----W=0, FCN=2----->| Integrity check: success | |||
| |<-- ACK, W=0, C=1 ---| C=1 | |<-- ACK, W=0, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 36: ACK-Always mode, 6 tiles, retransmitted SCHC Fragment lost | Figure 35: ACK-Always mode, 6 tiles, retransmitted SCHC Fragment lost | |||
| again. | again. | |||
| Figure 37 illustrates the transmission in ACK-Always mode of a SCHC | Figure 36 illustrates the transmission in ACK-Always mode of a SCHC | |||
| Packet fragmented in 28 tiles, with one tile per SCHC Fragment, N=5, | Packet fragmented in 28 tiles, with one tile per SCHC Fragment, N=5, | |||
| WINDOW_SIZE=24 and two lost SCHC Fragments. | WINDOW_SIZE=24 and two lost SCHC Fragments. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, FCN=23----->| | |-----W=0, FCN=23----->| | |||
| |-----W=0, FCN=22----->| | |-----W=0, FCN=22----->| | |||
| |-----W=0, FCN=21--X-->| | |-----W=0, FCN=21--X-->| | |||
| |-----W=0, FCN=20----->| | |-----W=0, FCN=20----->| | |||
| |-----W=0, FCN=19----->| | |-----W=0, FCN=19----->| | |||
| |-----W=0, FCN=18----->| | |-----W=0, FCN=18----->| | |||
| skipping to change at page 65, line 42 ¶ | skipping to change at page 66, line 42 ¶ | |||
| |-----W=0, FCN=1 ----->| | |-----W=0, FCN=1 ----->| | |||
| |-----W=0, FCN=0 ----->| | |-----W=0, FCN=0 ----->| | |||
| | | | | | | |||
| |<--- ACK, W=0, C=0 ---| Bitmap:110111111111101111111111 | |<--- ACK, W=0, C=0 ---| Bitmap:110111111111101111111111 | |||
| |-----W=0, FCN=21----->| | |-----W=0, FCN=21----->| | |||
| |-----W=0, FCN=10----->| | |-----W=0, FCN=10----->| | |||
| |<--- ACK, W=0, C=0 ---| Bitmap:111111111111111111111111 | |<--- ACK, W=0, C=0 ---| Bitmap:111111111111111111111111 | |||
| |-----W=1, FCN=23----->| | |-----W=1, FCN=23----->| | |||
| |-----W=1, FCN=22----->| | |-----W=1, FCN=22----->| | |||
| |-----W=1, FCN=21----->| | |-----W=1, FCN=21----->| | |||
| |--W=1, FCN=31 + MIC-->| Integrity check: success | |--W=1, FCN=31 + RCS-->| Integrity check: success | |||
| |<--- ACK, W=1, C=1 ---| C=1 | |<--- ACK, W=1, C=1 ---| C=1 | |||
| (End) | (End) | |||
| Figure 37: ACK-Always mode, 28 tiles, one tile per SCHC Fragment, | Figure 36: ACK-Always mode, 28 tiles, one tile per SCHC Fragment, | |||
| lost SCHC Fragments. | lost SCHC Fragments. | |||
| Appendix C. Fragmentation State Machines | Appendix C. Fragmentation State Machines | |||
| The fragmentation state machines of the sender and the receiver, one | The fragmentation state machines of the sender and the receiver, one | |||
| for each of the different reliability modes, are described in the | for each of the different reliability modes, are described in the | |||
| following figures: | following figures: | |||
| +===========+ | +===========+ | |||
| +------------+ Init | | +------------+ Init | | |||
| skipping to change at page 66, line 24 ¶ | skipping to change at page 67, line 24 ¶ | |||
| | No Window | | No Window | |||
| | No Bitmap | | No Bitmap | |||
| | +-------+ | | +-------+ | |||
| | +========+==+ | More Fragments | | +========+==+ | More Fragments | |||
| | | | <--+ ~~~~~~~~~~~~~~~~~~~~ | | | | <--+ ~~~~~~~~~~~~~~~~~~~~ | |||
| +--------> | Send | send Fragment (FCN=0) | +--------> | Send | send Fragment (FCN=0) | |||
| +===+=======+ | +===+=======+ | |||
| | last fragment | | last fragment | |||
| | ~~~~~~~~~~~~ | | ~~~~~~~~~~~~ | |||
| | FCN = 1 | | FCN = 1 | |||
| v send fragment+MIC | v send fragment+RCS | |||
| +============+ | +============+ | |||
| | END | | | END | | |||
| +============+ | +============+ | |||
| Figure 38: Sender State Machine for the No-ACK Mode | Figure 37: Sender State Machine for the No-ACK Mode | |||
| +------+ Not All-1 | +------+ Not All-1 | |||
| +==========+=+ | ~~~~~~~~~~~~~~~~~~~ | +==========+=+ | ~~~~~~~~~~~~~~~~~~~ | |||
| | + <--+ set Inactivity Timer | | + <--+ set Inactivity Timer | |||
| | RCV Frag +-------+ | | RCV Frag +-------+ | |||
| +=+===+======+ |All-1 & | +=+===+======+ |All-1 & | |||
| All-1 & | | |MIC correct | All-1 & | | |RCS correct | |||
| MIC wrong | |Inactivity | | RCS wrong | |Inactivity | | |||
| | |Timer Exp. | | | |Timer Exp. | | |||
| v | | | v | | | |||
| +==========++ | v | +==========++ | v | |||
| | Error |<-+ +========+==+ | | Error |<-+ +========+==+ | |||
| +===========+ | END | | +===========+ | END | | |||
| +===========+ | +===========+ | |||
| Figure 39: Receiver State Machine for the No-ACK Mode | Figure 38: Receiver State Machine for the No-ACK Mode | |||
| +=======+ | +=======+ | |||
| | INIT | FCN!=0 & more frags | | INIT | FCN!=0 & more frags | |||
| | | ~~~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~~~~~~ | |||
| +======++ +--+ send Window + frag(FCN) | +======++ +--+ send Window + frag(FCN) | |||
| W=0 | | | FCN- | W=0 | | | FCN- | |||
| Clear lcl_bm | | v set lcl_bm | Clear lcl_bm | | v set lcl_bm | |||
| FCN=max value | ++==+========+ | FCN=max value | ++==+========+ | |||
| +> | | | +> | | | |||
| +---------------------> | SEND | | +---------------------> | SEND | | |||
| | +==+===+=====+ | | +==+===+=====+ | |||
| | FCN==0 & more frags | | last frag | | FCN==0 & more frags | | last frag | |||
| | ~~~~~~~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~ | |||
| | set lcl_bm | | set lcl_bm | | set lcl_bm | | set lcl_bm | |||
| | send wnd + frag(all-0) | | send wnd+frag(all-1)+MIC | | send wnd + frag(all-0) | | send wnd+frag(all-1)+RCS | |||
| | set Retrans_Timer | | set Retrans_Timer | | set Retrans_Timer | | set Retrans_Timer | |||
| | | | | | | | | |||
| |Recv_wnd == wnd & | | | |Recv_wnd == wnd & | | | |||
| |lcl_bm==recv_bm & | | +----------------------+ | |lcl_bm==recv_bm & | | +----------------------+ | |||
| |more frag | | | lcl_bm!=rcv-bm | | |more frag | | | lcl_bm!=rcv-bm | | |||
| |~~~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~ | | |~~~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~ | | |||
| |Stop Retrans_Timer | | | Attempt++ v | |Stop Retrans_Timer | | | Attempt++ v | |||
| |clear lcl_bm v v | +=====+=+ | |clear lcl_bm v v | +=====+=+ | |||
| |window=next_window +====+===+==+===+ |Resend | | |window=next_window +====+===+==+===+ |Resend | | |||
| +---------------------+ | |Missing| | +---------------------+ | |Missing| | |||
| +----+ Wait | |Frag | | +----+ Wait | |Frag | | |||
| not expected wnd | | Bitmap | +=======+ | not expected wnd | | Bitmap | +=======+ | |||
| ~~~~~~~~~~~~~~~~ +--->+ ++Retrans_Timer Exp | | ~~~~~~~~~~~~~~~~ +--->+ ++Retrans_Timer Exp | | |||
| discard frag +==+=+===+=+==+=+| ~~~~~~~~~~~~~~~~~ | | discard frag +==+=+===+=+==+=+| ~~~~~~~~~~~~~~~~~ | | |||
| | | | ^ ^ |reSend(empty)All-* | | | | | ^ ^ |reSend(empty)All-* | | |||
| | | | | | |Set Retrans_Timer | | | | | | | |Set Retrans_Timer | | |||
| | | | | +--+Attempt++ | | | | | | +--+Attempt++ | | |||
| MIC_bit==1 & | | | +-------------------------+ | C_bit==1 & | | | +-------------------------+ | |||
| Recv_window==window & | | | all missing frags sent | Recv_window==window & | | | all missing frags sent | |||
| no more frag| | | ~~~~~~~~~~~~~~~~~~~~~~ | no more frag| | | ~~~~~~~~~~~~~~~~~~~~~~ | |||
| ~~~~~~~~~~~~~~~~~~~~~~~~| | | Set Retrans_Timer | ~~~~~~~~~~~~~~~~~~~~~~~~| | | Set Retrans_Timer | |||
| Stop Retrans_Timer| | | | Stop Retrans_Timer| | | | |||
| +=============+ | | | | +=============+ | | | | |||
| | END +<--------+ | | | | END +<--------+ | | | |||
| +=============+ | | Attempt > MAX_ACK_REQUESTS | +=============+ | | Attempt > MAX_ACK_REQUESTS | |||
| All-1 Window & | | ~~~~~~~~~~~~~~~~~~ | All-1 Window & | | ~~~~~~~~~~~~~~~~~~ | |||
| MIC_bit ==0 & | v Send Abort | C_bit ==0 & | v Send Abort | |||
| lcl_bm==recv_bm | +=+===========+ | lcl_bm==recv_bm | +=+===========+ | |||
| ~~~~~~~~~~~~ +>| ERROR | | ~~~~~~~~~~~~ +>| ERROR | | |||
| Send Abort +=============+ | Send Abort +=============+ | |||
| Figure 40: Sender State Machine for the ACK-Always Mode | Figure 39: Sender State Machine for the ACK-Always Mode | |||
| Not All- & w=expected +---+ +---+w = Not expected | Not All- & w=expected +---+ +---+w = Not expected | |||
| ~~~~~~~~~~~~~~~~~~~~~ | | | |~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~ | | | |~~~~~~~~~~~~~~~~ | |||
| Set lcl_bm(FCN) | v v |discard | Set lcl_bm(FCN) | v v |discard | |||
| ++===+===+===+=+ | ++===+===+===+=+ | |||
| +---------------------+ Rcv +--->* ABORT | +---------------------+ Rcv +--->* ABORT | |||
| | +------------------+ Window | | | +------------------+ Window | | |||
| | | +=====+==+=====+ | | | +=====+==+=====+ | |||
| | | All-0 & w=expect | ^ w =next & not-All | | | All-0 & w=expect | ^ w =next & not-All | |||
| | | ~~~~~~~~~~~~~~~~~~ | |~~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~~ | |~~~~~~~~~~~~~~~~~~~~~ | |||
| skipping to change at page 68, line 29 ¶ | skipping to change at page 69, line 29 ¶ | |||
| | | set lcl_bm(FCN)+-+ | | +--+ w=next & All-0 | | | set lcl_bm(FCN)+-+ | | +--+ w=next & All-0 | |||
| | | if lcl_bm full | | | | | | ~~~~~~~~~~~~~~~ | | | if lcl_bm full | | | | | | ~~~~~~~~~~~~~~~ | |||
| | | send lcl_bm | | | | | | expected = nxt wnd | | | send lcl_bm | | | | | | expected = nxt wnd | |||
| | | v | v | | | Clear lcl_bm | | | v | v | | | Clear lcl_bm | |||
| | |w=expected& All-1 +=+=+=+==+=++ | set lcl_bm(FCN) | | |w=expected& All-1 +=+=+=+==+=++ | set lcl_bm(FCN) | |||
| | | ~~~~~~~~~~~ +->+ Wait +<+ send lcl_bm | | | ~~~~~~~~~~~ +->+ Wait +<+ send lcl_bm | |||
| | | discard +--| Next | | | | discard +--| Next | | |||
| | | All-0 +---------+ Window +--->* ABORT | | | All-0 +---------+ Window +--->* ABORT | |||
| | | ~~~~~ +-------->+========+=++ | | | ~~~~~ +-------->+========+=++ | |||
| | | snd lcl_bm All-1 & w=next| | All-1 & w=nxt | | | snd lcl_bm All-1 & w=next| | All-1 & w=nxt | |||
| | | & MIC wrong| | & MIC right | | | & RCS wrong| | & RCS right | |||
| | | ~~~~~~~~~~~~~~~~~| | ~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~| | ~~~~~~~~~~~~~~~~~~ | |||
| | | set lcl_bm(FCN)| |set lcl_bm(FCN) | | | set lcl_bm(FCN)| |set lcl_bm(FCN) | |||
| | | send lcl_bm| |send lcl_bm | | | send lcl_bm| |send lcl_bm | |||
| | | | +----------------------+ | | | | +----------------------+ | |||
| | |All-1 & w=expected | | | | |All-1 & w=expected | | | |||
| | |& MIC wrong v +---+ w=expected & | | | |& RCS wrong v +---+ w=expected & | | |||
| | |~~~~~~~~~~~~~~~~~~~~ +====+=====+ | MIC wrong | | | |~~~~~~~~~~~~~~~~~~~~ +====+=====+ | RCS wrong | | |||
| | |set lcl_bm(FCN) | +<+ ~~~~~~~~~~~~~~ | | | |set lcl_bm(FCN) | +<+ ~~~~~~~~~~~~~~ | | |||
| | |send lcl_bm | Wait End | set lcl_bm(FCN)| | | |send lcl_bm | Wait End | set lcl_bm(FCN)| | |||
| | +--------------------->+ +--->* ABORT | | | +--------------------->+ +--->* ABORT | | |||
| | +===+====+=+-+ All-1&MIC wrong| | | +===+====+=+-+ All-1&RCS wrong| | |||
| | | ^ | ~~~~~~~~~~~~~~~| | | | ^ | ~~~~~~~~~~~~~~~| | |||
| | w=expected & MIC right | +---+ send lcl_bm | | | w=expected & RCS right | +---+ send lcl_bm | | |||
| | ~~~~~~~~~~~~~~~~~~~~~~ | | | | ~~~~~~~~~~~~~~~~~~~~~~ | | | |||
| | set lcl_bm(FCN) | +-+ Not All-1 | | | set lcl_bm(FCN) | +-+ Not All-1 | | |||
| | send lcl_bm | | | ~~~~~~~~~ | | | send lcl_bm | | | ~~~~~~~~~ | | |||
| | | | | discard | | | | | | discard | | |||
| |All-1&w=expected & MIC right | | | | | |All-1&w=expected & RCS right | | | | | |||
| |~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v | v +----+All-1 | | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v | v +----+All-1 | | |||
| |set lcl_bm(FCN) +=+=+=+=+==+ |~~~~~~~~~ | | |set lcl_bm(FCN) +=+=+=+=+==+ |~~~~~~~~~ | | |||
| |send lcl_bm | +<+Send lcl_bm | | |send lcl_bm | +<+Send lcl_bm | | |||
| +-------------------------->+ END | | | +-------------------------->+ END | | | |||
| +==========+<---------------+ | +==========+<---------------+ | |||
| --->* ABORT | --->* ABORT | |||
| ~~~~~~~ | ~~~~~~~ | |||
| Inactivity_Timer = expires | Inactivity_Timer = expires | |||
| When DWL | When DWL | |||
| IF Inactivity_Timer expires | IF Inactivity_Timer expires | |||
| Send DWL Request | Send DWL Request | |||
| Attempt++ | Attempt++ | |||
| Figure 41: Receiver State Machine for the ACK-Always Mode | Figure 40: Receiver State Machine for the ACK-Always Mode | |||
| +=======+ | +=======+ | |||
| | | | | | | |||
| | INIT | | | INIT | | |||
| | | FCN!=0 & more frags | | | FCN!=0 & more frags | |||
| +======++ ~~~~~~~~~~~~~~~~~~~~~~ | +======++ ~~~~~~~~~~~~~~~~~~~~~~ | |||
| Frag RuleID trigger | +--+ Send cur_W + frag(FCN); | Frag RuleID trigger | +--+ Send cur_W + frag(FCN); | |||
| ~~~~~~~~~~~~~~~~~~~ | | | FCN--; | ~~~~~~~~~~~~~~~~~~~ | | | FCN--; | |||
| cur_W=0; FCN=max_value;| | | set [cur_W, cur_Bmp] | cur_W=0; FCN=max_value;| | | set [cur_W, cur_Bmp] | |||
| clear [cur_W, Bmp_n];| | v | clear [cur_W, Bmp_n];| | v | |||
| clear rcv_Bmp | ++==+==========+ **BACK_TO_SEND | clear rcv_Bmp | ++==+==========+ **BACK_TO_SEND | |||
| +->+ | cur_W==rcv_W & | +->+ | cur_W==rcv_W & | |||
| **BACK_TO_SEND | SEND | [cur_W,Bmp_n]==rcv_Bmp | **BACK_TO_SEND | SEND | [cur_W,Bmp_n]==rcv_Bmp | |||
| +-------------------------->+ | & more frags | +-------------------------->+ | & more frags | |||
| | +----------------------->+ | ~~~~~~~~~~~~ | | +----------------------->+ | ~~~~~~~~~~~~ | |||
| | | ++===+=========+ cur_W++; | | | ++===+=========+ cur_W++; | |||
| | | FCN==0 & more frags| |last frag clear [cur_W, Bmp_n] | | | FCN==0 & more frags| |last frag clear [cur_W, Bmp_n] | |||
| | | ~~~~~~~~~~~~~~~~~~~~~~~| |~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~~~~~~~| |~~~~~~~~~ | |||
| | | set cur_Bmp; | |set [cur_W, Bmp_n]; | | | set cur_Bmp; | |set [cur_W, Bmp_n]; | |||
| | |send cur_W + frag(All-0);| |send cur_W + frag(All-1)+MIC; | | |send cur_W + frag(All-0);| |send cur_W + frag(All-1)+RCS; | |||
| | | set Retrans_Timer| |set Retrans_Timer | | | set Retrans_Timer| |set Retrans_Timer | |||
| | | | | +-----------------------------------+ | | | | | +-----------------------------------+ | |||
| | |Retrans_Timer expires & | | |cur_W==rcv_W&[cur_W,Bmp_n]!=rcv_Bmp| | | |Retrans_Timer expires & | | |cur_W==rcv_W&[cur_W,Bmp_n]!=rcv_Bmp| | |||
| | |more Frags | | | ~~~~~~~~~~~~~~~~~~~ | | | |more Frags | | | ~~~~~~~~~~~~~~~~~~~ | | |||
| | |~~~~~~~~~~~~~~~~~~~~ | | | Attempts++; W=cur_W | | | |~~~~~~~~~~~~~~~~~~~~ | | | Attempts++; W=cur_W | | |||
| | |stop Retrans_Timer; | | | +--------+ rcv_W==Wn &| | | |stop Retrans_Timer; | | | +--------+ rcv_W==Wn &| | |||
| | |[cur_W,Bmp_n]==cur_Bmp; v v | | v [Wn,Bmp_n]!=rcv_Bmp| | | |[cur_W,Bmp_n]==cur_Bmp; v v | | v [Wn,Bmp_n]!=rcv_Bmp| | |||
| | |cur_W++ +=====+===+=+=+==+ +=+=========+ ~~~~~~~~~~~| | | |cur_W++ +=====+===+=+=+==+ +=+=========+ ~~~~~~~~~~~| | |||
| | +-------------------+ | | Resend | Attempts++;| | | +-------------------+ | | Resend | Attempts++;| | |||
| +----------------------+ Wait x ACK | | Missing | W=Wn | | +----------------------+ Wait x ACK | | Missing | W=Wn | | |||
| skipping to change at page 70, line 7 ¶ | skipping to change at page 71, line 7 ¶ | |||
| | rcv_W==Wn &+-+ | +======+====+ | | rcv_W==Wn &+-+ | +======+====+ | |||
| | [Wn,Bmp_n]!=rcv_Bmp| ++=+===+===+==+==+ | | | [Wn,Bmp_n]!=rcv_Bmp| ++=+===+===+==+==+ | | |||
| | ~~~~~~~~~~~~~~| ^ | | | ^ | | | ~~~~~~~~~~~~~~| ^ | | | ^ | | |||
| | send (cur_W,+--+ | | | +-------------+ | | send (cur_W,+--+ | | | +-------------+ | |||
| | ALL-0-empty) | | | all missing frag sent(W) | | ALL-0-empty) | | | all missing frag sent(W) | |||
| | | | | ~~~~~~~~~~~~~~~~~ | | | | | ~~~~~~~~~~~~~~~~~ | |||
| | Retrans_Timer expires &| | | set Retrans_Timer | | Retrans_Timer expires &| | | set Retrans_Timer | |||
| | No more Frags| | | | | No more Frags| | | | |||
| | ~~~~~~~~~~~~~~| | | | | ~~~~~~~~~~~~~~| | | | |||
| | stop Retrans_Timer;| | | | | stop Retrans_Timer;| | | | |||
| |(re)send frag(All-1)+MIC | | | | |(re)send frag(All-1)+RCS | | | | |||
| +-------------------------+ | | | +-------------------------+ | | | |||
| cur_W==rcv_W&| | | cur_W==rcv_W&| | | |||
| [cur_W,Bmp_n]==rcv_Bmp&| | Attempts > MAX_ACK_REQUESTS | [cur_W,Bmp_n]==rcv_Bmp&| | Attempts > MAX_ACK_REQUESTS | |||
| No more Frags & MIC flag==OK| | ~~~~~~~~~~ | No more Frags & RCS flag==OK| | ~~~~~~~~~~ | |||
| ~~~~~~~~~~~~~~~~~~| | send Abort | ~~~~~~~~~~~~~~~~~~| | send Abort | |||
| +=========+stop Retrans_Timer| | +===========+ | +=========+stop Retrans_Timer| | +===========+ | |||
| | END +<-----------------+ +->+ ERROR | | | END +<-----------------+ +->+ ERROR | | |||
| +=========+ +===========+ | +=========+ +===========+ | |||
| Figure 42: Sender State Machine for the ACK-on-Error Mode | Figure 41: Sender State Machine for the ACK-on-Error Mode | |||
| This is an example only. It is not normative. The specification in | This is an example only. It is not normative. The specification in | |||
| Section 8.4.3.1 allows for sequences of operations different from the | Section 8.4.3.1 allows for sequences of operations different from the | |||
| one shown here. | one shown here. | |||
| +=======+ New frag RuleID received | +=======+ New frag RuleID received | |||
| | | ~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~ | |||
| | INIT +-------+cur_W=0;clear([cur_W,Bmp_n]); | | INIT +-------+cur_W=0;clear([cur_W,Bmp_n]); | |||
| +=======+ |sync=0 | +=======+ |sync=0 | |||
| | | | | |||
| skipping to change at page 72, line 7 ¶ | skipping to change at page 73, line 7 ¶ | |||
| ABORT-->* Uplink Only & | ABORT-->* Uplink Only & | |||
| Inact_Timer expires | Inact_Timer expires | |||
| (E) Not All* & rcv_W!=cur_W || Attempts > MAX_ACK_REQUESTS | (E) Not All* & rcv_W!=cur_W || Attempts > MAX_ACK_REQUESTS | |||
| ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ | |||
| sync++; cur_W=rcv_W; send Abort | sync++; cur_W=rcv_W; send Abort | |||
| set[cur_W,Bmp_n(FCN)] | set[cur_W,Bmp_n(FCN)] | |||
| (A)(B) | (A)(B) | |||
| | | | | | | |||
| | | All-1 & rcv_W==cur_W & MIC!=OK All-0 empty(Wn) | | | All-1 & rcv_W==cur_W & RCS!=OK All-0 empty(Wn) | |||
| | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-+ ~~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-+ ~~~~~~~~~~ | |||
| | | sendACK([cur_W,Bmp_n],MIC=0) | v sendACK([Wn,Bmp_n]) | | | sendACK([cur_W,Bmp_n],C=0) | v sendACK([Wn,Bmp_n]) | |||
| | | +===========+=++ | | | +===========+=++ | |||
| | +--------------------->+ Wait End +-+ | | +--------------------->+ Wait End +-+ | |||
| | +=====+=+====+=+ | All-1 | | +=====+=+====+=+ | All-1 | |||
| | rcv_W==cur_W & MIC==OK | | ^ | & rcv_W==cur_W | | rcv_W==cur_W & RCS==OK | | ^ | & rcv_W==cur_W | |||
| | ~~~~~~~~~~~~~~~~~~~~~~ | | +---+ & MIC!=OK | | ~~~~~~~~~~~~~~~~~~~~~~ | | +---+ & RCS!=OK | |||
| | sendACK([cur_W,Bmp_n],MIC=1) | | ~~~~~~~~~~~~~~~~~~~ | | sendACK([cur_W,Bmp_n],C=1) | | ~~~~~~~~~~~~~~~~~~~ | |||
| | | | sendACK([cur_W,Bmp_n],MIC=0); | | | | sendACK([cur_W,Bmp_n],C=0); | |||
| | | | Attempts++ | | | | Attempts++ | |||
| |All-1 & Full([cur_W,Bmp_n]) | | | |All-1 & Full([cur_W,Bmp_n]) | | | |||
| |& MIC==OK & sync==0 | +-->* ABORT | |& RCS==OK & sync==0 | +-->* ABORT | |||
| |~~~~~~~~~~~~~~~~~~~ v | |~~~~~~~~~~~~~~~~~~~ v | |||
| |sendACK([cur_W,Bmp_n],MIC=1) +=+=========+ | |sendACK([cur_W,Bmp_n],C=1) +=+=========+ | |||
| +---------------------------->+ END | | +---------------------------->+ END | | |||
| +===========+ | +===========+ | |||
| Figure 43: Receiver State Machine for the ACK-on-Error Mode | Figure 42: Receiver State Machine for the ACK-on-Error Mode | |||
| Appendix D. SCHC Parameters | Appendix D. SCHC Parameters | |||
| This section lists the information that need to be provided in the | This section lists the information that needs to be provided in the | |||
| LPWAN technology-specific documents. | LPWAN technology-specific documents. | |||
| o Most common uses cases, deployment scenarios | o Most common uses cases, deployment scenarios | |||
| o Mapping of the SCHC architectural elements onto the LPWAN | o Mapping of the SCHC architectural elements onto the LPWAN | |||
| architecture | architecture | |||
| o Assessment of LPWAN integrity checking | o Assessment of LPWAN integrity checking | |||
| o Various potential channel conditions for the technology and the | o Various potential channel conditions for the technology and the | |||
| corresponding recommended use of SCHC C/D and F/R | corresponding recommended use of SCHC C/D and F/R | |||
| This section lists the parameters that need to be defined in the | This section lists the parameters that need to be defined in the | |||
| Profile. | Profile. | |||
| o Rule ID numbering scheme, fixed-sized or variable-sized Rule IDs, | o Rule ID numbering scheme, fixed-sized or variable-sized Rule IDs, | |||
| number of Rules, the way the Rule ID is transmitted | number of Rules, the way the Rule ID is transmitted | |||
| o define the maximum packet size that should ever be reconstructed | o maximum packet size that should ever be reconstructed by SCHC | |||
| by SCHC Decompression (MAX_PACKET_SIZE). See Section 12. | Decompression (MAX_PACKET_SIZE). See Section 12. | |||
| o Padding: size of the L2 Word (for most LPWAN technologies, this | o Padding: size of the L2 Word (for most LPWAN technologies, this | |||
| would be a byte; for some technologies, a bit) | would be a byte; for some technologies, a bit) | |||
| o Decision to use SCHC fragmentation mechanism or not. If yes: | o Decision to use SCHC fragmentation mechanism or not. If yes: | |||
| * reliability mode(s) used, in which cases (e.g. based on link | * reliability mode(s) used, in which cases (e.g. based on link | |||
| channel condition) | channel condition) | |||
| * Rule ID values assigned to each mode in use | * Rule ID values assigned to each mode in use | |||
| skipping to change at page 73, line 26 ¶ | skipping to change at page 74, line 26 ¶ | |||
| * support for interleaved packet transmission, to what extent | * support for interleaved packet transmission, to what extent | |||
| * WINDOW_SIZE, for modes that use windows | * WINDOW_SIZE, for modes that use windows | |||
| * number of bits for W (M) for each Rule ID value, for modes that | * number of bits for W (M) for each Rule ID value, for modes that | |||
| use windows | use windows | |||
| * number of bits for FCN (N) for each Rule ID value | * number of bits for FCN (N) for each Rule ID value | |||
| * size of MIC and algorithm for its computation, for each Rule | * size of RCS and algorithm for its computation, for each Rule | |||
| ID, if different from the default CRC32. Byte fill-up with | ID, if different from the default CRC32. Byte fill-up with | |||
| zeroes or other mechanism, to be specified. | zeroes or other mechanism, to be specified. | |||
| * Retransmission Timer duration for each Rule ID value, if | * Retransmission Timer duration for each Rule ID value, if | |||
| applicable to the SCHC F/R mode | applicable to the SCHC F/R mode | |||
| * Inactivity Timer duration for each Rule ID value, if applicable | * Inactivity Timer duration for each Rule ID value, if applicable | |||
| to the SCHC F/R mode | to the SCHC F/R mode | |||
| * MAX_ACK_REQUEST value for each Rule ID value, if applicable to | * MAX_ACK_REQUEST value for each Rule ID value, if applicable to | |||
| the SCHC F/R mode | the SCHC F/R mode | |||
| o if L2 Word is wider than a bit and SCHC fragmentation is used, | o if L2 Word is wider than a bit and SCHC fragmentation is used, | |||
| value of the padding bits (0 or 1). This is needed because the | value of the padding bits (0 or 1). This is needed because the | |||
| padding bits of the last fragment are included in the MIC | padding bits of the last fragment are included in the RCS | |||
| computation. | computation. | |||
| A Profile MAY define a delay to be added after each SCHC message | A Profile may define a delay to be added after each SCHC message | |||
| transmission for compliance with local regulations or other | transmission for compliance with local regulations or other | |||
| constraints imposed by the applications. | constraints imposed by the applications. | |||
| o In some LPWAN technologies, as part of energy-saving techniques, | o 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 in the | transmission. In order to avoid potentially high delay in the | |||
| downlink transmission of a fragmented SCHC Packet, the SCHC | downlink transmission of a fragmented SCHC Packet, the SCHC | |||
| Fragment receiver may perform an uplink transmission as soon as | Fragment receiver may perform an uplink transmission as soon as | |||
| possible after reception of a SCHC Fragment that is not the last | possible after reception of a SCHC Fragment that is not the last | |||
| one. Such uplink transmission may be triggered by the L2 (e.g. an | one. Such uplink transmission may be triggered by the L2 (e.g. an | |||
| skipping to change at page 74, line 20 ¶ | skipping to change at page 75, line 20 ¶ | |||
| o the following parameters need to be addressed in documents other | o the following parameters need to be addressed in documents other | |||
| than this one but not necessarily in the LPWAN technology-specific | than this one but not necessarily in the LPWAN technology-specific | |||
| documents: | documents: | |||
| * The way the Contexts are provisioned | * The way the Contexts are provisioned | |||
| * The way the Rules are generated | * The way the Rules are generated | |||
| Appendix E. Supporting multiple window sizes for fragmentation | Appendix E. Supporting multiple window sizes for fragmentation | |||
| For ACK-Always or ACK-on-Error, implementers MAY opt to support a | For ACK-Always or ACK-on-Error, implementers may opt to support a | |||
| single window size or multiple window sizes. The latter, when | single window size or multiple window sizes. The latter, when | |||
| feasible, may provide performance optimizations. For example, a | feasible, may provide performance optimizations. For example, a | |||
| large window size SHOULD be used for packets that need to be split | large window size should be used for packets that need to be split | |||
| into a large number of tiles. However, when the number of tiles | into a large number of tiles. However, when the number of tiles | |||
| required to carry a packet is low, a smaller window size, and thus a | required to carry a packet is low, a smaller window size, and thus a | |||
| shorter Bitmap, MAY be sufficient to provide reception status on all | shorter Bitmap, may be sufficient to provide reception status on all | |||
| tiles. If multiple window sizes are supported, the Rule ID MAY | tiles. If multiple window sizes are supported, the Rule ID may | |||
| signal the window size in use for a specific packet transmission. | signal the window size in use for a specific packet transmission. | |||
| The same window size MUST be used for the transmission of all tiles | The same window size MUST be used for the transmission of all tiles | |||
| that belong to the same SCHC Packet. | that belong to the same SCHC Packet. | |||
| Appendix F. Downlink SCHC Fragment transmission | Appendix F. Downlink SCHC Fragment transmission | |||
| For downlink transmission of a fragmented SCHC Packet in ACK-Always | For downlink transmission of a fragmented SCHC Packet in ACK-Always | |||
| mode, the SCHC Fragment receiver MAY support timer-based SCHC ACK | mode, the SCHC Fragment receiver may support timer-based SCHC ACK | |||
| retransmission. In this mechanism, the SCHC Fragment receiver | retransmission. In this mechanism, the SCHC Fragment receiver | |||
| initializes and starts a timer (the Inactivity Timer is used) after | initializes and starts a timer (the Inactivity Timer is used) after | |||
| the transmission of a SCHC ACK, except when the SCHC ACK is sent in | the transmission of a SCHC ACK, except when the SCHC ACK is sent in | |||
| response to the last SCHC Fragment of a packet (All-1 fragment). In | response to the last SCHC Fragment of a packet (All-1 fragment). In | |||
| the latter case, the SCHC Fragment receiver does not start a timer | the latter case, the SCHC Fragment receiver does not start a timer | |||
| after transmission of the SCHC ACK. | after transmission of the SCHC ACK. | |||
| If, after transmission of a SCHC ACK that is not an All-1 fragment, | If, after transmission of a SCHC ACK that is not an All-1 fragment, | |||
| and before expiration of the corresponding Inactivity timer, the SCHC | and before expiration of the corresponding Inactivity timer, the SCHC | |||
| Fragment receiver receives a SCHC Fragment that belongs to the | Fragment receiver receives a SCHC Fragment that belongs to the | |||
| End of changes. 204 change blocks. | ||||
| 382 lines changed or deleted | 429 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/ | ||||