| < draft-ietf-lpwan-ipv6-static-context-hc-08.txt | draft-ietf-lpwan-ipv6-static-context-hc-09.txt > | |||
|---|---|---|---|---|
| lpwan Working Group A. Minaburo | lpwan Working Group A. Minaburo | |||
| Internet-Draft Acklio | Internet-Draft Acklio | |||
| Intended status: Informational L. Toutain | Intended status: Informational L. Toutain | |||
| Expires: June 20, 2018 IMT-Atlantique | Expires: June 25, 2018 IMT-Atlantique | |||
| C. Gomez | C. Gomez | |||
| Universitat Politecnica de Catalunya | Universitat Politecnica de Catalunya | |||
| December 17, 2017 | December 22, 2017 | |||
| LPWAN Static Context Header Compression (SCHC) and fragmentation for | LPWAN Static Context Header Compression (SCHC) and fragmentation for | |||
| IPv6 and UDP | IPv6 and UDP | |||
| draft-ietf-lpwan-ipv6-static-context-hc-08 | draft-ietf-lpwan-ipv6-static-context-hc-09 | |||
| Abstract | Abstract | |||
| This document describes a header compression scheme and fragmentation | This document describes a header compression scheme and fragmentation | |||
| functionality for very low bandwidth networks. These techniques are | functionality for very low bandwidth networks. These techniques are | |||
| specially tailored for Low Power Wide Area Network (LPWAN). | specially tailored for Low Power Wide Area Network (LPWAN). | |||
| The Static Context Header Compression (SCHC) offers a great level of | The Static Context Header Compression (SCHC) offers a great level of | |||
| flexibility when processing the header fields. SCHC compression is | flexibility when processing the header fields. SCHC compression is | |||
| based on a common static context stored in a LPWAN device and in the | based on a common static context stored in a LPWAN device and in the | |||
| 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 20, 2018. | This Internet-Draft will expire on June 25, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (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 | |||
| skipping to change at page 3, line 9 ¶ | skipping to change at page 3, line 9 ¶ | |||
| 4.5.1. not-sent CDA . . . . . . . . . . . . . . . . . . . . 13 | 4.5.1. not-sent CDA . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.5.2. value-sent CDA . . . . . . . . . . . . . . . . . . . 13 | 4.5.2. value-sent CDA . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.5.3. mapping-sent . . . . . . . . . . . . . . . . . . . . 14 | 4.5.3. mapping-sent . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4.5.4. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . 14 | 4.5.4. LSB CDA . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4.5.5. DEViid, APPiid CDA . . . . . . . . . . . . . . . . . 14 | 4.5.5. DEViid, APPiid CDA . . . . . . . . . . . . . . . . . 14 | |||
| 4.5.6. Compute-* . . . . . . . . . . . . . . . . . . . . . . 14 | 4.5.6. Compute-* . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 5. Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . 15 | 5. Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 15 | 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.2. Functionalities . . . . . . . . . . . . . . . . . . . . . 15 | 5.2. Functionalities . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.3. Delivery Reliability options . . . . . . . . . . . . . . 18 | 5.3. Delivery Reliability options . . . . . . . . . . . . . . 18 | |||
| 5.4. Fragmentation Frames Formats . . . . . . . . . . . . . . 19 | 5.4. Fragmentation Frame Formats . . . . . . . . . . . . . . . 20 | |||
| 5.4.1. Fragment format . . . . . . . . . . . . . . . . . . . 19 | 5.4.1. Fragment format . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.4.2. Fragmentation formats . . . . . . . . . . . . . . . . 20 | 5.4.2. ACK format . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 5.4.3. ACK format . . . . . . . . . . . . . . . . . . . . . 20 | 5.4.3. All-1 and All-0 formats . . . . . . . . . . . . . . . 21 | |||
| 5.4.4. All-1 and All-0 formats . . . . . . . . . . . . . . . 21 | 5.4.4. Abort formats . . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.4.5. Abort formats . . . . . . . . . . . . . . . . . . . . 23 | ||||
| 5.5. Baseline mechanism . . . . . . . . . . . . . . . . . . . 23 | 5.5. Baseline mechanism . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.5.1. No ACK . . . . . . . . . . . . . . . . . . . . . . . 24 | 5.5.1. No ACK . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 5.5.2. The Window modes . . . . . . . . . . . . . . . . . . 25 | 5.5.2. The Window modes . . . . . . . . . . . . . . . . . . 25 | |||
| 5.5.3. Bitmap Optimization . . . . . . . . . . . . . . . . . 28 | 5.5.3. Bitmap Optimization . . . . . . . . . . . . . . . . . 29 | |||
| 5.6. Supporting multiple window sizes . . . . . . . . . . . . 30 | 5.6. Supporting multiple window sizes . . . . . . . . . . . . 31 | |||
| 5.7. Downlink fragment transmission . . . . . . . . . . . . . 31 | 5.7. Downlink fragment transmission . . . . . . . . . . . . . 31 | |||
| 6. Padding management . . . . . . . . . . . . . . . . . . . . . 32 | 6. Padding management . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 7. SCHC Compression for IPv6 and UDP headers . . . . . . . . . . 32 | 7. SCHC Compression for IPv6 and UDP headers . . . . . . . . . . 33 | |||
| 7.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 32 | 7.1. IPv6 version field . . . . . . . . . . . . . . . . . . . 33 | |||
| 7.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 32 | 7.2. IPv6 Traffic class field . . . . . . . . . . . . . . . . 33 | |||
| 7.3. Flow label field . . . . . . . . . . . . . . . . . . . . 33 | 7.3. Flow label field . . . . . . . . . . . . . . . . . . . . 33 | |||
| 7.4. Payload Length field . . . . . . . . . . . . . . . . . . 33 | 7.4. Payload Length field . . . . . . . . . . . . . . . . . . 34 | |||
| 7.5. Next Header field . . . . . . . . . . . . . . . . . . . . 33 | 7.5. Next Header field . . . . . . . . . . . . . . . . . . . . 34 | |||
| 7.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . . 34 | 7.6. Hop Limit field . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 7.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . . 34 | 7.7. IPv6 addresses fields . . . . . . . . . . . . . . . . . . 35 | |||
| 7.7.1. IPv6 source and destination prefixes . . . . . . . . 34 | 7.7.1. IPv6 source and destination prefixes . . . . . . . . 35 | |||
| 7.7.2. IPv6 source and destination IID . . . . . . . . . . . 35 | 7.7.2. IPv6 source and destination IID . . . . . . . . . . . 35 | |||
| 7.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . . 35 | 7.8. IPv6 extensions . . . . . . . . . . . . . . . . . . . . . 36 | |||
| 7.9. UDP source and destination port . . . . . . . . . . . . . 35 | 7.9. UDP source and destination port . . . . . . . . . . . . . 36 | |||
| 7.10. UDP length field . . . . . . . . . . . . . . . . . . . . 36 | 7.10. UDP length field . . . . . . . . . . . . . . . . . . . . 36 | |||
| 7.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 36 | 7.11. UDP Checksum field . . . . . . . . . . . . . . . . . . . 37 | |||
| 8. Security considerations . . . . . . . . . . . . . . . . . . . 36 | 8. Security considerations . . . . . . . . . . . . . . . . . . . 37 | |||
| 8.1. Security considerations for header compression . . . . . 36 | 8.1. Security considerations for header compression . . . . . 37 | |||
| 8.2. Security considerations for fragmentation . . . . . . . . 36 | 8.2. Security considerations for fragmentation . . . . . . . . 37 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 38 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 38 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 38 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 38 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 38 | 10.2. Informative References . . . . . . . . . . . . . . . . . 39 | |||
| Appendix A. SCHC Compression Examples . . . . . . . . . . . . . 38 | Appendix A. SCHC Compression Examples . . . . . . . . . . . . . 39 | |||
| Appendix B. Fragmentation Examples . . . . . . . . . . . . . . . 41 | Appendix B. Fragmentation Examples . . . . . . . . . . . . . . . 42 | |||
| Appendix C. Fragmentation State Machines . . . . . . . . . . . . 47 | Appendix C. Fragmentation State Machines . . . . . . . . . . . . 48 | |||
| Appendix D. Allocation of Rule IDs for fragmentation . . . . . . 54 | Appendix D. Allocation of Rule IDs for fragmentation . . . . . . 55 | |||
| Appendix E. Note . . . . . . . . . . . . . . . . . . . . . . . . 54 | Appendix E. Note . . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 1. Introduction | 1. Introduction | |||
| Header compression is mandatory to efficiently bring Internet | Header compression is mandatory to efficiently bring Internet | |||
| connectivity to the node within a LPWAN network. Some LPWAN networks | connectivity to the node within a LPWAN network. Some LPWAN networks | |||
| properties can be exploited to get an efficient header compression: | properties can be exploited to get an efficient header compression: | |||
| o Topology is star-oriented; therefore, all the packets follow the | o Topology is star-oriented; therefore, all the packets follow the | |||
| same path. For the needs of this draft, the architecture can be | same path. For the needs of this draft, the architecture can be | |||
| summarized to Devices (Dev) exchanging information with LPWAN | summarized to Devices (Dev) exchanging information with LPWAN | |||
| skipping to change at page 5, line 32 ¶ | skipping to change at page 5, line 32 ¶ | |||
| () () () / \ +---------+ +-----------+ | () () () / \ +---------+ +-----------+ | |||
| Dev Radio Gateways NGW | Dev Radio Gateways NGW | |||
| Figure 1: LPWAN Architecture | Figure 1: LPWAN Architecture | |||
| 3. Terminology | 3. Terminology | |||
| This section defines the terminology and acronyms used in this | This section defines the terminology and acronyms used in this | |||
| document. | document. | |||
| o All-0. Fragmentation Packet format to send the last frame of a | o All-0. Fragment format for the last frame of a window. | |||
| window. | ||||
| o All-1. Fragmentation Packet format to send the last frame of a | o All-1. Fragment format for the last frame of a packet. | |||
| packet. | ||||
| o All-0 empty. Fragmentation Packet format without payload to | o All-0 empty. Fragment format without payload for requesting the | |||
| request the bitmap when the Retransmission Timer expires in a | Bitmap when the Retransmission Timer expires in a window that is | |||
| window. | not the last one for a fragmented packet transmission. | |||
| o All-1 empty. Fragmentation Packet format without payload to | o All-1 empty. Fragment format without payload for requesting the | |||
| request the bitmap when the Retransmission Timer expires in the | Bitmap when the Retransmission Timer expires in the last window. | |||
| last window. | ||||
| o App: LPWAN Application. An application sending/receiving IPv6 | o App: LPWAN Application. An application sending/receiving IPv6 | |||
| packets to/from the Device. | packets to/from the Device. | |||
| o APP-IID: Application Interface Identifier. Second part of the | o APP-IID: Application Interface Identifier. Second part of the | |||
| IPv6 address to identify the application interface | IPv6 address to identify the application interface | |||
| o Bi: Bidirectional, a rule entry that applies in both directions. | o Bi: Bidirectional, a rule entry that applies in both directions. | |||
| o C: Checked bit. Used in fragmentation header to determine when | o C: Checked bit. Used in an acknowledgment (ACK) header to | |||
| the MIC is correct (1) or not (0). | determine when the MIC is correct (1) or not (0). | |||
| o CDA: Compression/Decompression Action. An action that is | o CDA: Compression/Decompression Action. An action that is | |||
| performed for both functionalities to compress a header field or | performed for both functionalities to compress a header field or | |||
| to recover its original value in the decompression phase. | to recover its original value in the decompression phase. | |||
| o Context: A set of rules used to compress/decompress headers | o Context: A set of rules used to compress/decompress headers | |||
| o Dev: Device. A Node connected to the LPWAN. A Dev may implement | o Dev: Device. A Node connected to the LPWAN. A Dev may implement | |||
| SCHC. | SCHC. | |||
| skipping to change at page 6, line 46 ¶ | skipping to change at page 6, line 44 ¶ | |||
| o FL: Field Length is a value to identify if the field is fixed or | o FL: Field Length is a value to identify if the field is fixed or | |||
| variable length. | variable length. | |||
| o FP: Field Position is a value that is used to identify each | o FP: Field Position is a value that is used to identify each | |||
| instance a field appears in the header. | instance a field appears in the header. | |||
| o IID: Interface Identifier. See the IPv6 addressing architecture | o IID: Interface Identifier. See the IPv6 addressing architecture | |||
| [RFC7136] | [RFC7136] | |||
| o Inactivity Timer. Timer to End the state machine when there is an | o Inactivity Timer. A timer to end the fragmentation state machine | |||
| error and there is no possibility to continue the transmission. | when there is an error and there is no possibility to continue an | |||
| on-going fragmented packet transmission. | ||||
| o MIC: Message Integrity Check. A fragmentation header field | o MIC: Message Integrity Check. A fragmentation header field | |||
| computed over an IPv6 packet before fragmentation, used for error | computed over an IPv6 packet before fragmentation, used for error | |||
| detection after IPv6 packet reassembly. | detection after IPv6 packet reassembly. | |||
| o MO: Matching Operator. An operator used to match a value | o MO: Matching Operator. An operator used to match a value | |||
| contained in a header field with a value contained in a Rule. | contained in a header field with a value contained in a Rule. | |||
| o Retransmission Timer. Timer used in the sender transmission to | o Retransmission Timer. A timer used by the fragment sender during | |||
| detect error in the link when waiting for an ACK. | an on-going fragmented packet transmission to detect possible link | |||
| errors when waiting for a possible incoming ACK. | ||||
| o Rule: A set of header field values. | o Rule: A set of header field values. | |||
| o Rule entry: A row in the rule that describes a header field. | o Rule entry: A row in the rule that describes a header field. | |||
| o Rule ID: An identifier for a rule, SCHC C/D, and Dev share the | o Rule ID: An identifier for a rule, SCHC C/D, and Dev share the | |||
| same Rule ID for a specific flow. A set of Rule IDs are used to | same Rule ID for a specific flow. A set of Rule IDs are used to | |||
| support fragmentation functionality. | support fragmentation functionality. | |||
| o SCHC C/D: Static Context Header Compression Compressor/ | o SCHC C/D: Static Context Header Compression Compressor/ | |||
| Decompressor. A process in the network to achieve compression/ | Decompressor. A process in the network to achieve compression/ | |||
| decompressing headers. SCHC C/D uses SCHC rules to perform | decompressing headers. SCHC C/D uses SCHC rules to perform | |||
| compression and decompression. | compression and decompression. | |||
| o TV: Target value. A value contained in the Rule that will be | o TV: Target value. A value contained in the Rule that will be | |||
| matched with the value of a header field. | matched with the value of a header field. | |||
| o Up: Up Link direction for compression, from Dev to SCHC C/D. | o Up: Up Link direction for compression, from Dev to SCHC C/D. | |||
| o W: Window bit. A fragmentation header field used in Window mode | o W: Window bit. A fragment header field used in Window mode (see | |||
| (see section 9), which carries the same value for all fragments of | section 5), which carries the same value for all fragments of a | |||
| a window. | window. | |||
| o Window: A subset of the fragments needed to carry a packet (see | ||||
| section 5) | ||||
| 4. Static Context Header Compression | 4. Static Context Header Compression | |||
| Static Context Header Compression (SCHC) avoids context | Static Context Header Compression (SCHC) avoids context | |||
| synchronization, which is the most bandwidth-consuming operation in | synchronization, which is the most bandwidth-consuming operation in | |||
| other header compression mechanisms such as RoHC [RFC5795]. Based on | other header compression mechanisms such as RoHC [RFC5795]. Based on | |||
| the fact that the nature of data flows is highly predictable in LPWAN | the fact that the nature of data flows is highly predictable in LPWAN | |||
| networks, some static contexts may be stored on the Device (Dev). | networks, some static contexts may be stored on the Device (Dev). | |||
| The contexts must be stored in both ends, and it can either be | The contexts must be stored in both ends, and it can either be | |||
| learned by a provisioning protocol or by out of band means or it can | learned by a provisioning protocol or by out of band means or it can | |||
| skipping to change at page 15, line 18 ¶ | skipping to change at page 15, line 18 ¶ | |||
| o compute-checksum: compute a checksum from the information already | o compute-checksum: compute a checksum from the information already | |||
| received by the SCHC C/D. This field may be used to compute UDP | received by the SCHC C/D. This field may be used to compute UDP | |||
| checksum. | checksum. | |||
| 5. Fragmentation | 5. Fragmentation | |||
| 5.1. Overview | 5.1. Overview | |||
| In LPWAN technologies, the L2 data unit size typically varies from | In LPWAN technologies, the L2 data unit size typically varies from | |||
| tens to hundreds of bytes. If the entire IPv6 datagram after | tens to hundreds of bytes. If after applying SCHC header compression | |||
| applying SCHC header compression or when SCHC header compression is | or when SCHC header compression is not possible the entire IPv6 | |||
| not possible, fits within a single L2 data unit, the fragmentation | datagram fits within a single L2 data unit, the fragmentation | |||
| mechanism is not used and the packet is sent. Otherwise, the | mechanism is not used and the packet is sent. Otherwise, the | |||
| datagram SHALL be broken into fragments. | datagram SHALL be broken into fragments. | |||
| LPWAN technologies impose some strict limitations on traffic, devices | LPWAN technologies impose some strict limitations on traffic, (e.g.) | |||
| are sleeping most of the time and may receive data during a short | devices are sleeping most of the time and may receive data during a | |||
| period of time after transmission to preserve battery. To adapt the | short period of time after transmission to preserve battery. To | |||
| SCHC fragmentation to the capabilities of LPWAN technologies, it is | adapt the SCHC fragmentation to the capabilities of LPWAN | |||
| desirable to enable optional fragment retransmission and to allow a | technologies, it is desirable to enable optional fragment | |||
| gradation of fragment delivery reliability. This document does not | retransmission and to allow a gradation of fragment delivery | |||
| make any decision with regard to which fragment delivery reliability | reliability. This document does not make any decision with regard to | |||
| option(s) will be used over a specific LPWAN technology. | which fragment delivery reliability option(s) will be used over a | |||
| specific LPWAN technology. | ||||
| An important consideration is that LPWAN networks typically follow | An important consideration is that LPWAN networks typically follow a | |||
| the star topology, and therefore data unit reordering is not expected | the star topology, and therefore data unit reordering is not expected | |||
| in such networks. This specification assumes that reordering will | in such networks. This specification assumes that reordering will | |||
| not happen between the entity performing fragmentation and the entity | not happen between the entity performing fragmentation and the entity | |||
| performing reassembly. This assumption allows to reduce complexity | performing reassembly. This assumption allows to reduce complexity | |||
| and overhead of the fragmentation mechanism. | and overhead of the fragmentation mechanism. | |||
| 5.2. Functionalities | 5.2. Functionalities | |||
| This subsection describes the different fields in the fragmentation | This subsection describes the different fields in the fragmentation | |||
| header frames (see the fragmentation frames format in Section 5.4) | header frames (see the related formats in Section 5.4), as well as | |||
| that are used to enable the fragmentation functionalities defined in | the tools that are used to enable the fragmentation functionalities | |||
| this document, and the different reliability options supported. | defined in this document, and the different reliability options | |||
| supported. | ||||
| o Rule ID. The Rule ID is present in the fragmentation header and | o Rule ID. The Rule ID is present in the fragment header and in the | |||
| in the ACK header format. The Rule ID is a fragmentation header | ACK header format. The Rule ID in a fragment header is used to | |||
| is used to identify that a fragment is being carried, the | identify that a fragment is being carried, the fragmentation | |||
| fragmentation delivery reliability option used and it may indicate | delivery reliability option used and it may indicate the window | |||
| the window size in use (if any). The Rule ID in the fragmentation | size in use (if any). The Rule ID in the fragmentation header | |||
| header also allows to interleave non-fragmented IPv6 datagrams | also allows to interleave non-fragmented IPv6 datagrams with | |||
| with fragments that carry a larger IPv6 datagram. The Rule ID in | fragments that carry a larger IPv6 datagram. The Rule ID in an | |||
| an ACK allows to identify that the message is an ACK. | ACK allows to identify that the message is an ACK. | |||
| o Fragment Compressed Number (FCN). The FCN is included in all | o Fragment Compressed Number (FCN). The FCN is included in all | |||
| fragments. This field can be understood as a truncated, efficient | fragments. This field can be understood as a truncated, efficient | |||
| representation of a larger-sized fragment number, and does not | representation of a larger-sized fragment number, and does not | |||
| carry an absolute fragment number. There are two FCN reserved | carry an absolute fragment number. There are two FCN reserved | |||
| values that are used for controlling the fragmentation process, as | values that are used for controlling the fragmentation process, as | |||
| described next. The FCN value with all the bits equal to 1 (All- | described next. The FCN value with all the bits equal to 1 (All- | |||
| 1) denotes the last fragment of a packet. And the FCN value with | 1) denotes the last fragment of a packet. And the FCN value with | |||
| all the bits equal to 0 (All-0) denotes the last fragment of a | all the bits equal to 0 (All-0) denotes the last fragment of a | |||
| window (when such window is not the last one of the packet) in any | window (when such window is not the last one of the packet) in any | |||
| skipping to change at page 17, line 36 ¶ | skipping to change at page 17, line 38 ¶ | |||
| The dureation of this timer is not defined in this document and | The dureation of this timer is not defined in this document and | |||
| must be defined in the corresponding technology documents (e.g. | must be defined in the corresponding technology documents (e.g. | |||
| technology-specific profiles). | technology-specific profiles). | |||
| o Inactivity Timer. This timer is used by a fragment receiver to | o Inactivity Timer. This timer is used by a fragment receiver to | |||
| detect when there is a problem in the transmission of fragments | detect when there is a problem in the transmission of fragments | |||
| and the receiver does not get any fragment during a period of time | and the receiver does not get any fragment during a period of time | |||
| or a number of packets in a period of time. When this happens, an | or a number of packets in a period of time. When this happens, an | |||
| Abort message needs to be sent. Initially, and each time a | Abort message needs to be sent. Initially, and each time a | |||
| fragment is received the timer is reinitialized. The duration of | fragment is received the timer is reinitialized. The duration of | |||
| this timer timer is not defined in this document and must be | this timer is not defined in this document and must be defined in | |||
| defined in the specific technology document (e.g. technology- | the specific technology document (e.g. technology-specific | |||
| specific profiles). | profiles). | |||
| o Attempts. It is a counter used to request a missing ACK, and in | o Attempts. It is a counter used to request a missing ACK, and in | |||
| consequence to determine when an Abort is needed, because there | consequence to determine when an Abort is needed, because there | |||
| are recurrent fragment transmission errors, whose maximum value is | are recurrent fragment transmission errors, whose maximum value is | |||
| MAX_ACK_REQUESTS. The default value of MAX_ACK_REQUESTS is not | MAX_ACK_REQUESTS. The default value of MAX_ACK_REQUESTS is not | |||
| stated in this document, and it is expected to be defined in other | stated in this document, and it is expected to be defined in other | |||
| documents (e.g. technology-specific profiles). | documents (e.g. technology- specific profiles). The Attempts | |||
| counter is defined per window, it will be initialized each time a | ||||
| new window is used. | ||||
| o Bitmap. The Bitmap is a sequence of bits carried in an ACK for a | o Bitmap. The Bitmap is a sequence of bits carried in an ACK for a | |||
| given window. Each bit in the Bitmap corresponds to a fragment of | given window. Each bit in the Bitmap corresponds to a fragment of | |||
| the current window, and provides feedback on whether the fragment | the current window, and provides feedback on whether the fragment | |||
| has been received or not. The right-most position on the Bitmap | has been received or not. The right-most position on the Bitmap | |||
| is used to report whether the All-0 or All-1 fragments have been | is used to report whether the All-0 or All-1 fragments have been | |||
| received or not. Feedback for a fragment with the highest FCN | received or not. Feedback for a fragment with the highest FCN | |||
| value is provided by the left-most position in the Bitmap. In the | value is provided by the left-most position in the Bitmap. In the | |||
| Bitmap, a bit set to 1 indicates that the corresponding FCN | Bitmap, a bit set to 1 indicates that the corresponding FCN | |||
| fragment has been correctly sent and received. However, the | fragment has been correctly sent and received. However, the | |||
| sending format of the bitmap will be truncated until a byte | sending format of the Bitmap will be truncated until a byte | |||
| boundary where the last error is given. However, when all the | boundary where the last error is given. However, when all the | |||
| Bitmap is transmitted, it may be truncated, see more details in | Bitmap is transmitted, it may be truncated, see more details in | |||
| Section 5.5.3 | Section 5.5.3 | |||
| o Abort. In case of error or when the Inactivity timer expires or | o Abort. In case of error or when the Inactivity timer expires or | |||
| the MAX_ACK_REQUESTS is reached the sender or the receiver may use | MAX_ACK_REQUESTS is reached the sender or the receiver may use the | |||
| the Abort frames. When the receiver needs to abort the on-going | Abort frames. When the receiver needs to abort the on-going | |||
| fragmented packet transmission, it uses the ACK Abort format | fragmented packet transmission, it uses the ACK Abort format | |||
| packet with all the bits set to 1. The sender will use the All-1 | packet with all the bits set to 1. When the sender needs to abort | |||
| Abort format to trigger the end of the transmission. | the transmission it will use the All-1 Abort format, this fragment | |||
| is not acked. | ||||
| o Padding (P). Padding will be used to align the last byte of a | o Padding (P). Padding will be used to align the last byte of a | |||
| fragment with a byte boundary. The number of bits used for | fragment with a byte boundary. The number of bits used for | |||
| padding is not defined and depends on the size of the Rule ID, | padding is not defined and depends on the size of the Rule ID, | |||
| DTag and FCN fields, and on the layer two payload size. | DTag and FCN fields, and on the layer two payload size. | |||
| 5.3. Delivery Reliability options | 5.3. Delivery Reliability options | |||
| This specification defines the following three fragment delivery | This specification defines the following three fragment delivery | |||
| reliability options: | reliability options: | |||
| o No ACK. No ACK is the simplest fragment delivery reliability | o No ACK. No ACK is the simplest fragment delivery reliability | |||
| option. The receiver does not generate overhead in the form of | option. The receiver does not generate overhead in the form of | |||
| acknowledgments (ACKs). However, this option does not enhance | acknowledgments (ACKs). However, this option does not enhance | |||
| delivery reliability beyond that offered by the underlying LPWAN | delivery reliability beyond that offered by the underlying LPWAN | |||
| technology. In the No ACK option, the receiver MUST NOT issue | technology. In the No ACK option, the receiver MUST NOT issue | |||
| ACKs. | ACKs. | |||
| o Window mode - ACK always (ACK-always). | o Window mode - ACK always (ACK-Always). | |||
| The ACK-always option provides flow control. In addition, this | The ACK-always option provides flow control. In addition, this | |||
| option is able to handle long bursts of lost fragments, since | option is able to handle long bursts of lost fragments, since | |||
| detection of such events can be done before the end of the IPv6 | detection of such events can be done before the end of the IPv6 | |||
| packet transmission, as long as the window size is short enough. | packet transmission, as long as the window size is short enough. | |||
| However, such benefit comes at the expense of ACK use. In ACK- | However, such benefit comes at the expense of ACK use. In ACK- | |||
| always, an ACK is transmitted by the fragment receiver after a | always, an ACK is transmitted by the fragment receiver after a | |||
| window of fragments has been sent. A window of fragments is a | window of fragments has been sent. A window of fragments is a | |||
| subset of the full set of fragments needed to carry an IPv6 | subset of the full set of fragments needed to carry an IPv6 | |||
| packet. In this mode, the ACK informs the sender about received | packet. In this mode, the ACK informs the sender about received | |||
| and/or missed fragments from the window of fragments. Upon | and/or missed fragments from the window of fragments. Upon | |||
| skipping to change at page 19, line 4 ¶ | skipping to change at page 19, line 10 ¶ | |||
| However, such benefit comes at the expense of ACK use. In ACK- | However, such benefit comes at the expense of ACK use. In ACK- | |||
| always, an ACK is transmitted by the fragment receiver after a | always, an ACK is transmitted by the fragment receiver after a | |||
| window of fragments has been sent. A window of fragments is a | window of fragments has been sent. A window of fragments is a | |||
| subset of the full set of fragments needed to carry an IPv6 | subset of the full set of fragments needed to carry an IPv6 | |||
| packet. In this mode, the ACK informs the sender about received | packet. In this mode, the ACK informs the sender about received | |||
| and/or missed fragments from the window of fragments. Upon | and/or missed fragments from the window of fragments. Upon | |||
| receipt of an ACK that informs about any lost fragments, the | receipt of an ACK that informs about any lost fragments, the | |||
| sender retransmits the lost fragments. When an ACK is not | sender retransmits the lost fragments. When an ACK is not | |||
| received by the fragment sender, the latter sends an ACK request | received by the fragment sender, the latter sends an ACK request | |||
| using the All-1 empty fragment. | using the All-1 empty fragment. | |||
| The maximum number of ACK requests is MAX_ACK_REQUESTS. | The maximum number of ACK requests is MAX_ACK_REQUESTS. | |||
| o Window mode - ACK-on-error (ACK-on-error). The ACK-on-error | o Window mode - ACK-on-error (ACK-on-error). The ACK-on-error | |||
| option is suitable for links offering relatively low L2 data unit | option is suitable for links offering relatively low L2 data unit | |||
| loss probability. This option reduces the number of ACKs | loss probability. This option reduces the number of ACKs | |||
| transmitted by the fragment receiver. This may be especially | transmitted by the fragment receiver. This may be especially | |||
| beneficial in asymmetric scenarios, e.g. where fragmented data are | beneficial in asymmetric scenarios, e.g. where fragmented data are | |||
| sent uplink and the underlying LPWAN technology downlink capacity | sent uplink and the underlying LPWAN technology downlink capacity | |||
| or message rate is lower than the uplink one. | or message rate is lower than the uplink one. | |||
| In ACK-on-error, an ACK is transmitted by the fragment receiver | In ACK-on-error, an ACK is transmitted by the fragment receiver | |||
| after a window of fragments have been sent, only if at least one | after a window of fragments have been sent, only if at least one | |||
| of the fragments in the window has been lost. In this mode, the | of the fragments in the window has been lost. In this mode, the | |||
| ACK informs the sender about received and/or missed fragments from | ACK informs the sender about received and/or missed fragments from | |||
| the window of fragments. Upon receipt of an ACK that informs | the window of fragments. Upon receipt of an ACK that informs | |||
| about any lost fragments, the sender retransmits the lost | about any lost fragments, the sender retransmits the lost | |||
| fragments. However, if an ACK is lost, the sender assumes that | fragments. However, if an ACK is lost, the sender assumes that | |||
| all fragments covered by the ACK have been successfully delivered. | all fragments covered by the ACK have been successfully delivered, | |||
| And the receiver will abort the on-going fragmented packet | and the receiver will abort the on-going fragmented packet | |||
| transmission. One exception to this behavior is in the last | transmission. One exception to this behavior is in the last | |||
| window, whete the receiver MUST transmit an ACK, even if all the | window, where the receiver MUST transmit an ACK, even if all the | |||
| fragments in the last window have been correctly received. | fragments in the last window have been correctly received. | |||
| The same reliability option MUST be used for all fragments of a | The same reliability option MUST be used for all fragments of a | |||
| packet. It is up to implementers and/or representatives of the | packet. It is up to implementers and/or representatives of the | |||
| underlying LPWAN technology to decide which reliability option to use | underlying LPWAN technology to decide which reliability option to use | |||
| and whether the same reliability option applies to all IPv6 packets | and whether the same reliability option applies to all IPv6 packets | |||
| or not. Note that the reliability option to be used is not | or not. Note that the reliability option to be used is not | |||
| necessarily tied to the particular characteristics of the underlying | necessarily tied to the particular characteristics of the underlying | |||
| L2 LPWAN technology (e.g. the No ACK reliability option may be used | L2 LPWAN technology (e.g. the No ACK reliability option may be used | |||
| on top of an L2 LPWAN technology with symmetric characteristics for | on top of an L2 LPWAN technology with symmetric characteristics for | |||
| uplink and downlink). | uplink and downlink). | |||
| This document does not make any decision as to which fragment | This document does not make any decision as to which fragment | |||
| delivery reliability option(s) are supported by a specific LPWAN | delivery reliability option(s) are supported by a specific LPWAN | |||
| technology. | technology. | |||
| Examples of the different reliability options described are provided | Examples of the different reliability options described are provided | |||
| in Appendix B. | in Appendix B. | |||
| 5.4. Fragmentation Frames Formats | 5.4. Fragmentation Frame Formats | |||
| This section defines the fragment format, the All-0 and All-1 frames | This section defines the fragment format, the All-0 and All-1 frame | |||
| format, the ACK format and the Abort frames format. | formats, the ACK format and the Abort frame formats. | |||
| 5.4.1. Fragment format | 5.4.1. Fragment format | |||
| A fragment comprises a fragmentation header, a fragment payload, and | A fragment comprises a fragment header, a fragment payload, and | |||
| Padding bits (if any). A fragment conforms to the format shown in | Padding bits (if any). A fragment conforms to the format shown in | |||
| Figure 6. The fragment payload carries a subset of either a SCHC | Figure 6. The fragment payload carries a subset of either a SCHC | |||
| header or an IPv6 header or the original IPv6 packet data payload. A | header or an IPv6 header or the original IPv6 packet data payload. A | |||
| fragment is the payload in the L2 protocol data unit (PDU). | fragment is the payload in the L2 protocol data unit (PDU). | |||
| +-----------------+-----------------------+---------+ | +-----------------+-----------------------+---------+ | |||
| | Fragment Header | Fragment payload | padding | | | Fragment Header | Fragment payload | padding | | |||
| +-----------------+-----------------------+---------+ | +-----------------+-----------------------+---------+ | |||
| Figure 6: Fragment format. | Figure 6: Fragment format. | |||
| 5.4.2. Fragmentation formats | ||||
| In the No ACK option, fragments except the last one SHALL contain the | In the No ACK option, fragments except the last one SHALL contain the | |||
| format as defined in Figure 7. The total size of the fragmentation | format as defined in Figure 7. The total size of the fragment header | |||
| header is R bits. | is R bits. | |||
| <------------ R ----------> | <------------ R ----------> | |||
| <--T--> <--N--> | <--T--> <--N--> | |||
| +-- ... --+- ... -+- ... -+---...---+-+ | +-- ... --+- ... -+- ... -+---...---+-+ | |||
| | Rule ID | DTag | FCN | payload |P| | | Rule ID | DTag | FCN | payload |P| | |||
| +-- ... --+- ... -+- ... -+---...---+-+ | +-- ... --+- ... -+- ... -+---...---+-+ | |||
| Figure 7: Fragmentation Format for Fragments except the Last One, No | Figure 7: Fragment Format for Fragments except the Last One, No ACK | |||
| ACK option | option | |||
| In any of the Window mode options, fragments except the last one | In any of the Window mode options, fragments except the last one | |||
| SHALL contain the fragmentation format as defined in Figure 8. The | SHALL contain the fragmentation format as defined in Figure 8. The | |||
| total size of this fragmentation header is R bits. | total size of the fragment header in this format is R bits. . | |||
| <------------ R ----------> | <------------ R ----------> | |||
| <--T--> 1 <--N--> | <--T--> 1 <--N--> | |||
| +-- ... --+- ... -+-+- ... -+---...---+-+ | +-- ... --+- ... -+-+- ... -+---...---+-+ | |||
| | Rule ID | DTag |W| FCN | payload |P| | | Rule ID | DTag |W| FCN | payload |P| | |||
| +-- ... --+- ... -+-+- ... -+---...---+-+ | +-- ... --+- ... -+-+- ... -+---...---+-+ | |||
| Figure 8: Fragmentation Format for Fragments except the Last One, | Figure 8: Fragment Format for Fragments except the Last One, Window | |||
| Window mode | mode | |||
| 5.4.3. ACK format | 5.4.2. ACK format | |||
| The format of an ACK that acknowledges a window that is not the last | The format of an ACK that acknowledges a window that is not the last | |||
| one (denoted as ALL-0 window) is shown in Figure 9. | one (denoted as ALL-0 window) is shown in Figure 9. | |||
| <-------- R -------> | <-------- R -------> | |||
| <- T -> 1 | <- T -> 1 | |||
| +---- ... --+-... -+-+----- ... ---+ | +---- ... --+-... -+-+----- ... ---+ | |||
| | Rule ID | DTag |W| bitmap | (no payload) | | Rule ID | DTag |W| Bitmap | (no payload) | |||
| +---- ... --+-... -+-+----- ... ---+ | +---- ... --+-... -+-+----- ... ---+ | |||
| Figure 9: ACK format for All-0 windows | Figure 9: ACK format for All-0 windows | |||
| To acknowledge the last window of a packet (denoted as All-1 window), | To acknowledge the last window of a packet (denoted as All-1 window), | |||
| a C bit (i.e. MIC checked) following the W bit is set to 1 to | a C bit (i.e. MIC checked) following the W bit is set to 1 to | |||
| indicate that the MIC check computed by the receiver matches the MIC | indicate that the MIC check computed by the receiver matches the MIC | |||
| present in the ALL-1 fragment. If the MIC check fails, the C bit is | present in the All-1 fragment. If the MIC check fails, the C bit is | |||
| set to 0 and the Bitmap for the All-1 window follows. | set to 0 and the Bitmap for the All-1 window follows. | |||
| <-------- R -------> <- byte boundary -> | <-------- R -------> <- byte boundary -> | |||
| <- T -> 1 1 | <- T -> 1 1 | |||
| +---- ... --+-... -+-+-+ | +---- ... --+-... -+-+-+ | |||
| | Rule ID | DTag |W|1| (MIC correct) | | Rule ID | DTag |W|1| (MIC correct) | |||
| +---- ... --+-... -+-+-+ | +---- ... --+-... -+-+-+ | |||
| +---- ... --+-... -+-+-+------- ... -------+ | +---- ... --+-... -+-+-+------- ... -------+ | |||
| | Rule ID | DTag |W|0| bitmap | (MIC Incorrect) | | Rule ID | DTag |W|0| Bitmap | (MIC Incorrect) | |||
| +---- ... --+-... -+-+-+------- ... -------+ | +---- ... --+-... -+-+-+------- ... -------+ | |||
| C | C | |||
| Figure 10: Format of an ACK for All-1 windows | Figure 10: Format of an ACK for All-1 windows | |||
| 5.4.4. All-1 and All-0 formats | 5.4.3. All-1 and All-0 formats | |||
| The All-0 format is used for the last fragment of a window that is | The All-0 format is used for the last fragment of a window that is | |||
| not the last window of the packet. | not the last window of the packet. | |||
| <------------ R ------------> | <------------ R ------------> | |||
| <- T -> 1 <- N -> | <- T -> 1 <- N -> | |||
| +-- ... --+- ... -+-+- ... -+--- ... ---+ | +-- ... --+- ... -+-+- ... -+--- ... ---+ | |||
| | Rule ID | DTag |W| 0..0 | payload | | | Rule ID | DTag |W| 0..0 | payload | | |||
| +-- ... --+- ... -+-+- ... -+--- ... ---+ | +-- ... --+- ... -+-+- ... -+--- ... ---+ | |||
| skipping to change at page 22, line 4 ¶ | skipping to change at page 22, line 7 ¶ | |||
| <------------ R ------------> | <------------ R ------------> | |||
| <- T -> 1 <- N -> | <- T -> 1 <- N -> | |||
| +-- ... --+- ... -+-+- ... -+--- ... ---+ | +-- ... --+- ... -+-+- ... -+--- ... ---+ | |||
| | Rule ID | DTag |W| 0..0 | payload | | | Rule ID | DTag |W| 0..0 | payload | | |||
| +-- ... --+- ... -+-+- ... -+--- ... ---+ | +-- ... --+- ... -+-+- ... -+--- ... ---+ | |||
| Figure 11: All-0 fragment format | Figure 11: All-0 fragment format | |||
| The All-0 empty fragment format is used by a sender to request an ACK | The All-0 empty fragment format is used by a sender to request an ACK | |||
| in ACK-Always mode | in ACK-Always mode | |||
| <------------ R ------------> | <------------ R ------------> | |||
| <- T -> 1 <- N -> | <- T -> 1 <- N -> | |||
| +-- ... --+- ... -+-+- ... -+ | +-- ... --+- ... -+-+- ... -+ | |||
| | Rule ID | DTag |W| 0..0 | (no payload) | | Rule ID | DTag |W| 0..0 | (no payload) | |||
| +-- ... --+- ... -+-+- ... -+ | +-- ... --+- ... -+-+- ... -+ | |||
| Figure 12: All-0 empty fragment format | Figure 12: All-0 empty fragment format | |||
| In the No ACK option, the last fragment of an IPv6 datagram SHALL | In the No ACK option, the last fragment of an IPv6 datagram SHALL | |||
| contain a fragmentation header that conforms to the format shown in | contain a fragment header that conforms to the format shown in | |||
| Figure 13. The total size of this fragmentation header is R+M bits. | Figure 13. The total size of this fragment header is R+M bits. | |||
| <------------- R ----------> | <------------- R ----------> | |||
| <- T -> <-N-><----- M -----> | <- T -> <-N-><----- M -----> | |||
| +---- ... ---+- ... -+-----+---- ... ----+---...---+ | +---- ... ---+- ... -+-----+---- ... ----+---...---+ | |||
| | Rule ID | DTag | 1 | MIC | payload | | | Rule ID | DTag | 1 | MIC | payload | | |||
| +---- ... ---+- ... -+-----+---- ... ----+---...---+ | +---- ... ---+- ... -+-----+---- ... ----+---...---+ | |||
| Figure 13: All-1 Fragmentation Format for the Last Fragment, No ACK | Figure 13: All-1 Fragment Format for the Last Fragment, No ACK option | |||
| option | ||||
| In any of the Window modes, the last fragment of an IPv6 datagram | In any of the Window modes, the last fragment of an IPv6 datagram | |||
| SHALL contain a fragmentation header that conforms to the format | SHALL contain a fragment header that conforms to the format shown in | |||
| shown in Figure 14. The total size of the fragmentation header in | Figure 14. The total size of the fragment header in this format is | |||
| this format is R+M bits. It is used for request a retransmission | R+M bits. | |||
| <------------ R ------------> | <------------ R ------------> | |||
| <- T -> 1 <- N -> <---- M -----> | <- T -> 1 <- N -> <---- M -----> | |||
| +-- ... --+- ... -+-+- ... -+---- ... ----+---...---+ | +-- ... --+- ... -+-+- ... -+---- ... ----+---...---+ | |||
| | Rule ID | DTag |W| 11..1 | MIC | payload | | | Rule ID | DTag |W| 11..1 | MIC | payload | | |||
| +-- ... --+- ... -+-+- ... -+---- ... ----+---...---+ | +-- ... --+- ... -+-+- ... -+---- ... ----+---...---+ | |||
| (FCN) | (FCN) | |||
| Figure 14: All-1 Fragmentation Format for the Last Fragment, Window | Figure 14: All-1 Fragment Format for the Last Fragment, Window mode | |||
| mode | ||||
| In either ACK-Always or ACK-on-error, in order to request a | In either ACK-Always or ACK-on-error, in order to request a | |||
| retransmission of the ACK for the All-1 window, the fragment sender | retransmission of the ACK for the All-1 window, the fragment sender | |||
| uses the format shown in Figure 15. The total size of the | uses the format shown in Figure 15. The total size of the fragment | |||
| fragmentation header in this format is R+M bits. | header in this format is R+M bits. | |||
| <------------ R ------------> | <------------ R ------------> | |||
| <- T -> 1 <- N -> <---- M -----> | <- T -> 1 <- N -> <---- M -----> | |||
| +-- ... --+- ... -+-+- ... -+---- ... ----+ | +-- ... --+- ... -+-+- ... -+---- ... ----+ | |||
| | Rule ID | DTag |W| 1..1 | MIC | (no payload) | | Rule ID | DTag |W| 1..1 | MIC | (no payload) | |||
| +-- ... --+- ... -+-+- ... -+---- ... ----+ | +-- ... --+- ... -+-+- ... -+---- ... ----+ | |||
| Figure 15: All-1 for Retries format fragment also called All-1 empty | Figure 15: All-1 for Retries format, also called All-1 empty | |||
| The values for R, N, T and M are not specified in this document, and | The values for R, N, T and M are not specified in this document, and | |||
| have to be determined in other documents (e.g. technology-specific | have to be determined in other documents (e.g. technology-specific | |||
| profile documents). | profile documents). | |||
| 5.4.5. Abort formats | 5.4.4. Abort formats | |||
| The All-1 Abort format and the ACK abort have the following formats. | The All-1 Abort and the ACK abort messages have the following | |||
| formats. | ||||
| <------ byte boundary ------><--- 1 byte ---> | <------ byte boundary ------><--- 1 byte ---> | |||
| +--- ... ---+- ... -+-+-...-+-+-+-+-+-+-+-+-+ | +--- ... ---+- ... -+-+-...-+-+-+-+-+-+-+-+-+ | |||
| | Rule ID | DTag |W| FCN | FF | (no MIC & no payload) | | Rule ID | DTag |W| FCN | FF | (no MIC & no payload) | |||
| +--- ... ---+- ... -+-+-...-+-+-+-+-+-+-+-+-+ | +--- ... ---+- ... -+-+-...-+-+-+-+-+-+-+-+-+ | |||
| Figure 16: All-1 Abort format | Figure 16: All-1 Abort format | |||
| <------ byte boundary -----><--- 1 byte ---> | <------ byte boundary -----><--- 1 byte ---> | |||
| skipping to change at page 25, line 7 ¶ | skipping to change at page 25, line 7 ¶ | |||
| In the No ACK mode there is no feedback communication from the | In the No ACK mode there is no feedback communication from the | |||
| fragment receiver. The sender will send the fragments of a packet | fragment receiver. The sender will send the fragments of a packet | |||
| until the last one without any possibility to know if errors or a | until the last one without any possibility to know if errors or a | |||
| losses have occurred. As in this mode there is not a need to | losses have occurred. As in this mode there is not a need to | |||
| identify specific fragments a one-bit FCN is used, therefore FCN | identify specific fragments a one-bit FCN is used, therefore FCN | |||
| All-0 will be used in all fragments except the last one. The latter | All-0 will be used in all fragments except the last one. The latter | |||
| will carry an All-1 FCN and will also carry the MIC. The receiver | will carry an All-1 FCN and will also carry the MIC. The receiver | |||
| will wait for fragments and will set the Inactivity timer. The No | will wait for fragments and will set the Inactivity timer. The No | |||
| ACK mode will use the MIC contained in the last fragment to check | ACK mode will use the MIC contained in the last fragment to check | |||
| error. When the Inactivity Timer expires or when the MIC check | error. When the Inactivity Timer expires or when the MIC check | |||
| indicates that the reassembled packet does not match the originall | indicates that the reassembled packet does not match the original | |||
| one, the receiver will release all resources allocated to reassembly | one, the receiver will release all resources allocated to reassembly | |||
| of the packet. The initial value of the Inactivity Timer will be | of the packet. The initial value of the Inactivity Timer will be | |||
| determined based on the characteristics of the underlying LPWAN | determined based on the characteristics of the underlying LPWAN | |||
| technology and will be defined in other documents (e.g. technology- | technology and will be defined in other documents (e.g. technology- | |||
| specific profile documents). | specific profile documents). | |||
| 5.5.2. The Window modes | 5.5.2. The Window modes | |||
| In Window modes, a jumping window protocol is using two windows | In Window modes, a jumping window protocol uses two windows | |||
| alternatively, 0 and 1. An FCN set to All-0 indicates that the | alternatively, identified as 0 and 1. A fragment with all FCN bits | |||
| window is over (i.e. the fragment is the last one of the window) and | set to 0 (i.e. an All-0 fragment) indicates that the window is over | |||
| allows to switch from one window to another. The All-1 FCN in a | (i.e. the fragment is the last one of the window) and allows to | |||
| fragment indicates that it is the last fragment of the packet and | switch from one window to the next one. The All-1 FCN in a fragment | |||
| therefore there will not be another window for the packet. | indicates that it is the last fragment of the packet being | |||
| transmitted and therefore there will not be another window for the | ||||
| packet. | ||||
| The Window mode offers two different reliability options modes: ACK- | The Window mode offers two different reliability option modes: ACK- | |||
| on-error and ACK-always. | on-error and ACK-always. | |||
| 5.5.2.1. ACK-Always | 5.5.2.1. ACK-Always | |||
| The sender starts sending fragments using the two windows procedure. | In ACK-Always, the sender sends fragments by using the two-jumping | |||
| A delay between each fragment can be added to respect regulation | window procedure. A delay between each fragment can be added to | |||
| rules or constraints imposed by the applications. Each time a | respect regulation rules or constraints imposed by the applications. | |||
| fragment is sent the FCN is decreased by one and the sending | Each time a fragment is sent, the FCN is decreased by one. When the | |||
| information is set locally. When the FCN reaches value 0 and there | FCN reaches value 0 and there are more fragments to be sent, an All-0 | |||
| are more fragments to be sent, an All-0 fragment is sent and the | fragment is sent and the Retransmission Timer is set. The sender | |||
| retransmission timer is set. The sender waits for an ACK to know if | waits for an ACK to know if transmission errors have occurred. Then, | |||
| there were some transmission errors. If there are some errors the | the receiver sends an ACK reporting whether any fragments have been | |||
| receiver sends an ACK with the corresponding errors in the Bitmap, | lost or not by setting the corresponding bits in the Bitmap, | |||
| otherwise, an ACK without Bitmap will be sent and a new window should | otherwise, an ACK without Bitmap will be sent, allowing transmission | |||
| be sent. When the last fragment is sent, and All-1 fragment with MIC | of a new window. When the last fragment of the packet is sent, an | |||
| is sent. The sender sets the retransmission timer to wait for the | All-1 fragment (which includes a MIC) is used. In that case, the | |||
| ACK corresponding to the last window. During this period, the sender | sender sets the Retransmission Timer to wait for the ACK | |||
| starts listening to the radio and starts an Inactivity timer, which | corresponding to the last window. During this period, the sender | |||
| is dimensioned based on the received window available for the LPWAN | starts listening to the radio and starts the Retransmission Timer, | |||
| technology in use. If the Inactivity timer expires an empty All-0 | which needs to be dimensioned based on the received window available | |||
| (or All-1 if the last fragment has been sent) fragment is sent to ask | for the LPWAN technology in use. If the Retransmission Timer | |||
| the receiver to resend its ACK. The window number is not changed. | expires, an empty All-0 (or an empty All-1 if the last fragment has | |||
| been sent) fragment is sent to ask the receiver to resend its ACK. | ||||
| When the sender receives an ACK, it checks the window value. The ACK | The window number is not changed. | |||
| fragments carrying an unexpected W bit are discarded. If the window | ||||
| number of the received ACK is correct, the sender compares the | ||||
| sending information with the received Bitmap. If the sending | ||||
| information is equal to the received Bitmap all the fragments sent | ||||
| during the window have been well received. If at least one fragment | ||||
| needs to be sent, the sender moves its sending window to the next | ||||
| value and sends the last fragment. If no more fragments have to be | ||||
| sent, then the fragmented packet transmission is finished. | ||||
| If some fragments are missing (not set in the Bitmap) then the sender | ||||
| resends the missing fragments. When the retransmission is finished, | ||||
| it starts the retransmission timer (even if an All-0 or an All-1 has | ||||
| not been sent during the retransmission) and waits for ACK. | ||||
| If the sending information is different from the received Bitmap the | When the sender receives an ACK, it checks the W bit carried by the | |||
| counter Attempts is increased and the sender resends the missing | ACK. Any ACK carrying an unexpected W bit is discarded. If the W | |||
| fragments again when a MAX_ACK_REQUESTS is reached, the sender sends | bit value of the received ACK is correct, the sender analyzes the | |||
| an Abort and drops the fragments. The sender Aborts the transmission | received Bitmap. If all the fragments sent during the window have | |||
| when a corrupt MIC has been received or when MAX_ACK_REQUESTS has | been well received, and if at least one more fragment needs to be | |||
| reached. | sent, the sender moves its sending window to the next window value | |||
| and sends the next fragments. If no more fragments have to be sent, | ||||
| then the fragmented packet transmission is finished. | ||||
| At the beginning, the receiver side expects to receive window 0. Any | However, if one or more fragments have not been received as per the | |||
| fragment not belonging to the current window is discarded. All | ACK (i.e. the corresponding bits are not set in the Bitmap) then the | |||
| Fragments belonging to the correct window are accepted, the fragment | sender resends the missing fragments. When all missing fragments | |||
| number is computed based on the FCN value. The receiver updates the | have been retransmitted, the sender starts the Retransmission Timer | |||
| Bitmap with the correct received fragments. | (even if an All-0 or an All-1 has not been sent during the | |||
| retransmission) and waits for an ACK. Upon receipt of the ACK, if | ||||
| one or more fragments have not yet been received, the counter | ||||
| Attempts is increased and the sender resends the missing fragments | ||||
| again. When Attempts reaches MAX_ACK_REQUESTS, the sender aborts the | ||||
| on-going fragmented packet transmission by sending an Abort message | ||||
| and releases any resources for transmission of the packet. The | ||||
| sender also aborts an on-going fragmented packet transmission when a | ||||
| failed MIC check is reported by the receiver. | ||||
| When All-0 fragment is received, it indicates that all the fragments | On the other hand, at the beginning, the receiver side expects to | |||
| have been sent in the current window. Since the sender is not | receive window 0. Any fragment received but not belonging to the | |||
| obliged to send a full window, some fragment number not set in the | current window is discarded. All fragments belonging to the correct | |||
| memory may not correspond to losses. It sends the corresponding ACK | window are accepted, and the actual fragment number managed by the | |||
| and the next window can start. | receiver is computed based on the FCN value. The receiver prepares | |||
| the Bitmap to report the correctly received and the missing fragments | ||||
| for the current window. After each fragment is received the receiver | ||||
| initializes the Inactivity timer, if the Inactivity Timer expires the | ||||
| transmission is aborted. | ||||
| When All-1 fragment is received, it indicates that the transmission | When an All-0 fragment is received, it indicates that all the | |||
| is finished. Since the last window is not full, the MIC will be used | fragments have been sent in the current window. Since the sender is | |||
| to detect if all the fragments have been received. A correct MIC | not obliged to always send a full window, some fragment number not | |||
| indicates the end of the transmission but the receiver must stay | set in the receiver memory may not correspond to losses. The | |||
| alive an Inactivity timer period to answer to empty All-1 fragment | receiver sends the corresponding ACK, the Inactivity Timer is set and | |||
| the sender may send if the ACK is lost. | the transmission of the next window by the sender can start. | |||
| If All-1 fragment has not been received, the receiver expects a new | If an All-0 fragment has been received and all fragments of the | |||
| window. It waits for the next fragment. If the window value has not | current window have also been received, the receiver then expects a | |||
| changed, the received fragments are part of a retransmission. A | new Window and waits for the next fragment. Upon receipt of a | |||
| receiver that has already received a fragment should discard it, | fragment, if the window value has not changed, the received fragments | |||
| otherwise, it updates the Bitmap. If all the bits of the Bitmap are | are part of a retransmission. A receiver that has already received a | |||
| set to one, the receiver may send an ACK without waiting for an All-0 | fragment should discard it, otherwise, it updates the Bitmap. If all | |||
| fragment. | the bits of the Bitmap are set to one, the receiver may send an ACK | |||
| without waiting for an All-0 fragment and the Inactivity Timer is | ||||
| initialized. | ||||
| If the window value is set to the next value, this means that the | On the other hand, if the window value of the next received fragment | |||
| sender has received a correct bitmap, which means that all the | is set to the next expected window value, this means that the sender | |||
| fragments have been received. The receiver changes the value of the | has received a correct Bitmap reporting that all fragments have been | |||
| expected window. | received. The receiver then updates the value of the next expected | |||
| window. | ||||
| If the receiver receives an All-0 fragment, the sender may send one | If the receiver receives an All-0 fragment, the sender may send one | |||
| or more fragments per window. Otherwise, some fragments in the | or more fragments per window. Otherwise, some fragments in the | |||
| window have been lost. | window have been lost. | |||
| If the receiver receives an All-1 fragment this means that the | When an All-1 fragment is received, it indicates that the last | |||
| transmission should be finished. If the MIC is incorrect some | fragment of the packet has been sent. Since the last window is not | |||
| fragments have been lost. It sends the ACK. In case of an incorrect | always full, the MIC will be used to detect if all fragments of the | |||
| MIC, the receivers wait for fragments belonging to the same window. | packet have been received. A correct MIC indicates the end of the | |||
| After MAX_ACK_REQUESTS the receiver will Abort the transmission. It | transmission but the receiver must stay alive for an Inactivity Timer | |||
| can also Abort when the Inactivity timer has expired. | period to answer to any empty All-1 fragments the sender may send if | |||
| ACKs sent by the receiver are lost. If the MIC is incorrect, some | ||||
| fragments have been lost. The receiver sends the ACK regardless of | ||||
| successful fragmented packet reception or not, the Inactitivity Timer | ||||
| is set. In case of an incorrect MIC, the receiver waits for | ||||
| fragments belonging to the same window. After MAX_ACK_REQUESTS, the | ||||
| receiver will abort the on-going fragmented packet transmission. The | ||||
| receiver also Aborts upon Inactivity Timer expiration. | ||||
| 5.5.2.2. ACK-on-error | 5.5.2.2. ACK-on-error | |||
| The ACK-on-error is similar to the ACK-Always procedure, the | The ACK-on-error sender is similar to ACK-Always, the main difference | |||
| difference is that in ACK-on-error the ACK is not sent at the end of | being that in ACK-on-error the ACK is not sent at the end of each | |||
| each window but only when there is an error. In Ack-on-error mode, | window but only when at least one fragment of the current window has | |||
| the retransmission timer expiration will be considered as a positive | been lost (with the exception of the last window, see next | |||
| acknowledgment, it is set when receiving an All-0 or an All-1 | paragraph). In Ack-on-error, the Retransmission Timer expiration | |||
| fragment. If there are no more fragments then the fragmentation is | will be considered as a positive acknowledgment. The Retransmission | |||
| finished. | Timer is set when sending an All-0 or an All-1 fragment. When the | |||
| All-1 fragment has been sent, then the on-going fragmented packet | ||||
| When the All-1 last fragment is sent and the correct MIC have been | transmission fragmentation is finished and the sender waits for the | |||
| received an ACK is sent to confirms the end of the correct | last ACK. At the receiver side, when the All-1 fragment is sent and | |||
| transmission. If the retransmission timer expires an All-1 empty | the MIC check indicates successful packet reception, an ACK is also | |||
| request the last ACK that MUST be sent to complete the fragmentation | sent to confirm the end of a correct transmission. If the | |||
| Retransmission Timer expires, an All-1 empty request for the last ACK | ||||
| MUST be sent by the sender to complete the fragmented packet | ||||
| transmission. | transmission. | |||
| If the sender receives an ACK, it checks the window value. ACKs with | If the sender receives an ACK, it checks the window value. ACKs with | |||
| the non-expected window number are discarded. If the window number | an unexpected window number are discarded. If the window number on | |||
| on the received Bitmap is correct, the sender verifies if the | the received Bitmap is correct, the sender verifies if the receiver | |||
| receiver has all the fragments. When all the fragments have been | has received all fragments of the current window. When at least one | |||
| received the transmission of a new window should continue. | fragment has been lost, the counter Attempts is increased by one and | |||
| Otherwise, when there is an error the counter Attempts is increased | the sender resends the missing fragments again. When Attempts | |||
| and the sender resends the missing fragments again. When a | reaches MAX_ACK_REQUESTS, the sender sends an Abort message and | |||
| MAX_ACK_REQUESTS is reached, the sender sends an Abort. When the | releases all resources for the on-going fragmented packet | |||
| retransmission is finished, it starts listening to the ACK (even if | transmission. When the retransmission of missing fragments is | |||
| an All-0 or an All-1 has not been sent during the retransmission) and | finished, the sender starts listening for an ACK (even if an All-0 or | |||
| set the retransmission timer. If the retransmission timer expires | an All-1 has not been sent during the retransmission) and initializes | |||
| the transmission is aborted. | and starts the Retransmission Timer. After sending an All-1 | |||
| fragment, the sender listens for an ACK, initializes Attempts, and | ||||
| initializes and starts the Retransmission Timer. If the | ||||
| Retransmission Timer expires, Attempts is increased by one and an | ||||
| empty All-1 fragment is sent to request the ACK for the last window. | ||||
| If Attempts reaches MAX_ACK_REQUESTS, the on-going fragmented packet | ||||
| transmission is aborted. | ||||
| Unlike the sender, the receiver for ACK-on-error has some | Unlike the sender, the receiver for ACK-on-error has a larger amount | |||
| differences. First, we are not sending ACK unless there is an error | of differences compared with ACK-Always. First, an ACK is not sent | |||
| or an unexpected behavior. The receiver starts with the expected | unless there is a lost fragment or an unexpected behavior (with the | |||
| window and maintains the information indicating which fragments it | exception of the last window, where an ACK is always sent regardless | |||
| has received (All-0 and All-1 occupy the same position). After | of fragment losses or not). The receiver starts by expecting | |||
| receiving a fragment an Inactivity timer is set, if nothing has been | fragments from window 0 and maintains the information regarding which | |||
| received and the Inactivity timer expires the transmission is | fragments it receives. After receiving a fragment, the Inactivity | |||
| aborted. | Timer is set, if no fragment has been received and the Inactivity | |||
| Timer expires the transmission is aborted. | ||||
| Any fragment not belonging to the current window is discarded. The | Any fragment not belonging to the current window is discarded. The | |||
| Fragment Number is computed based on the FCN value. When an All-0 | actual fragment number is computed based on the FCN value. When an | |||
| fragment is received and the Bitmap is full, the receiver changes the | All-0 fragment is received and all fragments have been received, the | |||
| window value. | receiver updates the expected window value. | |||
| An All-0 fragment and not a full bitmap indicate that all the | ||||
| fragments have been sent in the current window. Since the sender is | ||||
| not obligated to send a full window, some fragment number not used | ||||
| may not correspond to losses. As the receiver does not know if the | ||||
| missing fragments are lost or normal missing fragments, it sends an | ||||
| ACK. | ||||
| An All-1 fragment indicates that the transmission is finished. Since | If an All-0 fragment is received, even if another fragment is | |||
| the last window is not full, the MIC will be used to detect if all | missing, all fragments from the current window have been sent. Since | |||
| the fragments have been received. A correct MIC indicates the end of | the sender is not obligated to send a full window, a fragment number | |||
| the transmission. | not used may not necessarily correspond to losses. As the receiver | |||
| does not know if the missing fragments are lost or not, it sends an | ||||
| ACK and reinitialises the Inactivity Timer. | ||||
| If All-1 fragment has not been received, the receiver expects a new | On the other hand, after receiving an All-0 fragment, the receiver | |||
| window. It waits for the next fragment. If the window value has not | expects a new window and waits for the next fragment. | |||
| changed, the received fragments are part of a retransmission. A | If the window value of the next fragment has not changed, the | |||
| receiver that has already received a fragment should discard it. If | received fragment is a retransmission. A receiver that has already | |||
| all the bits of the Bitmap are set to one, the receiver waits for the | received a fragment should discard it. If all fragments of a window | |||
| next window without waiting for an All-0 fragment and it does not | (that is not the last one) have been received, the receiver does not | |||
| send an ACK either. While the receiver waits for next window and if | send an ACK. While the receiver waits for the next window and if the | |||
| the window value is set to the next value, and if an All-1 fragment | window value is set to the next value, and if an All-1 fragment with | |||
| with the next value window arrived the receiver goes to error and | the next value window arrived the receiver aborts the on-going | |||
| abort the transmission, it drops the fragments. | fragmented packet transmission, and it drops the fragments of the | |||
| aborted packet transmission. | ||||
| If the receiver receives an All-1 fragment this means that the | If the receiver receives an All-1 fragment, this means that the | |||
| transmission should be finished. If the MIC is incorrect some | transmission should be finished. If the MIC is incorrect some | |||
| fragments have been lost. It sends an ACK. | fragments have been lost. Regardless of fragment losses, the | |||
| receiver sends an ACK and initializes the Inactivity Timer. | ||||
| In case of an incorrect MIC, the receivers wait for fragment | Reception of an All-1 fragment indicates the last fragment of the | |||
| belonging to the same window or the expiration of the Inactivity | packet has been sent. Since the last window is not always full, the | |||
| timer which will Abort the transmission. | MIC will be used to detect if all fragments of the window have been | |||
| received. A correct MIC check indicates the end of the fragmented | ||||
| packet transmission. An ACK is sent by the fragment receiver. In | ||||
| case of an incorrect MIC, the receiver waits for fragments belonging | ||||
| to the same window or the expiration of the Inactivity Timer. The | ||||
| latter will lead the receiver to abort the on-going fragmented packet | ||||
| transmission. | ||||
| 5.5.3. Bitmap Optimization | 5.5.3. Bitmap Optimization | |||
| The Fragmentation Bitmap is the optmization of what has been | The Bitmap is transmitted by a receiver as part of the ACK format | |||
| received. It is transmitted in the ACK format fragment when there | when there are some missing fragments in a window. An ACK message | |||
| are some missing fragments. An ACK message may introduce padding at | may introduce padding at the end to align transmitted data to a byte | |||
| the end to align transmitted data to a byte boundary. The first byte | boundary. The first byte boundary includes one or more complete | |||
| boundary includes one or more complete bytes, depending on the size | bytes, depending on the size of Rule ID and DTag. | |||
| of Rule ID and DTag. | ||||
| The receiver generates the Bitmap which may have the size of a single | Note that the ACK sent in response to an All-1 fragment includes the | |||
| downlink frame of the LPWAN technology used. To avoid this problem | C bit. Therefore, the window size and thus the Bitmap size need to | |||
| the FCN size should be set to the corresponding downlink size minus 1 | be determined taking into account the available space in the layer | |||
| bit for C bit. The C bit will be sent only in the ACK for the last | two frame payload, where there will be 1 bit less for an ACK sent in | |||
| frame of the packet (All-1). | response to an All-1 fragment than in other ACKs. | |||
| <---- bitmap fragments ----> | <---- Bitmap bits ----> | |||
| | Rule ID | DTag |W|C|0|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0| | | Rule ID | DTag |W|C|0|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| | |||
| |--- byte boundary ----| 1 byte next | 1 byte next | | |--- byte boundary ----| 1 byte next | 1 byte next | | |||
| Figure 18: Bitmap | Figure 18: Bitmap | |||
| Bitmap transmitted MUST be optimized in size to reduce frame size. | The Bitmap, when transmitted, MUST be optimized in size to reduce the | |||
| The right-most bytes with all Bitmap bit set to 1 MUST be removed | resulting frame size. The right-most bytes with all Bitmap bits set | |||
| from the transmission. As the receiver knows the Bitmap size, it can | to 1 MUST NOT be transmitted. As the receiver knows the Bitmap size, | |||
| reconstruct the value. In the example Figure 19 the last 2 bytes of | it can reconstruct the original Bitmap without this optimization. In | |||
| the bitmap are set to 1, therefore, they are not sent. | the example Figure 19, the last 2 bytes of the Bitmap shown in | |||
| Figure 18 comprise all bits set to 1, therefore, the last 2 bytes of | ||||
| the Bitmap are not sent. | ||||
| In the last window, when checked bit C value is one, means that the | In the last window, when checked bit C value is 1, it means that the | |||
| MIC is corrected and the Bitmap is not sent. Otherwise, the Bitmap | received MIC matches the one computed by the receiver, and thus the | |||
| needs to be sent after the C bit. Note that the introduction of a C | Bitmap is not sent. Otherwise, the Bitmap needs to be sent after the | |||
| bit may force to reduce the number of fragments to allow the bitmap | C bit. Note that the introduction of a C bit may force to reduce the | |||
| to fit in a frame. | number of fragments in a window to allow the bitmap to fit in a | |||
| frame. | ||||
| <------- R -------> | <------- R -------> | |||
| <- T -> 1 | <- T -> 1 | |||
| +---- ... --+-... -+-+-+-+ | +---- ... --+-... -+-+-+-+ | |||
| | Rule ID | DTag |W|1|0| | | Rule ID | DTag |W|1|0| | |||
| +---- ... --+-... -+-+-+-+ | +---- ... --+-... -+-+-+-+ | |||
| |---- byte boundary -----| | |---- byte boundary -----| | |||
| Figure 19: Bitmap transmitted fragment format | Figure 19: Bitmap transmitted fragment format | |||
| Figure 20 shows an example of an ACK (N=3), where the Bitmap | Figure 20 shows an example of an ACK (for N=3), where the Bitmap | |||
| indicates that the second and the fifth fragments have not been | indicates that the second and the fifth fragments have not been | |||
| correctly received. | correctly received. | |||
| <------ R ------>6 5 4 3 2 1 0 (*) | <------ R ------>6 5 4 3 2 1 0 (*) | |||
| <- T -> 1 | <- T -> 1 | |||
| | Rule ID | DTag |W|1|0|1|1|0|1|all-0|padding| Bitmap | | Rule ID | DTag |W|1|0|1|1|0|1|all-0|padding| Bitmap (before tx) | |||
| |--- byte boundary ----| 1 byte next | | |--- byte boundary ----| 1 byte next | | |||
| (*)=(FCN values indicating the order) | (*)=(FCN values indicating the order) | |||
| +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | |||
| | Rule ID | DTag |W|1|0|1|1|0|1|1|P| transmitted Bitmap | | Rule ID | DTag |W|1|0|1|1|0|1|1|P| transmitted Bitmap | |||
| +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | +---- ... --+-... -+-+-+-+-+-+-+-+-+-+ | |||
| |--- byte boundary ----| 1 byte next | | |--- byte boundary ----| 1 byte next | | |||
| Figure 20: Example of the bitmap in Window mode, in any window except | Figure 20: Example of a Bitmap before transmission, and the | |||
| the last one, for N=3) | transmitted one, in any window except the last one, for N=3 | |||
| Figure 21 shows an example of an ACK (N=3), where the bitmap | Figure 21 shows an example of an ACK (for N=3), where the Bitmap | |||
| indicates that the MIC check has failed but there is no missing | indicates that the MIC check has failed but there are no missing | |||
| fragments. | fragments. | |||
| <------- R -------> 6 5 4 3 2 1 7 (*) | <------- R -------> 6 5 4 3 2 1 7 (*) | |||
| <- T -> 1 1 | <- T -> 1 1 | |||
| | Rule ID | DTag |W|0|1|1|1|1|1|1|1|padding| Bitmap | | Rule ID | DTag |W|0|1|1|1|1|1|1|1|padding| Bitmap (before tx) | |||
| |---- byte boundary ----| 1 byte next | 1 byte next | | |---- byte boundary ----| 1 byte next | 1 byte next | | |||
| C | C | |||
| +---- ... --+-... -+-+-+-+ | +---- ... --+-... -+-+-+-+ | |||
| | Rule ID | DTag |W|0|1| transmitted Bitmap | | Rule ID | DTag |W|0|1| transmitted Bitmap | |||
| +---- ... --+-... -+-+-+-+ | +---- ... --+-... -+-+-+-+ | |||
| |---- byte boundary -----| | |---- byte boundary -----| | |||
| (*) = (FCN values indicating the order) | (*) = (FCN values indicating the order) | |||
| Figure 21: Example of the Bitmap in Window mode for the last window, | Figure 21: Example of the Bitmap in Window mode for the last window, | |||
| for N=3) | for N=3) | |||
| 5.6. Supporting multiple window sizes | 5.6. Supporting multiple window sizes | |||
| 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 may be used for packets that need to be carried by | large window size may be used for packets that need to be carried by | |||
| a large number of fragments. However, when the number of fragments | a large number of fragments. However, when the number of fragments | |||
| 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 feedback on all | shorter Bitmap, may be sufficient to provide feedback on all | |||
| fragments. If multiple window sizes are supported, the Rule ID may | fragments. If multiple window sizes are supported, the Rule ID may | |||
| be used to signal the window size in use for a specific packet | be used to signal the window size in use for a specific packet | |||
| transmission. | transmission. | |||
| Note that the same window size MUST be used for the transmission of | Note that the same window size MUST be used for the transmission of | |||
| all fragments that belong to a packet. | all fragments that belong to a packet. | |||
| 5.7. Downlink fragment transmission | 5.7. Downlink fragment transmission | |||
| In some LPWAN technologies, as part of energy-saving techniques, | In some LPWAN technologies, as part of energy-saving techniques, | |||
| skipping to change at page 32, line 5 ¶ | skipping to change at page 32, line 33 ¶ | |||
| that transmission. | that transmission. | |||
| When the fragment sender transmits the All-1 fragment, it initializes | When the fragment sender transmits the All-1 fragment, it initializes | |||
| and starts its retransmission timer to a long value (e.g. several | and starts its retransmission timer to a long value (e.g. several | |||
| times the initial Inactivity timer). If an ACK is received before | times the initial Inactivity timer). If an ACK is received before | |||
| expiration of this timer, the fragment sender retransmits any lost | expiration of this timer, the fragment sender retransmits any lost | |||
| fragments reported by the ACK, or if the ACK confirms successful | fragments reported by the ACK, or if the ACK confirms successful | |||
| reception of all fragments of the last window, transmission of the | reception of all fragments of the last window, transmission of the | |||
| fragmented packet ends. If the timer expires, and no ACK has been | fragmented packet ends. If the timer expires, and no ACK has been | |||
| received since the start of the timer, the fragment sender assumes | received since the start of the timer, the fragment sender assumes | |||
| that the all-1 fragment has been successfully received (and possibly, | that the All-1 fragment has been successfully received (and possibly, | |||
| the last ACK has been lost: this mechanism assumes that the | the last ACK has been lost: this mechanism assumes that the | |||
| retransmission timer for the all-1 fragment is long enough to allow | retransmission timer for the All-1 fragment is long enough to allow | |||
| several ACK retries if the all-1 fragment has not been received by | several ACK retries if the All-1 fragment has not been received by | |||
| the fragment receiver, and it also assumes that it is unlikely that | the fragment receiver, and it also assumes that it is unlikely that | |||
| several ACKs become all lost). | several ACKs become all lost). | |||
| 6. Padding management | 6. Padding management | |||
| SCHC header, either for compression, fragmentation or acknowledgment | SCHC header, either for compression, fragmentation or acknowledgment | |||
| does not preserve byte alignment. Since most of the LPWAN network | does not preserve byte alignment. Since most of the LPWAN network | |||
| technologies payload is expressed in an integer number of bytes; the | technologies payload is expressed in an integer number of bytes; the | |||
| sender will introduce at the end some padding bits while the receiver | sender will introduce at the end some padding bits while the receiver | |||
| must be able to eliminate them. | must be able to eliminate them. | |||
| skipping to change at page 32, line 41 ¶ | skipping to change at page 33, line 21 ¶ | |||
| padding bits. | padding bits. | |||
| 7. SCHC Compression for IPv6 and UDP headers | 7. SCHC Compression for IPv6 and UDP headers | |||
| This section lists the different IPv6 and UDP header fields and how | This section lists the different IPv6 and UDP header fields and how | |||
| they can be compressed. | they can be compressed. | |||
| 7.1. IPv6 version field | 7.1. IPv6 version field | |||
| This field always holds the same value. Therefore, the TV is 6, the | This field always holds the same value. Therefore, the TV is 6, the | |||
| MO is "equal" and the "CDA "not-sent"". | MO is "equal" and the "CDA "not-sent". | |||
| 7.2. IPv6 Traffic class field | 7.2. IPv6 Traffic class field | |||
| If the DiffServ field identified by the rest of the rule do not vary | If the DiffServ field identified by the rest of the rule does not | |||
| and is known by both sides, the TV should contain this well-known | vary and is known by both sides, the TV should contain this well- | |||
| value, the MO should be "equal" and the CDA must be "not-sent. | known value, the MO should be "equal" and the CDA must be "not-sent. | |||
| If the DiffServ field identified by the rest of the rule varies over | If the DiffServ field identified by the rest of the rule varies over | |||
| time or is not known by both sides, then there are two possibilities | time or is not known by both sides, then there are two possibilities | |||
| depending on the variability of the value, the first one is to do not | depending on the variability of the value: The first one is to do not | |||
| compressed the field and sends the original value, or the second | compressed the field and sends the original value. In the second, | |||
| where the values can be computed by sending only the LSB bits: | where the values can be computed by sending only the LSB bits: | |||
| o TV is not set to any value, MO is set to "ignore" and CDA is set | o TV is not set to any value, MO is set to "ignore" and CDA is set | |||
| to "value-sent" | to "value-sent" | |||
| o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | |||
| 7.3. Flow label field | 7.3. Flow label field | |||
| If the Flow Label field identified by the rest of the rule does not | If the Flow Label field identified by the rest of the rule does not | |||
| vary and is known by both sides, the TV should contain this well- | vary and is known by both sides, the TV should contain this well- | |||
| known value, the MO should be "equal" and the CDA should be "not- | known value, the MO should be "equal" and the CDA should be "not- | |||
| sent". | sent". | |||
| If the Flow Label field identified by the rest of the rule varies | If the Flow Label field identified by the rest of the rule varies | |||
| during time or is not known by both sides, there are two | during time or is not known by both sides, there are two | |||
| possibilities depending on the variability of the value, the first | possibilities depending on the variability of the value: The first | |||
| one is without compression and then the value is sent and the second | one is without compression and then the value is sent. In the | |||
| where only part of the value is sent and the decompressor needs to | second, only part of the value is sent and the decompressor needs to | |||
| compute the original value: | compute the original value: | |||
| o TV is not set, MO is set to "ignore" and CDA is set to "value- | o TV is not set, MO is set to "ignore" and CDA is set to "value- | |||
| sent" | sent" | |||
| o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | o TV contains a stable value, MO is MSB(X) and CDA is set to LSB | |||
| 7.4. Payload Length field | 7.4. Payload Length field | |||
| If the LPWAN technology does not add padding, this field can be | If the LPWAN technology does not add padding, this field can be | |||
| elided for the transmission on the LPWAN network. The SCHC C/D | elided for the transmission on the LPWAN network. The SCHC C/D | |||
| recomputes the original payload length value. The TV is not set, the | recomputes the original payload length value. The TV is not set, the | |||
| MO is set to "ignore" and the CDA is "compute-IPv6-length". | MO is set to "ignore" and the CDA is "compute-IPv6-length". | |||
| If the payload length needs to be sent and does not need to be coded | 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)" | in 16 bits, the TV can be set to 0x0000, the MO set to "MSB (16-s)" | |||
| and the CDA to "LSB". The 's' parameter depends on the expected | and the CDA to "LSB". The 's' parameter depends on the expected | |||
| maximum packet length. | maximum packet length. | |||
| On other cases, the payload length field must be sent and the CDA is | In other cases, the payload length field must be sent and the CDA is | |||
| replaced by "value-sent". | replaced by "value-sent". | |||
| 7.5. Next Header field | 7.5. Next Header field | |||
| If the Next Header field identified by the rest of the rule does not | If the Next Header field identified by the rest of the rule does not | |||
| vary and is known by both sides, the TV should contain this Next | vary and is known by both sides, the TV should contain this Next | |||
| Header value, the MO should be "equal" and the CDA should be "not- | Header value, the MO should be "equal" and the CDA should be "not- | |||
| sent". | sent". | |||
| If the Next header field identified by the rest of the rule varies | If the Next Header field identified by the rest of the rule varies | |||
| during time or is not known by both sides, then TV is not set, MO is | during time or is not known by both sides, then TV is not set, MO is | |||
| set to "ignore" and CDA is set to "value-sent". A matching-list may | set to "ignore" and CDA is set to "value-sent". A matching-list may | |||
| also be used. | also be used. | |||
| 7.6. Hop Limit field | 7.6. Hop Limit field | |||
| The End System is generally a device and does not forward packets. | The End System is generally a device and does not forward packets. | |||
| Therefore, the Hop Limit value is constant. So, the TV is set with a | Therefore, the Hop Limit value is constant. So, the TV is set with a | |||
| default value, the MO is set to "equal" and the CDA is set to "not- | default value, the MO is set to "equal" and the CDA is set to "not- | |||
| sent". | sent". | |||
| skipping to change at page 34, line 30 ¶ | skipping to change at page 35, line 9 ¶ | |||
| Note that the field behavior differs in upstream and downstream. In | Note that the field behavior differs in upstream and downstream. In | |||
| upstream, since there is no IP forwarding between the Dev and the | upstream, since there is no IP forwarding between the Dev and the | |||
| SCHC C/D, the value is relatively constant. On the other hand, the | SCHC C/D, the value is relatively constant. On the other hand, the | |||
| downstream value depends of Internet routing and may change more | downstream value depends of Internet routing and may change more | |||
| frequently. One solution could be to use the Direction Indicator | frequently. One solution could be to use the Direction Indicator | |||
| (DI) to distinguish both directions to elide the field in the | (DI) to distinguish both directions to elide the field in the | |||
| upstream direction and send the value in the downstream direction. | upstream direction and send the value in the downstream direction. | |||
| 7.7. IPv6 addresses fields | 7.7. IPv6 addresses fields | |||
| As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit | As in 6LoWPAN [RFC4944], IPv6 addresses are splitted into two 64-bit | |||
| long fields; one for the prefix and one for the Interface Identifier | long fields; one for the prefix and one for the Interface Identifier | |||
| (IID). These fields should be compressed. To allow a single rule, | (IID). These fields should be compressed. To allow a single rule, | |||
| these values are identified by their role (DEV or APP) and not by | these values are identified by their role (DEV or APP) and not by | |||
| their position in the frame (source or destination). The SCHC C/D | their position in the frame (source or destination). The SCHC C/D | |||
| must be aware of the traffic direction (upstream, downstream) to | must be aware of the traffic direction (upstream, downstream) to | |||
| select the appropriate field. | select the appropriate field. | |||
| 7.7.1. IPv6 source and destination prefixes | 7.7.1. IPv6 source and destination prefixes | |||
| Both ends must be synchronized with the appropriate prefixes. For a | Both ends must be synchronized with the appropriate prefixes. For a | |||
| specific flow, the source and destination prefix can be unique and | specific flow, the source and destination prefixes can be unique and | |||
| stored in the context. It can be either a link-local prefix or a | stored in the context. It can be either a link-local prefix or a | |||
| global prefix. In that case, the TV for the source and destination | global prefix. In that case, the TV for the source and destination | |||
| prefixes contain the values, the MO is set to "equal" and the CDA is | prefixes contain the values, the MO is set to "equal" and the CDA is | |||
| set to "not-sent". | set to "not-sent". | |||
| In case the rule allows several prefixes, mapping-list must be used. | In case the rule allows several prefixes, mapping-list must be used. | |||
| The different prefixes are listed in the TV associated with a short | The different prefixes are listed in the TV associated with a short | |||
| ID. The MO is set to "match-mapping" and the CDA is set to "mapping- | ID. The MO is set to "match-mapping" and the CDA is set to "mapping- | |||
| sent". | sent". | |||
| Otherwise the TV contains the prefix, the MO is set to "equal" and | Otherwise the TV contains the prefix, the MO is set to "equal" and | |||
| the CDA is set to value-sent. | the CDA is set to "value-sent". | |||
| 7.7.2. IPv6 source and destination IID | 7.7.2. IPv6 source and destination IID | |||
| If the DEV or APP IID are based on an LPWAN address, then the IID can | If the DEV or APP IID are based on an LPWAN address, then the IID can | |||
| be reconstructed with information coming from the LPWAN header. In | be reconstructed with information coming from the LPWAN header. In | |||
| that case, the TV is not set, the MO is set to "ignore" and the CDA | that case, the TV is not set, the MO is set to "ignore" and the CDA | |||
| is set to "DEViid" or "APPiid". Note that the LPWAN technology is | is set to "DEViid" or "APPiid". Note that the LPWAN technology is | |||
| generally carrying a single device identifier corresponding to the | generally carrying a single device identifier corresponding to the | |||
| DEV. The SCHC C/D may also not be aware of these values. | DEV. The SCHC C/D may also not be aware of these values. | |||
| If the DEV address has a static value that is not derived from an | If the DEV address has a static value that is not derived from an | |||
| IEEE EUI-64, then TV contains the actual Dev address value, the MO | IEEE EUI-64, then TV contains the actual Dev address value, the MO | |||
| operator is set to "equal" and the CDA is set to "not-sent". | operator is set to "equal" and the CDA is set to "not-sent". | |||
| If several IIDs are possible, then the TV contains the list of | 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". | |||
| Otherwise the value variation of the IID may be reduced to few bytes. | Otherwise the value variation of the IID may be reduced to few bytes. | |||
| In that case, the TV is set to the stable part of the IID, the MO is | In that case, the TV is set to the stable part of the IID, the MO is | |||
| set to MSB and the CDA is set to LSB. | set to "MSB" and the CDA is set to "LSB". | |||
| Finally, the IID can be sent on the LPWAN. In that case, the TV is | Finally, the IID can be sent on the LPWAN. In that case, the TV is | |||
| not set, the MO is set to "ignore" and the CDA is set to "value- | not set, the MO is set to "ignore" and the CDA is set to "value- | |||
| sent". | sent". | |||
| 7.8. IPv6 extensions | 7.8. IPv6 extensions | |||
| No extension rules are currently defined. They can be based on the | No extension rules are currently defined. They can be based on the | |||
| MOs and CDAs described above. | MOs and CDAs described above. | |||
| skipping to change at page 37, line 15 ¶ | skipping to change at page 37, line 43 ¶ | |||
| A node can perform a buffer reservation attack by sending a first | A node can perform a buffer reservation attack by sending a first | |||
| fragment to a target. Then, the receiver will reserve buffer space | fragment to a target. Then, the receiver will reserve buffer space | |||
| for the IPv6 packet. Other incoming fragmented packets will be | for the IPv6 packet. Other incoming fragmented packets will be | |||
| dropped while the reassembly buffer is occupied during the reassembly | dropped while the reassembly buffer is occupied during the reassembly | |||
| timeout. Once that timeout expires, the attacker can repeat the same | timeout. Once that timeout expires, the attacker can repeat the same | |||
| procedure, and iterate, thus creating a denial of service attack. | procedure, and iterate, thus creating a denial of service attack. | |||
| The (low) cost to mount this attack is linear with the number of | The (low) cost to mount this attack is linear with the number of | |||
| buffers at the target node. However, the cost for an attacker can be | buffers at the target node. However, the cost for an attacker can be | |||
| increased if individual fragments of multiple packets can be stored | increased if individual fragments of multiple packets can be stored | |||
| in the reassembly buffer. To further increase the attack cost, the | in the reassembly buffer. To further increase the attack cost, the | |||
| reassembly buffer can be split into fragment-sized buffer slots. | reassembly buffer can be splitted into fragment-sized buffer slots. | |||
| Once a packet is complete, it is processed normally. If buffer | Once a packet is complete, it is processed normally. If buffer | |||
| overload occurs, a receiver can discard packets based on the sender | overload occurs, a receiver can discard packets based on the sender | |||
| behavior, which may help identify which fragments have been sent by | behavior, which may help identify which fragments have been sent by | |||
| an attacker. | an attacker. | |||
| In another type of attack, the malicious node is required to have | In another type of attack, the malicious node is required to have | |||
| overhearing capabilities. If an attacker can overhear a fragment, it | overhearing capabilities. If an attacker can overhear a fragment, it | |||
| can send a spoofed duplicate (e.g. with random payload) to the | can send a spoofed duplicate (e.g. with random payload) to the | |||
| destination. If the LPWAN technology does not support suitable | destination. If the LPWAN technology does not support suitable | |||
| protection (e.g. source authentication and frame counters to prevent | protection (e.g. source authentication and frame counters to prevent | |||
| skipping to change at page 37, line 37 ¶ | skipping to change at page 38, line 16 ¶ | |||
| spoofed fragments. Therefore, the original IPv6 packet will be | spoofed fragments. Therefore, the original IPv6 packet will be | |||
| considered corrupt and will be dropped. To protect resource- | considered corrupt and will be dropped. To protect resource- | |||
| constrained nodes from this attack, it has been proposed to establish | constrained nodes from this attack, it has been proposed to establish | |||
| a binding among the fragments to be transmitted by a node, by | a binding among the fragments to be transmitted by a node, by | |||
| applying content-chaining to the different fragments, based on | applying content-chaining to the different fragments, based on | |||
| cryptographic hash functionality. The aim of this technique is to | cryptographic hash functionality. The aim of this technique is to | |||
| allow a receiver to identify illegitimate fragments. | allow a receiver to identify illegitimate fragments. | |||
| Further attacks may involve sending overlapped fragments (i.e. | Further attacks may involve sending overlapped fragments (i.e. | |||
| comprising some overlapping parts of the original IPv6 datagram). | comprising some overlapping parts of the original IPv6 datagram). | |||
| Implementers should make sure that correct operation is not affected | Implementers should make sure that the correct operation is not | |||
| by such event. | affected by such event. | |||
| In Window mode - ACK on error, a malicious node may force a fragment | In Window mode - ACK on error, a malicious node may force a fragment | |||
| sender to resend a fragment a number of times, with the aim to | sender to resend a fragment a number of times, with the aim to | |||
| increase consumption of the fragment sender's resources. To this | increase consumption of the fragment sender's resources. To this | |||
| end, the malicious node may repeatedly send a fake ACK to the | end, the malicious node may repeatedly send a fake ACK to the | |||
| fragment sender, with a bitmap that reports that one or more | fragment sender, with a Bitmap that reports that one or more | |||
| fragments have been lost. In order to mitigate this possible attack, | fragments have been lost. In order to mitigate this possible attack, | |||
| MAX_FRAG_RETRIES may be set to a safe value which allows to limit the | MAX_FRAG_RETRIES may be set to a safe value which allows to limit the | |||
| maximum damage of the attack to an acceptable extent. However, note | maximum damage of the attack to an acceptable extent. However, note | |||
| that a high setting for MAX_FRAG_RETRIES benefits fragment delivery | that a high setting for MAX_FRAG_RETRIES benefits fragment delivery | |||
| reliability, therefore the trade-off needs to be carefully | reliability, therefore the trade-off needs to be carefully | |||
| considered. | considered. | |||
| 9. Acknowledgements | 9. Acknowledgements | |||
| Thanks to Dominique Barthel, Carsten Bormann, Philippe Clavier, | Thanks to Dominique Barthel, Carsten Bormann, Philippe Clavier, | |||
| Arunprabhu Kandasamy, Antony Markovski, Alexander Pelov, Pascal | Eduardo Ingles Sanchez, Arunprabhu Kandasamy, Sergio Lopez Bernal, | |||
| Thubert, Juan Carlos Zuniga and Diego Dujovne for useful design | Antony Markovski, Alexander Pelov, Pascal Thubert, Juan Carlos Zuniga | |||
| consideration and comments. | and Diego Dujovne for useful design consideration and comments. | |||
| 10. References | 10. References | |||
| 10.1. Normative References | 10.1. Normative References | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
| December 1998, <https://www.rfc-editor.org/info/rfc2460>. | December 1998, <https://www.rfc-editor.org/info/rfc2460>. | |||
| [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | |||
| skipping to change at page 41, line 24 ¶ | skipping to change at page 42, line 20 ¶ | |||
| learns the prefix is not in the scope of the document. | learns the prefix is not in the scope of the document. | |||
| The third rule compresses port numbers to 4 bits. | The third rule compresses port numbers to 4 bits. | |||
| Appendix B. Fragmentation Examples | Appendix B. Fragmentation Examples | |||
| This section provides examples of different fragment delivery | This section provides examples of different fragment delivery | |||
| reliability options possible on the basis of this specification. | reliability options possible on the basis of this specification. | |||
| Figure 24 illustrates the transmission of an IPv6 packet that needs | Figure 24 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in the No ACK option, FCN is always 1 bit. | 11 fragments in the No ACK option. Where FCN is always 1 bit. | |||
| 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-------->| | |||
| skipping to change at page 42, line 31 ¶ | skipping to change at page 43, line 31 ¶ | |||
| ACK-on-error, for N=3 and MAX_WIND_FCN=6, without losses. | ACK-on-error, for N=3 and MAX_WIND_FCN=6, without losses. | |||
| Figure 26 illustrates the transmission of an IPv6 packet that needs | Figure 26 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments ACK-on-error, for N=3, with three losses. | 11 fragments ACK-on-error, for N=3, with three losses. | |||
| 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-->| 7 | |||
| |-----W=0, FCN=1----->| | |-----W=0, FCN=1----->| / | |||
| |-----W=0, FCN=0----->| | |-----W=0, FCN=0----->| 6543210 | |||
| |<-----ACK, W=0-------|Bitmap:11010111 | |<-----ACK, W=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 checked | |-----W=1, FCN=7----->|MIC checked | |||
| |<-----ACK, W=1-------|Bitmap:11000001 | |<-----ACK, W=1-------|C=0 Bitmap:1100001 | |||
| |-----W=1, FCN=4----->|MIC checked => | |-----W=1, FCN=4----->|MIC checked => | |||
| |<---- ACK, W=1 ------| | |<---- ACK, W=1 ------| | |||
| Figure 26: Transmission of an IPv6 packet carried by 11 fragments in | Figure 26: Transmission of an IPv6 packet carried by 11 fragments in | |||
| ACK-on-error, for N=3 and MAX_WIND_FCN=6, three losses. | ACK-on-error, for N=3 and MAX_WIND_FCN=6, three losses. | |||
| Figure 27 illustrates the transmission of an IPv6 packet that needs | Figure 27 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, without | 11 fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, without | |||
| losses. Note: in Window mode, an additional bit will be needed to | losses. Note: in Window mode, an additional bit will be needed to | |||
| number windows. | number windows. | |||
| 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-------|no Bitmap | |<-----ACK, W=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 checked => | |-----W=1, FCN=7----->|MIC checked => | |||
| |<-----ACK, W=1-------|no Bitmap | |<-----ACK, W=1-------| C=1 no Bitmap | |||
| (End) | (End) | |||
| Figure 27: Transmission of an IPv6 packet carried by 11 fragments in | Figure 27: Transmission of an IPv6 packet carried by 11 fragments in | |||
| ACK-Always, for N=3 and MAX_WIND_FCN=6, no losses. | ACK-Always, for N=3 and MAX_WIND_FCN=6, no losses. | |||
| Figure 28 illustrates the transmission of an IPv6 packet that needs | Figure 28 illustrates the transmission of an IPv6 packet that needs | |||
| 11 fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | 11 fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | |||
| losses. | losses. | |||
| Sender Receiver | Sender Receiver | |||
| |-----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=3----->| | |-----W=1, FCN=3----->| | |||
| |-----W=1, FCN=2--X-->| | |-----W=1, FCN=2--X-->| 7 | |||
| |-----W=1, FCN=1----->| | |-----W=1, FCN=1----->| / | |||
| |-----W=1, FCN=0----->| | |-----W=1, FCN=0----->| 6543210 | |||
| |<-----ACK, W=1-------|Bitmap:11010111 | |<-----ACK, W=1-------|Bitmap:1101011 | |||
| |-----W=1, FCN=4----->| | |-----W=1, FCN=4----->| | |||
| |-----W=1, FCN=2----->| | |-----W=1, FCN=2----->| | |||
| |<-----ACK, W=1-------|no Bitmap | |<-----ACK, W=1-------|Bitmap: | |||
| |-----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=7----->|MIC checked | |-----W=0, FCN=7----->|MIC checked | |||
| |<-----ACK, W=0-------|Bitmap:11000001 | |<-----ACK, W=0-------| C= 0 Bitmap:11000001 | |||
| |-----W=0, FCN=4----->|MIC checked => | |-----W=0, FCN=4----->|MIC checked => | |||
| |<-----ACK, W=0-------|no Bitmap | |<-----ACK, W=0-------| C= 1 no Bitmap | |||
| (End) | (End) | |||
| Figure 28: Transmission of an IPv6 packet carried by 11 fragments in | Figure 28: Transmission of an IPv6 packet carried by 11 fragments in | |||
| ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses. | ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses. | |||
| Figure 29 illustrates the transmission of an IPv6 packet that needs 6 | Figure 29 illustrates the transmission of an IPv6 packet that needs 6 | |||
| fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | |||
| losses, and only one retry is needed for each lost fragment. Note | losses, and only one retry is needed for each lost fragment. Note | |||
| that, since a single window is needed for transmission of the IPv6 | that, since a single window is needed for transmission of the IPv6 | |||
| packet in this case, the example illustrates behavior when losses | packet in this case, the example illustrates behavior when losses | |||
| happen in the last window. | happen in the last window. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, CFN=6----->| | |-----W=0, CFN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, CFN=5----->| | |||
| |-----W=0, CFN=4--X-->| | |-----W=0, CFN=4--X-->| | |||
| |-----W=0, CFN=3--X-->| | |-----W=0, CFN=3--X-->| | |||
| |-----W=0, CFN=2--X-->| | |-----W=0, CFN=2--X-->| | |||
| |-----W=0, CFN=7----->|MIC checked | |-----W=0, CFN=7----->|MIC checked | |||
| |<-----ACK, W=0-------|Bitmap:11000001 | |<-----ACK, W=0-------|C= 0 Bitmap:1100001 | |||
| |-----W=0, CFN=4----->|MIC checked: failed | |-----W=0, CFN=4----->|MIC checked: failed | |||
| |-----W=0, CFN=3----->|MIC checked: failed | |-----W=0, CFN=3----->|MIC checked: failed | |||
| |-----W=0, CFN=2----->|MIC checked: success | |-----W=0, CFN=2----->|MIC checked: success | |||
| |<-----ACK, W=0-------|no Bitmap | |<-----ACK, W=0-------|C=1 no Bitmap | |||
| (End) | (End) | |||
| Figure 29: Transmission of an IPv6 packet carried by 11 fragments in | Figure 29: Transmission of an IPv6 packet carried by 11 fragments in | |||
| ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses, and only | ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses, and only | |||
| one retry is needed for each lost fragment. | one retry is needed for each lost fragment. | |||
| Figure 30 illustrates the transmission of an IPv6 packet that needs 6 | Figure 30 illustrates the transmission of an IPv6 packet that needs 6 | |||
| fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | |||
| losses, and the second ACK is lost. Note that, since a single window | losses, and the second ACK is lost. Note that, since a single window | |||
| is needed for transmission of the IPv6 packet in this case, the | is needed for transmission of the IPv6 packet in this case, the | |||
| example illustrates behavior when losses happen in the last window. | example illustrates behavior when losses happen in the last window. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, CFN=6----->| | |-----W=0, CFN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, CFN=5----->| | |||
| |-----W=0, CFN=4--X-->| | |-----W=0, CFN=4--X-->| | |||
| |-----W=0, CFN=3--X-->| | |-----W=0, CFN=3--X-->| | |||
| |-----W=0, CFN=2--X-->| | |-----W=0, CFN=2--X-->| | |||
| |-----W=0, CFN=7----->|MIC checked | |-----W=0, CFN=7----->|MIC checked | |||
| |<-----ACK, W=0-------|Bitmap:11000001 | |<-----ACK, W=0-------|C=0 Bitmap:1100001 | |||
| |-----W=0, CFN=4----->|MIC checked: wrong | |-----W=0, CFN=4----->|MIC checked: wrong | |||
| |-----W=0, CFN=3----->|MIC checked: wrong | |-----W=0, CFN=3----->|MIC checked: wrong | |||
| |-----W=0, CFN=2----->|MIC checked: right | |-----W=0, CFN=2----->|MIC checked: right | |||
| | X---ACK, W=0-------|no Bitmap | | X---ACK, W=0-------|C= 1 no Bitmap | |||
| timeout | | | timeout | | | |||
| |-----W=0, CFN=7----->| | |-----W=0, CFN=7----->| | |||
| |<-----ACK, W=0-------|no Bitmap | |<-----ACK, W=0-------|C= 1 no Bitmap | |||
| (End) | (End) | |||
| Figure 30: Transmission of an IPv6 packet carried by 11 fragments in | Figure 30: Transmission of an IPv6 packet carried by 11 fragments in | |||
| ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses, and the | ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses, and the | |||
| second ACK is lost. | second ACK is lost. | |||
| Figure 31 illustrates the transmission of an IPv6 packet that needs 6 | Figure 31 illustrates the transmission of an IPv6 packet that needs 6 | |||
| fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | fragments in ACK-Always, for N=3 and MAX_WIND_FCN=6, with three | |||
| losses, and one retransmitted fragment is lost. Note that, since a | losses, and one retransmitted fragment is lost. Note that, since a | |||
| skipping to change at page 46, line 16 ¶ | skipping to change at page 47, line 16 ¶ | |||
| case, the example illustrates behavior when losses happen in the last | case, the example illustrates behavior when losses happen in the last | |||
| window. | window. | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, CFN=6----->| | |-----W=0, CFN=6----->| | |||
| |-----W=0, CFN=5----->| | |-----W=0, CFN=5----->| | |||
| |-----W=0, CFN=4--X-->| | |-----W=0, CFN=4--X-->| | |||
| |-----W=0, CFN=3--X-->| | |-----W=0, CFN=3--X-->| | |||
| |-----W=0, CFN=2--X-->| | |-----W=0, CFN=2--X-->| | |||
| |-----W=0, CFN=7----->|MIC checked | |-----W=0, CFN=7----->|MIC checked | |||
| |<-----ACK, W=0-------|Bitmap:11000001 | |<-----ACK, W=0-------|C=0 Bitmap:1100001 | |||
| |-----W=0, CFN=4----->|MIC checked: wrong | |-----W=0, CFN=4----->|MIC checked: wrong | |||
| |-----W=0, CFN=3----->|MIC checked: wrong | |-----W=0, CFN=3----->|MIC checked: wrong | |||
| |-----W=0, CFN=2--X-->| | |-----W=0, CFN=2--X-->| | |||
| timeout| | | timeout| | | |||
| |-----W=0, CFN=7----->|All-0 empty | |-----W=0, CFN=7----->|All-0 empty | |||
| |<-----ACK, W=0-------|Bitmap:11110001 | |<-----ACK, W=0-------|C=0 Bitmap: 1111101 | |||
| |-----W=0, CFN=2----->|MIC checked: right | |-----W=0, CFN=2----->|MIC checked: right | |||
| |<-----ACK, W=0-------|no Bitmap | |<-----ACK, W=0-------|C=1 no Bitmap | |||
| (End) | (End) | |||
| Figure 31: Transmission of an IPv6 packet carried by 11 fragments in | Figure 31: Transmission of an IPv6 packet carried by 11 fragments in | |||
| ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses, and one | ACK-Always, for N=3, and MAX_WIND_FCN=6, with three losses, and one | |||
| retransmitted fragment is lost. | retransmitted fragment is lost. | |||
| Appendix C illustrates the transmission of an IPv6 packet that needs | Appendix C illustrates the transmission of an IPv6 packet that needs | |||
| 28 fragments in ACK-Always, for N=5 and MAX_WIND_FCN=23, with two | 28 fragments in ACK-Always, for N=5 and MAX_WIND_FCN=23, with two | |||
| losses. Note that MAX_WIND_FCN=23 may be useful when the maximum | losses. Note that MAX_WIND_FCN=23 may be useful when the maximum | |||
| possible bitmap size, considering the maximum lower layer technology | possible Bitmap size, considering the maximum lower layer technology | |||
| payload size and the value of R, is 3 bytes. Note also that the FCN | payload size and the value of R, is 3 bytes. Note also that the FCN | |||
| of the last fragment of the packet is the one with FCN=31 (i.e. | of the last fragment of the packet is the one with FCN=31 (i.e. | |||
| FCN=2^N-1 for N=5, or equivalently, all FCN bits set to 1). | FCN=2^N-1 for N=5, or equivalently, all FCN bits set to 1). | |||
| Sender Receiver | Sender Receiver | |||
| |-----W=0, CFN=23----->| | |-----W=0, CFN=23----->| | |||
| |-----W=0, CFN=22----->| | |-----W=0, CFN=22----->| | |||
| |-----W=0, CFN=21--X-->| | |-----W=0, CFN=21--X-->| | |||
| |-----W=0, CFN=20----->| | |-----W=0, CFN=20----->| | |||
| |-----W=0, CFN=19----->| | |-----W=0, CFN=19----->| | |||
| skipping to change at page 48, line 5 ¶ | skipping to change at page 49, line 5 ¶ | |||
| |-----W=1, CFN=21----->| | |-----W=1, CFN=21----->| | |||
| |-----W=1, CFN=31----->|MIC checked => | |-----W=1, CFN=31----->|MIC checked => | |||
| |<------ACK, W=1-------|no Bitmap | |<------ACK, W=1-------|no Bitmap | |||
| (End) | (End) | |||
| Appendix C. Fragmentation State Machines | Appendix C. Fragmentation State Machines | |||
| The fragmentation state machines of the sender and the receiver in | The fragmentation state machines of the sender and the receiver in | |||
| the different reliability options are next in the following figures: | the different reliability options are next in the following figures: | |||
| +-----------+ | +===========+ | |||
| +------------+ Init | | +------------+ Init | | |||
| | FCN=0 +-----------+ | | FCN=0 +===========+ | |||
| | 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+MIC | |||
| +------------+ | +============+ | |||
| | END | | | END | | |||
| +------------+ | +============+ | |||
| Figure 32: Sender State Machine for the No ACK Mode | Figure 32: 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 & | | |MIC correct | |||
| MIC wrong | |Inactivity | | MIC wrong | |Inactivity | | |||
| | |Timer Exp. | | | |Timer Exp. | | |||
| v | | | v | | | |||
| +----------++ | v | +==========++ | v | |||
| | Error |<-+ +--------+--+ | | Error |<-+ +========+==+ | |||
| +-----------+ | END | | +===========+ | END | | |||
| +-----------+ | +===========+ | |||
| Figure 33: Receiver State Machine for the No ACK Mode | Figure 33: 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 local bitmap | | v set local bitmap | Clear local Bitmap | | v set local Bitmap | |||
| FCN=max value | ++--+--------+ | FCN=max value | ++==+========+ | |||
| +> | | | +> | | | |||
| +---------------------> | SEND | | +---------------------> | SEND | | |||
| | +--+-----+---+ | | +==+=====+===+ | |||
| | FCN==0 & more frags | | last frag | | FCN==0 & more frags | | last frag | |||
| | ~~~~~~~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~ | |||
| | set local-bitmap | | set local-bitmap | | set local-Bitmap | | set local-Bitmap | |||
| | send wnd + frag(all-0) | | send wnd+frag(all-1)+MIC | | send wnd + frag(all-0) | | send wnd+frag(all-1)+MIC | |||
| | set Retrans_Timer | | set Retrans_Timer | | set Retrans_Timer | | set Retrans_Timer | |||
| | | | | | | | | |||
| |Recv_wnd == wnd & | | | |Recv_wnd == wnd & | | | |||
| |Lcl_bitmap==recv_bitmap& | | +------------------------+ | |Lcl_Bitmap==recv_Bitmap& | | +------------------------+ | |||
| |more frag | | |local-bitmap!=rcv-bitmap| | |more frag | | |local-Bitmap!=rcv-Bitmap| | |||
| |~~~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~ | | |~~~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~ | | |||
| |Stop Retrans_Timer | | | Attemp++ v | |Stop Retrans_Timer | | | Attemp++ v | |||
| |clear local_bitmap v v | +------++ | |clear local_Bitmap 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 | | |||
| MIC_bit==1 & | | | | +---+Attemp++ | | MIC_bit==1 & | | | | +---+Attemp++ | | |||
| Recv_window==window & | | | +---------------------------+ | Recv_window==window & | | | +---------------------------+ | |||
| Lcl_bitmap==recv_bitmap &| | | all missing frag sent | Lcl_Bitmap==recv_Bitmap &| | | all missing frag sent | |||
| no more frag| | | ~~~~~~~~~~~~~~~~~~~~~~ | no more frag| | | ~~~~~~~~~~~~~~~~~~~~~~ | |||
| ~~~~~~~~~~~~~~~~~~~~~~~~| | | Set Retrans_Timer | ~~~~~~~~~~~~~~~~~~~~~~~~| | | Set Retrans_Timer | |||
| Stop Retrans_Timer| | | | Stop Retrans_Timer| | | | |||
| +-------------+ | | | | +=============+ | | | | |||
| | END +<--------+ | | Attemp > MAX_ACK_REQUESTS | | END +<--------+ | | Attemp > MAX_ACK_REQUESTS | |||
| +-------------+ | | ~~~~~~~~~~~~~~~~~~ | +=============+ | | ~~~~~~~~~~~~~~~~~~ | |||
| All-1 Window | v Send Abort | All-1 Window | v Send Abort | |||
| ~~~~~~~~~~~~ | +-+-----------+ | ~~~~~~~~~~~~ | +=+===========+ | |||
| MIC_bit ==0 & +>| ERROR | | MIC_bit ==0 & +>| ERROR | | |||
| Lcl_bitmap==recv_bitmap +-------------+ | Lcl_Bitmap==recv_Bitmap +=============+ | |||
| Figure 34: Sender State Machine for the ACK Always Mode | Figure 34: Sender State Machine for the ACK Always Mode | |||
| Not All- & w=expected +---+ +---+w = Not expected | Not All- & w=expected +---+ +---+w = Not expected | |||
| ~~~~~~~~~~~~~~~~~~~~~ | | | |~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~ | | | |~~~~~~~~~~~~~~~~ | |||
| Set local_bitmap(FCN) | v v |discard | Set local_Bitmap(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 | |||
| | | ~~~~~~~~~~~~~~~~~~ | |~~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~~ | |~~~~~~~~~~~~~~~~~~~~~ | |||
| | | set lcl_bitmap(FCN)| |expected = next window | | | set lcl_Bitmap(FCN)| |expected = next window | |||
| | | send local_bitmap | |Clear local_bitmap | | | send local_Bitmap | |Clear local_Bitmap | |||
| | | | | | | | | | | |||
| | | w=expct & not-All | | | | | w=expct & not-All | | | |||
| | | ~~~~~~~~~~~~~~~~~~ | | | | | ~~~~~~~~~~~~~~~~~~ | | | |||
| | | set lcl_bitmap(FCN)+-+ | | +--+ w=next & All-0 | | | set lcl_Bitmap(FCN)+-+ | | +--+ w=next & All-0 | |||
| | | if lcl_bitmap full | | | | | | ~~~~~~~~~~~~~~~ | | | if lcl_Bitmap full | | | | | | ~~~~~~~~~~~~~~~ | |||
| | | send lcl_bitmap v | v | | | expct = nxt wnd | | | send lcl_Bitmap | | | | | | expct = nxt wnd | |||
| | | +-+-+-+--+-++ | Clear lcl_bitmap | | | v | v v v | | |||
| | | w=expected & +->+ Wait +<+ set lcl_bitmap(FCN) | | | w=expct & All-1 +=+=+=+==+=++ | Clear lcl_Bitmap | |||
| | | All-1 | | Next | send lcl_bitmap | | | ~~~~~~~~~~~ +->+ Wait +<+ set lcl_Bitmap(FCN) | |||
| | | ~~~~~~~~~~~~ +--+ Window +--->* ABORT | | | discard +--| Next | send lcl_Bitmap | |||
| | | discard +--------+-++ | | | All-0 +---------+ Window +--->* ABORT | |||
| | | All-1 & w=next| | All-1 & w=nxt | | | ~~~~~ +-------->+========+=++ | |||
| | | snd lcl_bm All-1 & w=next| | All-1 & w=nxt | ||||
| | | & MIC wrong| | & MIC right | | | & MIC wrong| | & MIC right | |||
| | | ~~~~~~~~~~~~~~~~~| | ~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~| | ~~~~~~~~~~~~~~~~~~ | |||
| | | set local_bitmap(FCN)| |set lcl_bitmap(FCN) | | | set local_Bitmap(FCN)| |set lcl_Bitmap(FCN) | |||
| | | send local_bitmap| |send local_bitmap | | | send local_Bitmap| |send local_Bitmap | |||
| | | | +----------------------+ | | | | +----------------------+ | |||
| | |All-1 & w=expct | | | | |All-1 & w=expct | | | |||
| | |& MIC wrong v +---+ w=expctd & | | | |& MIC wrong v +---+ w=expctd & | | |||
| | |~~~~~~~~~~~~~~~~~~~~ +----+---+-+ | MIC wrong | | | |~~~~~~~~~~~~~~~~~~~~ +====+=====+ | MIC wrong | | |||
| | |set local_bitmap(FCN) | +<+ ~~~~~~~~~~~~~~ | | | |set local_Bitmap(FCN) | +<+ ~~~~~~~~~~~~~~ | | |||
| | |send local_bitmap | Wait End | set lcl_btmp(FCN)| | | |send local_Bitmap | Wait End | set lcl_btmp(FCN)| | |||
| | +--------------------->+ +--->* ABORT | | | +--------------------->+ +--->* ABORT | | |||
| | +---+----+-+ | | | +===+====+=+-+ All-1&MIC wrong| | |||
| | w=expected & MIC right| | | | | ^ | ~~~~~~~~~~~~~~~| | |||
| | | +---+ send lcl_btmp | | ||||
| | w=expected & MIC right| | | | ||||
| | ~~~~~~~~~~~~~~~~~~~~~~| +-+ Not All-1 | | | ~~~~~~~~~~~~~~~~~~~~~~| +-+ Not All-1 | | |||
| | set local_bitmap(FCN)| | | ~~~~~~~~~ | | | set local_Bitmap(FCN)| | | ~~~~~~~~~ | | |||
| | send local_bitmap| | | discard | | | send local_Bitmap| | | discard | | |||
| | | | | | | | | | | | | |||
| |All-1 & w=expctd & MIC right | | | +-+ All-1 | | |All-1 & w=expctd & MIC right | | | +-+ All-1 | | |||
| |~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v | v | v ~~~~~~~~~ | | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v | v | v ~~~~~~~~~ | | |||
| |set local_bitmap(FCN) +-+-+-+-+-++Send lcl_btmp | | |set local_Bitmap(FCN) +=+=+=+=+=++Send lcl_btmp | | |||
| |send local_bitmap | | | | |send local_Bitmap | | | | |||
| +-------------------------->+ END +<---------------+ | +-------------------------->+ END +<---------------+ | |||
| ++--+------+ | ++==+======+ | |||
| --->* ABORT | --->* ABORT | |||
| ~~~~~~~ | ~~~~~~~ | |||
| Inactivity_Timer = expires | Inactivity_Timer = expires | |||
| When DWN_Link | When DWN_Link | |||
| IF Inactivity_Timer expires | IF Inactivity_Timer expires | |||
| Send DWL Request | Send DWL Request | |||
| Attemp++ | Attemp++ | |||
| Figure 35: Receiver State Machine for the ACK Always Mode | Figure 35: Receiver State Machine for the ACK Always Mode | |||
| +-------+ | +=======+ | |||
| | | | | | | |||
| | INIT | | | INIT | | |||
| | | FCN!=0 & more frags | | | FCN!=0 & more frags | |||
| +------++ +--+ ~~~~~~~~~~~~~~~~~~~~~~ | +======++ +--+ ~~~~~~~~~~~~~~~~~~~~~~ | |||
| W=0 | | | send Window + frag(FCN) | W=0 | | | send Window + frag(FCN) | |||
| ~~~~~~~~~~~~~~~~~~ | | | FCN- | ~~~~~~~~~~~~~~~~~~ | | | FCN- | |||
| Clear local bitmap | | v set local bitmap | Clear local Bitmap | | v set local Bitmap | |||
| FCN=max value | ++-------------+ | FCN=max value | ++=============+ | |||
| +> | | | +> | | | |||
| | SEND | | | SEND | | |||
| +-------------------------> | | | +-------------------------> | | | |||
| | ++-----+-------+ | | ++=====+=======+ | |||
| | FCN==0 & more frags| |last frag | | FCN==0 & more frags| |last frag | |||
| | ~~~~~~~~~~~~~~~~~~~~~~~| |~~~~~~~~~~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~~~~~~~~~| |~~~~~~~~~~~~~~~~~~~~~~~~ | |||
| | set local-bitmap| |set local-bitmap | | set local-Bitmap| |set local-Bitmap | |||
| | send wnd + frag(all-0)| |send wnd+frag(all-1)+MIC | | send wnd + frag(all-0)| |send wnd+frag(all-1)+MIC | |||
| | set Retrans_Timer| |set Retrans_Timer | | set Retrans_Timer| |set Retrans_Timer | |||
| | | | | | | | | |||
| |Retrans_Timer expires & | | local-bitmap!=rcv-bitmap | |Retrans_Timer expires & | | local-Bitmap!=rcv-Bitmap | |||
| |more fragments | | +-----------------+ | |more fragments | | +-----------------+ | |||
| |~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~ | | |~~~~~~~~~~~~~~~~~~~~ | | | ~~~~~~~~~~~~~ | | |||
| |stop Retrans_Timer | | | Attemp++ | | |stop Retrans_Timer | | | Attemp++ | | |||
| |clear local.bitmap v v | v | |clear local-Bitmap v v | v | |||
| |window = next window +-----+-----+--+--+ +----+----+ | |window = next window +=====+=====+==+==+ +====+====+ | |||
| +----------------------+ + | Resend | | +----------------------+ + | Resend | | |||
| +--------------------->+ Wait bitmap | | Missing | | +--------------------->+ Wait Bitmap | | Missing | | |||
| | +-- + | | Frag | | | +-- + | | Frag | | |||
| | not expected wnd | ++-+---+---+---+--+ +------+--+ | | not expected wnd | ++=+===+===+===+==+ +======+==+ | |||
| | ~~~~~~~~~~~~~~~~ | ^ | | | ^ | | | ~~~~~~~~~~~~~~~~ | ^ | | | ^ | | |||
| | discard frag +----+ | | | +-------------------+ | | discard frag +----+ | | | +-------------------+ | |||
| | | | | all missing frag sent | | | | | all missing frag sent | |||
| |Retrans_Timer expires & | | | ~~~~~~~~~~~~~~~~~~~~~ | |Retrans_Timer expires & | | | ~~~~~~~~~~~~~~~~~~~~~ | |||
| | No more Frag | | | Set Retrans_Timer | | No more Frag | | | Set Retrans_Timer | |||
| | ~~~~~~~~~~~~~~~~~~~~~~~ | | | | | ~~~~~~~~~~~~~~~~~~~~~~~ | | | | |||
| | Stop Retrans_Timer | | | | | Stop Retrans_Timer | | | | |||
| | Send ALL-1-empty | | | | | Send ALL-1-empty | | | | |||
| +-------------------------+ | | | +-------------------------+ | | | |||
| | | | | | | |||
| Local_bitmap==Recv_bitmap| | | Local_Bitmap==Recv_Bitmap| | | |||
| ~~~~~~~~~~~~~~~~~~~~~~~~~| |Attemp > MAX_ACK_REQUESTS | ~~~~~~~~~~~~~~~~~~~~~~~~~| |Attemp > MAX_ACK_REQUESTS | |||
| +---------+Stop Retrans_Timer | |~~~~~~~~~~~~~~~~~~~~~~~ | +=========+Stop Retrans_Timer | |~~~~~~~~~~~~~~~~~~~~~~~ | |||
| | END +<------------------+ v Send Abort | | END +<------------------+ v Send Abort | |||
| +---------+ +-+---------+ | +=========+ +=+=========+ | |||
| | ERROR | | | ERROR | | |||
| +-----------+ | +===========+ | |||
| Figure 36: Sender State Machine for the ACK on error Mode | Figure 36: Sender State Machine for the ACK on error Mode | |||
| Not All- & w=expected +---+ +---+w = Not expected | Not All- & w=expected +---+ +---+w = Not expected | |||
| ~~~~~~~~~~~~~~~~~~~~~ | | | |~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~ | | | |~~~~~~~~~~~~~~~~ | |||
| Set local_bitmap(FCN) | v v |discard | Set local_Bitmap(FCN) | v v |discard | |||
| ++---+---+---+-+ | ++===+===+===+=+ | |||
| +-----------------------+ +--+ All-0 & full | +-----------------------+ +--+ All-0 & full | |||
| | ABORT *<---+ Rcv Window | | ~~~~~~~~~~~~ | | ABORT *<---+ Rcv Window | | ~~~~~~~~~~~~ | |||
| | +--------------------+ +<-+ w =next | | +--------------------+ +<-+ w =next | |||
| | | +---+---+------+ clear lcl_bitmap | | | +===+===+======+ clear lcl_Bitmap | |||
| | | | ^ | | | | ^ | |||
| | | All-0 & w=expect| |w=expct & not-All & full | | | All-0 & w=expect| |w=expct & not-All & full | |||
| | | & no_full bitmap| |~~~~~~~~~~~~~~~~~~~~~~~~ | | | & no_full Bitmap| |~~~~~~~~~~~~~~~~~~~~~~~~ | |||
| | | ~~~~~~~~~~~~~~~~~| |clear lcl_bitmap; w =nxt | | | ~~~~~~~~~~~~~~~~~| |clear lcl_Bitmap; w =nxt | |||
| | | send local_bitmap| | | | | send local_Bitmap| | | |||
| | | | | +--------+ | | | | | +========+ | |||
| | | | | +---------->+ | | | | | | +---------->+ | | |||
| | | | | |w=next | Error/ | | | | | | |w=next | Error/ | | |||
| | | | | |~~~~~~~~ | Abort | | | | | | |~~~~~~~~ | Abort | | |||
| | | | | |Send abort ++-------+ | | | | | |Send abort ++=======+ | |||
| | | v | | ^ w=expct | | | v | | ^ w=expct | |||
| | | +-+---+--+------+ | & all-1 | | | All-0 +=+===+==+======+ | & all-1 | |||
| | | ABORT *<---+ Wait +------+ ~~~~~~~ | | | ~~~~~~~~~~~~~<---+ Wait +------+ ~~~~~~~ | |||
| | | | Next Window | Send abort | | | send lcl_btmp | Next Window | Send abort | |||
| | | +-------+---+---+ | | | +=======+===+==++ | |||
| | | All-1 & w=next & MIC wrong | | | | | All-1 & w=next & MIC wrong | | +---->* ABORT | |||
| | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | +----------------+ | | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | +----------------+ | |||
| | | set local_bitmap(FCN) | All-1 & w=next| | | | set local_Bitmap(FCN) | All-1 & w=next| | |||
| | | send local_bitmap | & MIC right| | | | send local_Bitmap | & MIC right| | |||
| | | | ~~~~~~~~~~~~~~~~~~| | | | | ~~~~~~~~~~~~~~~~~~| | |||
| | | | set lcl_bitmap(FCN)| | | | | set lcl_Bitmap(FCN)| | |||
| | |All-1 & w=expect & MIC wrong | | | | |All-1 & w=expect & MIC wrong | | | |||
| | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +-+ All-1 | | |||
| | |set local_bitmap(FCN) v +--->* ABORT | | | |set local_Bitmap(FCN) v | v ~~~~~~~~~~ | | |||
| | |send local_bitmap +-------+---+--+ | | | |send local_Bitmap +=======+==+===+ snd lcl_btmp| | |||
| | +--------------------->+ Wait End +-+ | | | +--------------------->+ Wait End +-+ | | |||
| | +-----+------+-+ | w=expct & | | | +=====+=+===+=+ | w=expct & | | |||
| | w=expected & MIC right | ^ | MIC wrong | | | w=expected & MIC right | | ^ | MIC wrong | | |||
| | ~~~~~~~~~~~~~~~~~~~~~~ | +---+ ~~~~~~~~~ | | | ~~~~~~~~~~~~~~~~~~~~~~ | | +---+ ~~~~~~~~~ | | |||
| | set local_bitmap(FCN) | set lcl_bitmap(FCN)| | | set local_Bitmap(FCN) | | set lcl_Bitmap(FCN)| | |||
| | | | | | | | | | |||
| |All-1 & w=expected & MIC right | | | |All-1 & w=expected & MIC right | +-->* ABORT | | |||
| |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v | | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v | | |||
| |set local_bitmap(FCN) +-+----------+ | | |set local_Bitmap(FCN) +=+==========+ | | |||
| +---------------------------->+ END +<----------+ | +---------------------------->+ END +<----------+ | |||
| +------------+ | +============+ | |||
| --->* Only Uplink | --->* Only Uplink | |||
| ABORT | ABORT | |||
| ~~~~~~~~ | ~~~~~~~~ | |||
| Inactivity_Timer = expires | Inactivity_Timer = expires | |||
| Figure 37: Receiver State Machine for the ACK on error Mode | Figure 37: Receiver State Machine for the ACK on error Mode | |||
| Appendix D. Allocation of Rule IDs for fragmentation | Appendix D. Allocation of Rule IDs for fragmentation | |||
| A set of Rule IDs are allocated to support different aspects of | A set of Rule IDs are allocated to support different aspects of | |||
| End of changes. 179 change blocks. | ||||
| 449 lines changed or deleted | 482 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/ | ||||