| < draft-ietf-6lo-fragment-recovery-11.txt | draft-ietf-6lo-fragment-recovery-12.txt > | |||
|---|---|---|---|---|
| 6lo P. Thubert, Ed. | 6lo P. Thubert, Ed. | |||
| Internet-Draft Cisco Systems | Internet-Draft Cisco Systems | |||
| Updates: 4944 (if approved) 10 February 2020 | Updates: 4944 (if approved) 11 February 2020 | |||
| Intended status: Standards Track | Intended status: Standards Track | |||
| Expires: 13 August 2020 | Expires: 14 August 2020 | |||
| 6LoWPAN Selective Fragment Recovery | 6LoWPAN Selective Fragment Recovery | |||
| draft-ietf-6lo-fragment-recovery-11 | draft-ietf-6lo-fragment-recovery-12 | |||
| Abstract | Abstract | |||
| This draft updates RFC 4944 with a simple protocol to recover | This draft updates RFC 4944 with a simple protocol to recover | |||
| individual fragments across a route-over mesh network, with a minimal | individual fragments across a route-over mesh network, with a minimal | |||
| flow control to protect the network against bloat. | flow control to protect the network against bloat. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| skipping to change at page 1, line 33 ¶ | skipping to change at page 1, line 33 ¶ | |||
| 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 13 August 2020. | This Internet-Draft will expire on 14 August 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 2, line 28 ¶ | skipping to change at page 2, line 28 ¶ | |||
| 5.1. Recoverable Fragment Dispatch type and Header . . . . . . 8 | 5.1. Recoverable Fragment Dispatch type and Header . . . . . . 8 | |||
| 5.2. RFRAG Acknowledgment Dispatch type and Header . . . . . . 11 | 5.2. RFRAG Acknowledgment Dispatch type and Header . . . . . . 11 | |||
| 6. Fragments Recovery . . . . . . . . . . . . . . . . . . . . . 12 | 6. Fragments Recovery . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.1. Forwarding Fragments . . . . . . . . . . . . . . . . . . 14 | 6.1. Forwarding Fragments . . . . . . . . . . . . . . . . . . 14 | |||
| 6.1.1. Receiving the first fragment . . . . . . . . . . . . 15 | 6.1.1. Receiving the first fragment . . . . . . . . . . . . 15 | |||
| 6.1.2. Receiving the next fragments . . . . . . . . . . . . 15 | 6.1.2. Receiving the next fragments . . . . . . . . . . . . 15 | |||
| 6.2. Receiving RFRAG Acknowledgments . . . . . . . . . . . . . 16 | 6.2. Receiving RFRAG Acknowledgments . . . . . . . . . . . . . 16 | |||
| 6.3. Aborting the Transmission of a Fragmented Packet . . . . 16 | 6.3. Aborting the Transmission of a Fragmented Packet . . . . 16 | |||
| 6.4. Applying Recoverable Fragmentation along a Diverse | 6.4. Applying Recoverable Fragmentation along a Diverse | |||
| Path . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | Path . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7. Management Considerations . . . . . . . . . . . . . . . . . . 17 | 7. Management Considerations . . . . . . . . . . . . . . . . . . 18 | |||
| 7.1. Protocol Parameters . . . . . . . . . . . . . . . . . . . 17 | 7.1. Protocol Parameters . . . . . . . . . . . . . . . . . . . 18 | |||
| 7.2. Observing the network . . . . . . . . . . . . . . . . . . 19 | 7.2. Observing the network . . . . . . . . . . . . . . . . . . 21 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 20 | 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 11. Normative References . . . . . . . . . . . . . . . . . . . . 21 | 11. Normative References . . . . . . . . . . . . . . . . . . . . 22 | |||
| 12. Informative References . . . . . . . . . . . . . . . . . . . 21 | 12. Informative References . . . . . . . . . . . . . . . . . . . 23 | |||
| Appendix A. Rationale . . . . . . . . . . . . . . . . . . . . . 24 | Appendix A. Rationale . . . . . . . . . . . . . . . . . . . . . 26 | |||
| Appendix B. Requirements . . . . . . . . . . . . . . . . . . . . 25 | Appendix B. Requirements . . . . . . . . . . . . . . . . . . . . 28 | |||
| Appendix C. Considerations on Flow Control . . . . . . . . . . . 26 | Appendix C. Considerations on Flow Control . . . . . . . . . . . 28 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 27 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 1. Introduction | 1. Introduction | |||
| In most Low Power and Lossy Network (LLN) applications, the bulk of | In most Low Power and Lossy Network (LLN) applications, the bulk of | |||
| the traffic consists of small chunks of data (on the order of a few | the traffic consists of small chunks of data (on the order of a few | |||
| bytes to a few tens of bytes) at a time. Given that an IEEE Std. | bytes to a few tens of bytes) at a time. Given that an IEEE Std. | |||
| 802.15.4 [IEEE.802.15.4] frame can carry a payload of 74 bytes or | 802.15.4 [IEEE.802.15.4] frame can carry a payload of 74 bytes or | |||
| more, fragmentation is usually not required. However, and though | more, fragmentation is usually not required. However, and though | |||
| this happens only occasionally, a number of mission critical | this happens only occasionally, a number of mission critical | |||
| applications do require the capability to transfer larger chunks of | applications do require the capability to transfer larger chunks of | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 38 ¶ | |||
| define a new protocol. However, adding that capability alone to the | define a new protocol. However, adding that capability alone to the | |||
| local implementation of the original 6LoWPAN fragmentation would not | local implementation of the original 6LoWPAN fragmentation would not | |||
| address the inherent fragility of fragmentation (see | address the inherent fragility of fragmentation (see | |||
| [I-D.ietf-intarea-frag-fragile]) in particular the issues of | [I-D.ietf-intarea-frag-fragile]) in particular the issues of | |||
| resources locked on the receiver and the wasted transmissions due to | resources locked on the receiver and the wasted transmissions due to | |||
| the loss of a single fragment in a whole datagram. [Kent] compares | the loss of a single fragment in a whole datagram. [Kent] compares | |||
| the unreliable delivery of fragments with a mechanism it calls | the unreliable delivery of fragments with a mechanism it calls | |||
| "selective acknowledgements" that recovers the loss of a fragment | "selective acknowledgements" that recovers the loss of a fragment | |||
| individually. The paper illustrates the benefits that can be derived | individually. The paper illustrates the benefits that can be derived | |||
| from such a method in figures 1, 2 and 3, on pages 6 and 7. | from such a method in figures 1, 2 and 3, on pages 6 and 7. | |||
| [RFC4944] as no selective recovery and the whole datagram fails when | [RFC4944] has no selective recovery and the whole datagram fails when | |||
| one fragment is not delivered to the destination 6LoWPAN endpoint. | one fragment is not delivered to the destination 6LoWPAN endpoint. | |||
| Constrained memory resources are blocked on the receiver until the | Constrained memory resources are blocked on the receiver until the | |||
| receiver times out, possibly causing the loss of subsequent packets | receiver times out, possibly causing the loss of subsequent packets | |||
| that cannot be received for the lack of buffers. | that cannot be received for the lack of buffers. | |||
| That problem is exacerbated when forwarding fragments over multiple | That problem is exacerbated when forwarding fragments over multiple | |||
| hops since a loss at an intermediate hop will not be discovered by | hops since a loss at an intermediate hop will not be discovered by | |||
| either the source or the destination, and the source will keep on | either the source or the destination, and the source will keep on | |||
| sending fragments, wasting even more resources in the network and | sending fragments, wasting even more resources in the network and | |||
| possibly contributing to the condition that caused the loss to no | possibly contributing to the condition that caused the loss to no | |||
| skipping to change at page 7, line 24 ¶ | skipping to change at page 7, line 24 ¶ | |||
| elided by the originator on the first hop because it matches the | elided by the originator on the first hop because it matches the | |||
| source MAC address, but cannot be on the next hops because the source | source MAC address, but cannot be on the next hops because the source | |||
| MAC address changes. | MAC address changes. | |||
| This specification cannot allow this operation since fragments are | This specification cannot allow this operation since fragments are | |||
| recovered end-to-end based on a sequence number. This means that the | recovered end-to-end based on a sequence number. This means that the | |||
| fragments that contain a 6LoWPAN-compressed header MUST have enough | fragments that contain a 6LoWPAN-compressed header MUST have enough | |||
| slack to enable a less efficient compression in the next hops that | slack to enable a less efficient compression in the next hops that | |||
| still fits in one MAC frame. For instance, if the IID of the source | still fits in one MAC frame. For instance, if the IID of the source | |||
| IPv6 address is elided by the originator, then it MUST compute the | IPv6 address is elided by the originator, then it MUST compute the | |||
| fragment_size as if the MTU was 8 bytes less. This way, the next hop | Fragment_Size as if the MTU was 8 bytes less. This way, the next hop | |||
| can restore the source IID to the first fragment without impacting | can restore the source IID to the first fragment without impacting | |||
| the second fragment. | the second fragment. | |||
| 4.2. Gap between frames | 4.2. Gap between frames | |||
| This specification introduces a concept of an inter-frame gap, which | This specification introduces a concept of an inter-frame gap, which | |||
| is a configurable interval of time between transmissions to a same | is a configurable interval of time between transmissions to a same | |||
| next hop. In the case of half duplex interfaces, this inter-frame | next hop. In the case of half duplex interfaces, this inter-frame | |||
| gap ensures that the next hop has completed processing of the | gap ensures that the next hop has completed processing of the | |||
| previous frame and is capable of receiving the next one. | previous frame and is capable of receiving the next one. | |||
| skipping to change at page 9, line 21 ¶ | skipping to change at page 9, line 21 ¶ | |||
| order in which the fragments are received. This enables out-of- | order in which the fragments are received. This enables out-of- | |||
| sequence subfragmenting, e.g., a fragment seq. 5 that is retried end- | sequence subfragmenting, e.g., a fragment seq. 5 that is retried end- | |||
| to-end as smaller fragments seq. 5, 13 and 14 due to a change of MTU | to-end as smaller fragments seq. 5, 13 and 14 due to a change of MTU | |||
| along the path between the 6LoWPAN endpoints. | along the path between the 6LoWPAN endpoints. | |||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |1 1 1 0 1 0 0|E| datagram_tag | | |1 1 1 0 1 0 0|E| datagram_tag | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |X| sequence| fragment_size | fragment_offset | | |X| sequence| Fragment_Size | fragment_offset | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| X set == Ack-Request | X set == Ack-Request | |||
| Figure 1: RFRAG Dispatch type and Header | Figure 1: RFRAG Dispatch type and Header | |||
| There is no requirement on the receiver to check for contiguity of | There is no requirement on the receiver to check for contiguity of | |||
| the received fragments, and the sender MUST ensure that when all | the received fragments, and the sender MUST ensure that when all | |||
| fragments are acknowledged, then the datagram is fully received. | fragments are acknowledged, then the datagram is fully received. | |||
| This may be useful in particular in the case where the MTU changes | This may be useful in particular in the case where the MTU changes | |||
| and a fragment sequence is retried with a smaller fragment_size, the | and a fragment sequence is retried with a smaller Fragment_Size, the | |||
| remainder of the original fragment being retried with new sequence | remainder of the original fragment being retried with new sequence | |||
| values. | values. | |||
| The first fragment is recognized by a sequence of 0; it carries its | The first fragment is recognized by a sequence of 0; it carries its | |||
| fragment_size and the datagram_size of the compressed packet before | Fragment_Size and the datagram_size of the compressed packet before | |||
| it is fragmented, whereas the other fragments carry their | it is fragmented, whereas the other fragments carry their | |||
| fragment_size and fragment_offset. The last fragment for a datagram | Fragment_Size and fragment_offset. The last fragment for a datagram | |||
| is recognized when its fragment_offset and its fragment_size add up | is recognized when its fragment_offset and its Fragment_Size add up | |||
| to the datagram_size. | to the datagram_size. | |||
| Recoverable Fragments are sequenced and a bitmap is used in the RFRAG | Recoverable Fragments are sequenced and a bitmap is used in the RFRAG | |||
| Acknowledgment to indicate the received fragments by setting the | Acknowledgment to indicate the received fragments by setting the | |||
| individual bits that correspond to their sequence. | individual bits that correspond to their sequence. | |||
| X: 1 bit; Ack-Request: when set, the sender requires an RFRAG | X: 1 bit; Ack-Request: when set, the sender requires an RFRAG | |||
| Acknowledgment from the receiver. | Acknowledgment from the receiver. | |||
| E: 1 bit; Explicit Congestion Notification; the "E" flag is reset by | E: 1 bit; Explicit Congestion Notification; the "E" flag is reset by | |||
| the source of the fragment and set by intermediate routers to | the source of the fragment and set by intermediate routers to | |||
| signal that this fragment experienced congestion along its path. | signal that this fragment experienced congestion along its path. | |||
| Fragment_size: 10-bit unsigned integer; the size of this fragment in | Fragment_Size: 10-bit unsigned integer; the size of this fragment in | |||
| a unit that depends on the MAC layer technology. Unless | a unit that depends on the MAC layer technology. Unless | |||
| overridden by a more specific specification, that unit is the | overridden by a more specific specification, that unit is the | |||
| octet, which allows fragments up to 512 bytes. | octet, which allows fragments up to 512 bytes. | |||
| datagram_tag: 8 bits; an identifier of the datagram that is locally | datagram_tag: 8 bits; an identifier of the datagram that is locally | |||
| unique to the sender. | unique to the sender. | |||
| Sequence: 5-bit unsigned integer; the sequence number of the | Sequence: 5-bit unsigned integer; the sequence number of the | |||
| fragment in the acknowledgement bitmap. Fragments are numbered | fragment in the acknowledgement bitmap. Fragments are numbered | |||
| [0..N] where N is in [0..31]. A Sequence of 0 indicates the first | [0..N] where N is in [0..31]. A Sequence of 0 indicates the first | |||
| skipping to change at page 12, line 43 ¶ | skipping to change at page 12, line 43 ¶ | |||
| the datagram_tag used by the previous hop and the Layer-2 information | the datagram_tag used by the previous hop and the Layer-2 information | |||
| associated to it (interface and MAC address). | associated to it (interface and MAC address). | |||
| The 6LoWPAN endpoint that fragments the packets at the 6LoWPAN level | The 6LoWPAN endpoint that fragments the packets at the 6LoWPAN level | |||
| (the sender) also controls the amount of acknowledgments by setting | (the sender) also controls the amount of acknowledgments by setting | |||
| the Ack-Request flag in the RFRAG packets. The sender may set the | the Ack-Request flag in the RFRAG packets. The sender may set the | |||
| Ack-Request flag on any fragment to perform congestion control by | Ack-Request flag on any fragment to perform congestion control by | |||
| limiting the number of outstanding fragments, which are the fragments | limiting the number of outstanding fragments, which are the fragments | |||
| that have been sent but for which reception or loss was not | that have been sent but for which reception or loss was not | |||
| positively confirmed by the reassembling endpoint. The maximum | positively confirmed by the reassembling endpoint. The maximum | |||
| number of outstanding fragments is the Window-Size. It is | number of outstanding fragments is controlled by the Window-Size. It | |||
| configurable and may vary in case of ECN notification. When the | is configurable and may vary in case of ECN notification. When the | |||
| 6LoWPAN endpoint that reassembles the packets at the 6LoWPAN level | 6LoWPAN endpoint that reassembles the packets at the 6LoWPAN level | |||
| (the receiver) receives a fragment with the Ack-Request flag set, it | (the receiver) receives a fragment with the Ack-Request flag set, it | |||
| MUST send an RFRAG Acknowledgment back to the originator to confirm | MUST send an RFRAG Acknowledgment back to the originator to confirm | |||
| reception of all the fragments it has received so far. | reception of all the fragments it has received so far. | |||
| The Ack-Request ('X') set in an RFRAG marks the end of a window. | The Ack-Request ('X') set in an RFRAG marks the end of a window. | |||
| This flag MUST be set on the last fragment if the sender wishes to | This flag MUST be set on the last fragment if the sender wishes to | |||
| protect the datagram, and it MAY be set in any intermediate fragment | protect the datagram, and it MAY be set in any intermediate fragment | |||
| for the purpose of flow control. | for the purpose of flow control. | |||
| skipping to change at page 14, line 11 ¶ | skipping to change at page 14, line 11 ¶ | |||
| Note that acknowledgments might consume precious resources so the use | Note that acknowledgments might consume precious resources so the use | |||
| of unsolicited acknowledgments should be configurable and not enabled | of unsolicited acknowledgments should be configurable and not enabled | |||
| by default. | by default. | |||
| An observation is that streamlining forwarding of fragments generally | An observation is that streamlining forwarding of fragments generally | |||
| reduces the latency over the LLN mesh, providing room for retries | reduces the latency over the LLN mesh, providing room for retries | |||
| within existing upper-layer reliability mechanisms. The sender | within existing upper-layer reliability mechanisms. The sender | |||
| protects the transmission over the LLN mesh with a retry timer that | protects the transmission over the LLN mesh with a retry timer that | |||
| is computed according to the method detailed in [RFC6298]. It is | is computed according to the method detailed in [RFC6298]. It is | |||
| expected that the upper layer retries obey the recommendations in | expected that the upper layer retries obey the recommendations in | |||
| "UDP Usage Guidelines" [RFC8085], in which case a single round of | [RFC8085], in which case a single round of fragment recovery should | |||
| fragment recovery should fit within the upper layer recovery timers. | fit within the upper layer recovery timers. | |||
| Fragments are sent in a round-robin fashion: the sender sends all the | Fragments are sent in a round-robin fashion: the sender sends all the | |||
| fragments for a first time before it retries any lost fragment; lost | fragments for a first time before it retries any lost fragment; lost | |||
| fragments are retried in sequence, oldest first. This mechanism | fragments are retried in sequence, oldest first. This mechanism | |||
| enables the receiver to acknowledge fragments that were delayed in | enables the receiver to acknowledge fragments that were delayed in | |||
| the network before they are retried. | the network before they are retried. | |||
| When a single frequency is used by contiguous hops, the sender should | When a single frequency is used by contiguous hops, the sender should | |||
| insert a delay between fragments of a same datagram that covers | insert a delay between fragments of a same datagram that covers | |||
| multiple transmissions so as to let a fragment progress a few hops | multiple transmissions so as to let a fragment progress a few hops | |||
| skipping to change at page 16, line 50 ¶ | skipping to change at page 16, line 50 ¶ | |||
| of hops or the minimal value of MTU along those hops. But should the | of hops or the minimal value of MTU along those hops. But should the | |||
| minimal MTU decrease, it is possible to retry a long fragment (say | minimal MTU decrease, it is possible to retry a long fragment (say | |||
| sequence of 5) with first a shorter fragment of the same sequence (5 | sequence of 5) with first a shorter fragment of the same sequence (5 | |||
| again) and then one or more other fragments with a sequence that was | again) and then one or more other fragments with a sequence that was | |||
| not used before (e.g., 13 and 14). Note that Path MTU Discovery is | not used before (e.g., 13 and 14). Note that Path MTU Discovery is | |||
| out of scope for this document. | out of scope for this document. | |||
| 6.3. Aborting the Transmission of a Fragmented Packet | 6.3. Aborting the Transmission of a Fragmented Packet | |||
| A reset is signaled on the forward path with a pseudo fragment that | A reset is signaled on the forward path with a pseudo fragment that | |||
| has the fragment_offset, sequence, and fragment_size all set to 0, | has the fragment_offset, sequence, and Fragment_Size all set to 0, | |||
| and no data. | and no data. | |||
| When the sender or a router on the way decides that a packet should | When the sender or a router on the way decides that a packet should | |||
| be dropped and the fragmentation process aborted, it generates a | be dropped and the fragmentation process aborted, it generates a | |||
| reset pseudo fragment and forwards it down the fragment path. | reset pseudo fragment and forwards it down the fragment path. | |||
| Each router next along the path the way forwards the pseudo fragment | Each router next along the path the way forwards the pseudo fragment | |||
| based on the VRB state. If an acknowledgment is not requested, the | based on the VRB state. If an acknowledgment is not requested, the | |||
| VRB and all associated state are destroyed. | VRB and all associated state are destroyed. | |||
| skipping to change at page 17, line 47 ¶ | skipping to change at page 18, line 7 ¶ | |||
| Track that can be a complex path between a source and a destination | Track that can be a complex path between a source and a destination | |||
| with Packet ARQ, Replication, Elimination and Overhearing (PAREO) | with Packet ARQ, Replication, Elimination and Overhearing (PAREO) | |||
| along the Track. This specification can be used along any subset of | along the Track. This specification can be used along any subset of | |||
| the complex Track where the first fragment is flooded. The last | the complex Track where the first fragment is flooded. The last | |||
| RFRAG Acknowledgment is flooded on that same subset in the reverse | RFRAG Acknowledgment is flooded on that same subset in the reverse | |||
| direction. Intermediate RFRAG Acknowledgments can be flooded on any | direction. Intermediate RFRAG Acknowledgments can be flooded on any | |||
| sub-subset of that reverse subset that reach back to the source. | sub-subset of that reverse subset that reach back to the source. | |||
| 7. Management Considerations | 7. Management Considerations | |||
| This specification extends "On Forwarding 6LoWPAN Fragments over a | ||||
| Multihop IPv6 Network" [I-D.ietf-6lo-minimal-fragment] and requires | ||||
| the same parameters in the receiver and on intermediate nodes. There | ||||
| is no new parameter as echoing ECN is always on. This parameters | ||||
| typically include the reassembly time-out at the receiver and an | ||||
| inactivity clean-up timer on the intermediate nodes, and the number | ||||
| of messages that can be processed in parallel in all nodes. | ||||
| The configuration settings introduced by this specification only | ||||
| apply to the sender, which is in full control of the transmission. | ||||
| LLNs vary a lot in size (there can be thousands of nodes in a mesh), | ||||
| in speed (from 10Kbps to several Mbps at the PHY layer), in traffic | ||||
| density, and in optimizations that are desired (e.g., the selection | ||||
| of a RPL [RFC6550] Objective Function [RFC6552] impacts the shape of | ||||
| the routing graph). | ||||
| For that reason, only a very generic guidance can be given on the | ||||
| settings of the sender and on whether complex algorithms are needed | ||||
| to perform flow control or estimate the round-trip time. To cover | ||||
| the most complex use cases, this specification enables the sender to | ||||
| vary the fragment size, the window size and the inter-frame gap, | ||||
| based on the amount of losses, the observed variations of the round- | ||||
| trip time and the setting of the ECN bit. | ||||
| 7.1. Protocol Parameters | 7.1. Protocol Parameters | |||
| There is no particular configuration on the receiver, as echoing ECN | The management system SHOULD be capable of providing the parameters | |||
| is always on. The configuration only applies to the sender, which is | listed in this section. | |||
| in control of the transmission. The management system SHOULD be | ||||
| capable of providing the parameters below: | An implementation must control the rate at which it sends packets | |||
| over a same path to allow the next hop to forward a packet before it | ||||
| gets the next. In a wireless network that uses a same frequency | ||||
| along a path, more time must be inserted to avoid hidden terminal | ||||
| issues between fragments. This is controlled by the following | ||||
| parameter: | ||||
| inter-frame gap: Indicates a minimum amount of time between | ||||
| transmissions. All packets to a same destination, and in | ||||
| particular fragments, may be subject to receive while transmitting | ||||
| and hidden terminal collisions with the next or the previous | ||||
| transmission as the fragments progress along a same path. The | ||||
| inter-frame gap protects the propagation of one transmission | ||||
| before the next one is triggered and creates a duty cycle that | ||||
| controls the ratio of air time and memory in intermediate nodes | ||||
| that a particular datagram will use. | ||||
| An implementation should consider the generic recommendations from | ||||
| the IETF in the matter of flow control and rate management in | ||||
| [RFC5033]. To control the flow, an implementation may use a dynamic | ||||
| value of the window size (Window_Size), adapt the fragment size | ||||
| (Fragment_Size) and insert an inter-frame gap that is longer than | ||||
| necessary. In a large network where node contend for the bandwidth, | ||||
| a larger Fragment_Size consumes less bandwidth but also reduces the | ||||
| fluidity and incurs higher chances of loss in transmission. This is | ||||
| controlled by the following parameters: | ||||
| MinFragmentSize: The MinFragmentSize is the minimum value for the | MinFragmentSize: The MinFragmentSize is the minimum value for the | |||
| Fragment_Size. | Fragment_Size. | |||
| OptFragmentSize: The MinFragmentSize is the value for the | OptFragmentSize: The OptFragmentSize is the value for the | |||
| Fragment_Size that the sender should use to start with. | Fragment_Size that the sender should use to start with. It is | |||
| more than or equal to MinFragmentSize. It is less than or equal | ||||
| to MaxFragmentSize. On the first fragment, it must enable the | ||||
| expansion of the IPv6 addresses and of the Hop Limit field within | ||||
| MTU. On all fragments, it is a balance between the expected | ||||
| fluidity and the overhead of MAC and 6LoWPAN headers. For a small | ||||
| MTU, the idea is to keep it close to the maximum, whereas for | ||||
| larger MTUs, it might makes sense to keep it short enough, so that | ||||
| the duty cycle of the transmitter is bounded, e.g., to transmit at | ||||
| least 10 frames per second. | ||||
| MaxFragmentSize: The MaxFragmentSize is the maximum value for the | MaxFragmentSize: The MaxFragmentSize is the maximum value for the | |||
| Fragment_Size. It MUST be lower than the minimum MTU along the | Fragment_Size. It MUST be lower than the minimum MTU along the | |||
| path. A large value augments the chances of buffer bloat and | path. A large value augments the chances of buffer bloat and | |||
| transmission loss. The value MUST be less than 512 if the unit | transmission loss. The value MUST be less than 512 if the unit | |||
| that is defined for the PHY layer is the octet. | that is defined for the PHY layer is the octet. | |||
| UseECN: Indicates whether the sender should react to ECN. When the | ||||
| sender reacts to ECN the Window_Size will vary between | ||||
| MinWindowSize and MaxWindowSize. | ||||
| MinWindowSize: The minimum value of Window_Size that the sender can | MinWindowSize: The minimum value of Window_Size that the sender can | |||
| use. | use. | |||
| OptWindowSize: The OptWindowSize is the value for the Window_Size | OptWindowSize: The OptWindowSize is the value for the Window_Size | |||
| that the sender should use to start with. | that the sender should use to start with. It is more than or | |||
| equal to MinWindowSize. It is less than or equal to | ||||
| MaxWindowSize. The Window_Size should be maintained below the | ||||
| number of hops in the path of the fragment to avoid stacking | ||||
| fragments at the bottleneck on the path. If an inter-frame gap is | ||||
| used to avoid interference between fragments then the Window_Size | ||||
| should be at most in the order of the estimation of the trip time | ||||
| divided by the inter-frame gap. | ||||
| MaxWindowSize: The maximum value of Window_Size that the sender can | MaxWindowSize: The maximum value of Window_Size that the sender can | |||
| use. The value MUSt be less than 32. | use. The value MUST be less than 32. | |||
| inter-frame gap: Indicates a minimum amount of time between | An implementation may perform its estimate of the RTO or use a | |||
| transmissions. All packets to a same destination, and in | configured one. The ARQ process is controlled by the following | |||
| particular fragments, may be subject to receive while transmitting | parameters: | |||
| and hidden terminal collisions with the next or the previous | ||||
| transmission as the fragments progress along a same path. The | ||||
| inter-frame gap protects the propagation of one transmission | ||||
| before the next one is triggered and creates a duty cycle that | ||||
| controls the ratio of air time and memory in intermediate nodes | ||||
| that a particular datagram will use. | ||||
| MinARQTimeOut: The maximum amount of time a node should wait for an | MinARQTimeOut: The maximum amount of time a node should wait for an | |||
| RFRAG Acknowledgment before it takes a next action. | RFRAG Acknowledgment before it takes a next action. | |||
| OptARQTimeOut: The starting point of the value of the amount of time | OptARQTimeOut: The starting point of the value of the RTO, that is | |||
| that a sender should wait for an RFRAG Acknowledgment before it | amount of time that a sender should wait for an RFRAG | |||
| takes a next action. | Acknowledgment before it takes a next action. It is more than or | |||
| equal to MinARQTimeOut. It is less than or equal to | ||||
| MaxARQTimeOut. | ||||
| MaxARQTimeOut: The maximum amount of time a node should wait for an | MaxARQTimeOut: The maximum amount of time a node should wait for an | |||
| RFRAG Acknowledgment before it takes a next action. | RFRAG Acknowledgment before it takes a next action. It must cover | |||
| the longest expected round-trip time, and be several times less | ||||
| than the time-out that covers the recomposition buffer at the | ||||
| receiver, which is typically in the order of the minute. See | ||||
| Appendix C for recommendations on computing the round-trip time. | ||||
| MaxFragRetries: The maximum number of retries for a particular | MaxFragRetries: The maximum number of retries for a particular | |||
| fragment. | fragment. | |||
| MaxDatagramRetries: The maximum number of retries from scratch for a | MaxDatagramRetries: The maximum number of retries from scratch for a | |||
| particular datagram. | particular datagram. | |||
| An implementation may be capable to perform flow control based on | ||||
| ECN, more in Appendix C. This is controlled by the following | ||||
| parameter: | ||||
| UseECN: Indicates whether the sender should react to ECN. The | ||||
| sender may react to ECN by varying the Window_Size between | ||||
| MinWindowSize and MaxWindowSize, varying the Fragment_Size between | ||||
| MinFragmentSize and MaxFragmentSize and/or by increasing the | ||||
| inter-frame gap. | ||||
| 7.2. Observing the network | 7.2. Observing the network | |||
| The management system should monitor the amount of retries and of ECN | The management system should monitor the amount of retries and of ECN | |||
| settings that can be observed from the perspective of both the sender | settings that can be observed from the perspective of both the sender | |||
| and the receiver, and may tune the optimum size of Fragment_Size and | and the receiver, and may tune the optimum size of Fragment_Size and | |||
| of the Window_Size, OptDatagramSize and OptWindowSize respectively, | of the Window_Size, OptDatagramSize and OptWindowSize respectively, | |||
| at the sender. The values should be bounded by the expected number | at the sender. The values should be bounded by the expected number | |||
| of hops and reduced beyond that when the number of datagrams that can | of hops and reduced beyond that when the number of datagrams that can | |||
| traverse an intermediate point may exceed its capacity and cause a | traverse an intermediate point may exceed its capacity and cause a | |||
| congestion loss. The inter-frame gap is another tool that can be | congestion loss. The inter-frame gap is another tool that can be | |||
| used to increase the spacing between fragments of the same datagram | used to increase the spacing between fragments of the same datagram | |||
| and reduce the ratio of time when a particular intermediate node | and reduce the ratio of time when a particular intermediate node | |||
| holds a fragment of that datagram. | holds a fragment of that datagram. | |||
| 8. Security Considerations | 8. Security Considerations | |||
| This document specifies an instantiation of a 6LoWPAN Fragment | This document specifies an instantiation of a 6LoWPAN Fragment | |||
| Forwarding technique. "On Forwarding 6LoWPAN Fragments over a | Forwarding technique. [I-D.ietf-6lo-minimal-fragment] provides the | |||
| Multihop IPv6 Network" [I-D.ietf-6lo-minimal-fragment] provides the | ||||
| generic description of Fragment Forwarding and this specification | generic description of Fragment Forwarding and this specification | |||
| inherits from it. The generic considerations in the Security | inherits from it. The generic considerations in the Security | |||
| sections of [I-D.ietf-6lo-minimal-fragment] apply equally to this | sections of [I-D.ietf-6lo-minimal-fragment] apply equally to this | |||
| document. | document. | |||
| This specification does not recommend a particular algorithm for the | This specification does not recommend a particular algorithm for the | |||
| estimation of the duration of the RTO that covers the detection of | estimation of the duration of the RTO that covers the detection of | |||
| the loss of a fragment with the 'X' flag set; regardless, an attacker | the loss of a fragment with the 'X' flag set; regardless, an attacker | |||
| on the path may slow down or discard packets, which in turn can | on the path may slow down or discard packets, which in turn can | |||
| affect the throughput of fragmented packets. | affect the throughput of fragmented packets. | |||
| skipping to change at page 20, line 46 ¶ | skipping to change at page 22, line 42 ¶ | |||
| | 11 10101x | 15 | Reserved for Experimental Use | RFC 8025 | | | 11 10101x | 15 | Reserved for Experimental Use | RFC 8025 | | |||
| +-------------+------+----------------------------------+-----------+ | +-------------+------+----------------------------------+-----------+ | |||
| Table 1: Additional Dispatch Value Bit Patterns | Table 1: Additional Dispatch Value Bit Patterns | |||
| 10. Acknowledgments | 10. Acknowledgments | |||
| The author wishes to thank Michel Veillette, Dario Tedeschi, Laurent | The author wishes to thank Michel Veillette, Dario Tedeschi, Laurent | |||
| Toutain, Carles Gomez Montenegro, Thomas Watteyne, and Michael | Toutain, Carles Gomez Montenegro, Thomas Watteyne, and Michael | |||
| Richardson for in-depth reviews and comments. Also many thanks to | Richardson for in-depth reviews and comments. Also many thanks to | |||
| Peter Yee, Tirumaleswar Reddy Konda and Erik Nordmark for their | Peter Yee, Colin Perkins, Tirumaleswar Reddy Konda and Erik Nordmark | |||
| careful reviews and for helping through the IETF Last Call and IESG | for their careful reviews and for helping through the IETF Last Call | |||
| review process, and to Jonathan Hui, Jay Werb, Christos Polyzois, | and IESG review process, and to Jonathan Hui, Jay Werb, Christos | |||
| Soumitri Kolavennu, Pat Kinney, Margaret Wasserman, Richard Kelsey, | Polyzois, Soumitri Kolavennu, Pat Kinney, Margaret Wasserman, Richard | |||
| Carsten Bormann and Harry Courtice for their various contributions in | Kelsey, Carsten Bormann and Harry Courtice for their various | |||
| the long process that lead ot this document. | contributions in the long process that lead ot this document. | |||
| 11. Normative References | 11. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | |||
| "Transmission of IPv6 Packets over IEEE 802.15.4 | "Transmission of IPv6 Packets over IEEE 802.15.4 | |||
| skipping to change at page 23, line 5 ¶ | skipping to change at page 24, line 51 ¶ | |||
| DOI 10.17487/RFC6298, June 2011, | DOI 10.17487/RFC6298, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6298>. | <https://www.rfc-editor.org/info/rfc6298>. | |||
| [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | |||
| Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | |||
| JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | |||
| Low-Power and Lossy Networks", RFC 6550, | Low-Power and Lossy Networks", RFC 6550, | |||
| DOI 10.17487/RFC6550, March 2012, | DOI 10.17487/RFC6550, March 2012, | |||
| <https://www.rfc-editor.org/info/rfc6550>. | <https://www.rfc-editor.org/info/rfc6550>. | |||
| [RFC6552] Thubert, P., Ed., "Objective Function Zero for the Routing | ||||
| Protocol for Low-Power and Lossy Networks (RPL)", | ||||
| RFC 6552, DOI 10.17487/RFC6552, March 2012, | ||||
| <https://www.rfc-editor.org/info/rfc6552>. | ||||
| [RFC7554] Watteyne, T., Ed., Palattella, M., and L. Grieco, "Using | [RFC7554] Watteyne, T., Ed., Palattella, M., and L. Grieco, "Using | |||
| IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the | IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the | |||
| Internet of Things (IoT): Problem Statement", RFC 7554, | Internet of Things (IoT): Problem Statement", RFC 7554, | |||
| DOI 10.17487/RFC7554, May 2015, | DOI 10.17487/RFC7554, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7554>. | <https://www.rfc-editor.org/info/rfc7554>. | |||
| [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", STD 86, RFC 8200, | (IPv6) Specification", STD 86, RFC 8200, | |||
| DOI 10.17487/RFC8200, July 2017, | DOI 10.17487/RFC8200, July 2017, | |||
| <https://www.rfc-editor.org/info/rfc8200>. | <https://www.rfc-editor.org/info/rfc8200>. | |||
| [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
| Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
| March 2017, <https://www.rfc-editor.org/info/rfc8085>. | March 2017, <https://www.rfc-editor.org/info/rfc8085>. | |||
| [RFC8087] Fairhurst, G. and M. Welzl, "The Benefits of Using | [RFC8087] Fairhurst, G. and M. Welzl, "The Benefits of Using | |||
| Explicit Congestion Notification (ECN)", RFC 8087, | Explicit Congestion Notification (ECN)", RFC 8087, | |||
| DOI 10.17487/RFC8087, March 2017, | DOI 10.17487/RFC8087, March 2017, | |||
| <https://www.rfc-editor.org/info/rfc8087>. | <https://www.rfc-editor.org/info/rfc8087>. | |||
| [RFC5033] Floyd, S. and M. Allman, "Specifying New Congestion | ||||
| Control Algorithms", BCP 133, RFC 5033, | ||||
| DOI 10.17487/RFC5033, August 2007, | ||||
| <https://www.rfc-editor.org/info/rfc5033>. | ||||
| [RFC6606] Kim, E., Kaspar, D., Gomez, C., and C. Bormann, "Problem | [RFC6606] Kim, E., Kaspar, D., Gomez, C., and C. Bormann, "Problem | |||
| Statement and Requirements for IPv6 over Low-Power | Statement and Requirements for IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Routing", | Wireless Personal Area Network (6LoWPAN) Routing", | |||
| RFC 6606, DOI 10.17487/RFC6606, May 2012, | RFC 6606, DOI 10.17487/RFC6606, May 2012, | |||
| <https://www.rfc-editor.org/info/rfc6606>. | <https://www.rfc-editor.org/info/rfc6606>. | |||
| [I-D.ietf-lwig-6lowpan-virtual-reassembly] | [I-D.ietf-lwig-6lowpan-virtual-reassembly] | |||
| Bormann, C. and T. Watteyne, "Virtual reassembly buffers | Bormann, C. and T. Watteyne, "Virtual reassembly buffers | |||
| in 6LoWPAN", Work in Progress, Internet-Draft, draft-ietf- | in 6LoWPAN", Work in Progress, Internet-Draft, draft-ietf- | |||
| lwig-6lowpan-virtual-reassembly-01, 11 March 2019, | lwig-6lowpan-virtual-reassembly-01, 11 March 2019, | |||
| skipping to change at page 27, line 33 ¶ | skipping to change at page 29, line 42 ¶ | |||
| acknowledgment was received yet. This means that the fragment might | acknowledgment was received yet. This means that the fragment might | |||
| be on the way, received but not yet acknowledged, or the | be on the way, received but not yet acknowledged, or the | |||
| acknowledgment might be on the way back. It is also possible that | acknowledgment might be on the way back. It is also possible that | |||
| either the fragment or the acknowledgment was lost on the way. | either the fragment or the acknowledgment was lost on the way. | |||
| From the sender standpoint, all outstanding fragments might still be | From the sender standpoint, all outstanding fragments might still be | |||
| in the network and contribute to its congestion. There is an | in the network and contribute to its congestion. There is an | |||
| assumption, though, that after a certain amount of time, a frame is | assumption, though, that after a certain amount of time, a frame is | |||
| either received or lost, so it is not causing congestion anymore. | either received or lost, so it is not causing congestion anymore. | |||
| This amount of time can be estimated based on the round-trip delay | This amount of time can be estimated based on the round-trip delay | |||
| between the 6LoWPAN endpoints. The method detailed in [RFC6298] is | between the 6LoWPAN endpoints. The method detailed in "Computing | |||
| recommended for that computation. | TCP's Retransmission Timer" [RFC6298] is recommended for that | |||
| computation. | ||||
| The reader is encouraged to read through "Congestion Control | The reader is encouraged to read through "Congestion Control | |||
| Principles" [RFC2914]. Additionally [RFC7567] and [RFC5681] provide | Principles" [RFC2914]. Additionally [RFC7567] and [RFC5681] provide | |||
| deeper information on why this mechanism is needed and how TCP | deeper information on why this mechanism is needed and how TCP | |||
| handles Congestion Control. Basically, the goal here is to manage | handles Congestion Control. Basically, the goal here is to manage | |||
| the amount of fragments present in the network; this is achieved by | the amount of fragments present in the network; this is achieved by | |||
| to reducing the number of outstanding fragments over a congested path | to reducing the number of outstanding fragments over a congested path | |||
| by throttling the sources. | by throttling the sources. | |||
| Section 6 describes how the sender decides how many fragments are | Section 6 describes how the sender decides how many fragments are | |||
| End of changes. 30 change blocks. | ||||
| 64 lines changed or deleted | 145 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/ | ||||