draft-ietf-shim6-proto-03.txt | draft-ietf-shim6-proto-04.txt | |||
---|---|---|---|---|
SHIM6 WG E. Nordmark | SHIM6 WG E. Nordmark | |||
Internet-Draft Sun Microsystems | Internet-Draft Sun Microsystems | |||
Expires: March 5, 2006 M. Bagnulo | Expires: September 5, 2006 M. Bagnulo | |||
UC3M | UC3M | |||
September 2005 | March 4, 2006 | |||
Level 3 multihoming shim protocol | Level 3 multihoming shim protocol | |||
draft-ietf-shim6-proto-03.txt | draft-ietf-shim6-proto-04.txt | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
skipping to change at page 1, line 35 | skipping to change at page 1, line 35 | |||
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." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on March 5, 2006. | This Internet-Draft will expire on September 5, 2006. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The Internet Society (2005). | Copyright (C) The Internet Society (2006). | |||
Abstract | Abstract | |||
The SHIM6 working group is specifying a layer 3 shim approach and | The SHIM6 protocol is a layer 3 shim for providing locator agility | |||
protocol for providing locator agility below the transport protocols, | below the transport protocols, so that multihoming can be provided | |||
so that multihoming can be provided for IPv6 with failover and load | for IPv6 with failover and load sharing properties, without assuming | |||
spreading properties, without assuming that a multihomed site will | that a multihomed site will have a provider independent IPv6 address | |||
have a provider independent IPv6 address prefix which is announced in | prefix which is announced in the global IPv6 routing table. The | |||
the global IPv6 routing table. The hosts in a site which has | hosts in a site which has multiple provider allocated IPv6 address | |||
multiple provider allocated IPv6 address prefixes, will use the shim6 | prefixes, will use the shim6 protocol specified in this document to | |||
protocol specified in this document to setup state with peer hosts, | setup state with peer hosts, so that the state can later be used to | |||
so that the state can later be used to failover to a different | failover to a different locator pair, should the original one stop | |||
locator pair, should the original one stop working. | working. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.2 Non-Goals . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.2 Non-Goals . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
1.3 Locators as Upper-layer Identifiers . . . . . . . . . . 6 | 1.3 Locators as Upper-layer Identifiers . . . . . . . . . . 6 | |||
1.4 IP Multicast . . . . . . . . . . . . . . . . . . . . . . 7 | 1.4 IP Multicast . . . . . . . . . . . . . . . . . . . . . . 7 | |||
1.5 Renumbering Implications . . . . . . . . . . . . . . . . 7 | 1.5 Renumbering Implications . . . . . . . . . . . . . . . . 8 | |||
1.6 Placement of the shim . . . . . . . . . . . . . . . . . 8 | 1.6 Placement of the shim . . . . . . . . . . . . . . . . . 9 | |||
1.7 Traffic Engineering . . . . . . . . . . . . . . . . . . 10 | 1.7 Traffic Engineering . . . . . . . . . . . . . . . . . . 11 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 12 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
2.1 Definitions . . . . . . . . . . . . . . . . . . . . . . 12 | 2.1 Definitions . . . . . . . . . . . . . . . . . . . . . . 12 | |||
2.2 Notational Conventions . . . . . . . . . . . . . . . . . 14 | 2.2 Notational Conventions . . . . . . . . . . . . . . . . . 15 | |||
3. Assumptions . . . . . . . . . . . . . . . . . . . . . . . . 16 | 3. Assumptions . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . 17 | 4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . 17 | |||
4.1 Context Tags . . . . . . . . . . . . . . . . . . . . . . 19 | 4.1 Context Tags . . . . . . . . . . . . . . . . . . . . . . 19 | |||
4.2 Context Forking . . . . . . . . . . . . . . . . . . . . 19 | 4.2 Context Forking . . . . . . . . . . . . . . . . . . . . 19 | |||
4.3 API Extensions . . . . . . . . . . . . . . . . . . . . . 20 | 4.3 API Extensions . . . . . . . . . . . . . . . . . . . . . 20 | |||
4.4 Securing shim6 . . . . . . . . . . . . . . . . . . . . . 20 | 4.4 Securing shim6 . . . . . . . . . . . . . . . . . . . . . 20 | |||
4.5 Overview of Shim Control Messages . . . . . . . . . . . 21 | 4.5 Overview of Shim Control Messages . . . . . . . . . . . 21 | |||
4.6 Extension Header Order . . . . . . . . . . . . . . . . . 22 | 4.6 Extension Header Order . . . . . . . . . . . . . . . . . 22 | |||
4.7 Locator Validation . . . . . . . . . . . . . . . . . . . 22 | ||||
5. Message Formats . . . . . . . . . . . . . . . . . . . . . . 24 | 5. Message Formats . . . . . . . . . . . . . . . . . . . . . . 24 | |||
5.1 Common shim6 Message Format . . . . . . . . . . . . . . 24 | 5.1 Common shim6 Message Format . . . . . . . . . . . . . . 24 | |||
5.2 Payload Extension Header Format . . . . . . . . . . . . 24 | 5.2 Payload Extension Header Format . . . . . . . . . . . . 24 | |||
5.3 Common Shim6 Control header . . . . . . . . . . . . . . 25 | 5.3 Common Shim6 Control header . . . . . . . . . . . . . . 25 | |||
5.4 I1 Message Format . . . . . . . . . . . . . . . . . . . 27 | 5.4 I1 Message Format . . . . . . . . . . . . . . . . . . . 27 | |||
5.5 R1 Message Format . . . . . . . . . . . . . . . . . . . 28 | 5.5 R1 Message Format . . . . . . . . . . . . . . . . . . . 28 | |||
5.6 I2 Message Format . . . . . . . . . . . . . . . . . . . 30 | 5.6 I2 Message Format . . . . . . . . . . . . . . . . . . . 30 | |||
5.7 R2 Message Format . . . . . . . . . . . . . . . . . . . 31 | 5.7 R2 Message Format . . . . . . . . . . . . . . . . . . . 31 | |||
5.8 R1bis Message Format . . . . . . . . . . . . . . . . . . 33 | 5.8 R1bis Message Format . . . . . . . . . . . . . . . . . . 33 | |||
5.9 I2bis Message Format . . . . . . . . . . . . . . . . . . 34 | 5.9 I2bis Message Format . . . . . . . . . . . . . . . . . . 34 | |||
5.10 Update Request Message Format . . . . . . . . . . . . . 36 | 5.10 Update Request Message Format . . . . . . . . . . . . . 36 | |||
5.11 Update Acknowledgement Message Format . . . . . . . . . 38 | 5.11 Update Acknowledgement Message Format . . . . . . . . . 38 | |||
5.12 Keepalive Message Format . . . . . . . . . . . . . . . . 39 | 5.12 Keepalive Message Format . . . . . . . . . . . . . . . . 39 | |||
5.13 Probe Message Format . . . . . . . . . . . . . . . . . . 39 | 5.13 Probe Message Format . . . . . . . . . . . . . . . . . . 39 | |||
5.14 Option Formats . . . . . . . . . . . . . . . . . . . . . 39 | 5.14 Option Formats . . . . . . . . . . . . . . . . . . . . . 39 | |||
5.14.1 Validator Option Format . . . . . . . . . . . . . . 41 | 5.14.1 Responder Validator Option Format . . . . . . . . . 41 | |||
5.14.2 Locator List Option Format . . . . . . . . . . . . . 42 | 5.14.2 Locator List Option Format . . . . . . . . . . . . . 42 | |||
5.14.3 Locator Preferences Option Format . . . . . . . . . 43 | 5.14.3 Locator Preferences Option Format . . . . . . . . . 43 | |||
5.14.4 CGA Parameter Data Structure Option Format . . . . . 45 | 5.14.4 CGA Parameter Data Structure Option Format . . . . . 45 | |||
5.14.5 CGA Signature Option Format . . . . . . . . . . . . 46 | 5.14.5 CGA Signature Option Format . . . . . . . . . . . . 46 | |||
5.14.6 ULID Pair Option Format . . . . . . . . . . . . . . 46 | 5.14.6 ULID Pair Option Format . . . . . . . . . . . . . . 47 | |||
5.14.7 Forked Instance Identifier Option Format . . . . . . 47 | 5.14.7 Forked Instance Identifier Option Format . . . . . . 48 | |||
5.14.8 Probe Option Format . . . . . . . . . . . . . . . . 48 | 5.14.8 Probe Option Format . . . . . . . . . . . . . . . . 48 | |||
5.14.9 Reachability Option Format . . . . . . . . . . . . . 48 | 5.14.9 Reachability Option Format . . . . . . . . . . . . . 48 | |||
5.14.10 Payload Reception Report Option Format . . . . . . 48 | 5.14.10 Payload Reception Report Option Format . . . . . . 48 | |||
6. Conceptual Model of a Host . . . . . . . . . . . . . . . . . 49 | 6. Conceptual Model of a Host . . . . . . . . . . . . . . . . . 49 | |||
6.1 Conceptual Data Structures . . . . . . . . . . . . . . . 49 | 6.1 Conceptual Data Structures . . . . . . . . . . . . . . . 49 | |||
6.2 Context States . . . . . . . . . . . . . . . . . . . . . 50 | 6.2 Context States . . . . . . . . . . . . . . . . . . . . . 50 | |||
7. Establishing ULID-Pair Contexts . . . . . . . . . . . . . . 52 | 7. Establishing ULID-Pair Contexts . . . . . . . . . . . . . . 52 | |||
7.1 Normal context establishment . . . . . . . . . . . . . . 52 | 7.1 Uniqness of Context Tags . . . . . . . . . . . . . . . . 52 | |||
7.2 Concurrent context establishment . . . . . . . . . . . . 52 | 7.2 Locator Verification . . . . . . . . . . . . . . . . . . 52 | |||
7.3 Context recovery . . . . . . . . . . . . . . . . . . . . 54 | 7.3 Normal context establishment . . . . . . . . . . . . . . 53 | |||
7.4 Context confusion . . . . . . . . . . . . . . . . . . . 56 | 7.4 Concurrent context establishment . . . . . . . . . . . . 53 | |||
7.5 Sending I1 messages . . . . . . . . . . . . . . . . . . 57 | 7.5 Context recovery . . . . . . . . . . . . . . . . . . . . 55 | |||
7.6 Retransmitting I1 messages . . . . . . . . . . . . . . . 57 | 7.6 Context confusion . . . . . . . . . . . . . . . . . . . 57 | |||
7.7 Receiving I1 messages . . . . . . . . . . . . . . . . . 58 | 7.7 Sending I1 messages . . . . . . . . . . . . . . . . . . 58 | |||
7.7.1 Generating the R1 validator . . . . . . . . . . . . 59 | 7.8 Retransmitting I1 messages . . . . . . . . . . . . . . . 58 | |||
7.8 Receiving R1 messages and sending I2 messages . . . . . 59 | 7.9 Receiving I1 messages . . . . . . . . . . . . . . . . . 59 | |||
7.9 Retransmitting I2 messages . . . . . . . . . . . . . . . 60 | 7.9.1 Generating the R1 Validator . . . . . . . . . . . . 60 | |||
7.10 Receiving I2 messages . . . . . . . . . . . . . . . . . 61 | 7.10 Receiving R1 messages and sending I2 messages . . . . . 61 | |||
7.11 Sending R2 messages . . . . . . . . . . . . . . . . . . 62 | 7.11 Retransmitting I2 messages . . . . . . . . . . . . . . . 62 | |||
7.12 Match for Context Confusion . . . . . . . . . . . . . . 62 | 7.12 Receiving I2 messages . . . . . . . . . . . . . . . . . 62 | |||
7.13 Receiving R2 messages . . . . . . . . . . . . . . . . . 63 | 7.13 Sending R2 messages . . . . . . . . . . . . . . . . . . 64 | |||
7.14 Sending R1bis packets . . . . . . . . . . . . . . . . . 64 | 7.14 Match for Context Confusion . . . . . . . . . . . . . . 64 | |||
7.14.1 Generating the R1bis validator . . . . . . . . . . . 64 | 7.15 Receiving R2 messages . . . . . . . . . . . . . . . . . 65 | |||
7.15 Receiving R1bis messages and sending I2bis messages . . 65 | 7.16 Sending R1bis messages . . . . . . . . . . . . . . . . . 66 | |||
7.16 Receiving I2bis messages and sending R2 messages . . . . 66 | 7.16.1 Generating the R1bis Validator . . . . . . . . . . . 66 | |||
8. Handling ICMP Error Messages . . . . . . . . . . . . . . . . 68 | 7.17 Receiving R1bis messages and sending I2bis messages . . 67 | |||
9. Teardown of the ULID-Pair Context . . . . . . . . . . . . . 69 | 7.18 Retransmitting I2bis messages . . . . . . . . . . . . . 68 | |||
10. Updating the Peer . . . . . . . . . . . . . . . . . . . . 70 | 7.19 Receiving I2bis messages and sending R2 messages . . . . 68 | |||
10.1 Sending Update Request messages . . . . . . . . . . . . 70 | 8. Handling ICMP Error Messages . . . . . . . . . . . . . . . . 70 | |||
10.2 Retransmitting Update Request messages . . . . . . . . . 70 | 9. Teardown of the ULID-Pair Context . . . . . . . . . . . . . 72 | |||
10.3 Newer Information While Retransmitting . . . . . . . . . 71 | 10. Updating the Peer . . . . . . . . . . . . . . . . . . . . 73 | |||
10.4 Receiving Update Request messages . . . . . . . . . . . 71 | 10.1 Sending Update Request messages . . . . . . . . . . . . 73 | |||
10.5 Receiving Update Acknowledgement messages . . . . . . . 73 | 10.2 Retransmitting Update Request messages . . . . . . . . . 73 | |||
11. Sending ULP Payloads . . . . . . . . . . . . . . . . . . . 74 | 10.3 Newer Information While Retransmitting . . . . . . . . . 74 | |||
11.1 Sending ULP Payload after a Switch . . . . . . . . . . . 74 | 10.4 Receiving Update Request messages . . . . . . . . . . . 74 | |||
12. Receiving Packets . . . . . . . . . . . . . . . . . . . . 76 | 10.5 Receiving Update Acknowledgement messages . . . . . . . 76 | |||
12.1 Receiving Payload Extension Headers . . . . . . . . . . 76 | 11. Sending ULP Payloads . . . . . . . . . . . . . . . . . . . 77 | |||
12.2 Receiving Shim Control messages . . . . . . . . . . . . 76 | 11.1 Sending ULP Payload after a Switch . . . . . . . . . . . 77 | |||
12.3 Context Lookup . . . . . . . . . . . . . . . . . . . . . 77 | 12. Receiving Packets . . . . . . . . . . . . . . . . . . . . 79 | |||
13. Initial Contact . . . . . . . . . . . . . . . . . . . . . 79 | 12.1 Receiving Payload Extension Headers . . . . . . . . . . 79 | |||
14. Protocol constants . . . . . . . . . . . . . . . . . . . . 80 | 12.2 Receiving Shim Control messages . . . . . . . . . . . . 79 | |||
15. Open Issues . . . . . . . . . . . . . . . . . . . . . . . 81 | 12.3 Context Lookup . . . . . . . . . . . . . . . . . . . . . 80 | |||
16. Implications Elsewhere . . . . . . . . . . . . . . . . . . 82 | 13. Initial Contact . . . . . . . . . . . . . . . . . . . . . 82 | |||
17. Security Considerations . . . . . . . . . . . . . . . . . 84 | 14. Protocol constants . . . . . . . . . . . . . . . . . . . . 83 | |||
18. IANA Considerations . . . . . . . . . . . . . . . . . . . 86 | 15. Implications Elsewhere . . . . . . . . . . . . . . . . . . 84 | |||
19. Possible Protocol Extensions . . . . . . . . . . . . . . . 88 | 16. Security Considerations . . . . . . . . . . . . . . . . . 86 | |||
20. Change Log . . . . . . . . . . . . . . . . . . . . . . . . 90 | 17. IANA Considerations . . . . . . . . . . . . . . . . . . . 88 | |||
21. Acknowledgements . . . . . . . . . . . . . . . . . . . . . 93 | 18. Acknowledgements . . . . . . . . . . . . . . . . . . . . . 90 | |||
A. Simplified State Machine . . . . . . . . . . . . . . . . . . 94 | A. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . 91 | |||
A.1 Simplified State Machine diagram . . . . . . . . . . . . 99 | B. Possible Protocol Extensions . . . . . . . . . . . . . . . . 92 | |||
B. Context Tag Reuse . . . . . . . . . . . . . . . . . . . . . 100 | C. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 94 | |||
B.1 Context Recovery . . . . . . . . . . . . . . . . . . . . 100 | D. Simplified State Machine . . . . . . . . . . . . . . . . . . 97 | |||
B.2 Context Confusion . . . . . . . . . . . . . . . . . . . 100 | D.1 Simplified State Machine diagram . . . . . . . . . . . . 102 | |||
B.3 Three Party Context Confusion . . . . . . . . . . . . . 101 | E. Context Tag Reuse . . . . . . . . . . . . . . . . . . . . . 103 | |||
C. Design Alternatives . . . . . . . . . . . . . . . . . . . . 102 | E.1 Context Recovery . . . . . . . . . . . . . . . . . . . . 103 | |||
C.1 Context granularity . . . . . . . . . . . . . . . . . . 102 | E.2 Context Confusion . . . . . . . . . . . . . . . . . . . 103 | |||
C.2 Demultiplexing of data packets in shim6 communications . 102 | E.3 Three Party Context Confusion . . . . . . . . . . . . . 104 | |||
C.2.1 Flow-label . . . . . . . . . . . . . . . . . . . . . 103 | F. Design Alternatives . . . . . . . . . . . . . . . . . . . . 105 | |||
C.2.2 Extension Header . . . . . . . . . . . . . . . . . . 105 | F.1 Context granularity . . . . . . . . . . . . . . . . . . 105 | |||
C.3 Context Loss Detection . . . . . . . . . . . . . . . . . 106 | F.2 Demultiplexing of data packets in shim6 communications . 105 | |||
C.4 Securing locator sets . . . . . . . . . . . . . . . . . 108 | F.2.1 Flow-label . . . . . . . . . . . . . . . . . . . . . 106 | |||
C.5 ULID-pair context establishment exchange . . . . . . . . 111 | F.2.2 Extension Header . . . . . . . . . . . . . . . . . . 108 | |||
C.6 Updating locator sets . . . . . . . . . . . . . . . . . 112 | F.3 Context Loss Detection . . . . . . . . . . . . . . . . . 109 | |||
C.7 State Cleanup . . . . . . . . . . . . . . . . . . . . . 112 | F.4 Securing locator sets . . . . . . . . . . . . . . . . . 111 | |||
22. References . . . . . . . . . . . . . . . . . . . . . . . . 115 | F.5 ULID-pair context establishment exchange . . . . . . . . 114 | |||
22.1 Normative References . . . . . . . . . . . . . . . . . . 115 | F.6 Updating locator sets . . . . . . . . . . . . . . . . . 115 | |||
22.2 Informative References . . . . . . . . . . . . . . . . . 115 | F.7 State Cleanup . . . . . . . . . . . . . . . . . . . . . 115 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 117 | 19. References . . . . . . . . . . . . . . . . . . . . . . . . 118 | |||
Intellectual Property and Copyright Statements . . . . . . . 118 | 19.1 Normative References . . . . . . . . . . . . . . . . . . 118 | |||
19.2 Informative References . . . . . . . . . . . . . . . . . 118 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 120 | ||||
Intellectual Property and Copyright Statements . . . . . . . 121 | ||||
1. Introduction | 1. Introduction | |||
The SHIM6 working group, and the MULTI6 WG that preceded it, was | This document describes a layer 3 shim approach and protocol for | |||
exploring and is now specifying a layer 3 shim approach and protocol | providing locator agility below the transport protocols, so that | |||
for providing locator agility below the transport protocols, so that | multihoming can be provided for IPv6 with failover and load sharing | |||
multihoming can be provided for IPv6 with failover and load spreading | properties [15], without assuming that a multihomed site will have a | |||
properties [16], without assuming that a multihomed site will have a | ||||
provider independent IPv6 address which is announced in the global | provider independent IPv6 address which is announced in the global | |||
IPv6 routing table. The hosts in a site which has multiple provider | IPv6 routing table. The hosts in a site which has multiple provider | |||
allocated IPv6 address prefixes, will use the shim6 protocol | allocated IPv6 address prefixes, will use the shim6 protocol | |||
specified in this document to setup state with peer hosts, so that | specified in this document to setup state with peer hosts, so that | |||
the state can later be used to failover to a different locator pair, | the state can later be used to failover to a different locator pair, | |||
should the original one stop working. | should the original one stop working. | |||
This document takes the outlines contained in [25] and [24] and | ||||
expands to an actual protocol specification. | ||||
We assume that redirection attacks are prevented using the mechanism | We assume that redirection attacks are prevented using the mechanism | |||
specified in HBA [7]. | specified in HBA [7]. | |||
The reachability detection and failure detection, including how a new | The reachability detection and failure detection, including how a new | |||
working locator pair is discovered after a failure, is specified in | working locator pair is discovered after a failure, is specified in a | |||
separate documents ([9] and [8]). This document allocates message | separate documents [8] This document allocates message types and | |||
types and option types for that sub-protocol, and leaves the | option types for that sub-protocol, and leaves the specification of | |||
specification of the message and option formats as well as the | the message and option formats as well as the protocol behavior to | |||
protocol behavior to a separate draft. | that document. | |||
1.1 Goals | 1.1 Goals | |||
The goals for this approach is to: | The goals for this approach is to: | |||
o Preserve established communications through failures, for example, | o Preserve established communications through certain classes of | |||
TCP connections and application communications using UDP. | failures, for example, TCP connections and application | |||
communications using UDP. | ||||
o Have no impact on upper layer protocols in general and on | o Have minimal impact on upper layer protocols in general and on | |||
transport protocols in particular. | transport protocols in particular. | |||
o Address the security threats in [20] through a separate document | o Address the security threats in [19] through the combination of | |||
[7], and techniques described in this document. | the HBA/CGA approach specified in a separate document [7], and | |||
techniques described in this document. | ||||
o No extra roundtrip for setup; deferred setup. | o Do not require an extra roundtrip up front to setup shim specific | |||
state. Instead allow the upper layer traffic (e.g., TCP) to flow | ||||
as normal and defer the setup of the shim state until some number | ||||
of packets have been exchanged. | ||||
o Take advantage of multiple locators/addresses for load spreading | o Take advantage of multiple locators/addresses for load spreading | |||
so that different sets of communication to a host (e.g., different | so that different sets of communication to a host (e.g., different | |||
connections) might use different locators of the host. This might | connections) might use different locators of the host. Note that | |||
enable some forms of traffic engineering, but the details for | this might cause load to be spread unevenly, thus we use the term | |||
traffic engineering, including what requirements can be satisfied, | "load spreading" instead of "load balancing". This capability | |||
have not yet been worked out. | might enable some forms of traffic engineering, but the details | |||
for traffic engineering, including what requirements can be | ||||
satisfied, are not specified in this document, and form part of a | ||||
potential extensions to this protocol. | ||||
1.2 Non-Goals | 1.2 Non-Goals | |||
The assumption is that the problem we are trying to solve is site | The assumption is that the problem we are trying to solve is site | |||
multihoming, with the ability to have the set of site locator | multihoming, with the ability to have the set of site locator | |||
prefixes change over time due to site renumbering. Further, we | prefixes change over time due to site renumbering. Further, we | |||
assume that such changes to the set of locator prefixes can be | assume that such changes to the set of locator prefixes can be | |||
relatively slow and managed; slow enough to allow updates to the DNS | relatively slow and managed; slow enough to allow updates to the DNS | |||
to propagate. But it is not a goal to try to make communication | to propagate. But it is not a goal to try to make communication | |||
survive a renumbering event (which causes all the locators of a host | survive a renumbering event (which causes all the locators of a host | |||
to change to a new set of locators). This proposal does not attempt | to change to a new set of locators). This proposal does not attempt | |||
to solve the, perhaps related, problem of host mobility. However, it | to solve the, perhaps related, problem of host mobility. However, it | |||
might turn out that the shim6 protocol can be a useful component, | might turn out that the shim6 protocol can be a useful component for | |||
e.g., for route optimization in the context of host mobility. | future host mobility solutions, e.g., for route optimization. | |||
This proposal also does not try to provide a new network level | This proposal also does not try to provide a new network level or | |||
identifier namespace separated from the current IP address namespace. | transport level identifier namespace separated from the current IP | |||
Even though such a concept would be useful to ULPs and applications, | address namespace. Even though such a concept would be useful to | |||
especially if the management burden for such a name space was zero | ULPs and applications, especially if the management burden for such a | |||
and there was an efficient yet secure mechanism to map from | name space was negligible and there was an efficient yet secure | |||
identifiers to locators, such a name space isn't necessary (and | mechanism to map from identifiers to locators, such a name space | |||
furthermore doesn't seem to help) to solve the multihoming problem. | isn't necessary (and furthermore doesn't seem to help) to solve the | |||
multihoming problem. | ||||
1.3 Locators as Upper-layer Identifiers | 1.3 Locators as Upper-layer Identifiers | |||
Central to this approach is to not introduce a new identifier name | This approach does not introduce a new identifier name space but | |||
space but instead use one of the locators as the upper-layer ID, | instead uses the locator that is selected in the initial contact with | |||
while allowing the locators used in the address fields to change over | the remote peer as the preserved upper-level identifier. While there | |||
time in response to failures of using the original locator. | may be subsequent changes in the selected network level locators over | |||
time in response to failures in using the original locator, the upper | ||||
level protocol stack elements will continue to use this upper level | ||||
identifier without change. | ||||
This implies that the ULID selection is performed as today's default | This implies that the ULID selection is performed as today's default | |||
address selection as specified in RFC 3484 [13]. Some extensions are | address selection as specified in RFC 3484 [12]. Some extensions are | |||
needed to RFC 3484 to try different source addresses, whether or not | needed to RFC 3484 to try different source addresses, whether or not | |||
the shim6 protocol is used, as outlined in [14]. Underneath, and | the shim6 protocol is used, as outlined in [13]. Underneath, and | |||
transparently, the multihoming shim selects working locator pairs | transparently, the multihoming shim selects working locator pairs | |||
with the initial locator pair being the ULID pair. When | with the initial locator pair being the ULID pair. When | |||
communication fails the shim can test and select alternate locators. | communication fails the shim can test and select alternate locators. | |||
A subsequent section discusses the issues when the selected ULID is | A subsequent section discusses the issues when the selected ULID is | |||
not initially working hence there is a need to switch locators up | not initially working hence there is a need to switch locators up | |||
front. | front. | |||
Using one of the locators as the ULID has certain benefits for | Using one of the locators as the ULID has certain benefits for | |||
applications which have long-lived session state, or performs | applications which have long-lived session state, or performs | |||
callbacks or referrals, because both the FQDN and the 128-bit ULID | callbacks or referrals, because both the FQDN and the 128-bit ULID | |||
work as handles for the applications. However, using a single 128- | work as handles for the applications. However, using a single 128- | |||
bit ULID doesn't provide seamless communication when that locator is | bit ULID doesn't provide seamless communication when that locator is | |||
unreachable. See [21] for further discussion of the application | unreachable. See [22] for further discussion of the application | |||
implications. | implications. | |||
There has been some discussion of using non-routable locators, such | There has been some discussion of using non-routable locators, such | |||
as unique-local addresses [19], as ULIDs in a multihoming solution. | as unique-local addresses [18], as ULIDs in a multihoming solution. | |||
While this document doesn't specify all aspects of this, it is | While this document doesn't specify all aspects of this, it is | |||
believed that the approach can be extended to handle such a case. | believed that the approach can be extended to handle such a case. | |||
For example, the protocol already needs to handle ULIDs that are not | For example, the protocol already needs to handle ULIDs that are not | |||
initially reachable. Thus the same mechanism can handle ULIDs that | initially reachable. Thus the same mechanism can handle ULIDs that | |||
are permanently unreachable from outside their site. The issue | are permanently unreachable from outside their site. The issue | |||
becomes how to make the protocol perform well when the ULID is known | becomes how to make the protocol perform well when the ULID is known | |||
a priori to be not reachable (e.g., the ULID is a ULA), for instance, | a priori to be not reachable (e.g., the ULID is a ULA), for instance, | |||
avoiding any timeout and retries in this case. In addition one would | avoiding any timeout and retries in this case. In addition one would | |||
need to understand how the ULAs would be entered in the DNS to avoid | need to understand how the ULAs would be entered in the DNS to avoid | |||
a performance impact on existing, non-shim6 aware, IPv6 hosts | a performance impact on existing, non-shim6 aware, IPv6 hosts | |||
potentially trying to communicate to the (unreachable) ULA. | potentially trying to communicate to the (unreachable) ULA. | |||
1.4 IP Multicast | 1.4 IP Multicast | |||
IP Multicast requires that the IP source address field contain a | IP Multicast requires that the IP source address field contain a | |||
topologically correct locator for interface that is used to send the | topologically correct locator for interface that is used to send the | |||
packet, since IP multicast routing uses both the source address and | packet, since IP multicast routing uses both the source address and | |||
the destination group to determine where to forward the packet. | the destination group to determine where to forward the packet. | |||
(This isn't much different than the situation with widely implemented | (This isn't much different than the situation with widely implemented | |||
ingress filtering [11] for unicast.) | ingress filtering [10] for unicast.) | |||
While in theory it would be possible to apply the shim re-mapping of | While in theory it would be possible to apply the shim re-mapping of | |||
the IP address fields between ULIDs and locators, the fact that all | the IP address fields between ULIDs and locators, the fact that all | |||
the multicast receivers would need to know the mapping to perform, | the multicast receivers would need to know the mapping to perform, | |||
makes such an approach difficult in practice. Thus it makes sense to | makes such an approach difficult in practice. Thus it makes sense to | |||
have multicast ULPs operate directly on locators and not use the | have multicast ULPs operate directly on locators and not use the | |||
shim. This is quite a natural fit for protocols which use RTP [15], | shim. This is quite a natural fit for protocols which use RTP [14], | |||
since RTP already has an explicit identifier in the form of the SSRC | since RTP already has an explicit identifier in the form of the SSRC | |||
field in the RTP headers. Thus the actual IP address fields are not | field in the RTP headers. Thus the actual IP address fields are not | |||
important to the application. | important to the application. | |||
In summary, IP multicast will not use the shim to remap the IP | In summary, IP multicast will not need the shim to remap the IP | |||
addresses. | addresses. | |||
This doesn't prevent the receiver of multicast to change its | ||||
locators, since the receiver is not explicitly identified; the | ||||
destination address is a multicast address and not the unicast | ||||
locator of the receiver. | ||||
1.5 Renumbering Implications | 1.5 Renumbering Implications | |||
As stated above, this approach does not try to make communication | As stated above, this approach does not try to make communication | |||
survive renumbering. However, the fact that a ULID might be used | survive renumbering in the general case. | |||
When a host is renumbered, the effect is that one or more locators | ||||
become invalid, and zero or more locators are added to the host's | ||||
network interface. This means that the set of locators that is used | ||||
in the shim will change, which the shim can handle as long as not all | ||||
the original locators become invalid at the same time. | ||||
But IP addresses are also used as ULID, and making the communication | ||||
survive locators becoming invalid can potentially cause some | ||||
confusion at the upper layers. The fact that a ULID might be used | ||||
with a different locator over time open up the possibility that | with a different locator over time open up the possibility that | |||
communication between two ULIDs might continue to work after one or | communication between two ULIDs might continue to work after one or | |||
both of those ULIDs are no longer reachable as locators, for example | both of those ULIDs are no longer reachable as locators, for example | |||
due to a renumbering event. This opens up the possibility that the | due to a renumbering event. This opens up the possibility that the | |||
ULID (or at least the prefix on which it is based) is reassigned to | ULID (or at least the prefix on which it is based) is reassigned to | |||
another site while it is still being used (with another locator) for | another site while it is still being used (with another locator) for | |||
existing communication. | existing communication. | |||
Worst case we could end up with two separate hosts using the same | Worst case we could end up with two separate hosts using the same | |||
ULID while both of them are communicating with the same host. | ULID while both of them are communicating with the same host. | |||
skipping to change at page 8, line 20 | skipping to change at page 8, line 44 | |||
becomes invalid (due to the underlying prefix becoming invalid). If | becomes invalid (due to the underlying prefix becoming invalid). If | |||
that behavior is desired, it can be accomplished by explicitly | that behavior is desired, it can be accomplished by explicitly | |||
discarding the shim state when the ULID becomes invalid. The context | discarding the shim state when the ULID becomes invalid. The context | |||
recovery mechanism will then make the peer aware that the context is | recovery mechanism will then make the peer aware that the context is | |||
gone, and that the ULID is no longer present at the same locator(s). | gone, and that the ULID is no longer present at the same locator(s). | |||
However, terminating the communication might be overkill. Even when | However, terminating the communication might be overkill. Even when | |||
an IPv6 prefix is retired and reassigned to some other site, there is | an IPv6 prefix is retired and reassigned to some other site, there is | |||
a very small probability that another host in that site picks the | a very small probability that another host in that site picks the | |||
same 128 bit address (whether using DHCPv6, stateless address | same 128 bit address (whether using DHCPv6, stateless address | |||
autoconfiguration, or picking a random interface ID [12]). Should | autoconfiguration, or picking a random interface ID [11]). Should | |||
the identical address be used by another host, then there still | the identical address be used by another host, then there still | |||
wouldn't be a problem until that host attempts to communicate with | wouldn't be a problem until that host attempts to communicate with | |||
the same peer host with which the initial user of the IPv6 address | the same peer host with which the initial user of the IPv6 address | |||
was communicating. | was communicating. | |||
The protocol as specified in this document does not perform any | The protocol as specified in this document does not perform any | |||
action when an address becomes invalid. As we gain further | action when an address becomes invalid. As we gain further | |||
understanding of the practical impact of renumbering this might | understanding of the practical impact of renumbering this might | |||
change in a future version of the protocol. | change in a future version of the protocol. | |||
skipping to change at page 9, line 14 | skipping to change at page 9, line 39 | |||
independence. The multihoming shim layer behaves as if it is | independence. The multihoming shim layer behaves as if it is | |||
associated with an extension header, which would be placed after any | associated with an extension header, which would be placed after any | |||
routing-related headers in the packet (such as any hop-by-hop | routing-related headers in the packet (such as any hop-by-hop | |||
options, or routing header). However, when the locator pair is the | options, or routing header). However, when the locator pair is the | |||
ULID pair there is no data that needs to be carried in an extension | ULID pair there is no data that needs to be carried in an extension | |||
header, thus none is needed in that case. | header, thus none is needed in that case. | |||
Layering AH and ESP above the multihoming shim means that IPsec can | Layering AH and ESP above the multihoming shim means that IPsec can | |||
be made to be unaware of locator changes the same way that transport | be made to be unaware of locator changes the same way that transport | |||
protocols can be unaware. Thus the IPsec security associations | protocols can be unaware. Thus the IPsec security associations | |||
remain stable even though the locators are changing. | remain stable even though the locators are changing. This means that | |||
the IP addresses specified in the selectors should be the ULIDs. | ||||
Layering the fragmentation header above the multihoming shim makes | Layering the fragmentation header above the multihoming shim makes | |||
reassembly robust in the case that there is broken multi-path routing | reassembly robust in the case that there is broken multi-path routing | |||
which results in using different paths, hence potentially different | which results in using different paths, hence potentially different | |||
source locators, for different fragments. Thus, effectively the | source locators, for different fragments. Thus, effectively the | |||
multihoming shim layer is placed between the IP endpoint sublayer, | multihoming shim layer is placed between the IP endpoint sublayer, | |||
which handles fragmentation, reassembly, and IPsec, and the IP | which handles fragmentation, reassembly, and IPsec, and the IP | |||
routing sublayer, which selects which next hop and interface to use | routing sublayer, which selects which next hop and interface to use | |||
for sending out packets. | for sending out packets. | |||
skipping to change at page 10, line 43 | skipping to change at page 11, line 11 | |||
the data packets. This serves to indicate the correct context to use | the data packets. This serves to indicate the correct context to use | |||
for decompression when the locator pair in the packet is insufficient | for decompression when the locator pair in the packet is insufficient | |||
to uniquely identify the context. | to uniquely identify the context. | |||
1.7 Traffic Engineering | 1.7 Traffic Engineering | |||
At the time of this writing it is not clear what requirements for | At the time of this writing it is not clear what requirements for | |||
traffic engineering make sense for the shim6 protocol, since the | traffic engineering make sense for the shim6 protocol, since the | |||
requirements must both result in some useful behavior as well as be | requirements must both result in some useful behavior as well as be | |||
implementable using a host-to-host locator agility mechanism like | implementable using a host-to-host locator agility mechanism like | |||
shim6. What is clear that whatever they are, shim6 will not be able | shim6. | |||
to provide identical capabilities to traffic engineering using BGP | ||||
and Provide Independent IP addresses. | Inherent in a scalable multihoming mechanism that separates locators | |||
from identifiers is that each host ends up with multiple locators. | ||||
This means that at least for initial contact, it is the remote peer | ||||
that needs to select which peer locator to try first. In the case of | ||||
shim6 this is performed by applying RFC 3484 address selection. | ||||
This is quite different than the common case of IPv4 multihoming | ||||
where the site has a single IP address prefix, since in that case the | ||||
peer performs no destination address selection. | ||||
Thus in "single prefix multihoming" the site, and in many cases its | ||||
upstream ISPs, can use BGP to exert some control of the ingress used | ||||
to reach the site. This capability can't easily be recreated in | ||||
"multiple prefix multihoming" such as shim6. | ||||
The protocol provides a placeholder, in the form of the Locator | The protocol provides a placeholder, in the form of the Locator | |||
Preferences option, which can be used by hosts to express priority | Preferences option, which can be used by hosts to express priority | |||
and weight values for each locator. This is intentionally made | and weight values for each locator. This is intentionally made | |||
identical to the DNS SRV [10] specification of priority and weight, | identical to the DNS SRV [9] specification of priority and weight, so | |||
so that DNS SRV records can be used for initial contact and the shim | that DNS SRV records can be used for initial contact and the shim for | |||
for failover, and they can use the same way to describe the | failover, and they can use the same way to describe the preferences. | |||
preferences. The format allows adding additional notions of | The format allows adding additional notions of "metrics" over time. | |||
"metrics" over time. But this is merely a place holder; even in | But the Locator Preference option is merely a place holder when it | |||
order to use this there would have to be a mechanism by which the | comes to providing traffic engineering; in order to use this in a | |||
host can find out what preference values to use, either statically | large site there would have to be a mechanism by which the host can | |||
(e.g., some new DHCPv6 option) or dynamically. | find out what preference values to use, either statically (e.g., some | |||
new DHCPv6 option) or dynamically. | ||||
Thus traffic engineering is listed as a possible extension in | ||||
Appendix B. | ||||
2. Terminology | 2. Terminology | |||
This document uses the terms MUST, SHOULD, RECOMMENDED, MAY, SHOULD | This document uses the terms MUST, SHOULD, RECOMMENDED, MAY, SHOULD | |||
NOT and MUST NOT defined in RFC 2119 [1]. The terms defined in RFC | NOT and MUST NOT defined in RFC 2119 [1]. The terms defined in RFC | |||
2460 [2] are also used. | 2460 [2] are also used. | |||
2.1 Definitions | 2.1 Definitions | |||
This document introduces the following terms (taken from [25]): | This document introduces the following terms: | |||
upper layer protocol (ULP) | upper layer protocol (ULP) | |||
A protocol layer immediately above IP. Examples | A protocol layer immediately above IP. Examples | |||
are transport protocols such as TCP and UDP, | are transport protocols such as TCP and UDP, | |||
control protocols such as ICMP, routing protocols | control protocols such as ICMP, routing protocols | |||
such as OSPF, and internet or lower-layer | such as OSPF, and internet or lower-layer | |||
protocols being "tunneled" over (i.e., | protocols being "tunneled" over (i.e., | |||
encapsulated in) IP such as IPX, AppleTalk, or IP | encapsulated in) IP such as IPX, AppleTalk, or IP | |||
itself. | itself. | |||
skipping to change at page 12, line 38 | skipping to change at page 12, line 38 | |||
an interface. 128 bits. This document only uses | an interface. 128 bits. This document only uses | |||
the "address" term in the case where it isn't | the "address" term in the case where it isn't | |||
specific whether it is a locator or an | specific whether it is a locator or an | |||
identifier. | identifier. | |||
locator An IP layer topological name for an interface or | locator An IP layer topological name for an interface or | |||
a set of interfaces. 128 bits. The locators are | a set of interfaces. 128 bits. The locators are | |||
carried in the IP address fields as the packets | carried in the IP address fields as the packets | |||
traverse the network. | traverse the network. | |||
identifier An IP layer name for an IP layer endpoint (stack | identifier An IP layer name for an IP layer endpoint. The | |||
name in [27]). The transport endpoint name is a | transport endpoint name is a function of the | |||
function of the transport protocol and would | transport protocol and would typically include | |||
typically include the IP identifier plus a port | the IP identifier plus a port number. | |||
number. | ||||
NOTE: This proposal does not specify any new form | NOTE: This proposal does not specify any new form | |||
of IP layer identifier, but still separates the | of IP layer identifier, but still separates the | |||
identifying and locating properties of the IP | identifying and locating properties of the IP | |||
addresses. | addresses. | |||
upper-layer identifier (ULID) | upper-layer identifier (ULID) | |||
An IP address which has been selected for | An IP address which has been selected for | |||
communication with a peer to be used by the upper | communication with a peer to be used by the upper | |||
layer protocol. 128 bits. This is used for | layer protocol. 128 bits. This is used for | |||
pseudo-header checksum computation and connection | pseudo-header checksum computation and connection | |||
skipping to change at page 13, line 40 | skipping to change at page 13, line 40 | |||
direction of the communication, and also | direction of the communication, and also | |||
identified by the pair of ULID and a Forked | identified by the pair of ULID and a Forked | |||
Instance Identifier (see below). | Instance Identifier (see below). | |||
Context tag Each end of the context allocates a context tag | Context tag Each end of the context allocates a context tag | |||
for the context. This is used to uniquely | for the context. This is used to uniquely | |||
associate both received control packets and | associate both received control packets and | |||
payload extension headers as belonging to the | payload extension headers as belonging to the | |||
context. | context. | |||
Current locator pair Each end of the context has a current locator | Current locator pair | |||
pair which is used to send packets to be peer. | Each end of the context has a current locator | |||
pair which is used to send packets to the peer. | ||||
The two ends might use different current locator | The two ends might use different current locator | |||
pairs though. | pairs though. | |||
Default context At the sending end, the shim uses the ULID pair | Default context At the sending end, the shim uses the ULID pair | |||
(passed down from the ULP) to find the context | (passed down from the ULP) to find the context | |||
for that pair. Thus, normally, a host can have | for that pair. Thus, normally, a host can have | |||
at most one context for a ULID pair. We call | at most one context for a ULID pair. We call | |||
this the "default context". | this the "default context". | |||
Context forking A mechanism which allows ULPs that are aware of | Context forking A mechanism which allows ULPs that are aware of | |||
multiple locators to use separate contexts for | multiple locators to use separate contexts for | |||
the same ULID pair, in order to be able use | the same ULID pair, in order to be able use | |||
different locator pairs for different | different locator pairs for different | |||
communication to the same ULID. Context forking | communication to the same ULID. Context forking | |||
causes more than just the default context to be | causes more than just the default context to be | |||
created for a ULID pair. | created for a ULID pair. | |||
Forked Instance Identifier (FII) In order to handle context forking, | Forked Instance Identifier (FII) | |||
a context is identified by a ULID-pair and a | In order to handle context forking, a context is | |||
forked context identifier. The default context | identified by a ULID-pair and a forked context | |||
has a FII of zero. | identifier. The default context has a FII of | |||
zero. | ||||
Initial contact We use this term to refer to the pre-shim | Initial contact We use this term to refer to the pre-shim | |||
communication when some ULP decides to start | communication when some ULP decides to start | |||
communicating with a peer by sending and | communicating with a peer by sending and | |||
receiving ULP packets. Typically this would not | receiving ULP packets. Typically this would not | |||
invoke any operations in the shim, since the shim | invoke any operations in the shim, since the shim | |||
can defer the context establishment until some | can defer the context establishment until some | |||
arbitrary later point in time. | arbitrary later point in time. | |||
Hash Based Addresses (HBA) | ||||
A form of IPv6 address where the interface ID is | ||||
derived from a cryptographic hash of all the | ||||
prefixes assigned to the host. See [7]. | ||||
Cryptographically Generated Addresses (CGA) | ||||
A form of IPv6 address where the interface ID is | ||||
derived from a cryptographic hash of the public | ||||
key. See [6]. | ||||
CGA Parameter Data Structure (PDS) | ||||
The information that CGA and HBA exchanges in | ||||
order to inform the peer of how the interface ID | ||||
was computed. See [6]., [7]. | ||||
2.2 Notational Conventions | 2.2 Notational Conventions | |||
A, B, and C are hosts. X is a potentially malicious host. | A, B, and C are hosts. X is a potentially malicious host. | |||
FQDN(A) is the domain name for A. | FQDN(A) is the domain name for A. | |||
Ls(A) is the locator set for A, which consists of the locators L1(A), | Ls(A) is the locator set for A, which consists of the locators L1(A), | |||
L2(A), ... Ln(A). | L2(A), ... Ln(A). | |||
ULID(A) is an upper-layer ID for A. In this proposal, ULID(A) is | ULID(A) is an upper-layer ID for A. In this proposal, ULID(A) is | |||
always one member of A's locator set. | always one member of A's locator set. | |||
CT(x) is a Context Tag. | CT(X) is a context tag assigned by X. | |||
This document also makes use of internal conceptual variables to | This document also makes use of internal conceptual variables to | |||
describe protocol behavior and external variables that an | describe protocol behavior and external variables that an | |||
implementation must allow system administrators to change. The | implementation must allow system administrators to change. The | |||
specific variable names, how their values change, and how their | specific variable names, how their values change, and how their | |||
settings influence protocol behavior are provided to demonstrate | settings influence protocol behavior are provided to demonstrate | |||
protocol behavior. An implementation is not required to have them in | protocol behavior. An implementation is not required to have them in | |||
the exact form described here, so long as its external behavior is | the exact form described here, so long as its external behavior is | |||
consistent with that described in this document. See Section 6 for a | consistent with that described in this document. See Section 6 for a | |||
description of the conceptual data structures. | description of the conceptual data structures. | |||
3. Assumptions | 3. Assumptions | |||
The general approach of a level3 shim as well as this specific | The design intent is to ensure that the shim6 protocol is capable of | |||
proposal makes the following assumptions: | handling path failures independently of the number of IP addresses | |||
(locators) available to the two communicating hosts, and | ||||
independently of which host detects the failure condition. | ||||
o When there is ingress filtering in the ISPs, that the use of all | In the case when host A and host B have an active shim6 state, with | |||
<source, destination> locator pairs will cause the packets to exit | host A having only one locator and host B having multiple locators, | |||
using different ISPs so that all exit ISPs can be tried. Since | it might be that host B is trying to send a packet to host A, and has | |||
there might be only one destination locator, when the peer | detected a failure condition with the current locator pair. As host | |||
supports shim6 but is not multihomed, this implies that the | B has multiple locators it presumably has multiple ISPs. In this | |||
selection of the exit ISP should be related to the source address | case there are probably alternate egress paths for host B to be able | |||
in the packets. | to try to reach A, but B can not vary the destination address (host A | |||
locator) to select such alternate paths, since A has only one | ||||
locator. | ||||
o Even without ingress filtering, there is the assumption that if | This leads to the assumption that a host should be able to cause | |||
the host tries all <source, destination> locator pairs, that it | different egress paths from its site to be used. The most reasonable | |||
has done a good enough job of trying to find a working path to the | approach to accomplish this is to have the host use different source | |||
peer. Since we want the protocol to provide benefits even if the | addresses and have the source address affect the selection of the | |||
peer has a single locator, this seems to imply that the choice of | site egress. The details of how this can be accomplished is beyond | |||
source locator needs to somehow affect the exit path from the | the scope of this document, but without this capability the ability | |||
site. | of the shim to try different "paths" by trying different locator | |||
pairs will have limited utility. | ||||
The above assumption applies whether or not the ISPs perform ingress | ||||
filtering. | ||||
In addition, when the site's ISPs perform ingress filtering based on | ||||
packet source addresses, shim6 assumes that packets sent with | ||||
different source and destination combinations have a reasonable | ||||
chance of making it through the relevant ISP's ingress filters. This | ||||
can be accomplished in several ways (all outside the scope of this | ||||
document), such as having the ISPs relax there ingress filters, or | ||||
selecting the egress such that it matches the IP source address | ||||
prefix. | ||||
Further discussion of this issue is captured in [20]. | ||||
The shim6 approach assumes that there are no IPv6-to-IPv6 NATs on the | ||||
paths, i.e., that the two ends can exchange their own notion of their | ||||
IPv6 addresses and that those addresses will also make sense to their | ||||
peer. | ||||
4. Protocol Overview | 4. Protocol Overview | |||
The shim6 protocol operates in several phases over time. The | The shim6 protocol operates in several phases over time. The | |||
following sequence illustrates the concepts: | following sequence illustrates the concepts: | |||
o An application on host A decides to contact B using some upper- | o An application on host A decides to contact B using some upper- | |||
layer protocol. This results in the ULP on A sending packets to | layer protocol. This results in the ULP on A sending packets to | |||
B. We call this the initial contact. Assuming the IP addresses | B. We call this the initial contact. Assuming the IP addresses | |||
selected by Default Address Selection [13] and its extensions [14] | selected by Default Address Selection [12] and its extensions [13] | |||
work, then there is no action by the shim at this point in time. | work, then there is no action by the shim at this point in time. | |||
Any shim context establishment can be deferred until later. | Any shim context establishment can be deferred until later. | |||
o Some heuristic on A or B (or both) determine that it might make | o Some heuristic on A or B (or both) determine that it is | |||
sense to make this communication robust against locator failures. | appropriate to pay the shim6 overhead to make this host-to-host | |||
For instance, this heuristic might be that more than 50 packets | communication robust against locator failures. For instance, this | |||
have been sent or received, or a timer expiration while active | heuristic might be that more than 50 packets have been sent or | |||
packet exchange is in place. This makes the shim initiate the | received, or a timer expiration while active packet exchange is in | |||
4-way context establishment exchange. | place. This makes the shim initiate the 4-way context | |||
establishment exchange. | ||||
As a result of this exchange, both A and B will know a list of | As a result of this exchange, both A and B will know a list of | |||
locators for each other. | locators for each other. | |||
If the context establishment exchange fails, the initiator will | If the context establishment exchange fails, the initiator will | |||
then know that the other end does not support shim6, and will | then know that the other end does not support shim6, and will | |||
revert to standard unicast behavior for the session. | continue with standard unicast behavior for the session. | |||
o Communication continues without any change for the ULP packets. | o Communication continues without any change for the ULP packets. | |||
In particular, there are no shim extension headers added to the | In particular, there are no shim extension headers added to the | |||
ULP packets, since the ULID pair is the same as the locator pair. | ULP packets, since the ULID pair is the same as the locator pair. | |||
In addition, there might be some messages exchanged between the | In addition, there might be some messages exchanged between the | |||
shim sub-layers for (un)reachability detection. | shim sub-layers for (un)reachability detection. | |||
o At some point in time something fails. Depending on the approach | o At some point in time something fails. Depending on the approach | |||
to reachability detection, there might be some advise from the | to reachability detection, there might be some advice from the | |||
ULP, or the shim (un)reachability detection might discover that | ULP, or the shim (un)reachability detection might discover that | |||
there is a problem. | there is a problem. | |||
At this point in time one or both ends of the communication need | At this point in time one or both ends of the communication need | |||
to probe the different alternate locator pairs until a working | to probe the different alternate locator pairs until a working | |||
pair is found, and rehome to using that pair. | pair is found, and switch to using that locator pair. | |||
o Once a working alternative locator pair has been found, the shim | o Once a working alternative locator pair has been found, the shim | |||
will rewrite the packets on transmit, and tag the packets with | will rewrite the packets on transmit, and tag the packets with | |||
shim6 Payload extension header, which contains the receiver's | shim6 Payload extension header, which contains the receiver's | |||
context tag. The receiver will use the context tag to find the | context tag. The receiver will use the context tag to find the | |||
context state which will indicate which addresses to place in the | context state which will indicate which addresses to place in the | |||
IPv6 header before passing the packet up to the ULP. The result | IPv6 header before passing the packet up to the ULP. The result | |||
is that from the perspective of the ULP the packet passes | is that from the perspective of the ULP the packet passes | |||
unmodified end-to-end, even though the IP routing infrastructure | unmodified end-to-end, even though the IP routing infrastructure | |||
sends the packet to a different locator. | sends the packet to a different locator. | |||
o The shim (un)reachability detection will monitor the new locator | o The shim (un)reachability detection will monitor the new locator | |||
pair as it monitored the original locator pair, so that subsequent | pair as it monitored the original locator pair, so that subsequent | |||
failures can be detected. | failures can be detected. | |||
o In addition to failures detected based on end-to-end observations, | o In addition to failures detected based on end-to-end observations, | |||
one endpoint might be know for certain that one or more of its | one endpoint might know for certain that one or more of its | |||
locators is not working. For instance, the network interface | locators is not working. For instance, the network interface | |||
might have failed or gone down (at layer 2), or an IPv6 address | might have failed or gone down (at layer 2), or an IPv6 address | |||
might have become deprecated or invalid. In such cases the host | might have become deprecated or invalid. In such cases the host | |||
can signal its peer that this address is no longer recommended to | can signal its peer that this address is no longer recommended to | |||
try. Thus this triggers something similar to a failure handling | try. Thus this triggers something similar to a failure handling | |||
in that a new, working locator pair must be found. | in that a new, working locator pair must be found. | |||
The protocol also has the ability to express other forms of | The protocol also has the ability to express other forms of | |||
locator preferences. A change in any preferences can be signaled | locator preferences. A change in any preferences can be signaled | |||
to the peer, which might make the peer choose to try a different | to the peer, which will made the peer record the new preferences. | |||
locator pair. Thus, this can also be treated similarly to a | A change in the preferences might optionally make the peer want to | |||
failure. | use a different locator pair. If it makes this decision, it | |||
follows the same locator switching procedure as after a failure | ||||
(by verifying that its peer is indeed present at the alternate | ||||
locator, etc). | ||||
o When the shim thinks that the context state is no longer used, it | o When the shim thinks that the context state is no longer used, it | |||
can garbage collect the state; there is no coordination necessary | can garbage collect the state; there is no coordination necessary | |||
with the peer host before the state is removed. There is a | with the peer host before the state is removed. There is a | |||
recovery message defined to be able to signal when there is no | recovery message defined to be able to signal when there is no | |||
context state, which can be used to detect and recover from both | context state, which can be used to detect and recover from both | |||
premature garbage collection, as well as complete state loss | premature garbage collection, as well as complete state loss | |||
(crash and reboot) of a peer. | (crash and reboot) of a peer. | |||
The exact mechanism to determine when the context state is no | The exact mechanism to determine when the context state is no | |||
longer used is implementation dependent. An implementation might | longer used is implementation dependent. An implementation might | |||
use the existence of ULP state (where known to the implementation) | use the existence of ULP state (where known to the implementation) | |||
as an indication that the state is still used, combined with a | as an indication that the state is still used, combined with a | |||
timer (to handle ULP state that might not be known to the shim | timer (to handle ULP state that might not be known to the shim | |||
sub-layer) to determine when the state is likely to no longer be | sub-layer) to determine when the state is likely to no longer be | |||
used. | used. | |||
NOTE: The ULP packets in shim6 are carried completely unmodified as | NOTE: The ULP packets in shim6 can be carried completely unmodified | |||
long as the ULID pair is used as the locator pair. After a switch to | as long as the ULID pair is used as the locator pair. After a switch | |||
a different locator pair the packets are "tagged" with a shim6 | to a different locator pair the packets are "tagged" with a shim6 | |||
extension header, so that the receiver can always determine the | extension header, so that the receiver can always determine the | |||
context to which they belong. This is accomplished by including an | context to which they belong. This is accomplished by including an | |||
8-octet shim payload extension header before the (extension) headers | 8-octet shim6 Payload Extension header before the (extension) headers | |||
that are processed by the IP endpoint sublayer and ULPs. | that are processed by the IP endpoint sublayer and ULPs. If | |||
subsequently the original ULIDs are selected as the active locator | ||||
pair then the tagging of packets with the shim6 extension header can | ||||
also be stopped. | ||||
4.1 Context Tags | 4.1 Context Tags | |||
A context between two hosts is actually a context between two ULIDs. | A context between two hosts is actually a context between two ULIDs. | |||
The context is identified by a pair of context tags. Each end gets | The context is identified by a pair of context tags. Each end gets | |||
to allocate a context tag, and once the context is established, the | to allocate a context tag, and once the context is established, most | |||
shim6 control messages contain the context tag that the receiver of | shim6 control messages contain the context tag that the receiver of | |||
the message allocated. Thus at a minimum the combination of <peer | the message allocated. Thus at a minimum the combination of <peer | |||
ULID, local ULID, local context tag> MUST uniquely identify one | ULID, local ULID, local context tag> have to uniquely identify one | |||
context. But since the Payload extension headers are demultiplexed | context. But since the Payload extension headers are demultiplexed | |||
without looking at the locators in the packet, the receiver MUST | without looking at the locators in the packet, the receiver will need | |||
allocate context tags that are unique for all its contexts. In | to allocate context tags that are unique for all its contexts. The | |||
addition, in order to minimize the reuse of context tags, the host | context tag is a 47-bit number (the largest which can fit in an | |||
SHOULD randomly cycle through the 2^47 context tag values,(e.g. | 8-octet extension header). | |||
following the guidelines described in [18]. The context tag is a 47- | ||||
bit number (the largest which can fit in an 8-octet extension | ||||
header). | ||||
The mechanism for detecting a loss of context state at the peer that | The mechanism for detecting a loss of context state at the peer that | |||
is currently proposed in this document assumes that the receiver can | is currently proposed in this document assumes that the receiver can | |||
tell the packets that need locator rewriting, even after it has lost | tell the packets that need locator rewriting, even after it has lost | |||
all state (e.g., due to a crash followed by a reboot). This is | all state (e.g., due to a crash followed by a reboot). This is | |||
achieved because after a rehoming event the packets that need | achieved because after a rehoming event the packets that need | |||
receive-side rewriting, carry the Payload extension header. | receive-side rewriting, carry the Payload extension header. | |||
Even though we do not overload the flow label field to carry the | ||||
context tag, any protocol (such as RSVP or NSIS) which signals | ||||
information about flows from the host stack to devices in the path, | ||||
need to be made aware of the locator agility introduced by a layer 3 | ||||
shim, so that the signaling can be performed for the locator pairs | ||||
that are currently being used. | ||||
4.2 Context Forking | 4.2 Context Forking | |||
It has been asserted that it will be important for future ULPs, in | It has been asserted that it will be important for future ULPs, in | |||
particular, future transport protocols, to be able to control which | particular, future transport protocols, to be able to control which | |||
locator pairs are used for different communication. For instance, | locator pairs are used for different communication. For instance, | |||
host A and host B might communicate using both VoIP traffic and ftp | host A and host B might communicate using both VoIP traffic and ftp | |||
traffic, and those communications might benefit from using different | traffic, and those communications might benefit from using different | |||
locator pairs. However, the fundamental shim6 mechanism uses a | locator pairs. However, the fundamental shim6 mechanism uses a | |||
single current locator pair for each context, thus a single context | single current locator pair for each context, thus a single context | |||
can not accomplish this. | can not accomplish this. | |||
For this reason, the shim6 protocol supports the notion of context | For this reason, the shim6 protocol supports the notion of context | |||
forking. This is a mechanism by which a ULP can specify (using some | forking. This is a mechanism by which a ULP can specify (using some | |||
API not yet defined) that a context for e.g., the ULID pair <A1, B2> | API not yet defined) that a context for e.g., the ULID pair <A1, B2> | |||
should be forked into two contexts. In this case the forked-off | should be forked into two contexts. In this case the forked-off | |||
context will be assigned a non-zero Forked Instance Identifier, while | context will be assigned a non-zero Forked Instance Identifier, while | |||
the default context has FII zero. | the default context has FII zero. | |||
The Forked Instance Identifier is a 32-bit identifier which has no | ||||
semantics in the protocol other then being part of the tuple which | ||||
identifies the context. The hosts can allocate FIIs e.g., as | ||||
sequential numbers for any given ULID pair. | ||||
No other special considerations are needed in the shim6 protocol to | No other special considerations are needed in the shim6 protocol to | |||
handle forked contexts. | handle forked contexts. | |||
Note that forking as specified does NOT allow A to be able to tell B | Note that forking as specified does NOT allow A to be able to tell B | |||
that certain traffic (a 5-tuple?) should be forked for the reverse | that certain traffic (a 5-tuple?) should be forked for the reverse | |||
direction. The shim forking mechanism as specified applies only to | direction. The shim6 forking mechanism as specified applies only to | |||
the sending of ULP packets. If some ULP wants to fork for both | the sending of ULP packets. If some ULP wants to fork for both | |||
directions, it is up to the ULP to set this up, and then instruct the | directions, it is up to the ULP to set this up, and then instruct the | |||
shim at each end to transmit using the forked context. | shim at each end to transmit using the forked context. | |||
4.3 API Extensions | 4.3 API Extensions | |||
Several API extensions have been discussed for shim6, but their | Several API extensions have been discussed for shim6, but their | |||
actual specification is out of scope for this document. The simplest | actual specification is out of scope for this document. The simplest | |||
one would be to add a socket option to be able to have traffic bypass | one would be to add a socket option to be able to have traffic bypass | |||
the shim (not create any state, and not use any state created by | the shim (not create any state, and not use any state created by | |||
other traffic). This could be an IPV6_DONTSHIM socket option. Such | other traffic). This could be an IPV6_DONTSHIM socket option. Such | |||
an option would be useful for protocols, such as DNS, where the | an option would be useful for protocols, such as DNS, where the | |||
application has its own failover mechanism (multiple NS records in | application has its own failover mechanism (multiple NS records in | |||
the case of DNS) and using the shim could potentially add extra | the case of DNS) and using the shim could potentially add extra | |||
latency with no added benefits. | latency with no added benefits. | |||
Some other API extensions are discussed in Section 19 | Some other API extensions are discussed in Appendix B | |||
4.4 Securing shim6 | 4.4 Securing shim6 | |||
The mechanisms are secured using a combination of techniques: | The mechanisms are secured using a combination of techniques: | |||
o The HBA technique [7] for validating the locators to prevent an | o The HBA technique [7] for verifying the locators to prevent an | |||
attacker from redirecting the packet stream to somewhere else. | attacker from redirecting the packet stream to somewhere else. | |||
o Requiring a Reachability Probe+Reply before a new locator is used | o Requiring a Reachability Probe+Reply before a new locator is used | |||
as the destination, in order to prevent 3rd party flooding | as the destination, in order to prevent 3rd party flooding | |||
attacks. | attacks. | |||
o The first message does not create any state on the responder. | o The first message does not create any state on the responder. | |||
Essentially a 3-way exchange is required before the responder | Essentially a 3-way exchange is required before the responder | |||
creates any state. This means that a state-based DoS attack | creates any state. This means that a state-based DoS attack | |||
(trying to use up all of memory on the responder) at least | (trying to use up all of memory on the responder) at least | |||
skipping to change at page 21, line 20 | skipping to change at page 21, line 23 | |||
establishment, carry the context tag assigned to the particular | establishment, carry the context tag assigned to the particular | |||
context. This implies that an attacker needs to discover that | context. This implies that an attacker needs to discover that | |||
context tag before being able to spoof any shim6 control message. | context tag before being able to spoof any shim6 control message. | |||
Such discovery probably requires to be along the path in order to | Such discovery probably requires to be along the path in order to | |||
be sniff the context tag value. The result is that through this | be sniff the context tag value. The result is that through this | |||
technique, the shim6 protocol is protected against off-path | technique, the shim6 protocol is protected against off-path | |||
attackers. | attackers. | |||
4.5 Overview of Shim Control Messages | 4.5 Overview of Shim Control Messages | |||
The shim context establishment is accomplished using four messages; | The shim6 context establishment is accomplished using four messages; | |||
I1, R1, I2, R2. Normally they are sent in that order from initiator | I1, R1, I2, R2. Normally they are sent in that order from initiator | |||
and responder, respectively. Should both ends attempt to set up | and responder, respectively. Should both ends attempt to set up | |||
context state at the same time (for the same ULID pair), then their | context state at the same time (for the same ULID pair), then their | |||
I1 messages might cross in flight, and result in an immediate R2 | I1 messages might cross in flight, and result in an immediate R2 | |||
message. [The names of these messages are borrowed from HIP [26].] | message. [The names of these messages are borrowed from HIP [25].] | |||
R1bis and I2bis messages are defined, which are used to recover a | R1bis and I2bis messages are defined, which are used to recover a | |||
context after it has been lost. A R1bis message is sent when a shim6 | context after it has been lost. A R1bis message is sent when a shim6 | |||
control or payload extension header arrives and there is no matching | control or Payload extension header arrives and there is no matching | |||
context state at the receiver. When such a message is received, it | context state at the receiver. When such a message is received, it | |||
will result in the re-creation of the shim context using the I2bis | will result in the re-creation of the shim6 context using the I2bis | |||
and R2 messages. | and R2 messages. | |||
The peers' lists of locators are normally exchanged as part of the | The peers' lists of locators are normally exchanged as part of the | |||
context establishment exchange. But the set of locators might be | context establishment exchange. But the set of locators might be | |||
dynamic. For this reason there is a Update message and Update | dynamic. For this reason there is a Update Request and Update | |||
acknowledgement, and a Locator List option. | Acknowledgement messages, and a Locator List option. | |||
Even when the list of locators is fixed, a host might determine that | Even when the list of locators is fixed, a host might determine that | |||
some preferences might have changed. For instance, it might | some preferences might have changed. For instance, it might | |||
determine that there is a locally visible failure that implies that | determine that there is a locally visible failure that implies that | |||
some locator(s) are no longer usable. This uses a Locator | some locator(s) are no longer usable. This uses a Locator | |||
Preferences option in the Update message. | Preferences option in the Update Request message. | |||
The mechanism for (un)reachability detection is called Force | The mechanism for (un)reachability detection is called Forced | |||
Bidirectional Communication (FBD). The FBD approach uses a Keepalive | Bidirectional Communication (FBD). The FBD approach uses a Keepalive | |||
message, which is sent when a host has received packets from the | message, which is sent when a host has received packets from the | |||
peer, but the ULP has not given the host an opportunity to send any | peer, but the ULP has not given the host an opportunity to send any | |||
payload packet to the peer. The message type is reserved in this | packet to the peer. The message type is reserved in this document, | |||
document, but the message format and processing rules are specified | but the message format and processing rules are specified in [8]. | |||
in [9]. | ||||
In addition, when the context is established and there is a failure | In addition, when the context is established and there is a failure | |||
there needs to be a way to probe the set of locator pairs to | there needs to be a way to probe the set of locator pairs to | |||
efficiently find a working pair. This document reserves an Probe | efficiently find a working pair. This document reserves an Probe | |||
message type, with the packet format and processing rules specified | message type, with the packet format and processing rules specified | |||
in [9]. | in [8]. | |||
The above probe and keepalive messages assume we have an established | The above probe and keepalive messages assume we have an established | |||
ULID-pair context. However, communication might fail during the | ULID-pair context. However, communication might fail during the | |||
initial contact (that is, when the application or transport protocol | initial contact (that is, when the application or transport protocol | |||
is trying to setup some communication). This is handled using the | is trying to setup some communication). This is handled using the | |||
mechanisms in the ULP to try different address pairs as specified in | mechanisms in the ULP to try different address pairs as specified in | |||
[13] [14]. In the future versions of the protocol, and with a richer | [12] [13]. In the future versions of the protocol, and with a richer | |||
API between the ULP and the shim, the shim might be help optimize | API between the ULP and the shim, the shim might be help optimize | |||
discovering a working locator pair during initial contact. This is | discovering a working locator pair during initial contact. This is | |||
for further study. | for further study. | |||
4.6 Extension Header Order | 4.6 Extension Header Order | |||
Since the shim is placed between the IP endpoint sub-layer and the IP | Since the shim is placed between the IP endpoint sub-layer and the IP | |||
routing sub-layer in the host, the shim header MUST be placed before | routing sub-layer in the host, the shim header will be placed before | |||
any endpoint extension headers (fragmentation headers, destination | any endpoint extension headers (fragmentation headers, destination | |||
options header, AH, ESP), but after any routing related headers (hop- | options header, AH, ESP), but after any routing related headers (hop- | |||
by-hop extensions header, routing header, a destinations options | by-hop extensions header, routing header, a destinations options | |||
header which precedes a routing header). When tunneling is used, | header which precedes a routing header). When tunneling is used, | |||
whether IP-in-IP tunneling or the special form of tunneling that | whether IP-in-IP tunneling or the special form of tunneling that | |||
Mobile IPv6 uses (with Home Address Options and Routing header type | Mobile IPv6 uses (with Home Address Options and Routing header type | |||
2), there is a choice whether the shim applies inside the tunnel or | 2), there is a choice whether the shim applies inside the tunnel or | |||
outside the tunnel, which effects the location of the shim6 header. | outside the tunnel, which effects the location of the shim6 header. | |||
In most cases IP-in-IP tunnels are used as a routing technique, thus | In most cases IP-in-IP tunnels are used as a routing technique, thus | |||
it makes sense to apply them on the locators which means that the | it makes sense to apply them on the locators which means that the | |||
sender would insert the shim6 header after any IP-in-IP | sender would insert the shim6 header after any IP-in-IP | |||
encapsulation; this is what occurs naturally when routers apply IP- | encapsulation; this is what occurs naturally when routers apply IP- | |||
in-IP encapsulation. In any case the receiver behavior is well- | in-IP encapsulation. Thus the packets would have: | |||
defined; a receiver processes the extension headers in order. The | ||||
precise interaction between Mobile IPv6 and shim6 is for further | ||||
study, but it might make sense to have Mobile IPv6 operate on | ||||
locators as well, meaning that the shim would be layered on top of | ||||
the MIPv6 mechanism. | ||||
4.7 Locator Validation | o Outer IP header | |||
There are two separate aspects of locator validation. One is to | o Inner IP header | |||
verify that the locator is tied to the ULID, i.e., that the host | ||||
which "owns" the ULID also "owns" the locator. The shim6 protocol | ||||
uses the HBA and CGA techniques for doing this validation. The other | ||||
is to verify that the host is indeed reachable at the claimed | ||||
locator. Such verification is needed both to make sure communication | ||||
can proceed, but also to prevent 3rd party flooding attacks [20]. | ||||
These different verifications happen at different times, since the | o Shim6 extension header (if needed> | |||
first might need to be performed before packets can be received by | ||||
the peer with the source locator in question, but the latter | ||||
verification is only needed before packets are sent to the locator. | ||||
Before a host can use a locator (different than the ULID) as the | o ULP | |||
source locator, it must know that the peer will accept packets with | ||||
that source locator as being part of this context. Thus the HBA and | ||||
CGA verification SHOULD be performed by the host before the host | ||||
acknowledges the new locator, by sending an Update Acknowledgement | ||||
message, or an R2 message. | ||||
Before a host can use a locator (different than the ULID) as the | But the shim can also be used to create "shimmed tunnels" i.e., where | |||
destination locator it MUST perform the HBA/CGA verification if this | an IP-in-IP tunnel uses the shim to be able to switch the tunnel | |||
was not performed before upon the reception of the locator set. In | endpoint addresses between different locators. In such a case the | |||
addition, it MUST verify that the ULID is indeed present at that | packets would have: | |||
locator. This verification is performed by doing a return- | ||||
routability test as part of the Probe sub-protocol [20]. | ||||
If the verification method in the Locator List option is not | o Outer IP header | |||
supported by the host, or if the verification method is not | ||||
consistent with what it in the CGA Parameter Data Structure (e.g., | o Shim6 extension header (if needed> | |||
the PDS doesn't contain the multiprefix extension, and the | ||||
verification method says to use HBA), then the host MUST ignore the | o Inner IP header | |||
Locator List and the packet in which it is contained, and the host | ||||
SHOULD generates an ICMP parameter problem (type 4, code 0), with the | o ULP | |||
Pointer referencing the octet in the Verification method that was | ||||
found inconsistent. | In any case, the receiver behavior is well-defined; a receiver | |||
processes the extension headers in order. However, the precise | ||||
interaction between Mobile IPv6 and shim6 is for further study, but | ||||
it might make sense to have Mobile IPv6 operate on locators as well, | ||||
meaning that the shim would be layered on top of the MIPv6 mechanism. | ||||
5. Message Formats | 5. Message Formats | |||
The shim6 messages are all carried using a new IP protocol number [to | The shim6 messages are all carried using a new IP protocol number [to | |||
be assigned by IANA]. The shim6 messages have a common header, | be assigned by IANA]. The shim6 messages have a common header, | |||
defined below, with some fixed fields, followed by type specific | defined below, with some fixed fields, followed by type specific | |||
fields. | fields. | |||
The shim6 messages are structured as an IPv6 extension header since | The shim6 messages are structured as an IPv6 extension header since | |||
the Payload extension header is used to carry the ULP packets after a | the Payload extension header is used to carry the ULP packets after a | |||
skipping to change at page 24, line 44 | skipping to change at page 24, line 44 | |||
8-octet units, not including the first 8 octets. | 8-octet units, not including the first 8 octets. | |||
P: A single bit to distinguish Payload extension headers | P: A single bit to distinguish Payload extension headers | |||
from control messages. | from control messages. | |||
5.2 Payload Extension Header Format | 5.2 Payload Extension Header Format | |||
The payload extension headers is used to carry ULP packets where the | The payload extension headers is used to carry ULP packets where the | |||
receiver must replace the content of the source and/or destination | receiver must replace the content of the source and/or destination | |||
fields in the IPv6 header before passing the packet to the ULP. Thus | fields in the IPv6 header before passing the packet to the ULP. Thus | |||
this extension header is included when the locators pair that is used | this extension header is required when the locators pair that is used | |||
is not the same as the ULID pair. | is not the same as the ULID pair. | |||
0 1 2 3 | 0 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Header | 0 |1| | | | Next Header | 0 |1| | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| Receiver Context Tag | | | Receiver Context Tag | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 31, line 16 | skipping to change at page 31, line 16 | |||
message. | message. | |||
Reserved2: 32-bit field. Reserved for future use. Zero on | Reserved2: 32-bit field. Reserved for future use. Zero on | |||
transmit. MUST be ignored on receipt. (Needed to | transmit. MUST be ignored on receipt. (Needed to | |||
make the options start on a multiple of 8 octet | make the options start on a multiple of 8 octet | |||
boundary.) | boundary.) | |||
The following options are defined for this message: | The following options are defined for this message: | |||
Responder Validator: Variable length option. Just a copy of the | Responder Validator: Variable length option. Just a copy of the | |||
Validator option in the R1 message. | Responder Validator option in the R1 message. | |||
ULID pair: When the IPv6 source and destination addresses in the | ULID pair: When the IPv6 source and destination addresses in the | |||
IPv6 header does not match the ULID pair, this option | IPv6 header does not match the ULID pair, this option | |||
MUST be included. An example of this is when | MUST be included. An example of this is when | |||
recovering from a lost context. | recovering from a lost context. | |||
Forked Instance Identifier: When another instance of an existent | Forked Instance Identifier: When another instance of an existent | |||
context with the same ULID pair is being created, a | context with the same ULID pair is being created, a | |||
Forked Instance Identifier option is included to | Forked Instance Identifier option is included to | |||
distinguish this new instance from the existent one. | distinguish this new instance from the existent one. | |||
Locator list: Optionally sent when the initiator immediately wants | Locator list: Optionally sent when the initiator immediately wants | |||
to tell the responder its list of locators. When it | to tell the responder its list of locators. When it | |||
is sent, the necessary HBA/CGA information for | is sent, the necessary HBA/CGA information for | |||
validating the locator list MUST also be included. | verifying the locator list MUST also be included. | |||
Locator Preferences: Optionally sent when the locators don't all have | Locator Preferences: Optionally sent when the locators don't all have | |||
equal preference. | equal preference. | |||
CGA Parameter Data Structure: Included when the locator list is | CGA Parameter Data Structure: Included when the locator list is | |||
included so the receiver can verify the locator list. | included so the receiver can verify the locator list. | |||
CGA Signature: Included when the some of the locators in the list use | CGA Signature: Included when the some of the locators in the list use | |||
CGA (and not HBA) for validation. | CGA (and not HBA) for verification. | |||
5.7 R2 Message Format | 5.7 R2 Message Format | |||
The R2 message is the fourth message in the context establishment | The R2 message is the fourth message in the context establishment | |||
exchange. The responder sends this in response to an I2 message. | exchange. The responder sends this in response to an I2 message. | |||
The R2 message is also used when both hosts send I1 messages at the | The R2 message is also used when both hosts send I1 messages at the | |||
same time and the I1 messages cross in flight. | same time and the I1 messages cross in flight. | |||
0 1 2 3 | 0 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 | |||
skipping to change at page 32, line 47 | skipping to change at page 32, line 47 | |||
has allocated for the context. | has allocated for the context. | |||
Initiator Nonce: 32-bit unsigned integer. Copied from the I2 | Initiator Nonce: 32-bit unsigned integer. Copied from the I2 | |||
message. | message. | |||
The following options are defined for this message: | The following options are defined for this message: | |||
Locator List: Optionally sent when the responder immediately wants | Locator List: Optionally sent when the responder immediately wants | |||
to tell the initiator its list of locators. When it | to tell the initiator its list of locators. When it | |||
is sent, the necessary HBA/CGA information for | is sent, the necessary HBA/CGA information for | |||
validating the locator list MUST also be included. | verifying the locator list MUST also be included. | |||
Locator Preferences: Optionally sent when the locators don't all have | Locator Preferences: Optionally sent when the locators don't all have | |||
equal preference. | equal preference. | |||
CGA Parameter Data Structure: Included when the locator list is | CGA Parameter Data Structure: Included when the locator list is | |||
included so the receiver can verify the locator list. | included so the receiver can verify the locator list. | |||
CGA Signature: Included when the some of the locators in the list use | CGA Signature: Included when the some of the locators in the list use | |||
CGA (and not HBA) for validation. | CGA (and not HBA) for verification. | |||
5.8 R1bis Message Format | 5.8 R1bis Message Format | |||
Should a host receive a packet with a shim Payload extension header | Should a host receive a packet with a shim Payload extension header | |||
or shim6 control message with type code 64-127 (such as an Update or | or shim6 control message with type code 64-127 (such as an Update or | |||
Probe message), and the host does not have any context state for the | Probe message), and the host does not have any context state for the | |||
locators (in the IPv6 source and destination fields) and the context | received context tag, then it will generate a R1bis message. | |||
tag, then it will generate a R1bis packet. | ||||
This packet allows the sender of the packet referring to the non- | This message allows the sender of the packet referring to the non- | |||
existent context to re-establish the context with a reduced packet | existent context to re-establish the context with a reduced context | |||
exchange. Upon the reception of the R1bis packet, the receiver can | establishment exchange. Upon the reception of the R1bis message, the | |||
proceed reestablishing the lost context by directly sending an I2bis | receiver can proceed reestablishing the lost context by directly | |||
message. | sending an I2bis message. | |||
0 1 2 3 | 0 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 59 | Hdr Ext Len |0| Type = 5 | Reserved1 |0| | | 59 | Hdr Ext Len |0| Type = 5 | Reserved1 |0| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Checksum |R| | | | Checksum |R| | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| Packet Context Tag | | | Packet Context Tag | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 34, line 12 | skipping to change at page 34, line 12 | |||
Type: 5 | Type: 5 | |||
Reserved1: 7-bit field. Reserved for future use. Zero on | Reserved1: 7-bit field. Reserved for future use. Zero on | |||
transmit. MUST be ignored on receipt. | transmit. MUST be ignored on receipt. | |||
R: 1-bit field. Reserved for future use. Zero on | R: 1-bit field. Reserved for future use. Zero on | |||
transmit. MUST be ignored on receipt. | transmit. MUST be ignored on receipt. | |||
Packet Context Tag: 47-bit unsigned integer. The context tag | Packet Context Tag: 47-bit unsigned integer. The context tag | |||
contained in the received packet that triggered the | contained in the received packet that triggered the | |||
generation of the R1bis packet. | generation of the R1bis message. | |||
Responder Nonce: 32-bit unsigned integer. A number picked by the | Responder Nonce: 32-bit unsigned integer. A number picked by the | |||
responder which the initiator will return in the I2bis | responder which the initiator will return in the I2bis | |||
message. | message. | |||
The following options are defined for this message: | The following options are defined for this message: | |||
Responder Validator: Variable length option. Typically a hash | Responder Validator: Variable length option. Typically a hash | |||
generated by the responder, which the responder uses | generated by the responder, which the responder uses | |||
together with the Responder Nonce value to verify that | together with the Responder Nonce value to verify that | |||
skipping to change at page 36, line 19 | skipping to change at page 36, line 19 | |||
transmit. MUST be ignored on receipt. (Note that 17 | transmit. MUST be ignored on receipt. (Note that 17 | |||
bits are not sufficient since the options need start | bits are not sufficient since the options need start | |||
on a multiple of 8 octet boundary.) | on a multiple of 8 octet boundary.) | |||
Packet Context Tag: 47-bit unsigned integer. Copied from the Packet | Packet Context Tag: 47-bit unsigned integer. Copied from the Packet | |||
Context Tag contained in the received R1bis. | Context Tag contained in the received R1bis. | |||
The following options are defined for this message: | The following options are defined for this message: | |||
Responder Validator: Variable length option. Just a copy of the | Responder Validator: Variable length option. Just a copy of the | |||
Validator option in the R1bis message. | Responder Validator option in the R1bis message. | |||
ULID pair: When the IPv6 source and destination addresses in the | ULID pair: When the IPv6 source and destination addresses in the | |||
IPv6 header does not match the ULID pair, this option | IPv6 header does not match the ULID pair, this option | |||
MUST be included. | MUST be included. | |||
Forked Instance Identifier: When another instance of an existent | Forked Instance Identifier: When another instance of an existent | |||
context with the same ULID pair is being created, a | context with the same ULID pair is being created, a | |||
Forked Instance Identifier option is included to | Forked Instance Identifier option is included to | |||
distinguish this new instance from the existent one. | distinguish this new instance from the existent one. | |||
Locator list: Optionally sent when the initiator immediately wants | Locator list: Optionally sent when the initiator immediately wants | |||
to tell the responder its list of locators. When it | to tell the responder its list of locators. When it | |||
is sent, the necessary HBA/CGA information for | is sent, the necessary HBA/CGA information for | |||
validating the locator list MUST also be included. | verifying the locator list MUST also be included. | |||
Locator Preferences: Optionally sent when the locators don't all have | Locator Preferences: Optionally sent when the locators don't all have | |||
equal preference. | equal preference. | |||
CGA Parameter Data Structure: Included when the locator list is | CGA Parameter Data Structure: Included when the locator list is | |||
included so the receiver can verify the locator list. | included so the receiver can verify the locator list. | |||
CGA Signature: Included when the some of the locators in the list use | CGA Signature: Included when the some of the locators in the list use | |||
CGA (and not HBA) for validation. | CGA (and not HBA) for verification. | |||
5.10 Update Request Message Format | 5.10 Update Request Message Format | |||
The Update Request Message is used to update either the list or | The Update Request Message is used to update either the list of | |||
locators, the locator preferences, and both. When the list of | locators, the locator preferences, and both. When the list of | |||
locators is updated, the message also contains the option(s) | locators is updated, the message also contains the option(s) | |||
necessary for HBA/CGA to secure this. The basic sanity check that | necessary for HBA/CGA to secure this. The basic sanity check that | |||
prevents off-path attackers from generating bogus updates is the | prevents off-path attackers from generating bogus updates is the | |||
context tag in the message. | context tag in the message. | |||
The update message contains options (the Locator List and the Locator | The update message contains options (the Locator List and the Locator | |||
Preferences) that, when included, completely replace the previous | Preferences) that, when included, completely replace the previous | |||
locator list and locator preferences, respectively. Thus there is no | locator list and locator preferences, respectively. Thus there is no | |||
mechanism to just send deltas to the locator list. | mechanism to just send deltas to the locator list. | |||
skipping to change at page 38, line 12 | skipping to change at page 38, line 12 | |||
The following options are defined for this message: | The following options are defined for this message: | |||
Locator List: The list of the sender's (new) locators. The locators | Locator List: The list of the sender's (new) locators. The locators | |||
might be unchanged and only the preferences have | might be unchanged and only the preferences have | |||
changed. | changed. | |||
Locator Preferences: Optionally sent when the locators don't all have | Locator Preferences: Optionally sent when the locators don't all have | |||
equal preference. | equal preference. | |||
CGA Parameter Data Structure: Included when the locator list is | CGA Parameter Data Structure (PDS): Included when the locator list is | |||
included and the PDS was not included in the | included and the PDS was not included in the | |||
I2/I2bis/R2 messages, so the receiver can verify the | I2/I2bis/R2 messages, so the receiver can verify the | |||
locator list. | locator list. | |||
CGA Signature: Included when the some of the locators in the list use | CGA Signature: Included when the some of the locators in the list use | |||
CGA (and not HBA) for validation. | CGA (and not HBA) for verification. | |||
5.11 Update Acknowledgement Message Format | 5.11 Update Acknowledgement Message Format | |||
This message is sent in response to a Update Request message. It | This message is sent in response to a Update Request message. It | |||
implies that the Update Request has been received, and that any new | implies that the Update Request has been received, and that any new | |||
locators in the Update Request can now be used as the source locators | locators in the Update Request can now be used as the source locators | |||
of packets. But it does not imply that the (new) locators have been | of packets. But it does not imply that the (new) locators have been | |||
verified to be used as a destination, since the host might defer the | verified to be used as a destination, since the host might defer the | |||
verification of a locator until it sees a need to use a locator as | verification of a locator until it sees a need to use a locator as | |||
the destination. | the destination. | |||
skipping to change at page 39, line 26 | skipping to change at page 39, line 26 | |||
Receiver Context Tag: 47-bit field. The Context Tag the receiver has | Receiver Context Tag: 47-bit field. The Context Tag the receiver has | |||
allocated for the context. | allocated for the context. | |||
Request Nonce: 32-bit unsigned integer. Copied from the Update | Request Nonce: 32-bit unsigned integer. Copied from the Update | |||
Request message. | Request message. | |||
No options are currently defined for this message. | No options are currently defined for this message. | |||
5.12 Keepalive Message Format | 5.12 Keepalive Message Format | |||
This message format is defined in [9]. | This message format is defined in [8]. | |||
The message is used to ensure that when a peer is sending ULP packets | The message is used to ensure that when a peer is sending ULP packets | |||
on a context, it always receives some packets in the reverse | on a context, it always receives some packets in the reverse | |||
direction. When the ULP is sending bidirectional traffic, no extra | direction. When the ULP is sending bidirectional traffic, no extra | |||
packets need to be inserted. But for a unidirectional ULP traffic | packets need to be inserted. But for a unidirectional ULP traffic | |||
pattern, the shim will send back some Keepalive messages when it is | pattern, the shim will send back some Keepalive messages when it is | |||
receiving ULP packets. | receiving ULP packets. | |||
5.13 Probe Message Format | 5.13 Probe Message Format | |||
This message and its semantics are defined in [9]. | This message and its semantics are defined in [8]. | |||
The idea behind that mechanism is to be able to handle the case when | The idea behind that mechanism is to be able to handle the case when | |||
one locator pair works in from A to B, and another locator pair works | one locator pair works in from A to B, and another locator pair works | |||
from B to A, but there is no locator pair which works in both | from B to A, but there is no locator pair which works in both | |||
directions. The protocol mechanism is that as A is sending probe | directions. The protocol mechanism is that as A is sending probe | |||
messages to B, B will observe which locator pairs it has received | messages to B, B will observe which locator pairs it has received | |||
from and report that back in probe messages it is sending to A. | from and report that back in probe messages it is sending to A. | |||
5.14 Option Formats | 5.14 Option Formats | |||
The format of the options is a snapshot of the current HIP option | The format of the options is a snapshot of the current HIP option | |||
format [26]. However, there is no intend to track any changes to the | format [25]. However, there is no intention to track any changes to | |||
HIP option format, nor is there an intent to use the same name space | the HIP option format, nor is there an intent to use the same name | |||
for the option type values. But using the same format will hopefully | space for the option type values. But using the same format will | |||
make it easier to import HIP capabilities into shim6 as extensions to | hopefully make it easier to import HIP capabilities into shim6 as | |||
shim6, should this turn out to be useful. | extensions to shim6, should this turn out to be useful. | |||
All of the TLV parameters have a length (including Type and Length | All of the TLV parameters have a length (including Type and Length | |||
fields) which is a multiple of 8 bytes. When needed, padding MUST be | fields) which is a multiple of 8 bytes. When needed, padding MUST be | |||
added to the end of the parameter so that the total length becomes a | added to the end of the parameter so that the total length becomes a | |||
multiple of 8 bytes. This rule ensures proper alignment of data. If | multiple of 8 bytes. This rule ensures proper alignment of data. If | |||
padding is added, the Length field MUST NOT include the padding. Any | padding is added, the Length field MUST NOT include the padding. Any | |||
added padding bytes MUST be zeroed by the sender, and their values | added padding bytes MUST be zeroed by the sender, and their values | |||
SHOULD NOT be checked by the receiver. | SHOULD NOT be checked by the receiver. | |||
Consequently, the Length field indicates the length of the Contents | Consequently, the Length field indicates the length of the Contents | |||
skipping to change at page 41, line 8 | skipping to change at page 41, line 8 | |||
Length: Length of the Contents, in bytes. | Length: Length of the Contents, in bytes. | |||
Contents: Parameter specific, defined by Type. | Contents: Parameter specific, defined by Type. | |||
Padding: Padding, 0-7 bytes, added if needed. | Padding: Padding, 0-7 bytes, added if needed. | |||
+------+---------------------------------+ | +------+---------------------------------+ | |||
| Type | Option Name | | | Type | Option Name | | |||
+------+---------------------------------+ | +------+---------------------------------+ | |||
| 1 | Validator | | | 1 | Responder Validator | | |||
| | | | | | | | |||
| 2 | Locator List | | | 2 | Locator List | | |||
| | | | | | | | |||
| 3 | Locator Preferences | | | 3 | Locator Preferences | | |||
| | | | | | | | |||
| 4 | CGA Parameter Data Structure | | | 4 | CGA Parameter Data Structure | | |||
| | | | | | | | |||
| 5 | CGA Signature | | | 5 | CGA Signature | | |||
| | | | | | | | |||
| 6 | ULID Pair | | | 6 | ULID Pair | | |||
skipping to change at page 41, line 31 | skipping to change at page 41, line 31 | |||
| | | | | | | | |||
| 10 | Probe Option | | | 10 | Probe Option | | |||
| | | | | | | | |||
| 11 | Reachability Option | | | 11 | Reachability Option | | |||
| | | | | | | | |||
| 12 | Payload Reception Report Option | | | 12 | Payload Reception Report Option | | |||
+------+---------------------------------+ | +------+---------------------------------+ | |||
Table 2 | Table 2 | |||
5.14.1 Validator Option Format | 5.14.1 Responder Validator Option Format | |||
The responder can choose exactly what input uses to compute the | The responder can choose exactly what input uses to compute the | |||
validator, and what one-way function (MD5, SHA1) it uses, as long as | validator, and what one-way function (MD5, SHA1) it uses, as long as | |||
the responder can verify that the validator it receives back in the | the responder can check that the validator it receives back in the I2 | |||
I2 or I2bis message is indeed one that: | or I2bis message is indeed one that: | |||
1)- it computed, | 1)- it computed, | |||
2)- it computed for the particular context, and | 2)- it computed for the particular context, and | |||
3)- that it isn't a replayed I2/I2bis message. | 3)- that it isn't a replayed I2/I2bis message. | |||
Some suggestions on how to generate the validators are captured in | Some suggestions on how to generate the validators are captured in | |||
Section 7.7.1 and Section 7.14.1. | Section 7.9.1 and Section 7.16.1. | |||
0 1 2 3 | 0 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type = 1 |0| Length | | | Type = 1 |0| Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
~ Validator ~ | ~ Validator ~ | |||
~ +-+-+-+-+-+-+-+-+ | ~ +-+-+-+-+-+-+-+-+ | |||
~ | Padding | | ~ | Padding | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 43, line 51 | skipping to change at page 43, line 51 | |||
Table 3 | Table 3 | |||
5.14.3 Locator Preferences Option Format | 5.14.3 Locator Preferences Option Format | |||
The Locator Preferences option can have some flags to indicate | The Locator Preferences option can have some flags to indicate | |||
whether or not a locator is known to work. In addition, the sender | whether or not a locator is known to work. In addition, the sender | |||
can include a notion of preferences. It might make sense to define | can include a notion of preferences. It might make sense to define | |||
"preferences" as a combination of priority and weight the same way | "preferences" as a combination of priority and weight the same way | |||
that DNS SRV records has such information. The priority would | that DNS SRV records has such information. The priority would | |||
provide a way to rank the locators, and within a given priority, the | provide a way to rank the locators, and within a given priority, the | |||
weight would provide a way to do some load sharing. See [10] for how | weight would provide a way to do some load sharing. See [9] for how | |||
SRV defines the interaction of priority and weight. | SRV defines the interaction of priority and weight. | |||
The minimum notion of preferences we need is to be able to indicate | The minimum notion of preferences we need is to be able to indicate | |||
that a locator is "dead". We can handle this using a single octet | that a locator is "dead". We can handle this using a single octet | |||
flag for each locator. | flag for each locator. | |||
We can extend that by carrying a larger "element" for each locator. | We can extend that by carrying a larger "element" for each locator. | |||
This document presently also defines 2-octet and 3-octet elements, | This document presently also defines 2-octet and 3-octet elements, | |||
and we can add more information by having even larger elements if | and we can add more information by having even larger elements if | |||
need be. | need be. | |||
skipping to change at page 44, line 44 | skipping to change at page 44, line 44 | |||
Case of Element Len = 1 is depicted. | Case of Element Len = 1 is depicted. | |||
Fields: | Fields: | |||
Locator List Generation: 32-bit unsigned integer. Indicates a | Locator List Generation: 32-bit unsigned integer. Indicates a | |||
generation number for the locator list to which the | generation number for the locator list to which the | |||
elements should apply. | elements should apply. | |||
Element Len: 8-bit unsigned integer. The length in octets of each | Element Len: 8-bit unsigned integer. The length in octets of each | |||
element. This draft defines the cases when the length | element. This specification defines the cases when | |||
is 1, 2, or 3. | the length is 1, 2, or 3. | |||
Element[i]: A field with a number of octets defined by the Element | Element[i]: A field with a number of octets defined by the Element | |||
Len field. Provides preferences for the i'th locator | Len field. Provides preferences for the i'th locator | |||
in the Locator List option that is in use. | in the Locator List option that is in use. | |||
Padding: Padding, 0-7 bytes, added if needed. See | Padding: Padding, 0-7 bytes, added if needed. See | |||
Section 5.14. | Section 5.14. | |||
When the Element length equals one, then the element consists of only | When the Element length equals one, then the element consists of only | |||
a one octet flags field. The currently defined set of flags are: | a one octet flags field. The currently defined set of flags are: | |||
skipping to change at page 45, line 29 | skipping to change at page 45, line 29 | |||
When the Element length equals two, then the element consists of a 1 | When the Element length equals two, then the element consists of a 1 | |||
octet flags field followed by a 1 octet priority field. The priority | octet flags field followed by a 1 octet priority field. The priority | |||
has the same semantics as the priority in DNS SRV records. | has the same semantics as the priority in DNS SRV records. | |||
When the Element length equals three, then the element consists of a | When the Element length equals three, then the element consists of a | |||
1 octet flags field followed by a 1 octet priority field, and a 1 | 1 octet flags field followed by a 1 octet priority field, and a 1 | |||
octet weight field. The weight has the same semantics as the weight | octet weight field. The weight has the same semantics as the weight | |||
in DNS SRV records. | in DNS SRV records. | |||
This document doesn't specify the format when the Element length is | ||||
more than three, except that any such formats MUST be defined so that | ||||
the first three octets are the same as in the above case, that is, a | ||||
of a 1 octet flags field followed by a 1 octet priority field, and a | ||||
1 octet weight field. | ||||
5.14.4 CGA Parameter Data Structure Option Format | 5.14.4 CGA Parameter Data Structure Option Format | |||
This option contains the CGA parameter data structure (hereafter | This option contains the CGA Parameter Data Structure (PDS). When | |||
called the PDS). When HBA is used to validate the locators, the PDS | HBA is used to verify the locators, the PDS contains the HBA | |||
contains the HBA multiprefix extension. When CGA is used to validate | multiprefix extension. When CGA is used to verify the locators, in | |||
the locators, in addition to the CGA PDS, the signature will need to | addition to the PDS option, the host also needs to include the | |||
be included as a CGA Signature option. | signature in the form of a CGA Signature option. | |||
0 1 2 3 | 0 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type = 4 |0| Length | | | Type = 4 |0| Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
~ CGA Parameter Data Structure ~ | ~ CGA Parameter Data Structure ~ | |||
~ +-+-+-+-+-+-+-+-+ | ~ +-+-+-+-+-+-+-+-+ | |||
~ | Padding | | ~ | Padding | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 46, line 10 | skipping to change at page 46, line 14 | |||
Fields: | Fields: | |||
CGA Parameter Data Structure: Variable length content. Content | CGA Parameter Data Structure: Variable length content. Content | |||
defined in [6] and [7]. | defined in [6] and [7]. | |||
Padding: Padding, 0-7 bytes, added if needed. See | Padding: Padding, 0-7 bytes, added if needed. See | |||
Section 5.14. | Section 5.14. | |||
5.14.5 CGA Signature Option Format | 5.14.5 CGA Signature Option Format | |||
When CGA is used for validation of one or more of the locators in the | When CGA is used for verification of one or more of the locators in | |||
Locator List option, then the message in question will need to | the Locator List option, then the message in question will need to | |||
contain this option. | contain this option. | |||
0 1 2 3 | 0 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type = 5 |0| Length | | | Type = 5 |0| Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
~ CGA Signature ~ | ~ CGA Signature ~ | |||
~ +-+-+-+-+-+-+-+-+ | ~ +-+-+-+-+-+-+-+-+ | |||
~ | Padding | | ~ | Padding | | |||
skipping to change at page 46, line 39 | skipping to change at page 46, line 43 | |||
1. The 128-bit CGA Message Type tag [CGA] value for | 1. The 128-bit CGA Message Type tag [CGA] value for | |||
SHIM6, 0x4A 30 5662 4858 574B 3655 416F 506A 6D48. | SHIM6, 0x4A 30 5662 4858 574B 3655 416F 506A 6D48. | |||
(The tag value has been generated randomly by the | (The tag value has been generated randomly by the | |||
editor of this specification.). | editor of this specification.). | |||
2. The Locator List Generation value of the | 2. The Locator List Generation value of the | |||
correspondent Locator List Option. | correspondent Locator List Option. | |||
3. The subset of locators included in the | 3. The subset of locators included in the | |||
correspondent Locator List Option which validation | correspondent Locator List Option which | |||
method is set to CGA. The locators MUST be | verification method is set to CGA. The locators | |||
included in the order they are listed in the | MUST be included in the order they are listed in | |||
Locator List Option. | the Locator List Option. | |||
Padding: Padding, 0-7 bytes, added if needed. See | Padding: Padding, 0-7 bytes, added if needed. See | |||
Section 5.14. | Section 5.14. | |||
5.14.6 ULID Pair Option Format | 5.14.6 ULID Pair Option Format | |||
I1, I2, and I2bis messages MUST contain the ULID pair; normally this | I1, I2, and I2bis messages MUST contain the ULID pair; normally this | |||
is in the IPv6 source and destination fields. In case that the ULID | is in the IPv6 source and destination fields. In case that the ULID | |||
for the context differ from the address pair included in the source | for the context differ from the address pair included in the source | |||
and destination address fields of the IPv6 packet used to carry the | and destination address fields of the IPv6 packet used to carry the | |||
skipping to change at page 48, line 10 | skipping to change at page 48, line 22 | |||
| Forked Instance Identifier | | | Forked Instance Identifier | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Fields: | Fields: | |||
Forked Instance Identifier: 32-bit field containing the identifier of | Forked Instance Identifier: 32-bit field containing the identifier of | |||
the particular forked instance. | the particular forked instance. | |||
5.14.8 Probe Option Format | 5.14.8 Probe Option Format | |||
This option is defined in [9]. | This option is defined in [8]. | |||
5.14.9 Reachability Option Format | 5.14.9 Reachability Option Format | |||
This option is defined in [9]. | This option is defined in [8]. | |||
5.14.10 Payload Reception Report Option Format | 5.14.10 Payload Reception Report Option Format | |||
This option is defined in [9]. | This option is defined in [8]. | |||
6. Conceptual Model of a Host | 6. Conceptual Model of a Host | |||
This section describes a conceptual model of one possible data | This section describes a conceptual model of one possible data | |||
structure organization that hosts will maintain for the purposes of | structure organization that hosts will maintain for the purposes of | |||
shim6. The described organization is provided to facilitate the | shim6. The described organization is provided to facilitate the | |||
explanation of how the shim6 protocol should behave. This document | explanation of how the shim6 protocol should behave. This document | |||
does not mandate that implementations adhere to this model as long as | does not mandate that implementations adhere to this model as long as | |||
their external behavior is consistent with that described in this | their external behavior is consistent with that described in this | |||
document. | document. | |||
skipping to change at page 49, line 32 | skipping to change at page 49, line 32 | |||
o The peer ULID; ULID(peer) | o The peer ULID; ULID(peer) | |||
o The local ULID; ULID(local) | o The local ULID; ULID(local) | |||
o The Forked Instance Identifier; FII. This is zero for the default | o The Forked Instance Identifier; FII. This is zero for the default | |||
context i.e., when there is no forking. | context i.e., when there is no forking. | |||
o The list of peer locators, with their preferences; Ls(peer) | o The list of peer locators, with their preferences; Ls(peer) | |||
o The generation number for the most recently received, validated | o The generation number for the most recently received, verified | |||
peer locator list. | peer locator list. | |||
o For each peer locator, the validation method to use (from the | o For each peer locator, the verification method to use (from the | |||
Locator List option). | Locator List option). | |||
o For each peer locator, a bit whether it has been validated using | o For each peer locator, a bit whether it has been verified using | |||
HBA or CGA, and a bit whether the locator has been probed to | HBA or CGA, and a bit whether the locator has been probed to | |||
verify that the ULID is present at that location. | verify that the ULID is present at that location. | |||
o The preferred peer locator - used as destination; Lp(peer) | o The preferred peer locator - used as destination; Lp(peer) | |||
o The set of local locators and the preferences; Ls(local) | o The set of local locators and the preferences; Ls(local) | |||
o The generation number for the most recently sent Locator List | o The generation number for the most recently sent Locator List | |||
option. | option. | |||
skipping to change at page 50, line 14 | skipping to change at page 50, line 14 | |||
o The context to expect in received control messages and payload | o The context to expect in received control messages and payload | |||
extension headers - allocated by the local host; CT(local) | extension headers - allocated by the local host; CT(local) | |||
o Timers for retransmission of the messages during context | o Timers for retransmission of the messages during context | |||
establishment and update messages. | establishment and update messages. | |||
o Depending how an implementation determines whether a context is | o Depending how an implementation determines whether a context is | |||
still in use, there might be a need to track the last time a | still in use, there might be a need to track the last time a | |||
packet was sent/received using the context. | packet was sent/received using the context. | |||
o Reachability state for the locator pairs as specified in [9]. | o Reachability state for the locator pairs as specified in [8]. | |||
o During pair exploration, information about the probe messages that | o During pair exploration, information about the probe messages that | |||
have been sent and received as specified in [9]. | have been sent and received as specified in [8]. | |||
6.2 Context States | 6.2 Context States | |||
The states that are used to describe the shim6 protocol are as | The states that are used to describe the shim6 protocol are as | |||
follows: | follows: | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| State | Explanation | | | State | Explanation | | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| IDLE | State machine start | | | IDLE | State machine start | | |||
skipping to change at page 52, line 17 | skipping to change at page 52, line 17 | |||
ULID-pair contexts are established using a 4-way exchange, which | ULID-pair contexts are established using a 4-way exchange, which | |||
allows the responder to avoid creating state on the first packet. As | allows the responder to avoid creating state on the first packet. As | |||
part of this exchange each end allocates a context tag, and it shares | part of this exchange each end allocates a context tag, and it shares | |||
this context tag and its set of locators with the peer. | this context tag and its set of locators with the peer. | |||
In some cases the 4-way exchange is not necessary, for instance when | In some cases the 4-way exchange is not necessary, for instance when | |||
both ends try to setup the context at the same time, or when | both ends try to setup the context at the same time, or when | |||
recovering from a context that has been garbage collected or lost at | recovering from a context that has been garbage collected or lost at | |||
one of the hosts. | one of the hosts. | |||
7.1 Normal context establishment | 7.1 Uniqness of Context Tags | |||
As part of establishing a new context, each host has to assign a | ||||
unique context tag. Since the Payload Extension headers are | ||||
demultiplexed based solely on the context tag value (without using | ||||
the locators), the context tag MUST be unique for each context. | ||||
In addition, in order to minimize the reuse of context tags, the host | ||||
SHOULD randomly cycle through the 2^47 context tag values,(e.g. | ||||
following the guidelines described in [17]). | ||||
7.2 Locator Verification | ||||
The peer's locators might need to be verified during context | ||||
establishment as well as when handling locator updates in Section 10. | ||||
There are two separate aspects of locator verification. One is to | ||||
verify that the locator is tied to the ULID, i.e., that the host | ||||
which "owns" the ULID is also the one that is claiming the locator | ||||
"ownership". The shim6 protocol uses the HBA or CGA techniques for | ||||
doing this verification. The other is to verify that the host is | ||||
indeed reachable at the claimed locator. Such verification is needed | ||||
both to make sure communication can proceed, but also to prevent 3rd | ||||
party flooding attacks [19]. These different verifications happen at | ||||
different times, since the first might need to be performed before | ||||
packets can be received by the peer with the source locator in | ||||
question, but the latter verification is only needed before packets | ||||
are sent to the locator. | ||||
Before a host can use a locator (different than the ULID) as the | ||||
source locator, it must know that the peer will accept packets with | ||||
that source locator as being part of this context. Thus the HBA/CGA | ||||
verification SHOULD be performed by the host before the host | ||||
acknowledges the new locator, by sending an Update Acknowledgement | ||||
message, or an R2 message. | ||||
Before a host can use a locator (different than the ULID) as the | ||||
destination locator it MUST perform the HBA/CGA verification if this | ||||
was not performed before upon the reception of the locator set. In | ||||
addition, it MUST verify that the ULID is indeed present at that | ||||
locator. This verification is performed by doing a return- | ||||
routability test as part of the Probe sub-protocol [8]. | ||||
If the verification method in the Locator List option is not | ||||
supported by the host, or if the verification method is not | ||||
consistent with the CGA Parameter Data Structure (e.g., the Parameter | ||||
Data Structure doesn't contain the multiprefix extension, and the | ||||
verification method says to use HBA), then the host MUST ignore the | ||||
Locator List and the message in which it is contained, and the host | ||||
SHOULD generates an ICMP parameter problem (type 4, code 0), with the | ||||
Pointer referencing the octet in the Verification method that was | ||||
found inconsistent. | ||||
7.3 Normal context establishment | ||||
The normal context establishment consists of a 4 message exchange in | The normal context establishment consists of a 4 message exchange in | |||
the order of I1, R1, I2, R2. | the order of I1, R1, I2, R2 as can be seen in Figure 24. | |||
Initiator Responder | Initiator Responder | |||
IDLE IDLE | IDLE IDLE | |||
------------- I1 --------------> | ------------- I1 --------------> | |||
I1-SENT | I1-SENT | |||
<------------ R1 --------------- | <------------ R1 --------------- | |||
IDLE | IDLE | |||
------------- I2 --------------> | ------------- I2 --------------> | |||
I2-SENT | I2-SENT | |||
<------------ R2 --------------- | <------------ R2 --------------- | |||
ESTABLISHED ESTABLISHED | ESTABLISHED ESTABLISHED | |||
Figure 24 | Figure 24: Normal context establishment | |||
7.2 Concurrent context establishment | 7.4 Concurrent context establishment | |||
When both ends try to initiate a context for the same ULID pair, then | When both ends try to initiate a context for the same ULID pair, then | |||
we might end up with crossing I1 messages. Alternatively, since no | we might end up with crossing I1 messages. Alternatively, since no | |||
state is created when receiving the I1, a host might send a I1 after | state is created when receiving the I1, a host might send a I1 after | |||
having sent a R1 message. | having sent a R1 message. | |||
Since a host remembers that it has sent an I1, it can respond to an | Since a host remembers that it has sent an I1, it can respond to an | |||
I1 from the peer (for the same ULID), with a R2. Such behavior is | I1 from the peer (for the same ULID-pair), with a R2, resulting in | |||
needed to correctly respond to retransmitted I1 messages, which might | the message exchange shown in Figure 25. Such behavior is needed for | |||
be needed if the R2 message has been lost. | other reasons such as to correctly respond to retransmitted I1 | |||
messages, which occur when the R2 message has been lost. | ||||
Host A Host B | Host A Host B | |||
IDLE IDLE | IDLE IDLE | |||
-\ | -\ | |||
I1-SENT---\ | I1-SENT---\ | |||
---\ /--- | ---\ /--- | |||
--- I1 ---\ /--- I1-SENT | --- I1 ---\ /--- I1-SENT | |||
---\ | ---\ | |||
/--- I1 ---/ ---\ | /--- I1 ---/ ---\ | |||
skipping to change at page 53, line 27 | skipping to change at page 54, line 28 | |||
-\ | -\ | |||
I1-SENT---\ | I1-SENT---\ | |||
---\ /--- | ---\ /--- | |||
--- R2 ---\ /--- I1-SENT | --- R2 ---\ /--- I1-SENT | |||
---\ | ---\ | |||
/--- R2 ---/ ---\ | /--- R2 ---/ ---\ | |||
/--- --> | /--- --> | |||
<--- ESTABLISHED | <--- ESTABLISHED | |||
ESTABLISHED | ESTABLISHED | |||
Figure 25 | Figure 25: Crossing I1 messages | |||
If a host has received an I1 and sent an R1, it has no state to | If a host has received an I1 and sent an R1, it has no state to | |||
remember this. Thus if the ULP on the host sends down packets, this | remember this. Thus if the ULP on the host sends down packets, this | |||
might trigger the host to send an I1 message itself. Thus while one | might trigger the host to send an I1 message itself. Thus while one | |||
end is sending an I1 the other is sending an I2. | end is sending an I1 the other is sending an I2 as can be seen in | |||
Figure 26. | ||||
Host A Host B | Host A Host B | |||
IDLE IDLE | IDLE IDLE | |||
-\ | -\ | |||
---\ | ---\ | |||
I1-SENT ---\ | I1-SENT ---\ | |||
--- I1 ---\ | --- I1 ---\ | |||
---\ | ---\ | |||
---\ | ---\ | |||
skipping to change at page 54, line 30 | skipping to change at page 55, line 30 | |||
/--- | /--- | |||
<--- | <--- | |||
-\ | -\ | |||
I2-SENT---\ | I2-SENT---\ | |||
---\ /--- | ---\ /--- | |||
--- I2---\ /--- I1-SENT | --- I2---\ /--- I1-SENT | |||
---\ | ---\ | |||
/--- I1 ---/ ---\ | /--- I1 ---/ ---\ | |||
/--- --> | /--- --> | |||
<--- I1-SENT | <--- ESTABLISHED | |||
-\ | -\ | |||
I2-SENT---\ | I2-SENT---\ | |||
---\ /--- | ---\ /--- | |||
--- R2 ---\ /--- | --- R2 ---\ /--- | |||
---\ | ---\ | |||
/--- R2 ---/ ---\ | /--- R2 ---/ ---\ | |||
/--- --> | /--- --> | |||
<--- ESTABLISHED | <--- ESTABLISHED | |||
ESTABLISHED | ESTABLISHED | |||
Figure 26 | Figure 26: Crossing I2 and I1 | |||
7.3 Context recovery | 7.5 Context recovery | |||
Due to garbage collection, we can end up with one end having and | Due to garbage collection, we can end up with one end having and | |||
using the context state, and the other end not having any state. We | using the context state, and the other end not having any state. We | |||
need to be able to recover this state at the end that has lost it, | need to be able to recover this state at the end that has lost it, | |||
before we can use it. | before we can use it. | |||
This need can arise in the following cases: | This need can arise in the following cases: | |||
o The communication is working using the ULID pair as the locator | o The communication is working using the ULID pair as the locator | |||
pair, but a problem arises, and the end that has retained the | pair, but a problem arises, and the end that has retained the | |||
context state decides to probe alternate locator pairs. | context state decides to probe alternate locator pairs. | |||
o The communication is working using a locator pair that is not the | o The communication is working using a locator pair that is not the | |||
ULID pair, hence the ULP packets sent from a peer that has | ULID pair, hence the ULP packets sent from a peer that has | |||
retained the context state use the shim payload extension header. | retained the context state use the shim6 Payload extension header. | |||
o The host that retained the state sends a control message (e.g. an | o The host that retained the state sends a control message (e.g. an | |||
UPDATE message). | Update Request message). | |||
In all the cases the result is that the peer without state receives a | In all the cases the result is that the peer without state receives a | |||
shim message for which it has to context for the context tag. | shim message for which it has to context for the context tag. | |||
In all of those cases we can recover the context by having the node | In all of those cases we can recover the context by having the node | |||
which doesn't have a context state, send back an R1bis message, and | which doesn't have a context state, send back an R1bis message, and | |||
have then complete the recovery with a I2bis and R2 message. | have then complete the recovery with a I2bis and R2 message as can be | |||
seen in Figure 27. | ||||
Host A Host B | Host A Host B | |||
Context for | Context for | |||
CT(peer)=X Discards context for | CT(peer)=X Discards context for | |||
CT(local)=X | CT(local)=X | |||
ESTABLISHED IDLE | ESTABLISHED IDLE | |||
---- payload, probe, etc. -----> No context state | ---- payload, probe, etc. -----> No context state | |||
for CT(local)=X | for CT(local)=X | |||
<------------ R1bis ------------ | <------------ R1bis ------------ | |||
IDLE | IDLE | |||
------------- I2bis -----------> | ------------- I2bis -----------> | |||
I2BIS_SENT | I2BIS_SENT | |||
<------------ R2 --------------- | <------------ R2 --------------- | |||
ESTABLISHED ESTABLISHED | ESTABLISHED ESTABLISHED | |||
Figure 27 | Figure 27: Context loss at receiver | |||
If one end has garbage collected or lost the context state, it might | If one end has garbage collected or lost the context state, it might | |||
try to create a new context state (for the same ULID pair), by | try to create a new context state (for the same ULID pair), by | |||
sending an I1 message. The peer (that still has the context state) | sending an I1 message. The peer (that still has the context state) | |||
can simply reply with an R2 message in this case. | will reply with an R1 message and the full 4-way exchange will be | |||
performed again in this case as can be seen in Figure 28. | ||||
Host A Host B | Host A Host B | |||
Context for | Context for | |||
CT(peer)=X Discards context for | CT(peer)=X Discards context for | |||
ULIDs A1, B1 CT(local)=X | ULIDs A1, B1 CT(local)=X | |||
ESTABLISHED IDLE | ESTABLISHED IDLE | |||
Finds <------------ I1 --------------- Tries to setup | Finds <------------ I1 --------------- Tries to setup | |||
existing for ULIDs A1, B1 | existing for ULIDs A1, B1 | |||
context I1-SENT | context, | |||
but CT(peer) I1-SENT | ||||
doesn't match | ||||
------------- R1 ---------------> | ||||
Left old context | ||||
in ESTABLISHED | ||||
<------------ I2 --------------- | ||||
Recreate context | ||||
with new CT(peer) I2-SENT | ||||
and Ls(peer). | ||||
ESTABLISHED | ||||
------------- R2 --------------> | ------------- R2 --------------> | |||
ESTABLISHED ESTABLISHED | ESTABLISHED ESTABLISHED | |||
Figure 28 | Figure 28: Context loss at sender | |||
7.4 Context confusion | 7.6 Context confusion | |||
Since each end might garbage collect the context state we can have | Since each end might garbage collect the context state we can have | |||
the case when one end has retained the context state and tries to use | the case when one end has retained the context state and tries to use | |||
it, while the other end has lost the state. We discussed this in the | it, while the other end has lost the state. We discussed this in the | |||
previous section on recovery. But for the same reasons, when one | previous section on recovery. But for the same reasons, when one | |||
host retains context tag X for ULID pair <A1, B1>, the other end | host retains context tag X as CT(peer) for ULID pair <A1, B1>, the | |||
might end up allocating that context tag for another ULID pair, e.g., | other end might end up allocating that context tag as CT(local) for | |||
<A3, B1> between the same hosts. In this case we can not use the | another ULID pair, e.g., <A3, B1> between the same hosts. In this | |||
recovery mechanisms since there needs to be separate context tags for | case we can not use the recovery mechanisms since there needs to be | |||
the two ULID pairs. | separate context tags for the two ULID pairs. | |||
This type of "confusion" can be observed in two cases (assuming it is | This type of "confusion" can be observed in two cases (assuming it is | |||
A that has retained the state and B has dropped it): | A that has retained the state and B has dropped it): | |||
o B decides to create a context for ULID pair <A3, B1>, and | o B decides to create a context for ULID pair <A3, B1>, and | |||
allocates X as its context tag for this, and sends an I1 to A. | allocates X as its context tag for this, and sends an I1 to A. | |||
o A decides to create a context for ULID pair <A3, B1>, and starts | o A decides to create a context for ULID pair <A3, B1>, and starts | |||
the exchange by sending I1 to B. When B receives the I2 message, | the exchange by sending I1 to B. When B receives the I2 message, | |||
it allocates X as the context tag for this context. | it allocates X as the context tag for this context. | |||
skipping to change at page 57, line 15 | skipping to change at page 58, line 29 | |||
The requirement is that the old context which used the context tag | The requirement is that the old context which used the context tag | |||
MUST be removed; it can no longer be used to send packets. Thus A | MUST be removed; it can no longer be used to send packets. Thus A | |||
would forcibly remove the context state for <A1, B1, X>, so that it | would forcibly remove the context state for <A1, B1, X>, so that it | |||
can accept the new context for <A3, B1, X>. An implementation MAY | can accept the new context for <A3, B1, X>. An implementation MAY | |||
re-create a context to replace the one that was removed; in this case | re-create a context to replace the one that was removed; in this case | |||
for <A1, B1>. The normal I1, R1, I2, R2 establishment exchange would | for <A1, B1>. The normal I1, R1, I2, R2 establishment exchange would | |||
then pick unique context tags for that replacement context. This re- | then pick unique context tags for that replacement context. This re- | |||
creation is OPTIONAL, but might be useful when there is ULP | creation is OPTIONAL, but might be useful when there is ULP | |||
communication which is using the ULID pair whose context was removed. | communication which is using the ULID pair whose context was removed. | |||
7.5 Sending I1 messages | Note that an I1 message with a duplicate context tag should not cause | |||
the removal of the old context state; this operation needs to be | ||||
deferred until the reception of the I2 message. | ||||
7.7 Sending I1 messages | ||||
When the shim layer decides to setup a context for a ULID pair, it | When the shim layer decides to setup a context for a ULID pair, it | |||
starts by allocating and initializing the context state for its end. | starts by allocating and initializing the context state for its end. | |||
As part of this it assigns a random context tag to the context that | As part of this it assigns a random context tag to the context that | |||
is not being used as CT(local) by any other context . In the case | is not being used as CT(local) by any other context . In the case | |||
that a new API is used and the ULP requests a forked context, the | that a new API is used and the ULP requests a forked context, the | |||
Forked Instance Identifier value will be set to a non-zero value. | Forked Instance Identifier value will be set to a non-zero value. | |||
Otherwise, the FII value is zero. Then the initiator can send an I1 | Otherwise, the FII value is zero. Then the initiator can send an I1 | |||
message and set the context state to I1-SENT. The I1 message MUST | message and set the context state to I1-SENT. The I1 message MUST | |||
include the ULID pair; normally in the IPv6 source and destination | include the ULID pair; normally in the IPv6 source and destination | |||
fields. But if the ULID pair for the context is not used as locator | fields. But if the ULID pair for the context is not used as locator | |||
pair for the I1 message, then a ULID option MUST be included in the | pair for the I1 message, then a ULID option MUST be included in the | |||
I1 message. In addition, if a Forked Instance Identifier value is | I1 message. In addition, if a Forked Instance Identifier value is | |||
non-zero, the I1 message MUST include a Context Instance Identifier | non-zero, the I1 message MUST include a Context Instance Identifier | |||
option containing the correspondent value. | option containing the correspondent value. | |||
7.6 Retransmitting I1 messages | 7.8 Retransmitting I1 messages | |||
If the host does not receive an I2 or R2 message in response to the | If the host does not receive an I2 or R2 message in response to the | |||
I1 message after I1_TIMEOUT time, then it needs to retransmit the I1 | I1 message after I1_TIMEOUT time, then it needs to retransmit the I1 | |||
message. The retransmissions should use a retransmission timer with | message. The retransmissions should use a retransmission timer with | |||
binary exponential backoff to avoid creating congestion issues for | binary exponential backoff to avoid creating congestion issues for | |||
the network when lots of hosts perform I1 retransmissions. Also, the | the network when lots of hosts perform I1 retransmissions. Also, the | |||
actual timeout value should be randomized between 0.5 and 1.5 of the | actual timeout value should be randomized between 0.5 and 1.5 of the | |||
nominal value to avoid self-synchronization. | nominal value to avoid self-synchronization. | |||
If, after I1_RETRIES_MAX retransmissions, there is no response, then | If, after I1_RETRIES_MAX retransmissions, there is no response, then | |||
most likely the peer does not implement the shim6 protocol, or there | most likely the peer does not implement the shim6 protocol, or there | |||
could be a firewall that blocks the protocol. In this case it makes | could be a firewall that blocks the protocol. In this case it makes | |||
sense for the host to remember to not try again to establish a | sense for the host to remember to not try again to establish a | |||
context with that ULID. However, any such negative caching should | context with that ULID. However, any such negative caching should | |||
retained for at most NO_R1_HOLDDOWN_TIME, to be able to later setup a | retained for at most NO_R1_HOLDDOWN_TIME, to be able to later setup a | |||
context should the problem have been that the host was not reachable | context should the problem have been that the host was not reachable | |||
at all when the shim tried to establish the context. | at all when the shim tried to establish the context. | |||
If the host receives an ICMP error with "payload type unknown" (type | If the host receives an ICMP error with "payload type unknown" (type | |||
4, code 1) and the included packet is the I1 packet it just sent, | 4, code 1) and the included packet is the I1 message it just sent, | |||
then this is a more reliable indication that the peer ULID does not | then this is a more reliable indication that the peer ULID does not | |||
implement shim6. Again,in this case, the host should remember to not | implement shim6. Again, in this case, the host should remember to | |||
try again to establish a context with that ULID. Such negative | not try again to establish a context with that ULID. Such negative | |||
caching should retained for at most ICMP_HOLDDOWN_TIME, which should | caching should retained for at most ICMP_HOLDDOWN_TIME, which should | |||
be significantly longer than the previous case. | be significantly longer than the previous case. | |||
7.7 Receiving I1 messages | 7.9 Receiving I1 messages | |||
A host MUST silently discard any received I1 messages that do not | A host MUST silently discard any received I1 messages that do not | |||
satisfy all of the following validity checks in addition to those | satisfy all of the following validity checks in addition to those | |||
specified in Section 12.2: | specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 1, i.e., the length is at least | o The Hdr Ext Len field is at least 1, i.e., the length is at least | |||
16 octets. | 16 octets. | |||
Upon the reception of an I1 message, the host extracts the ULID pair | Upon the reception of an I1 message, the host extracts the ULID pair | |||
and the Forked Instance identifier from the message. If there is no | and the Forked Instance Identifier from the message. If there is no | |||
ULID-pair option, then the ULID pair is taken from the source and | ULID-pair option, then the ULID pair is taken from the source and | |||
destination fields in the IPv6 header. If there is no FII option in | destination fields in the IPv6 header. If there is no FII option in | |||
the message, then the FII value is taken to be zero. | the message, then the FII value is taken to be zero. | |||
Next the host looks for an existing context which matches the ULID | Next the host looks for an existing context which matches the ULID | |||
pair and the FII. If such a context exists, the host verifies that | pair and the FII. | |||
If no state is found (i.e., the state is IDLE), then the host replies | ||||
with a R1 message as specified below. | ||||
If such a context exists in ESTABLISHED state, the host verifies that | ||||
the locator of the Initiator is included in Ls(peer) (This check is | the locator of the Initiator is included in Ls(peer) (This check is | |||
unnecessary if there is no ULID-pair option in the I1 message). If | unnecessary if there is no ULID-pair option in the I1 message). | |||
the locators do not fall in the locator sets, then the host MUST | ||||
discard the I1 packet and perform no further processing. | ||||
If no state is found (i.e., the state is IDLE), or the locators do | If the state exists in ESTABLISHED state and the locators do not fall | |||
fall in the sets, then the host looks at the state of the context: | in the locator sets, then the host replies with a R1 message as | |||
specified below. This completes the I1 processing, with the context | ||||
state being unchanged. | ||||
o If the state is IDLE, then the host will form an R1 packet as | If the state exists in ESTABLISHED state and the locators do fall in | |||
specified below. | the sets, then the host compares CT(peer) for the context with the CT | |||
contained in the I1 message. | ||||
o If the state is ESTABLISHED, it means that the Initiator has lost | o If the context tags match, then this probably means that the R2 | |||
the context information for this context and it is trying to | message was lost and this I1 is a retransmission. In this case, | |||
establish a new one. In this case, the host MUST update the | the host replies with a R2 message containing the information | |||
existing context and replace CT(peer) with the Initiator Context | available for the existent context. | |||
Tag included in the I1 message and then reply with an R2 message, | ||||
including the associated state information. In this case the host | ||||
MUST look for any other (old) context with a matching CT(peer) as | ||||
specified in Section 7.12. This completes the I1 processing, with | ||||
the context state being unchanged. | ||||
o In an other state (I1-SENT, I2-SENT, I2BIS-SENT), we are in the | o If the context tags do not match, then it probably means that the | |||
situation of Concurrent context establishment described above. In | Initiator has lost the context information for this context and it | |||
this case, the host sets CT(peer) to the Initiator Context tag of | is trying to establish a new one for the same ULID-pair. In this | |||
the I1 packet, and replies with a R2 message. This completes the | case, the host replies with a R1 message as specified below. This | |||
I1 processing, with the context state being unchanged. | completes the I1 processing, with the context state being | |||
unchanged. | ||||
If the state exists in other state (I1-SENT, I2-SENT, I2BIS-SENT), we | ||||
are in the situation of Concurrent context establishment described | ||||
in Section 7.4. In this case, the host leaves CT(peer) unchanged, | ||||
and replies with a R2 message. This completes the I1 processing, | ||||
with the context state being unchanged. | ||||
When the host needs to send a R1 message in response to the I1 | When the host needs to send a R1 message in response to the I1 | |||
message, it copies the Initiator Nonce from the I1 message to the R1 | message, it copies the Initiator Nonce from the I1 message to the R1 | |||
message, generates a Responder Nonce and calculates a validator as | message, generates a Responder Nonce and calculates a Responder | |||
suggested in the following section. No state is created on the host | Validator option as suggested in the following section. No state is | |||
in this case. | created on the host in this case. | |||
When the host needs to send a R2 message in response to the I1 | When the host needs to send a R2 message in response to the I1 | |||
message, it copies the Initiator Nonce from the I1 message to the R2 | message, it copies the Initiator Nonce from the I1 message to the R2 | |||
message, and otherwise follows the normal rules for forming an R2 | message, and otherwise follows the normal rules for forming an R2 | |||
message (see Section 7.11). | message (see Section 7.13). | |||
7.7.1 Generating the R1 validator | 7.9.1 Generating the R1 Validator | |||
One way for the responder to properly generate validators is to | One way for the responder to properly generate validators is to | |||
maintain a single secret (S) and a running counter for the Responder | maintain a single secret (S) and a running counter for the Responder | |||
Nonce. | Nonce. | |||
In the case the validator is generated to be included in a R1 packet, | In the case the validator is generated to be included in a R1 | |||
for each I1 message. The responder can increase the counter, use the | message, for each I1 message. The responder can increase the | |||
counter value as the responder nonce, and use the following | counter, use the counter value as the responder nonce, and use the | |||
information as input to the one-way function: | following information as input to the one-way function: | |||
o The the secret S | o The the secret S | |||
o That Responder Nonce | o That Responder Nonce | |||
o The Initiator Context Tag from the I1 message | o The Initiator Context Tag from the I1 message | |||
o The ULIDs from the I1 message | o The ULIDs from the I1 message | |||
o The locators from the I1 message (strictly only needed if they are | o The locators from the I1 message (strictly only needed if they are | |||
different from the ULIDs) | different from the ULIDs) | |||
o The forked instance identifier if such option was included in the | o The forked instance identifier if such option was included in the | |||
I1 message | I1 message | |||
and then the output of the hash function as validator string. | and then the output of the hash function is used as the validator | |||
octet string. | ||||
7.8 Receiving R1 messages and sending I2 messages | 7.10 Receiving R1 messages and sending I2 messages | |||
A host MUST silently discard any received R1 messages that do not | A host MUST silently discard any received R1 messages that do not | |||
satisfy all of the following validity checks in addition to those | satisfy all of the following validity checks in addition to those | |||
specified in Section 12.2: | specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 1, i.e., the length is at least | o The Hdr Ext Len field is at least 1, i.e., the length is at least | |||
16 octets. | 16 octets. | |||
Upon the reception of an R1 message, the host extracts the Initiator | Upon the reception of an R1 message, the host extracts the Initiator | |||
Nonce and the Locator Pair from the message (the latter from the | Nonce and the Locator Pair from the message (the latter from the | |||
source and destination fields in the IPv6 header). Next the host | source and destination fields in the IPv6 header). Next the host | |||
looks for an existing context which matches the Initiator Nonce and | looks for an existing context which matches the Initiator Nonce and | |||
where the locators are contained in Ls(peer) and Ls(local), | where the locators are contained in Ls(peer) and Ls(local), | |||
respectively. If no such context is not found, then the R1 packet is | respectively. If no such context is found, then the R1 message is | |||
silently discarded. | silently discarded. | |||
If such a context is found, then the host looks at the state: | If such a context is found, then the host looks at the state: | |||
o If the state is I1-SENT, then it sends an I2 message as specified | o If the state is I1-SENT, then it sends an I2 message as specified | |||
below. | below. | |||
o In any other state (I2-SENT, I2BIS-SENT, ESTABLISHED) then the | o In any other state (I2-SENT, I2BIS-SENT, ESTABLISHED) then the | |||
host has already sent an I2 packet then this is probably a reply | host has already sent an I2 message then this is probably a reply | |||
to a retransmitted I1 packet, so this R1 message MUST be silently | to a retransmitted I1 message, so this R1 message MUST be silently | |||
discarded. | discarded. | |||
When the host sends an I2 message, then it includes the validator | When the host sends an I2 message, then it includes the Responder | |||
option that was in the R1 message. The I2 message MUST include the | Validator option that was in the R1 message. The I2 message MUST | |||
ULID pair; normally in the IPv6 source and destination fields. If a | include the ULID pair; normally in the IPv6 source and destination | |||
ULID-pair option was included in the I1 message then it MUST be | fields. If a ULID-pair option was included in the I1 message then it | |||
included in the I2 message as well. In addition, if the Forked | MUST be included in the I2 message as well. In addition, if the | |||
Instance Identifier value for this context is non-zero, the I2 | Forked Instance Identifier value for this context is non-zero, the I2 | |||
message MUST contain a Forked Instance Identifier Option carrying | message MUST contain a Forked Instance Identifier Option carrying | |||
this value. Besides, the I2 message contains an Initiator Nonce. | this value. Besides, the I2 message contains an Initiator Nonce. | |||
This is not required to be the same than the one included in the | This is not required to be the same than the one included in the | |||
previous I1 message. | previous I1 message. | |||
The I2 message also includes the Initiator's locator list and the CGA | The I2 message also includes the Initiator's locator list and the CGA | |||
parameter data structure. If CGA (and not HBA) is used to verify the | parameter data structure. If CGA (and not HBA) is used to verify the | |||
locator list, then Initiator also signs the key parts of the message | locator list, then Initiator also signs the key parts of the message | |||
and includes a CGA signature option containing the signature. | and includes a CGA signature option containing the signature. | |||
When the I2 message has been sent, the state is set to I2-SENT. | When the I2 message has been sent, the state is set to I2-SENT. | |||
7.9 Retransmitting I2 messages | 7.11 Retransmitting I2 messages | |||
If the initiator does not receive an R2 message after I2_TIMEOUT time | If the initiator does not receive an R2 message after I2_TIMEOUT time | |||
after sending an I2 message it MAY retransmit the I2 message, using | after sending an I2 message it MAY retransmit the I2 message, using | |||
binary exponential backoff and randomized timers. The validator | binary exponential backoff and randomized timers. The Responder | |||
option might have a limited lifetime, that is, the peer might reject | Validator option might have a limited lifetime, that is, the peer | |||
verifier options that are older than VALIDATOR_MIN_LIFETIME to avoid | might reject Responder Validator options that are older than | |||
replay attacks. Thus the initiator SHOULD fall back to | VALIDATOR_MIN_LIFETIME to avoid replay attacks. Thus the initiator | |||
retransmitting the I1 message when there is no R2 received after | SHOULD fall back to retransmitting the I1 message when there is no R2 | |||
retransmitting the I2 message I2_RETRIES_MAX times. | received after retransmitting the I2 message I2_RETRIES_MAX times. | |||
7.10 Receiving I2 messages | 7.12 Receiving I2 messages | |||
A host MUST silently discard any received I2 messages that do not | A host MUST silently discard any received I2 messages that do not | |||
satisfy all of the following validity checks in addition to those | satisfy all of the following validity checks in addition to those | |||
specified in Section 12.2: | specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 2, i.e., the length is at least | o The Hdr Ext Len field is at least 2, i.e., the length is at least | |||
24 octets. | 24 octets. | |||
Upon the reception of an I2 message, the host extracts the ULID pair | Upon the reception of an I2 message, the host extracts the ULID pair | |||
and the Forked Instance identifier from the message. If there is no | and the Forked Instance identifier from the message. If there is no | |||
ULID-pair option, then the ULID pair is taken from the source and | ULID-pair option, then the ULID pair is taken from the source and | |||
destination fields in the IPv6 header. If there is no FII option in | destination fields in the IPv6 header. If there is no FII option in | |||
the message, then the FII value is taken to be zero. | the message, then the FII value is taken to be zero. | |||
Next the host verifies that the Responder Nonce is a recent one, and | Next the host verifies that the Responder Nonce is a recent one, and | |||
that the Validator option matches the validator the host would have | that the Responder Validator option matches the validator the host | |||
computed for the ULID, locators, responder nonce, and FII. | would have computed for the ULID, locators, responder nonce, and FII. | |||
If a CGA Parameter Data Structure is included in the message, then | If a CGA Parameter Data Structure (PDS) is included in the message, | |||
the host MUST verify if the actual PDS contained in the packet | then the host MUST verify if the actual PDS contained in the message | |||
corresponds to the ULID(peer). | corresponds to the ULID(peer). | |||
If at least one of the above verification fails, then it silently | If any of the above verifications fails, then the host silently | |||
discard the packet and it has completed the I2 processing. | discard the message and it has completed the I2 processing. | |||
If both verifications are successful, then the host proceeds to look | If all the above verifications are successful, then the host proceeds | |||
for a context state for the Initiator. The host looks for a context | to look for a context state for the Initiator. The host looks for a | |||
with the extracted ULID pair and FII. If none exist then state of | context with the extracted ULID pair and FII. If none exist then | |||
the (non-existing) context is viewed as being IDLE, thus the actions | state of the (non-existing) context is viewed as being IDLE, thus the | |||
depend on the state as follows: | actions depend on the state as follows: | |||
o If the state is IDLE (i.e., the context does not exist) the host | o If the state is IDLE (i.e., the context does not exist) the host | |||
allocates a context tag (CT(local)) creates the context state for | allocates a context tag (CT(local)), creates the context state for | |||
the context, sets its state to ESTABLISHED. It records the peer's | the context, and sets its state to ESTABLISHED. It records | |||
locator set as well as its own locator set in the context. It | CT(peer), and the peer's locator set as well as its own locator | |||
SHOULD perform the HBA/CGA verification of the peer's locator set | set in the context. It SHOULD perform the HBA/CGA verification of | |||
at this point in time. Then the host sends an R2 message back as | the peer's locator set at this point in time, as specified in | |||
specified below. | Section 7.2. Then the host sends an R2 message back as specified | |||
below. | ||||
o If the state is ESTABLISHED, CT(peer) matches the Initiator | o If the state is I1-SENT, then the host verifies if the source | |||
Context tag, and the IPv6 source address is contained in Ls(peer) | locator is included in Ls(peer) or, it is included in the Locator | |||
then this I2 message is probably a retransmit, so the host MUST | List contained in the the I2 message and the HBA/CGA verification | |||
send a R2 message back as specified below. | for this specific locator is successful | |||
o If the state is ESTABLISHED, and if at least one of the following | * If this is not the case, then the message is silently discarded | |||
conditions is true: either the CT(peer) is not the same as the | and the context state remains unchanged. | |||
Initiator Context tag, or the IPv6 source address is not contained | ||||
in Ls(peer) then silently discard the packet. Then the host has | ||||
completed the I2 processing. | ||||
o In other state (I1-SENT, I2-SENT, or I2BIS-SENT) then we are in | * If this is the case, then the host updates the context | |||
the Concurrent context establishment situation described above. | information (CT(peer), Ls(peer)) with the data contained in the | |||
Then it replies with a R2 message as specified below. The state | I2 message and the host MUST send a R2 message back as | |||
of the context remains unchanged. | specified below. Note that before updating Ls(peer) | |||
information, the host SHOULD perform the HBA/CGA validation of | ||||
the peer's locator set at this point in time as specified in | ||||
Section 7.2. The host moves to ESTABLISHED state. | ||||
7.11 Sending R2 messages | o If the state is ESTABLISHED, I2-SENT, or I2BIS-SENT, then the host | |||
verifies if the source locator is included in Ls(peer) or, it is | ||||
included in the Locator List contained in the the I2 message and | ||||
the HBA/CGA verification for this specific locator is successful | ||||
* If this is not the case, then the message is silently discarded | ||||
and the context state remains unchanged. | ||||
* If this is the case, then the host updates the context | ||||
information (CT(peer), Ls(peer)) with the data contained in the | ||||
I2 message and the host MUST send a R2 message back as | ||||
specified in Section 7.13. Note that before updating Ls(peer) | ||||
information, the host SHOULD perform the HBA/CGA validation of | ||||
the peer's locator set at this point in time as specified in | ||||
Section 7.2. The context state remains unchanged. | ||||
7.13 Sending R2 messages | ||||
Before the host sends the R2 message it MUST look for a possible | Before the host sends the R2 message it MUST look for a possible | |||
context confusion i.e. where it would end up with multiple contexts | context confusion i.e. where it would end up with multiple contexts | |||
using the same CT(peer) for the same peer host. See Section 7.12. | using the same CT(peer) for the same peer host. See Section 7.14. | |||
In any case that the host sends an R2 message, the host forms the R2 | When the host needs to send an R2 message, the host forms the message | |||
message with its locators and its context tag, copies the Initiator | using its locators and its context tag, copies the Initiator Nonce | |||
Nonce from the I2 message, and includes the necessary options so that | from the triggering message (I2, I2bis, or I1), and includes the | |||
the peer can verify the locators. In particular, the R2 message also | necessary options so that the peer can verify the locators. In | |||
includes the Responder's locator list and the CGA parameter data | particular, the R2 message includes the Responder's locator list and | |||
structure. If CGA (and not HBA) is used to verify the locator list, | the PDS option. If CGA (and not HBA) is used to verify the locator | |||
then the Responder also signs the key parts of the message and | list, then the Responder also signs the key parts of the message and | |||
includes a CGA signature option containing the signature. | includes a CGA Signature option containing the signature. | |||
R2 messages are never retransmitted. If the R2 message is lost, then | R2 messages are never retransmitted. If the R2 message is lost, then | |||
the initiator will retransmit either the I2/I2bis or I1 message. | the initiator will retransmit either the I2/I2bis or I1 message. | |||
Either retransmission will cause the responder to find the context | Either retransmission will cause the responder to find the context | |||
state and respond with an R2 message. | state and respond with an R2 message. | |||
7.12 Match for Context Confusion | 7.14 Match for Context Confusion | |||
When the host receives an I2, I2bis, or R2 it MUST look for a | When the host receives an I2, I2bis, or R2 it MUST look for a | |||
possible context confusion i.e. where it would end up with multiple | possible context confusion i.e. where it would end up with multiple | |||
contexts using the same CT(peer) for the same peer host. This can | contexts using the same CT(peer) for the same peer host. This can | |||
happen when it has received the above messages since they create a | happen when it has received the above messages since they create a | |||
new context with a new CT(peer). Same issue applies when CT(peer) is | new context with a new CT(peer). Same issue applies when CT(peer) is | |||
updated for an existing context. | updated for an existing context. | |||
The host takes CT(peer) for the newly created or updated context, and | The host takes CT(peer) for the newly created or updated context, and | |||
looks for other contexts which: | looks for other contexts which: | |||
skipping to change at page 63, line 9 | skipping to change at page 64, line 49 | |||
o Have the same CT(peer). | o Have the same CT(peer). | |||
o Where Ls(peer) has at least one locator in common with the newly | o Where Ls(peer) has at least one locator in common with the newly | |||
created or updated context. | created or updated context. | |||
If such a context is found, then the host checks if the ULID pair or | If such a context is found, then the host checks if the ULID pair or | |||
the Forked Instance Identifier different than the ones in the newly | the Forked Instance Identifier different than the ones in the newly | |||
created or updated context: | created or updated context: | |||
o If this is true, then the peer is trying to reuse the context tag | o If either or both are different, then the peer is reusing the | |||
for the creation of a context with different ULID pair or FII, | context tag for the creation of a context with different ULID pair | |||
which is a signal that the Initiator has lost the other context. | or FII, which is an indication that the peer has lost the original | |||
In this case, we are in the Context confusion situation, and the | context. In this case, we are in the Context confusion situation, | |||
host MUST NOT use the old context to send any packets. It MAY | and the host MUST NOT use the old context to send any packets. It | |||
just discard the old context (after all, the peer has discarded | MAY just discard the old context (after all, the peer has | |||
it), or it MAY attempt to re-establish the old context by sending | discarded it), or it MAY attempt to re-establish the old context | |||
a new I1 message and moving its state to I1-SENT. In any case, | by sending a new I1 message and moving its state to I1-SENT. In | |||
once that this situation is detected, the host MUST not keep two | any case, once that this situation is detected, the host MUST NOT | |||
contexts with overlapping Ls(peer) locator sets and the same | keep two contexts with overlapping Ls(peer) locator sets and the | |||
context tag in ESTABLISHED state, since this would result in | same context tag in ESTABLISHED state, since this would result in | |||
demultiplexing problems on the peer. | demultiplexing problems on the peer. | |||
o If this is not true, then the local host must be broken, since it | o If both are the same, then this context is actually the context | |||
should have detected the existence of a context for the same ULID | that is created or updated, hence there is no confusion. | |||
pair and FII earlier. | ||||
7.13 Receiving R2 messages | 7.15 Receiving R2 messages | |||
A host MUST silently discard any received R2 messages that do not | A host MUST silently discard any received R2 messages that do not | |||
satisfy all of the following validity checks in addition to those | satisfy all of the following validity checks in addition to those | |||
specified in Section 12.2: | specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 1, i.e., the length is at least | o The Hdr Ext Len field is at least 1, i.e., the length is at least | |||
16 octets. | 16 octets. | |||
Upon the reception of an R2 message, the host extracts the Initiator | Upon the reception of an R2 message, the host extracts the Initiator | |||
Nonce and the Locator Pair from the message (the latter from the | Nonce and the Locator Pair from the message (the latter from the | |||
source and destination fields in the IPv6 header). Next the host | source and destination fields in the IPv6 header). Next the host | |||
looks for an existing context which matches the Initiator Nonce and | looks for an existing context which matches the Initiator Nonce and | |||
where the locators are Lp(peer) and Lp(local), respectively. Based | where the locators are Lp(peer) and Lp(local), respectively. Based | |||
on the state: | on the state: | |||
o If no such context is found, i.e., the state is IDLE, then the | o If no such context is found, i.e., the state is IDLE, then the | |||
message is silently dropped. | message is silently dropped. | |||
o If state is I1-SENT, I2-SENT, or I2BIS-SENT then the host performs | o If state is I1-SENT, I2-SENT, or I2BIS-SENT then the host performs | |||
the following actions: If a CGA Parameter Data Structure is | the following actions: If a CGA Parameter Data Structure (PDS) is | |||
included in the message, then the host MUST verify if the actual | included in the message, then the host MUST verify that the actual | |||
PDS contained in the packet corresponds to the ULID(peer). If the | PDS contained in the message corresponds to the ULID(peer) as | |||
verification fails, then the message is silently dropped. If the | specified in Section 7.2. If the verification fails, then the | |||
verification succeeds, then the host records the information from | message is silently dropped. If the verification succeeds, then | |||
the R2 message in the context state. It records the peer's | the host records the information from the R2 message in the | |||
locator set in the context. It SHOULD perform the HBA/CGA | context state; it records the peer's locator set and CT(peer). | |||
verification of the peer's locator set at this point in time. | The host SHOULD perform the HBA/CGA verification of the peer's | |||
locator set at this point in time, as specified in Section 7.2. | ||||
The host sets its state to ESTABLISHED. | ||||
o If the state is ESTABLISHED, the R2 message is silently ignored. | o If the state is ESTABLISHED, the R2 message is silently ignored, | |||
(since this is likely to be a reply to a retransmitted I2 | ||||
message). | ||||
Before the host completes the R2 processing it MUST look for a | Before the host completes the R2 processing it MUST look for a | |||
possible context confusion i.e. where it would end up with multiple | possible context confusion i.e. where it would end up with multiple | |||
contexts using the same CT(peer) for the same peer host. See | contexts using the same CT(peer) for the same peer host. See | |||
Section 7.12. | Section 7.14. | |||
7.14 Sending R1bis packets | 7.16 Sending R1bis messages | |||
Upon the receipt of a shim6 payload extension header where there is | Upon the receipt of a shim6 payload extension header where there is | |||
no current SHIM6 context at the receiver, the receiver is to respond | no current SHIM6 context at the receiver, the receiver is to respond | |||
with an R1bis packet in order to enable a fast re-establishment of | with an R1bis message in order to enable a fast re-establishment of | |||
the lost SHIM6 context. | the lost SHIM6 context. | |||
Also a host is to respond with a R1bis upon receipt of any control | Also a host is to respond with a R1bis upon receipt of any control | |||
messages that has a message type in the range 64-127 (i.e., excluding | messages that has a message type in the range 64-127 (i.e., excluding | |||
the context setup messages such as I1, R1, R1bis, I2, I2bis, R2 and | the context setup messages such as I1, R1, R1bis, I2, I2bis, R2 and | |||
future extensions), where the control message refers to a non | future extensions), where the control message refers to a non | |||
existent context. | existent context. | |||
We assume that all the incoming packets that trigger the generation | We assume that all the incoming packets that trigger the generation | |||
of an R1bis packet contain a locator pair (in the address fields of | of an R1bis message contain a locator pair (in the address fields of | |||
the IPv6 header) and a Context Tag. | the IPv6 header) and a Context Tag. | |||
Upon reception of any of the packets described above, the host will | Upon reception of any of the packets described above, the host will | |||
reply with an R1bis including the following information: | reply with an R1bis including the following information: | |||
o The Responder Nonce is a number picked by the responder which the | o The Responder Nonce is a number picked by the responder which the | |||
initiator will return in the I2bis message. | initiator will return in the I2bis message. | |||
o Packet Context Tag is the context tag contained in the received | o Packet Context Tag is the context tag contained in the received | |||
packet that triggered the generation of the R1bis packet. | packet that triggered the generation of the R1bis message. | |||
o The Validator option is included, with a validator that is | o The Responder Validator option is included, with a validator that | |||
computed as suggested in the next section. | is computed as suggested in the next section. | |||
7.14.1 Generating the R1bis validator | 7.16.1 Generating the R1bis Validator | |||
One way for the responder to properly generate validators is to | One way for the responder to properly generate validators is to | |||
maintain a single secret (S) and a running counter for the Responder | maintain a single secret (S) and a running counter for the Responder | |||
Nonce. | Nonce. | |||
In the case the validator is generated to be included in a R1bis | In the case the validator is generated to be included in a R1bis | |||
packet, for each received payload extension header or control packet, | message, for each received payload extension header or control | |||
the responder can increase the counter, use the counter value as the | message, the responder can increase the counter, use the counter | |||
responder nonce, and use the following information as input to the | value as the responder nonce, and use the following information as | |||
one-way function: | input to the one-way function: | |||
o The the secret S | o The the secret S | |||
o That Responder Nonce | o That Responder Nonce | |||
o The Context tag included in the received packet | o The Receiver Context tag included in the received packet | |||
o The locators from the received packet | o The locators from the received packet | |||
and then use the output of the hash function as validator string. | and then the output of the hash function is used as the validator | |||
octet string. | ||||
7.15 Receiving R1bis messages and sending I2bis messages | 7.17 Receiving R1bis messages and sending I2bis messages | |||
A host MUST silently discard any received R1bis messages that do not | A host MUST silently discard any received R1bis messages that do not | |||
satisfy all of the following validity checks in addition to those | satisfy all of the following validity checks in addition to those | |||
specified in Section 12.2: | specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 1, i.e., the length is at least | o The Hdr Ext Len field is at least 1, i.e., the length is at least | |||
16 octets. | 16 octets. | |||
Upon the reception of an R1bis message, the host extracts the Packet | Upon the reception of an R1bis message, the host extracts the Packet | |||
Context Tag and the Locator Pair from the message (the latter from | Context Tag and the Locator Pair from the message (the latter from | |||
the source and destination fields in the IPv6 header). Next the host | the source and destination fields in the IPv6 header). Next the host | |||
looks for an existing context where the Packet Context Tag matches | looks for an existing context where the Packet Context Tag matches | |||
CT(peer) and where the locators match Lp(peer) and Lp(local), | CT(peer) and where the locators match Lp(peer) and Lp(local), | |||
respectively. | respectively. | |||
o If no such context is not found, i.e., the state is IDLE, then the | o If no such context is not found, i.e., the state is IDLE, then the | |||
R1bis packet is silently discarded. | R1bis message is silently discarded. | |||
o If the state is I1-SENT, I2-SENT, or I2BIS-SENT, then the R1bis | o If the state is I1-SENT, I2-SENT, or I2BIS-SENT, then the R1bis | |||
packet is silently discarded. | message is silently discarded. | |||
o If the state is ESTABLISHED, then we are in the case where the | o If the state is ESTABLISHED, then we are in the case where the | |||
peer has lost the context and the goal is to try to re-establish | peer has lost the context and the goal is to try to re-establish | |||
it. For that, the host leaves CT(peer) unchanged in the context | it. For that, the host leaves CT(peer) unchanged in the context | |||
state, transitions to I2BIS-SENT state, and sends a I2bis packet, | state, transitions to I2BIS-SENT state, and sends a I2bis message, | |||
including in it the Validator, the Packet Context Tag, and the | including the computed Responder Validator option, the Packet | |||
Responder Nonce received in the R1bis packet. This I2bis packet | Context Tag, and the Responder Nonce received in the R1bis | |||
is sent using the locator pair included in the R1bis packet. In | message. This I2bis message is sent using the locator pair | |||
the case that this locator pair differs from the ULID pair defined | included in the R1bis message. In the case that this locator pair | |||
for this context, then an ULID option MUST be included in the | differs from the ULID pair defined for this context, then an ULID | |||
I2bis packet. In addition, if the Forked Instance Identifier for | option MUST be included in the I2bis message. In addition, if the | |||
this context is non-zero, then a Forked Instance Identifier option | Forked Instance Identifier for this context is non-zero, then a | |||
carrying the instance identifier value for this context MUST be | Forked Instance Identifier option carrying the instance identifier | |||
included in the I2bis message. | value for this context MUST be included in the I2bis message. | |||
7.16 Receiving I2bis messages and sending R2 messages | 7.18 Retransmitting I2bis messages | |||
If the initiator does not receive an R2 message after I2bis_TIMEOUT | ||||
time after sending an I2bis message it MAY retransmit the I2bis | ||||
message, using binary exponential backoff and randomized timers. The | ||||
Responder Validator option might have a limited lifetime, that is, | ||||
the peer might reject Responder Validator options that are older than | ||||
VALIDATOR_MIN_LIFETIME to avoid replay attacks. Thus the initiator | ||||
SHOULD fall back to retransmitting the I1 message when there is no R2 | ||||
received after retransmitting the I2bis message I2bis_RETRIES_MAX | ||||
times. | ||||
7.19 Receiving I2bis messages and sending R2 messages | ||||
A host MUST silently discard any received I2bis messages that do not | A host MUST silently discard any received I2bis messages that do not | |||
satisfy all of the following validity checks in addition to those | satisfy all of the following validity checks in addition to those | |||
specified in Section 12.2: | specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 3, i.e., the length is at least | o The Hdr Ext Len field is at least 3, i.e., the length is at least | |||
32 octets. | 32 octets. | |||
Upon the reception of an I2bis message, the host extracts the ULID | Upon the reception of an I2bis message, the host extracts the ULID | |||
pair and the Forked Instance identifier from the message. If there | pair and the Forked Instance identifier from the message. If there | |||
is no ULID-pair option, then the ULID pair is taken from the source | is no ULID-pair option, then the ULID pair is taken from the source | |||
and destination fields in the IPv6 header. If there is no FII option | and destination fields in the IPv6 header. If there is no FII option | |||
in the message, then the FII value is taken to be zero. | in the message, then the FII value is taken to be zero. | |||
Next the host verifies that the Responder Nonce is a recent one, and | Next the host verifies that the Responder Nonce is a recent one, and | |||
that the Validator option matches the validator the host would have | that the Responder Validator option matches the validator the host | |||
computed for the ULID, locators, responder nonce, and FII as part of | would have computed for the ULID, locators, responder nonce, and FII | |||
sending an R1bis message. | as part of sending an R1bis message. | |||
If a CGA Parameter Data Structure is included in the message, then | If a CGA Parameter Data Structure (PDS) is included in the message, | |||
the host MUST verify if the actual PDS contained in the packet | then the host MUST verify if the actual PDS contained in the message | |||
corresponds to the ULID(peer). | corresponds to the ULID(peer). | |||
If at least one of the above verification fails, then it silently | If any of the above verifications fails, then the host silently | |||
discard the packet and it has completed the I2bis processing. | discard the message and it has completed the I2bis processing. | |||
If both verifications are successful, then the host proceeds to look | If both verifications are successful, then the host proceeds to look | |||
for a context state for the Initiator. The host looks for a context | for a context state for the Initiator. The host looks for a context | |||
with the extracted ULID pair and FII. If none exist then state of | with the extracted ULID pair and FII. If none exist then state of | |||
the (non-existing) context is viewed as being IDLE, thus the actions | the (non-existing) context is viewed as being IDLE, thus the actions | |||
depend on the state as follows: | depend on the state as follows: | |||
o If the state is IDLE (i.e., the context does not exist) the host | o If the state is IDLE (i.e., the context does not exist) the host | |||
allocates a context tag (CT(local)) creates the context state for | allocates a context tag (CT(local)), creates the context state for | |||
the context, sets its state to ESTABLISHED. The host SHOULD NOT | the context, and sets its state to ESTABLISHED. The host SHOULD | |||
use the Packet Context Tag in the I2bis packet for CT(local); | NOT use the Packet Context Tag in the I2bis message for CT(local); | |||
instead it should pick a new random context tag just as when it | instead it should pick a new random context tag just as when it | |||
processes an I2 message. It records the peer's locator set as | processes an I2 message. It records CT(peer), and the peer's | |||
well as its own locator set in the context. It SHOULD perform the | locator set as well as its own locator set in the context. It | |||
HBA/CGA verification of the peer's locator set at this point in | SHOULD perform the HBA/CGA verification of the peer's locator set | |||
time. Then the host sends an R2 message back as specified in | at this point in time as specified in Section 7.2. Then the host | |||
Section 7.11. | sends an R2 message back as specified in Section 7.13. | |||
o If the state is ESTABLISHED, CT(peer) matches the Initiator | o If the state is I1-SENT, then the host verifies if the source | |||
Context tag, and the IPv6 source address is contained in Ls(peer) | locator is included in Ls(peer) or, it is included in the Locator | |||
then this I2bis message is probably a retransmit, so the host MUST | List contained in the the I2 message and the HBA/CGA verification | |||
send a R2 message back as specified below. | for this specific locator is successful | |||
o If the state is ESTABLISHED, and if at least one of the following | * If this is not the case, then the message is silently | |||
conditions is true: either the CT(peer) is not the same as the | discarded. The the context state remains unchanged. | |||
Initiator Context tag, or the IPv6 source address is not contained | ||||
in Ls(peer) then silently discard the packet. Then the host has | ||||
completed the I2bis processing. | ||||
o In other state (I1-SENT, I2-SENT, or I2BIS-SENT) then we are in | * If this is the case, then the host updates the context | |||
the Concurrent context establishment situation described above. | information (CT(peer), Ls(peer)) with the data contained in the | |||
Then it replies with a R2 message as specified in section | I2 message and the host MUST send a R2 message back as | |||
Section 7.11. The state of the context remains unchanged. | specified below. Note that before updating Ls(peer) | |||
information, the host SHOULD perform the HBA/CGA validation of | ||||
the peer's locator set at this point in time as specified in | ||||
Section 7.2. The host moves to ESTABLISHED state. | ||||
o If the state is ESTABLISHED, I2-SENT, or I2BIS-SENT, then the host | ||||
verifies if the source locator is included in Ls(peer) or, it is | ||||
included in the Locator List contained in the the I2 message and | ||||
the HBA/CGA verification for this specific locator is successful | ||||
* If this is not the case, then the message is silently | ||||
discarded. The the context state remains unchanged. | ||||
* If this is the case, then the host updates the context | ||||
information (CT(peer), Ls(peer)) with the data contained in the | ||||
I2 message and the host MUST send a R2 message back as | ||||
specified in Section 7.13. Note that before updating Ls(peer) | ||||
information, the host SHOULD perform the HBA/CGA validation of | ||||
the peer's locator set at this point in time as specified in | ||||
Section 7.2. The context state remains unchanged. | ||||
8. Handling ICMP Error Messages | 8. Handling ICMP Error Messages | |||
The routers in the path as well as the destination might generate | The routers in the path as well as the destination might generate | |||
various ICMP error messages, such as host unreachable, packet too | various ICMP error messages, such as host unreachable, packet too | |||
big, and payload type unknown. It is critical that these packets | big, and payload type unknown. It is critical that these packets | |||
make it back up to the ULPs so that they can take appropriate action. | make it back up to the ULPs so that they can take appropriate action. | |||
When the ULP packets are sent unmodified, that is, while the initial | This is an implementation issue in the sense that the mechanism is | |||
locators=ULIDs are working, this introduces no new concerns; an | completely local to the host itself. But the issue of how ICMP | |||
implementation's existing mechanism for delivering these errors to | errors are correctly dispatched to the ULP on the host are important, | |||
the ULP will work. But when the shim on the transmitting side | hence this section specifies the issue. | |||
replaces the ULIDs in the IP address fields with some other locators, | ||||
then an ICMP error coming back will have a "packet in error" which is | ||||
not a packet that the ULP sent. Thus the implementation will have to | ||||
apply the reverse mapping to the "packet in error" before passing the | ||||
ICMP error up to the ULP. | ||||
This mapping is different than when receiving ULP packets from the | +--------------+ | |||
peer, because in that case the packets contain CT(local). But the | | IPv6 Header | | |||
ICMP errors have a "packet in error" with CT(peer) since they were | | | | |||
intended to be received by the peer. In any case, since the <Source | +--------------+ | |||
Locator, Destination Locator, CT(peer)> has to be unique when | | ICMPv6 | | |||
received by the peer, the local host should also only be able to find | | Header | | |||
one context that matches this tuple. | - - +--------------+ - - | |||
| IPv6 Header | | ||||
| src, dst as | Can be dispatched | ||||
IPv6 | sent by ULP | unmodified to ULP | ||||
| on host | ICMP error handler | ||||
Packet +--------------+ | ||||
| ULP | | ||||
in | Header | | ||||
+--------------+ | ||||
Error | | | ||||
~ Data ~ | ||||
| | | ||||
- - +--------------+ - - | ||||
If the ULP packet had been encapsulated in a shim6 payload extension | Figure 29: ICMP error handling without payload extension header | |||
header, then this extension header must be removed. The result needs | ||||
to be that the ULP receives an ICMP error where the contained "packet | When the ULP packets are sent without the payload extension header, | |||
in error" looks as if the shim did not exist. | that is, while the initial locators=ULIDs are working, this | |||
introduces no new concerns; an implementation's existing mechanism | ||||
for delivering these errors to the ULP will work. See Figure 29. | ||||
But when the shim on the transmitting side inserts the payload | ||||
extension header and replaces the ULIDs in the IP address fields with | ||||
some other locators, then an ICMP error coming back will have a | ||||
"packet in error" which is not a packet that the ULP sent. Thus the | ||||
implementation will have to apply the reverse mapping to the "packet | ||||
in error" before passing the ICMP error up to the ULP. See | ||||
Figure 30. | ||||
+--------------+ | ||||
| IPv6 Header | | ||||
| | | ||||
+--------------+ | ||||
| ICMPv6 | | ||||
| Header | | ||||
- - +--------------+ - - | ||||
| IPv6 Header | | ||||
| src, dst as | Needs to be | ||||
IPv6 | modified by | transformed to | ||||
| shim on host | have ULIDs | ||||
+--------------+ in src, dst fields, | ||||
Packet | SHIM6 ext. | and SHIM6 ext. | ||||
| Header | header removed | ||||
in +--------------+ before it can be | ||||
| Transport | dispatched to the ULP | ||||
Error | Header | ICMP error handler. | ||||
+--------------+ | ||||
| | | ||||
~ Data ~ | ||||
| | | ||||
- - +--------------+ - - | ||||
Figure 30: ICMP error handling with payload extension header | ||||
Note that this mapping is different than when receiving packets from | ||||
the peer with a payload extension headers, because in that case the | ||||
packets contain CT(local). But the ICMP errors have a "packet in | ||||
error" with an payload extension header containing CT(peer). This is | ||||
because they were intended to be received by the peer. In any case, | ||||
since the <Source Locator, Destination Locator, CT(peer)> has to be | ||||
unique when received by the peer, the local host should also only be | ||||
able to find one context that matches this tuple. | ||||
If the ICMP error is a Packet Too Big, the reported MTU must be | ||||
adjusted to be 8 octets less, since the shim will add 8 octets when | ||||
sending packets. | ||||
After the "packet in error" has had the original ULIDs inserted, then | ||||
this payload extension header can be removed. The result is a | ||||
"packet in error" that is passed to the ULP which looks as if the | ||||
shim did not exist. | ||||
9. Teardown of the ULID-Pair Context | 9. Teardown of the ULID-Pair Context | |||
Each host can unilaterally decide when to tear down a ULID-pair | Each host can unilaterally decide when to tear down a ULID-pair | |||
context. It is RECOMMENDED that hosts not tear down the context when | context. It is RECOMMENDED that hosts do not tear down the context | |||
they know that there is some upper layer protocol that might use the | when they know that there is some upper layer protocol that might use | |||
context. For example, an implementation might know this is there is | the context. For example, an implementation might know this if there | |||
an open socket which is connected to the ULID(peer). However, there | is an open socket which is connected to the ULID(peer). However, | |||
might be cases when the knowledge is not readily available to the | there might be cases when the knowledge is not readily available to | |||
shim layer, for instance for UDP applications which not connect their | the shim layer, for instance for UDP applications which do not | |||
sockets, or any application which retains some higher level state | connect their sockets, or any application which retains some higher | |||
across (TCP) connections and UDP packets. | level state across (TCP) connections and UDP packets. | |||
Thus it is RECOMMENDED that implementations minimize premature | Thus it is RECOMMENDED that implementations minimize premature | |||
teardown by observing the amount of traffic that is sent and received | teardown by observing the amount of traffic that is sent and received | |||
using the context, and only after it appears quiescent, tear down the | using the context, and only after it appears quiescent, tear down the | |||
state. A reasonable approach would be to not tear down a context | state. A reasonable approach would be not to tear down a context | |||
until at least 5 minutes have passed since the last message was sent | until at least 5 minutes have passed since the last message was sent | |||
or received using the context. | or received using the context. | |||
Since there is no explicit, coordinated removal of the context state, | Since there is no explicit, coordinated removal of the context state, | |||
there are potential issues around context tag reuse. One end might | there are potential issues around context tag reuse. One end might | |||
remove the state, and potentially reuse that context tag for some | remove the state, and potentially reuse that context tag for some | |||
other communication, and the peer might later try to use the old | other communication, and the peer might later try to use the old | |||
context (which it didn't remove). The protocol has mechanisms to | context (which it didn't remove). The protocol has mechanisms to | |||
recover from this, which work whether the state removal was total and | recover from this, which work whether the state removal was total and | |||
accidental (e.g., crash and reboot of the host), or just a garbage | accidental (e.g., crash and reboot of the host), or just a garbage | |||
collection of shim state that didn't seem to be used. However, the | collection of shim state that didn't seem to be used. However, the | |||
host should try to minimize the reuse of context tags by trying to | host should try to minimize the reuse of context tags by trying to | |||
randomly cycle through the 2^47 context tag values. (See Appendix B | randomly cycle through the 2^47 context tag values. (See Appendix E | |||
for a summary how the recovery works in the different cases.) | for a summary how the recovery works in the different cases.) | |||
10. Updating the Peer | 10. Updating the Peer | |||
The Update Request and Acknowledgement are used both to update the | The Update Request and Acknowledgement are used both to update the | |||
list of locators (only possible when CGA is used to verify the | list of locators (only possible when CGA is used to verify the | |||
locator(s)), as well as updating the preferences associated with each | locator(s)), as well as updating the preferences associated with each | |||
locator. | locator. | |||
10.1 Sending Update Request messages | 10.1 Sending Update Request messages | |||
skipping to change at page 70, line 40 | skipping to change at page 73, line 40 | |||
same nonce for any retransmissions of the Update Request. The nonce | same nonce for any retransmissions of the Update Request. The nonce | |||
is used to match the acknowledgement with the request. | is used to match the acknowledgement with the request. | |||
10.2 Retransmitting Update Request messages | 10.2 Retransmitting Update Request messages | |||
If the host does not receive an Update Acknowledgement R2 message in | If the host does not receive an Update Acknowledgement R2 message in | |||
response to the Update Request message after UPDATE_TIMEOUT time, | response to the Update Request message after UPDATE_TIMEOUT time, | |||
then it needs to retransmit the Update Request message. The | then it needs to retransmit the Update Request message. The | |||
retransmissions should use a retransmission timer with binary | retransmissions should use a retransmission timer with binary | |||
exponential backoff to avoid creating congestion issues for the | exponential backoff to avoid creating congestion issues for the | |||
network when lots of hosts perform I1 retransmissions. Also, the | network when lots of hosts perform Update Request retransmissions. | |||
actual timeout value should be randomized between 0.5 and 1.5 of the | Also, the actual timeout value should be randomized between 0.5 and | |||
nominal value to avoid self-synchronization. | 1.5 of the nominal value to avoid self-synchronization. | |||
Should there be no response, the retransmissions continue forever. | Should there be no response, the retransmissions continue forever. | |||
The binary exponential backoff stops at MAX_UPDATE_TIMEOUT. But the | The binary exponential backoff stops at MAX_UPDATE_TIMEOUT. But the | |||
only way the retransmissions would stop when there is no | only way the retransmissions would stop when there is no | |||
acknowledgement, is when the shim, through the Probe protocol or some | acknowledgement, is when the shim, through the Probe protocol or some | |||
other mechanism, decides to discard the context state due to lack of | other mechanism, decides to discard the context state due to lack of | |||
ULP usage in combination with no responses to the Probes. | ULP usage in combination with no responses to the Probes. | |||
10.3 Newer Information While Retransmitting | 10.3 Newer Information While Retransmitting | |||
skipping to change at page 71, line 49 | skipping to change at page 74, line 49 | |||
A host MUST silently discard any received Update Request messages | A host MUST silently discard any received Update Request messages | |||
that do not satisfy all of the following validity checks in addition | that do not satisfy all of the following validity checks in addition | |||
to those specified in Section 12.2: | to those specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 1, i.e., the length is at least | o The Hdr Ext Len field is at least 1, i.e., the length is at least | |||
16 octets. | 16 octets. | |||
Upon the reception of an Update Request message, the host extracts | Upon the reception of an Update Request message, the host extracts | |||
the Context Tag from the message. It then looks for a context which | the Context Tag from the message. It then looks for a context which | |||
has a CT(local) that matches the context tag. If no such context is | has a CT(local) that matches the context tag. If no such context is | |||
found, it sends a R1bis message as specified in Section 7.14. | found, it sends a R1bis message as specified in Section 7.16. | |||
Since context tags can be reused, the host MUST verify that the IPv6 | Since context tags can be reused, the host MUST verify that the IPv6 | |||
source address field is part of Ls(peer) and that the IPv6 | source address field is part of Ls(peer) and that the IPv6 | |||
destination address field is part of Ls(local). If this is not the | destination address field is part of Ls(local). If this is not the | |||
case, the sender of the Update Request has a stale context which | case, the sender of the Update Request has a stale context which | |||
happens to match the CT(local) for this context. In this case the | happens to match the CT(local) for this context. In this case the | |||
host MUST send a R1bis message, and otherwise ignore the Update | host MUST send a R1bis message, and otherwise ignore the Update | |||
Request message. | Request message. | |||
If a CGA Parameter Data Structure is included in the message, then | If a CGA Parameter Data Structure (PDS) is included in the message, | |||
the host MUST verify if the actual PDS contained in the packet | then the host MUST verify if the actual PDS contained in the packet | |||
corresponds to the ULID(peer). If this verification fails, the | corresponds to the ULID(peer). If this verification fails, the | |||
message is silently discarded. | message is silently discarded. | |||
Then, depending on the state of the context: | Then, depending on the state of the context: | |||
o If ESTABLISHED: Proceed to process message. | o If ESTABLISHED: Proceed to process message. | |||
o If I1-SENT, discard the message and stay in I1-SENT. | o If I1-SENT, discard the message and stay in I1-SENT. | |||
o If I2-SENT, then send R2 and proceed to process the message. | o If I2-SENT, then send R2 and proceed to process the message. | |||
o If I2BIS-SENT, then send R2 and proceed to process the message. | o If I2BIS-SENT, then send R2 and proceed to process the message. | |||
The validation issues for the locators carried in the Locator Update | The verification issues for the locators carried in the Locator | |||
message are specified in Section 4.7. If the locator list can not be | Update message are specified in Section 7.2. If the locator list can | |||
validated, this procedure might send an ICMP Parameter Problem error. | not be verified, this procedure might send an ICMP Parameter Problem | |||
In any case, if it can not be validated, there is no further | error. In any case, if it can not be verified, there is no further | |||
processing of the Update Request. | processing of the Update Request. | |||
Once any Locator List option in the Update Request has been | Once any Locator List option in the Update Request has been verified, | |||
validated, the peer generation number in the context is updated to be | the peer generation number in the context is updated to be the one in | |||
the one in the Locator List option. | the Locator List option. | |||
If the Update message contains a Locator Preference option, then the | If the Update message contains a Locator Preference option, then the | |||
Generation number in the preference option is compared with the peer | Generation number in the preference option is compared with the peer | |||
generation number in the context. If they do not match, then the | generation number in the context. If they do not match, then the | |||
host generates an ICMP parameter problem (type 4, code 0) with the | host generates an ICMP parameter problem (type 4, code 0) with the | |||
Pointer field referring to the first octet in the Generation number | Pointer field referring to the first octet in the Generation number | |||
in the Locator Preference option. In addition, if the number of | in the Locator Preference option. In addition, if the number of | |||
elements in the Locator Preference option does not match the number | elements in the Locator Preference option does not match the number | |||
of locators in Ls(peer), then an ICMP parameter problem is sent with | of locators in Ls(peer), then an ICMP parameter problem is sent with | |||
the Pointer referring to the first octet of the Length field in the | the Pointer referring to the first octet of the Length field in the | |||
Locator Preference option. In both cases of failures, no further | Locator Preference option. In both cases of failures, no further | |||
processing is performed for the Locator Update message. | processing is performed for the Locator Update message. | |||
If the generation number matches, the locator preferences are | If the generation number matches, the locator preferences are | |||
recorded in the context. | recorded in the context. | |||
Once the Locator List option (if present) has been validated and any | Once the Locator List option (if present) has been verified and any | |||
new locator list or locator preferences have been recorded, the host | new locator list or locator preferences have been recorded, the host | |||
sends an Update Acknowledgement message, copying the nonce from the | sends an Update Acknowledgement message, copying the nonce from the | |||
request, and using the CT(peer) in as the Receiver Context tag. | request, and using the CT(peer) in as the Receiver Context Tag. | |||
Any new locators, or more likely new locator preferences, might | Any new locators, or more likely new locator preferences, might | |||
result in the host wanting to select a different locator pair for the | result in the host wanting to select a different locator pair for the | |||
context. For instance, if the Locator Preferences lists the current | context. For instance, if the Locator Preferences lists the current | |||
Lp(peer) as BROKEN. The host uses the Probe message in [9] to verify | Lp(peer) as BROKEN. The host uses the Probe message in [8] to verify | |||
that the new locator is reachable before changing Lp(peer). | that the new locator is reachable before changing Lp(peer). | |||
10.5 Receiving Update Acknowledgement messages | 10.5 Receiving Update Acknowledgement messages | |||
A host MUST silently discard any received Update Acknowledgement | A host MUST silently discard any received Update Acknowledgement | |||
messages that do not satisfy all of the following validity checks in | messages that do not satisfy all of the following validity checks in | |||
addition to those specified in Section 12.2: | addition to those specified in Section 12.2: | |||
o The Hdr Ext Len field is at least 1, i.e., the length is at least | o The Hdr Ext Len field is at least 1, i.e., the length is at least | |||
16 octets. | 16 octets. | |||
Upon the reception of an Update Acknowledgement message, the host | Upon the reception of an Update Acknowledgement message, the host | |||
extracts the Context Tag and the Request Nonce from the message. It | extracts the Context Tag and the Request Nonce from the message. It | |||
then looks for a context which has a CT(local) that matches the | then looks for a context which has a CT(local) that matches the | |||
context tag. If no such context is found, it sends a R1bis message | context tag. If no such context is found, it sends a R1bis message | |||
as specified in Section 7.14. | as specified in Section 7.16. | |||
Since context tags can be reused, the host MUST verify that the IPv6 | Since context tags can be reused, the host MUST verify that the IPv6 | |||
source address field is part of Ls(peer) and that the IPv6 | source address field is part of Ls(peer) and that the IPv6 | |||
destination address field is part of Ls(local). If this is not the | destination address field is part of Ls(local). If this is not the | |||
case, the sender of the Update Acknowledgement has a stale context | case, the sender of the Update Acknowledgement has a stale context | |||
which happens to match the CT(local) for this context. In this case | which happens to match the CT(local) for this context. In this case | |||
the host MUST send a R1bis message, and otherwise ignore the Update | the host MUST send a R1bis message, and otherwise ignore the Update | |||
Acknowledgement message. | Acknowledgement message. | |||
Then, depending on the state of the context: | Then, depending on the state of the context: | |||
skipping to change at page 74, line 23 | skipping to change at page 77, line 23 | |||
If the context is not in ESTABLISHED or I2BIS-SENT state, then it | If the context is not in ESTABLISHED or I2BIS-SENT state, then it | |||
there is also no effect on how the ULP packets are sent. Only in the | there is also no effect on how the ULP packets are sent. Only in the | |||
ESTABLISHED and I2BIS-SENT states does the host have CT(peer) and | ESTABLISHED and I2BIS-SENT states does the host have CT(peer) and | |||
Ls(peer) set. | Ls(peer) set. | |||
If there is a ULID-pair context for the ULID pair, then the sender | If there is a ULID-pair context for the ULID pair, then the sender | |||
needs to verify whether context uses the ULIDs as locators, that is, | needs to verify whether context uses the ULIDs as locators, that is, | |||
whether Lp(peer) == ULID(peer) and Lp(local) == ULID(local). | whether Lp(peer) == ULID(peer) and Lp(local) == ULID(local). | |||
If this is the case, then packets will be sent unmodified by the | If this is the case, then packets can be sent unmodified by the shim. | |||
shim. If it is not the case, then the logic in Section 11.1 will | If it is not the case, then the logic in Section 11.1 will need to be | |||
need to be used. | used. | |||
There will also be some maintenance activity relating to | There will also be some maintenance activity relating to | |||
(un)reachability detection, whether packets are sent with the | (un)reachability detection, whether packets are sent with the | |||
original locators or not. The details of this is out of scope for | original locators or not. The details of this is out of scope for | |||
this document and will be covered is follow-ons to [8]. | this document and is specified in [8]. | |||
11.1 Sending ULP Payload after a Switch | 11.1 Sending ULP Payload after a Switch | |||
When sending packets, if there is a ULID-pair context for the ULID | When sending packets, if there is a ULID-pair context for the ULID | |||
pair, and the ULID pair is no longer used as the locator pair, then | pair, and the ULID pair is no longer used as the locator pair, then | |||
the sender needs to transform the packet. Apart from replacing the | the sender needs to transform the packet. Apart from replacing the | |||
IPv6 source and destination fields with a locator pair, an 8-octet | IPv6 source and destination fields with a locator pair, an 8-octet | |||
header is added so that the receiver can find the context and inverse | header is added so that the receiver can find the context and inverse | |||
the transformation. | the transformation. | |||
If there has been a failure causing a switch, and later the context | ||||
switches back to sending things using the ULID pair as the locator | ||||
pair, then there is no longer a need to do any packet transformation | ||||
by the sender, hence there is no need to include the 8-octet | ||||
extension header. | ||||
First, the IP address fields are replaced. The IPv6 source address | First, the IP address fields are replaced. The IPv6 source address | |||
field is set to Lp(local) and the destination address field is set to | field is set to Lp(local) and the destination address field is set to | |||
Lp(peer). NOTE that this MUST NOT cause any recalculation of the ULP | Lp(peer). NOTE that this MUST NOT cause any recalculation of the ULP | |||
checksums, since the ULP checksums are carried end-to-end and the ULP | checksums, since the ULP checksums are carried end-to-end and the ULP | |||
pseudo-header contains the ULIDs which are preserved end-to-end. | pseudo-header contains the ULIDs which are preserved end-to-end. | |||
The sender skips any "routing sub-layer extension headers" that the | The sender skips any "routing sub-layer extension headers" that the | |||
ULP might have included, thus it skips any hop-by-hop extension | ULP might have included, thus it skips any hop-by-hop extension | |||
header, any routing header, and any destination options header that | header, any routing header, and any destination options header that | |||
is followed by a routing header. After any such headers the shim6 | is followed by a routing header. After any such headers the shim6 | |||
extension header will be added. This might be before a Fragment | extension header will be added. This might be before a Fragment | |||
header, a Destination Options header, an ESP or AH header, or a ULP | header, a Destination Options header, an ESP or AH header, or a ULP | |||
header. | header. | |||
The inserted shim6 Payload extension header includes the peer's | The inserted shim6 Payload extension header includes the peer's | |||
context tag. | context tag. It takes on the next header value from the preceding | |||
extension header, since that extension header will have a next header | ||||
value of SHIM6. | ||||
12. Receiving Packets | 12. Receiving Packets | |||
As in normal IPv6 receive side packet processing the receiver parses | As in normal IPv6 receive side packet processing the receiver parses | |||
the (extension) headers in order. Should it find a shim6 extension | the (extension) headers in order. Should it find a shim6 extension | |||
header it will look at the "P" field in that header. If this bit is | header it will look at the "P" field in that header. If this bit is | |||
zero, then the packet must be passed to the shim6 payload handling | zero, then the packet must be passed to the shim6 payload handling | |||
for rewriting. Otherwise, the packet is passed to the shim6 control | for rewriting. Otherwise, the packet is passed to the shim6 control | |||
handling. | handling. | |||
12.1 Receiving Payload Extension Headers | 12.1 Receiving Payload Extension Headers | |||
The receiver extracts the context tag from the payload extension | The receiver extracts the context tag from the payload extension | |||
header, and uses this to find a ULID-pair context. If no context is | header, and uses this to find a ULID-pair context. If no context is | |||
found, the receiver SHOULD generate a R1bis message (see | found, the receiver SHOULD generate a R1bis message (see | |||
Section 7.14). | Section 7.16). | |||
Then, depending on the state of the context: | Then, depending on the state of the context: | |||
o If ESTABLISHED: Proceed to process message. | o If ESTABLISHED: Proceed to process message. | |||
o If I1-SENT, discard the message and stay in I1-SENT. | o If I1-SENT, discard the message and stay in I1-SENT. | |||
o If I2-SENT, then send R2 and proceed to process the message. | o If I2-SENT, then send R2 and proceed to process the message. | |||
o If I2BIS-SENT, then send R2 and proceed to process the message. | o If I2BIS-SENT, then send R2 and proceed to process the message. | |||
skipping to change at page 79, line 8 | skipping to change at page 82, line 8 | |||
In addition, the shim on the sending side needs to be able to find | In addition, the shim on the sending side needs to be able to find | |||
the context state when a ULP packet is passed down from the ULP. In | the context state when a ULP packet is passed down from the ULP. In | |||
that case the lookup key is the pair of ULIDs and FII=0. If we have | that case the lookup key is the pair of ULIDs and FII=0. If we have | |||
a ULP API that allows the ULP to do context forking, then presumably | a ULP API that allows the ULP to do context forking, then presumably | |||
the ULP would pass down the Forked Instance Identifier. | the ULP would pass down the Forked Instance Identifier. | |||
13. Initial Contact | 13. Initial Contact | |||
The initial contact is some non-shim communication between two ULIDs, | The initial contact is some non-shim communication between two ULIDs, | |||
as defined in Section 2. At that point in time there is no activity | as described in Section 2. At that point in time there is no | |||
in the shim. | activity in the shim. | |||
Whether the shim ends up being used or not (e.g., the peer might not | Whether the shim ends up being used or not (e.g., the peer might not | |||
support shim6) it is highly desirable that the initial contact can be | support shim6) it is highly desirable that the initial contact can be | |||
established even if there is a failure for one or more IP addresses. | established even if there is a failure for one or more IP addresses. | |||
The approach taken is to rely on the applications and the transport | The approach taken is to rely on the applications and the transport | |||
protocols to retry with different source and destination addresses, | protocols to retry with different source and destination addresses, | |||
consistent with what is already specified in Default Address | consistent with what is already specified in Default Address | |||
Selection [13], and some fixes to that specification [14] to make it | Selection [12], and some fixes to that specification [13] to make it | |||
try different source addresses and not only different destination | try different source addresses and not only different destination | |||
addresses. | addresses. | |||
The implementation of such an approach can potentially result in long | The implementation of such an approach can potentially result in long | |||
timeouts. For instance, a naive implementation at the socket API | timeouts. For instance, a naive implementation at the socket API | |||
which uses getaddrinfo() to retrieve all destination addresses and | which uses getaddrinfo() to retrieve all destination addresses and | |||
then tries to bind() and connect() to try all source and destination | then tries to bind() and connect() to try all source and destination | |||
address combinations waiting for TCP to time out for each combination | address combinations waiting for TCP to time out for each combination | |||
before trying the next one. | before trying the next one. | |||
skipping to change at page 80, line 21 | skipping to change at page 83, line 21 | |||
I1_TIMEOUT = 4 seconds | I1_TIMEOUT = 4 seconds | |||
NO_R1_HOLDDOWN_TIME = 1 min | NO_R1_HOLDDOWN_TIME = 1 min | |||
ICMP_HOLDDOWN_TIME = 10 min | ICMP_HOLDDOWN_TIME = 10 min | |||
I2_TIMEOUT = 4 seconds | I2_TIMEOUT = 4 seconds | |||
I2_RETRIES_MAX = 2 | I2_RETRIES_MAX = 2 | |||
I2bis_TIMEOUT = 4 seconds | ||||
I2bis_RETRIES_MAX = 2 | ||||
VALIDATOR_MIN_LIFETIME = 30 seconds | VALIDATOR_MIN_LIFETIME = 30 seconds | |||
UPDATE_TIMEOUT = 4 seconds | UPDATE_TIMEOUT = 4 seconds | |||
The retransmit timers (I1_TIMEOUT, I2_TIMEOUT, UPDATE_TIMEOUT) are | The retransmit timers (I1_TIMEOUT, I2_TIMEOUT, UPDATE_TIMEOUT) are | |||
subject to binary exponential backoff, as well as randomization | subject to binary exponential backoff, as well as randomization | |||
across a range of 0.5 and 1.5 times the nominal (backed off) value. | across a range of 0.5 and 1.5 times the nominal (backed off) value. | |||
This removes any risk of synchronization between lots of hosts | This removes any risk of synchronization between lots of hosts | |||
performing independent shim operations at the same time. | performing independent shim operations at the same time. | |||
The randomization is applied after the binary exponential backoff. | The randomization is applied after the binary exponential backoff. | |||
Thus the first retransmission would happen based on a uniformly | Thus the first retransmission would happen based on a uniformly | |||
distributed random number in the range [0.5*4, 1.5*4] seconds, the | distributed random number in the range [0.5*4, 1.5*4] seconds, the | |||
second retransmission [0.5*8, 1.5*8] seconds after the first one, | second retransmission [0.5*8, 1.5*8] seconds after the first one, | |||
etc. | etc. | |||
15. Open Issues | 15. Implications Elsewhere | |||
The following open issues are known: | ||||
o NONE. | ||||
16. Implications Elsewhere | ||||
The general shim6 approach, as well as the specifics of this proposed | The general shim6 approach, as well as the specifics of this proposed | |||
solution, has implications elsewhere. The key implications are: | solution, has implications elsewhere. The key implications are: | |||
o Applications that perform referrals, or callbacks using IP | o Applications that perform referrals, or callbacks using IP | |||
addresses as the 'identifiers' can still function in limited ways, | addresses as the 'identifiers' can still function in limited ways, | |||
as described in [21]. But in order for such applications to be | as described in [22]. But in order for such applications to be | |||
able to take advantage of the multiple locators for redundancy, | able to take advantage of the multiple locators for redundancy, | |||
the applications need to be modified to either use fully qualified | the applications need to be modified to either use fully qualified | |||
domain names as the 'identifiers', or they need to pass all the | domain names as the 'identifiers', or they need to pass all the | |||
locators as the 'identifiers' i.e., the 'identifier' from the | locators as the 'identifiers' i.e., the 'identifier' from the | |||
applications perspective becomes a set of IP addresses instead of | applications perspective becomes a set of IP addresses instead of | |||
a single IP address. | a single IP address. | |||
o Firewalls that today pass limited traffic, e.g., outbound TCP | o Firewalls that today pass limited traffic, e.g., outbound TCP | |||
connections, would presumably block the shim6 protocol. This | connections, would presumably block the shim6 protocol. This | |||
means that even when shim6 capable hosts are communicating, the I1 | means that even when shim6 capable hosts are communicating, the I1 | |||
skipping to change at page 84, line 5 | skipping to change at page 85, line 15 | |||
different path through the Internet, hence the path MTU might be | different path through the Internet, hence the path MTU might be | |||
quite different. Perhaps such a path change would be a good hint | quite different. Perhaps such a path change would be a good hint | |||
to the path MTU mechanism to try a larger MTU? | to the path MTU mechanism to try a larger MTU? | |||
The fact that the shim will add an 8 octet payload extension | The fact that the shim will add an 8 octet payload extension | |||
header to the ULP packets after a locator switch, can also affect | header to the ULP packets after a locator switch, can also affect | |||
the usable path MTU for the ULPs. In this case the MTU change is | the usable path MTU for the ULPs. In this case the MTU change is | |||
local to the sending host, thus conveying the change to the ULPs | local to the sending host, thus conveying the change to the ULPs | |||
is an implementation matter. | is an implementation matter. | |||
17. Security Considerations | o The precise interaction between Mobile IPv6 and shim6 is for | |||
further study, but it might make sense to have Mobile IPv6 operate | ||||
on locators, meaning that the shim would be layered on top of the | ||||
MIPv6 mechanism. | ||||
This document satisfies the concerns specified in [20] as follows: | 16. Security Considerations | |||
o The HBA technique [7] for validating the locators to prevent an | This document satisfies the concerns specified in [19] as follows: | |||
o The HBA technique [7] for verifying the locators to prevent an | ||||
attacker from redirecting the packet stream to somewhere else. | attacker from redirecting the packet stream to somewhere else. | |||
o Requiring a Reachability Probe+Reply before a new locator is used | o Requiring a Reachability Probe+Reply before a new locator is used | |||
as the destination, in order to prevent 3rd party flooding | as the destination, in order to prevent 3rd party flooding | |||
attacks. | attacks. | |||
o The first message does not create any state on the responder. | o The first message does not create any state on the responder. | |||
Essentially a 3-way exchange is required before the responder | Essentially a 3-way exchange is required before the responder | |||
creates any state. This means that a state-based DoS attack | creates any state. This means that a state-based DoS attack | |||
(trying to use up all of memory on the responder) at least | (trying to use up all of memory on the responder) at least | |||
skipping to change at page 84, line 42 | skipping to change at page 86, line 42 | |||
technique, the shim6 protocol is protected against off-path | technique, the shim6 protocol is protected against off-path | |||
attackers. | attackers. | |||
Some of the residual threats in this proposal are: | Some of the residual threats in this proposal are: | |||
o An attacker which arrives late on the path (after the context has | o An attacker which arrives late on the path (after the context has | |||
been established) can use the R1bis message to cause one peer to | been established) can use the R1bis message to cause one peer to | |||
recreate the context, and at that point in time the attacker can | recreate the context, and at that point in time the attacker can | |||
observe all of the exchange. But this doesn't seem to open any | observe all of the exchange. But this doesn't seem to open any | |||
new doors for the attacker since such an attacker can observe the | new doors for the attacker since such an attacker can observe the | |||
Context tags that are being used, and once known it can use those | context tags that are being used, and once known it can use those | |||
to send bogus messages. | to send bogus messages. | |||
o An attacker which is present on the path so that it can find out | o An attacker which is present on the path so that it can find out | |||
the context tags, can generate a R1bis message after it has moved | the context tags, can generate a R1bis message after it has moved | |||
off the path. For this packet to be effective it needs to have a | off the path. For this packet to be effective it needs to have a | |||
source locator which belongs to the context, thus there can not be | source locator which belongs to the context, thus there can not be | |||
"too much" ingress filtering between the attackers new location | "too much" ingress filtering between the attackers new location | |||
and the communicating peers. But this doesn't seem to be that | and the communicating peers. But this doesn't seem to be that | |||
severe, because once the R1bis causes the context to be re- | severe, because once the R1bis causes the context to be re- | |||
established, a new pair of context tags will be used, which will | established, a new pair of context tags will be used, which will | |||
skipping to change at page 86, line 5 | skipping to change at page 88, line 5 | |||
the 47-bit context tag, the attacker also needs to find a context | the 47-bit context tag, the attacker also needs to find a context | |||
where, after the receiver's replacement of the locators with the | where, after the receiver's replacement of the locators with the | |||
ULIDs, the the ULP checksum is correct. But even this wouldn't be | ULIDs, the the ULP checksum is correct. But even this wouldn't be | |||
sufficient with ULPs like TCP, since the TCP port numbers and | sufficient with ULPs like TCP, since the TCP port numbers and | |||
sequence numbers must match an existing connection. Thus, even | sequence numbers must match an existing connection. Thus, even | |||
though the issues for off-path attackers injecting packets are | though the issues for off-path attackers injecting packets are | |||
different than today with ingress filtering, it is still very hard | different than today with ingress filtering, it is still very hard | |||
for an off-path attacker to guess. If IPsec is applied then the | for an off-path attacker to guess. If IPsec is applied then the | |||
issue goes away completely. | issue goes away completely. | |||
18. IANA Considerations | 17. IANA Considerations | |||
IANA needs to allocate a new IP Protocol Number value for this | IANA is directed to allocate a new IP Protocol Number value for the | |||
protocol. | SHIM6 Protocol. | |||
IANA also needs to record a CGA message type for this protocol in the | IANA is directed to record a CGA message type for the SHIM6 Protocol | |||
[CGA] namespace, 0x4A30 5662 4858 574B 3655 416F 506A 6D48. | in the [CGA] namespace registry with the value 0x4A30 5662 4858 574B | |||
3655 416F 506A 6D48. | ||||
This protocol introduces a new shim6 message type name space. The | IANA is directed to establish a SHIM6 Parameter Registry with two | |||
initial assignment of the types is shown below. | components: SHIM6 Type registrations and SHIM6 Options registrations. | |||
The initial contents of the SHIM6 Type registry are as follows: | ||||
+------------+-----------------------------------------------------+ | +------------+-----------------------------------------------------+ | |||
| Type Value | Message | | | Type Value | Message | | |||
+------------+-----------------------------------------------------+ | +------------+-----------------------------------------------------+ | |||
| 0 | RESERVED | | | 0 | RESERVED | | |||
| | | | | | | | |||
| 1 | I1 (first establishment message from the initiator) | | | 1 | I1 (first establishment message from the initiator) | | |||
| | | | | | | | |||
| 2 | R1 (first establishment message from the responder) | | | 2 | R1 (first establishment message from the responder) | | |||
| | | | | | | | |||
skipping to change at page 86, line 49 | skipping to change at page 89, line 4 | |||
| 65 | Update Acknowledgement | | | 65 | Update Acknowledgement | | |||
| | | | | | | | |||
| 66 | Keepalive | | | 66 | Keepalive | | |||
| | | | | | | | |||
| 67 | Probe Message | | | 67 | Probe Message | | |||
| | | | | | | | |||
| 68-123 | Can be allocated using Standards Action | | | 68-123 | Can be allocated using Standards Action | | |||
| | | | | | | | |||
| 124-127 | For Experimental use | | | 124-127 | For Experimental use | | |||
+------------+-----------------------------------------------------+ | +------------+-----------------------------------------------------+ | |||
The initial contents of the SHIM6 Options registry are as follows: | ||||
This protocol introduces a new shim6 option type name space. The | ||||
initial assignment of the types is shown below. | ||||
+--------------+----------------------------------+ | +--------------+----------------------------------+ | |||
| Type | Option Name | | | Type | Option Name | | |||
+--------------+----------------------------------+ | +--------------+----------------------------------+ | |||
| 0 | RESERVED | | | 0 | RESERVED | | |||
| | | | | | | | |||
| 1 | Validator | | | 1 | Responder Validator | | |||
| | | | | | | | |||
| 2 | Locator List | | | 2 | Locator List | | |||
| | | | | | | | |||
| 3 | Locator Preferences | | | 3 | Locator Preferences | | |||
| | | | | | | | |||
| 4 | CGA Parameter Data Structure | | | 4 | CGA Parameter Data Structure | | |||
| | | | | | | | |||
| 5 | CGA Signature | | | 5 | CGA Signature | | |||
| | | | | | | | |||
| 6 | ULID Pair | | | 6 | ULID Pair | | |||
skipping to change at page 88, line 5 | skipping to change at page 90, line 5 | |||
| | | | | | | | |||
| 11 | Reachability Option | | | 11 | Reachability Option | | |||
| | | | | | | | |||
| 12 | Payload Reception Report Option | | | 12 | Payload Reception Report Option | | |||
| | | | | | | | |||
| 13-16383 | Allocated using Standards action | | | 13-16383 | Allocated using Standards action | | |||
| | | | | | | | |||
| 16384-32767 | For Experimental use | | | 16384-32767 | For Experimental use | | |||
+--------------+----------------------------------+ | +--------------+----------------------------------+ | |||
19. Possible Protocol Extensions | 18. Acknowledgements | |||
Over the years many people active in the multi6 and shim6 WGs have | ||||
contributed ideas a suggestions that are reflected in this | ||||
specification. Special thanks to the careful comments from Geoff | ||||
Houston and Shinta Sugimoto on earlier versions of this draft. | ||||
Appendix A. Open Issues | ||||
The following known open issues in this protocol specification are: | ||||
o NONE. | ||||
Appendix B. Possible Protocol Extensions | ||||
During the development of this protocol, several issues have been | During the development of this protocol, several issues have been | |||
brought up as important one to address, but are ones that do not need | brought up as important one to address, but are ones that do not need | |||
to be in the base protocol itself but can instead be done as | to be in the base protocol itself but can instead be done as | |||
extensions to the protocol. The key ones are: | extensions to the protocol. The key ones are: | |||
o As stated in the assumptions in Section 3, the in order for the | ||||
shim6 protocol to be able to recover from a wide range of | ||||
failures, for instance when one of the communicating hosts is | ||||
singly-homed, and cope with a site's ISPs that do ingress | ||||
filtering based on the source IPv6 address, there is a need for | ||||
the host to be able to influence the egress selection from its | ||||
site. Further discussion of this issue is captured in [20]. | ||||
o Is there need for keeping the list of locators private between the | o Is there need for keeping the list of locators private between the | |||
two communicating endpoints? We can potentially accomplish that | two communicating endpoints? We can potentially accomplish that | |||
when using CGA but not with HBA, but it comes at the cost of doing | when using CGA but not with HBA, but it comes at the cost of doing | |||
some public key encryption and decryption operations as part of | some public key encryption and decryption operations as part of | |||
the context establishment. The suggestion is to leave this for a | the context establishment. The suggestion is to leave this for a | |||
future extension to the protocol. | future extension to the protocol. | |||
o Defining some form of end-to-end "compression" mechanism that | o Defining some form of end-to-end "compression" mechanism that | |||
removes the need for including the Shim6 Payload extension header | removes the need for including the Shim6 Payload extension header | |||
when the locator pair is not the ULID pair. | when the locator pair is not the ULID pair. | |||
o Specifying a complete solution which carries locator preferences, | o Supporting the dynamic setting of locator preferences on a site- | |||
both within a site (e.g., DHCP option?), and use the Locator | wide basis, and use the Locator Preference option in the shim6 | |||
Preference option to carry those in the shim protocol. This could | protocol to convey these preferences to remote communicating | |||
mirror the DNS SRV record's notion of priority and weight. | hosts. This could mirror the DNS SRV record's notion of priority | |||
and weight. | ||||
o Potentially recommend that more application protocols use DNS SRV | ||||
records to allow a site some influence on load spreading for the | ||||
initial contact (before the shim6 context establishment) as well | ||||
as for traffic which does not use the shim. | ||||
o Specifying APIs for the ULPs to be aware of the locators the shim | o Specifying APIs for the ULPs to be aware of the locators the shim | |||
is using, and be able to influence the choice of locators. This | is using, and be able to influence the choice of locators | |||
includes providing APIs the ULPs can use to fork a shim context. | (controlling preferences as well as triggering a locator pair | |||
switch). This includes providing APIs the ULPs can use to fork a | ||||
shim context. | ||||
o Whether it is feasible to relax the suggestions for when context | o Whether it is feasible to relax the suggestions for when context | |||
state is removed, so that one can end up with an asymmetric | state is removed, so that one can end up with an asymmetric | |||
distribution of the context state and still get (most of) the shim | distribution of the context state and still get (most of) the shim | |||
benefits. For example, the busy server would go through the | benefits. For example, the busy server would go through the | |||
context setup but would quickly remove the context state after | context setup but would quickly remove the context state after | |||
this (in order to save memory) but the not-so-busy client would | this (in order to save memory) but the not-so-busy client would | |||
retain the context state. The context recovery mechanism | retain the context state. The context recovery mechanism | |||
presented in Section 7.3 would then be recreate the state should | presented in Section 7.5 would then be recreate the state should | |||
the client send either a shim control message (e.g., probe message | the client send either a shim control message (e.g., probe message | |||
because it sees a problem), or a ULP packet in an payload | because it sees a problem), or a ULP packet in an payload | |||
extension header (because it had earlier failed over to an | extension header (because it had earlier failed over to an | |||
alternative locator pair, but had been silent for a while). This | alternative locator pair, but had been silent for a while). This | |||
seems to provide the benefits of the shim as long as the client | seems to provide the benefits of the shim as long as the client | |||
can detect the failure. If the client doesn't send anything, and | can detect the failure. If the client doesn't send anything, and | |||
it is the server that tries to send, then it will not be able to | it is the server that tries to send, then it will not be able to | |||
recover because the shim on the server has no context state, hence | recover because the shim on the server has no context state, hence | |||
doesn't know any alternate locator pairs. | doesn't know any alternate locator pairs. | |||
skipping to change at page 90, line 5 | skipping to change at page 93, line 38 | |||
requirement to include essentially all of them in the I2 and R2 | requirement to include essentially all of them in the I2 and R2 | |||
messages might be constraining. If this is the case we can look | messages might be constraining. If this is the case we can look | |||
into using the CGA Parameter Data Structure for the comparison, | into using the CGA Parameter Data Structure for the comparison, | |||
instead of the prefix sets, to be able to detect context | instead of the prefix sets, to be able to detect context | |||
confusion. This would place some constraint on a (logical) only | confusion. This would place some constraint on a (logical) only | |||
using e.g., one CGA public key, and would require some carefully | using e.g., one CGA public key, and would require some carefully | |||
crafted rules on how two PDSs are compared for "being the same | crafted rules on how two PDSs are compared for "being the same | |||
host". But if we don't expect more than a handful locators per | host". But if we don't expect more than a handful locators per | |||
host, then we don't need this added complexity. | host, then we don't need this added complexity. | |||
20. Change Log | o ULP specified timers for the reachability detection mechanism | |||
(which can be useful particularly when there are forked contexts). | ||||
o Pre-verify some "backup" locator pair, so that the failover time | ||||
can be shorter. | ||||
o Study how shim6 and Mobile IPv6 might interact. There existing an | ||||
initial draft on this topic [21]. | ||||
Appendix C. Change Log | ||||
The following changes have been made since draft-ietf-shim6-proto-03: | ||||
o Editorial clarifications based on comments from Geoff, Shinta, | ||||
Jari. | ||||
o Added "no IPv6 NATs as an explicit assumption. | ||||
o Moving some things out of the Introduction and Overview sections | ||||
to remove all SHOULDs and MUSTs from there. | ||||
o Added requirement that any Locator Preference options which use an | ||||
element length greater than 3 octets have the already defined | ||||
first 3 octets of flags, priority and weight. | ||||
o Fixed security hole where a single message (I1) could cause | ||||
CT(peer) to be updated. Now a three-way handshake is required | ||||
before CT(peer) is updated for an existing context. | ||||
The following changes have been made since draft-ietf-shim6-proto-02: | The following changes have been made since draft-ietf-shim6-proto-02: | |||
o Replaced the Context Error message with the R1bis message. | o Replaced the Context Error message with the R1bis message. | |||
o Removed the Packet In Error option, since it was only used in the | o Removed the Packet In Error option, since it was only used in the | |||
Context Error message. | Context Error message. | |||
o Introduced a I2bis message which is sent in response to an I1bis | o Introduced a I2bis message which is sent in response to an I1bis | |||
message, since the responders processing is quite in this case | message, since the responders processing is quite in this case | |||
than in the regular R1 case. | than in the regular R1 case. | |||
o Moved the packet formats for the Keepalive and Probe message types | o Moved the packet formats for the Keepalive and Probe message types | |||
and Event option to [9]. Only the message type values and option | and Event option to [8]. Only the message type values and option | |||
type value are specified for those in this document. | type value are specified for those in this document. | |||
o Removed the unused message types. | o Removed the unused message types. | |||
o Added a state machine description as an appendix. | o Added a state machine description as an appendix. | |||
o Filled in all the TBDs - except the IANA assignment of the | o Filled in all the TBDs - except the IANA assignment of the | |||
protocol number. | protocol number. | |||
o Specified how context recovery and forked contexts work together. | o Specified how context recovery and forked contexts work together. | |||
skipping to change at page 91, line 12 | skipping to change at page 95, line 30 | |||
This allows extensibility of the protocol with new message types | This allows extensibility of the protocol with new message types | |||
while being able to control when R1bis is generated. | while being able to control when R1bis is generated. | |||
o Expanded the context tag from 32 to 47 bits. | o Expanded the context tag from 32 to 47 bits. | |||
o Specified that enough locators need to be included in I2 and R2 | o Specified that enough locators need to be included in I2 and R2 | |||
messages. Specified that the HBA/CGA verification must be | messages. Specified that the HBA/CGA verification must be | |||
performed when the locator set is received. | performed when the locator set is received. | |||
o Specified that ICMP parameter problem errors are sent in certain | o Specified that ICMP parameter problem errors are sent in certain | |||
error cases, for instance when the validation method is unknown to | error cases, for instance when the verification method is unknown | |||
the receiver, or there is an unknown message type or option type. | to the receiver, or there is an unknown message type or option | |||
type. | ||||
o Renamed "payload message" to be "payload extension header". | o Renamed "payload message" to be "payload extension header". | |||
o Many editorial clarifications suggested by Geoff Huston. | o Many editorial clarifications suggested by Geoff Huston. | |||
o Modified the dispatching of payload extension header to only | o Modified the dispatching of payload extension header to only | |||
compare CT(local) i.e., not compare the source and destination | compare CT(local) i.e., not compare the source and destination | |||
IPv6 address fields. | IPv6 address fields. | |||
The following changes have been made since draft-ietf-shim6-proto-00: | The following changes have been made since draft-ietf-shim6-proto-00: | |||
skipping to change at page 93, line 5 | skipping to change at page 97, line 5 | |||
context is forked, that is different ULP messages are sent over | context is forked, that is different ULP messages are sent over | |||
different locator pairs, things are a lot easier if there is only | different locator pairs, things are a lot easier if there is only | |||
one current locator pair used for each context. Thus the forking | one current locator pair used for each context. Thus the forking | |||
of the context is now causing a new context to be established for | of the context is now causing a new context to be established for | |||
the same ULID; the new context having a new context tag. The | the same ULID; the new context having a new context tag. The | |||
original context is referred to as the "default" context for the | original context is referred to as the "default" context for the | |||
ULID pair. | ULID pair. | |||
o Added more background material and textual descriptions. | o Added more background material and textual descriptions. | |||
21. Acknowledgements | Appendix D. Simplified State Machine | |||
Over the years many people active in the multi6 and shim6 WGs have | ||||
contributed ideas a suggestions that are reflected in this draft. | ||||
Appendix A. Simplified State Machine | ||||
The states are defined in Section 6.2. The intent is that the | The states are defined in Section 6.2. The intent is that the | |||
stylized description below be consistent with the textual description | stylized description below be consistent with the textual description | |||
in the specification, but should they conflict, the textual | in the specification, but should they conflict, the textual | |||
description is normative. | description is normative. | |||
The following table describes the possible actions in state IDLE and | The following table describes the possible actions in state IDLE and | |||
their respective triggers: | their respective triggers: | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
skipping to change at page 98, line 10 | skipping to change at page 101, line 10 | |||
| extension header | sent by peer and lost) | | | extension header | sent by peer and lost) | | |||
| other control | | | | other control | | | |||
| packet | | | | packet | | | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
The following table describes the possible actions in state | The following table describes the possible actions in state | |||
ESTABLISHED and their respective triggers: | ESTABLISHED and their respective triggers: | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| Trigger | Action | | | Trigger | Action | | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| Receive I1 | Send R2 and stay in ESTABLISHED | | | Receive I1, compare | If no match, send R1 and stay in ESTABLISHED| | |||
| CT(peer) with | | | ||||
| received CT | If match, send R2 and stay in ESTABLISHED | | ||||
| | | | ||||
| | | | | | | | |||
| Receive I2, verify | If successful, then send R2 and stay in | | | Receive I2, verify | If successful, then send R2 and stay in | | |||
| validator and RESP | ESTABLISHED | | | validator and RESP | ESTABLISHED | | |||
| nonce | | | | nonce | | | |||
| | Otherwise, discard and stay in ESTABLISHED | | | | Otherwise, discard and stay in ESTABLISHED | | |||
| | | | | | | | |||
| Receive I2bis, | If successful, then send R2 and stay in | | | Receive I2bis, | If successful, then send R2 and stay in | | |||
| verify validator | ESTABLISHED | | | verify validator | ESTABLISHED | | |||
| and RESP nonce | | | | and RESP nonce | | | |||
| | Otherwise, discard and stay in ESTABLISHED | | | | Otherwise, discard and stay in ESTABLISHED | | |||
skipping to change at page 99, line 16 | skipping to change at page 102, line 28 | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| Trigger | Action | | | Trigger | Action | | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| Wait for | Go to IDLE | | | Wait for | Go to IDLE | | |||
| ICMP_HOLDDOWN_TIME | | | | ICMP_HOLDDOWN_TIME | | | |||
| | | | | | | | |||
| Any packet | Process as in IDLE | | | Any packet | Process as in IDLE | | |||
+---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
Appendix A.1 Simplified State Machine diagram | Appendix D.1 Simplified State Machine diagram | |||
For the time being, a pdf version of the state machine diagram can be | For the time being, a pdf version of the state machine diagram can be | |||
found at: http://www.it.uc3m.es/marcelo/state_machine.pdf | found at: http://www.it.uc3m.es/marcelo/state_machine.pdf | |||
Appendix B. Context Tag Reuse | Appendix E. Context Tag Reuse | |||
The shim6 protocol doesn't have a mechanism for coordinated state | The shim6 protocol doesn't have a mechanism for coordinated state | |||
removal between the peers, because such state removal doesn't seem to | removal between the peers, because such state removal doesn't seem to | |||
help given that a host can crash and reboot at any time. A result of | help given that a host can crash and reboot at any time. A result of | |||
this is that the protocol needs to be robust against a context tag | this is that the protocol needs to be robust against a context tag | |||
being reused for some other context. This section summarizes the | being reused for some other context. This section summarizes the | |||
different cases in which a tag can be reused, and how the recovery | different cases in which a tag can be reused, and how the recovery | |||
works. | works. | |||
The different cases are exemplified by the following case. Assume | The different cases are exemplified by the following case. Assume | |||
skipping to change at page 100, line 35 | skipping to change at page 103, line 35 | |||
<A1, B2>. We've called this "Context Recovery" in this document. | <A1, B2>. We've called this "Context Recovery" in this document. | |||
o The context tag is reassigned to a context for a different ULID | o The context tag is reassigned to a context for a different ULID | |||
pair between the same to hosts, e.g., <A3, B3>. We've called this | pair between the same to hosts, e.g., <A3, B3>. We've called this | |||
"Context Confusion" in this document. | "Context Confusion" in this document. | |||
o The context tag is reassigned to a context between B and other | o The context tag is reassigned to a context between B and other | |||
host C, for instance for the ULID pair <C3, B2>. That is a form | host C, for instance for the ULID pair <C3, B2>. That is a form | |||
of three party context confusion. | of three party context confusion. | |||
Appendix B.1 Context Recovery | Appendix E.1 Context Recovery | |||
This case is relatively simple, and is discussed in Section 7.3. The | This case is relatively simple, and is discussed in Section 7.5. The | |||
observation is that since the ULID pair is the same, when either A or | observation is that since the ULID pair is the same, when either A or | |||
B tries to establish the new context, A can keep the old context | B tries to establish the new context, A can keep the old context | |||
while B re-creates the context with the same context tag CT(B) = X. | while B re-creates the context with the same context tag CT(B) = X. | |||
Appendix B.2 Context Confusion | Appendix E.2 Context Confusion | |||
This cases is a bit more complex, and is discussed in Section 7.4. | This cases is a bit more complex, and is discussed in Section 7.6. | |||
When the new context is created, whether A or B initiates it, host A | When the new context is created, whether A or B initiates it, host A | |||
can detect when it receives B's locator set (in the I2, or R2 | can detect when it receives B's locator set (in the I2, or R2 | |||
message), that it ends up with two contexts to the same peer host | message), that it ends up with two contexts to the same peer host | |||
(overlapping Ls(peer) locator sets) that have the same context tag | (overlapping Ls(peer) locator sets) that have the same context tag | |||
CT(peer) = X. At this point in time host A can clear up any | CT(peer) = X. At this point in time host A can clear up any | |||
possibility of causing confusion by not using the old context to send | possibility of causing confusion by not using the old context to send | |||
any more packets. It either just discards the old context (it might | any more packets. It either just discards the old context (it might | |||
not be used by any ULP traffic, since B had discarded it), or it | not be used by any ULP traffic, since B had discarded it), or it | |||
recreates a different context for the old ULID pair (<A1, B2>), for | recreates a different context for the old ULID pair (<A1, B2>), for | |||
which B will assign a unique CT(B) as part of the normal context | which B will assign a unique CT(B) as part of the normal context | |||
establishment mechanism. | establishment mechanism. | |||
Appendix B.3 Three Party Context Confusion | Appendix E.3 Three Party Context Confusion | |||
The third case does not have a place where the old state on A can be | The third case does not have a place where the old state on A can be | |||
verified, since the new context is established between B and C. Thus | verified, since the new context is established between B and C. Thus | |||
when B receives payload extension headers with X as the context tag, | when B receives payload extension headers with X as the context tag, | |||
it will find the context for <C3, B2>, hence rewrite the packets to | it will find the context for <C3, B2>, hence rewrite the packets to | |||
have C3 in the source address field and B2 in the destination address | have C3 in the source address field and B2 in the destination address | |||
field before passing them up to the ULP. This rewriting is correct | field before passing them up to the ULP. This rewriting is correct | |||
when the packets are in fact sent by host C, but if host A ever | when the packets are in fact sent by host C, but if host A ever | |||
happens to send a packet using the old context, then the ULP on A | happens to send a packet using the old context, then the ULP on A | |||
sends a packet with ULIDs <A1, B2> and the packet arrives at the ULP | sends a packet with ULIDs <A1, B2> and the packet arrives at the ULP | |||
skipping to change at page 102, line 5 | skipping to change at page 105, line 5 | |||
In summary, there are cases where a context tag might be reused while | In summary, there are cases where a context tag might be reused while | |||
some peer retains the state, but the protocol can recover from it. | some peer retains the state, but the protocol can recover from it. | |||
The probability of these events is low given the 47 bit context tag | The probability of these events is low given the 47 bit context tag | |||
size. However, it is important that these recovery mechanisms be | size. However, it is important that these recovery mechanisms be | |||
tested. Thus during development and testing it is recommended that | tested. Thus during development and testing it is recommended that | |||
implementations not use the full 47 bit space, but instead keep e.g. | implementations not use the full 47 bit space, but instead keep e.g. | |||
the top 40 bits as zero, only leaving the host with 128 unique | the top 40 bits as zero, only leaving the host with 128 unique | |||
context tags. This will help test the recovery mechanisms. | context tags. This will help test the recovery mechanisms. | |||
Appendix C. Design Alternatives | Appendix F. Design Alternatives | |||
This document has picked a certain set of design choices in order to | This document has picked a certain set of design choices in order to | |||
try to work out a bunch of the details, and stimulate discussion. | try to work out a bunch of the details, and stimulate discussion. | |||
But as has been discussed on the mailing list, there are other | But as has been discussed on the mailing list, there are other | |||
choices that make sense. This appendix tries to enumerate some | choices that make sense. This appendix tries to enumerate some | |||
alternatives. | alternatives. | |||
Appendix C.1 Context granularity | Appendix F.1 Context granularity | |||
Over the years various suggestions have been made whether the shim | Over the years various suggestions have been made whether the shim | |||
should, even if it operates at the IP layer, be aware of ULP | should, even if it operates at the IP layer, be aware of ULP | |||
connections and sessions, and as a result be able to make separate | connections and sessions, and as a result be able to make separate | |||
shim contexts for separate ULP connections and sessions. A few | shim contexts for separate ULP connections and sessions. A few | |||
different options have been discussed: | different options have been discussed: | |||
o Each ULP connection maps to its own shim context. | o Each ULP connection maps to its own shim context. | |||
o The shim is unaware of the ULP notion of connections and just | o The shim is unaware of the ULP notion of connections and just | |||
skipping to change at page 102, line 45 | skipping to change at page 105, line 45 | |||
that want different communication to use different locator pairs, for | that want different communication to use different locator pairs, for | |||
instance for quality or cost reasons. | instance for quality or cost reasons. | |||
The protocol has a shim which operates with host-level granularity | The protocol has a shim which operates with host-level granularity | |||
(strictly speaking, with ULID-pair granularity, to be able to | (strictly speaking, with ULID-pair granularity, to be able to | |||
amortize the context establishment over multiple ULP connections. | amortize the context establishment over multiple ULP connections. | |||
This is combined with the ability for shim-aware ULPs to request | This is combined with the ability for shim-aware ULPs to request | |||
context forking so that different ULP traffic can use different | context forking so that different ULP traffic can use different | |||
locator pairs. | locator pairs. | |||
Appendix C.2 Demultiplexing of data packets in shim6 communications | Appendix F.2 Demultiplexing of data packets in shim6 communications | |||
Once a ULID-pair context is established between two hosts, packets | Once a ULID-pair context is established between two hosts, packets | |||
may carry locators that differ from the ULIDs presented to the ULPs | may carry locators that differ from the ULIDs presented to the ULPs | |||
using the established context. One of main functions of the SHIM6 | using the established context. One of main functions of the SHIM6 | |||
layer is to perform the mapping between the locators used to forward | layer is to perform the mapping between the locators used to forward | |||
packets through the network and the ULIDs presented to the ULP. In | packets through the network and the ULIDs presented to the ULP. In | |||
order to perform that translation for incoming packets, the SHIM6 | order to perform that translation for incoming packets, the SHIM6 | |||
layer needs to first identify which of the incoming packets need to | layer needs to first identify which of the incoming packets need to | |||
be translated and then perform the mapping between locators and ULIDs | be translated and then perform the mapping between locators and ULIDs | |||
using the associated context. Such operation is called | using the associated context. Such operation is called | |||
skipping to change at page 103, line 35 | skipping to change at page 106, line 35 | |||
packet to determine the shim context to be used to perform the | packet to determine the shim context to be used to perform the | |||
operation. | operation. | |||
Two mechanisms for carrying the context tag information have been | Two mechanisms for carrying the context tag information have been | |||
considered in depth during the shim protocol design. Those carrying | considered in depth during the shim protocol design. Those carrying | |||
the context tag in the flow label field of the IPv6 header and the | the context tag in the flow label field of the IPv6 header and the | |||
usage of a new extension header to carry the context tag. In this | usage of a new extension header to carry the context tag. In this | |||
appendix we will describe the pros and cons of each approach and | appendix we will describe the pros and cons of each approach and | |||
justify the selected option. | justify the selected option. | |||
Appendix C.2.1 Flow-label | Appendix F.2.1 Flow-label | |||
A possible approach is to carry the context tag in the Flow Label | A possible approach is to carry the context tag in the Flow Label | |||
field of the IPv6 header. This means that when a shim6 context is | field of the IPv6 header. This means that when a shim6 context is | |||
established, a Flow Label value is associated with this context (and | established, a Flow Label value is associated with this context (and | |||
perhaps a separate flow label for each direction). | perhaps a separate flow label for each direction). | |||
The simplest approach that does this is to have the triple <Flow | The simplest approach that does this is to have the triple <Flow | |||
Label, Source Locator, Destination Locator> identify the context at | Label, Source Locator, Destination Locator> identify the context at | |||
the receiver. | the receiver. | |||
skipping to change at page 104, line 47 | skipping to change at page 107, line 47 | |||
negotiation of the Flow Label value to use in the communication is | negotiation of the Flow Label value to use in the communication is | |||
needed before exchanging data packets. This poses problems with non- | needed before exchanging data packets. This poses problems with non- | |||
shim capable hosts, since they would not be able to negotiate an | shim capable hosts, since they would not be able to negotiate an | |||
acceptable value for the Flow Label. This limitation can be lifted | acceptable value for the Flow Label. This limitation can be lifted | |||
by marking the packets that belong to shim sessions from those that | by marking the packets that belong to shim sessions from those that | |||
do not. These marking would require at least a bit in the IPv6 | do not. These marking would require at least a bit in the IPv6 | |||
header that is not currently available, so more creative options | header that is not currently available, so more creative options | |||
would be required, for instance using new Next Header values to | would be required, for instance using new Next Header values to | |||
indicate that the packet belongs to a shim6 enabled communication and | indicate that the packet belongs to a shim6 enabled communication and | |||
that the Flow Label carries context information as proposed in the | that the Flow Label carries context information as proposed in the | |||
now expire NOID draft. . However, even if this is done, this | now expired NOID draft. . However, even if this is done, this | |||
approach is incompatible with the deferred establishment capability | approach is incompatible with the deferred establishment capability | |||
of the shim protocol, which is a preferred function, since it | of the shim protocol, which is a preferred function, since it | |||
suppresses the delay due to the shim context establishment prior to | suppresses the delay due to the shim context establishment prior to | |||
initiation of the communication and it also allows nodes to define at | initiation of the communication and it also allows nodes to define at | |||
which stage of the communication they decide, based on their own | which stage of the communication they decide, based on their own | |||
policies, that a given communication requires to be protected by the | policies, that a given communication requires to be protected by the | |||
shim. | shim. | |||
In order to cope with the identified limitations, an alternative | In order to cope with the identified limitations, an alternative | |||
approach that does not constraints the flow label values used by | approach that does not constraints the flow label values used by | |||
communications that are using ULIDs equal to the locators (i.e. no | communications that are using ULIDs equal to the locators (i.e. no | |||
shim translation) is to only require that different flow label values | shim translation) is to only require that different flow label values | |||
are assigned to different shim contexts. In such approach | are assigned to different shim contexts. In such approach | |||
communications start with unmodified flow label usage (could be zero, | communications start with unmodified flow label usage (could be zero, | |||
or as suggested in [17]). The packets sent after a failure when a | or as suggested in [16]). The packets sent after a failure when a | |||
different locator pair is used would use a completely different flow | different locator pair is used would use a completely different flow | |||
label, and this flow label could be allocated by the receiver as part | label, and this flow label could be allocated by the receiver as part | |||
of the shim context establishment. Since it is allocated during the | of the shim context establishment. Since it is allocated during the | |||
context establishment, the receiver of the "failed over" packets can | context establishment, the receiver of the "failed over" packets can | |||
pick a flow label of its choosing (that is unique in the sense that | pick a flow label of its choosing (that is unique in the sense that | |||
no other context is using it as a context tag), without any | no other context is using it as a context tag), without any | |||
performance impact, and respecting that for each locator pair, the | performance impact, and respecting that for each locator pair, the | |||
flow label value used for a given locator pair doesn't change due to | flow label value used for a given locator pair doesn't change due to | |||
the operation of the multihoming shim. | the operation of the multihoming shim. | |||
skipping to change at page 105, line 49 | skipping to change at page 108, line 49 | |||
would be the preferred approach if the context tag is to be carried | would be the preferred approach if the context tag is to be carried | |||
in the Flow Label field. This is not only because it imposes the | in the Flow Label field. This is not only because it imposes the | |||
minimum constraints to the Flow Label allocation strategies, limiting | minimum constraints to the Flow Label allocation strategies, limiting | |||
the restrictions only to those packets that need to be translated by | the restrictions only to those packets that need to be translated by | |||
the shim, but also because Context Loss detection mechanisms greatly | the shim, but also because Context Loss detection mechanisms greatly | |||
benefit from the fact that shim data packets are identified as such, | benefit from the fact that shim data packets are identified as such, | |||
allowing the receiving end to identify if a shim context associated | allowing the receiving end to identify if a shim context associated | |||
to a received packet is suppose to exist, as it will be discussed in | to a received packet is suppose to exist, as it will be discussed in | |||
the Context Loss detection appendix below. | the Context Loss detection appendix below. | |||
Appendix C.2.2 Extension Header | Appendix F.2.2 Extension Header | |||
Another approach, which is the one selected for this protocol, is to | Another approach, which is the one selected for this protocol, is to | |||
carry the context tag in a new Extension Header. These context tags | carry the context tag in a new Extension Header. These context tags | |||
are allocated by the receiving end during the shim6 protocol initial | are allocated by the receiving end during the shim6 protocol initial | |||
negotiation, implying that each context will have two context tags, | negotiation, implying that each context will have two context tags, | |||
one for each direction. Data packets will be demultiplexed using the | one for each direction. Data packets will be demultiplexed using the | |||
context tag carried in the Extension Header. This seems a clean | context tag carried in the Extension Header. This seems a clean | |||
approach since it does not overload existing fields. However, it | approach since it does not overload existing fields. However, it | |||
introduces additional overhead in the packet due to the additional | introduces additional overhead in the packet due to the additional | |||
header. The additional overhead introduced is 8 octets. However, it | header. The additional overhead introduced is 8 octets. However, it | |||
skipping to change at page 106, line 25 | skipping to change at page 109, line 25 | |||
ULIDs do not require a context tag, since no rewriting is necessary | ULIDs do not require a context tag, since no rewriting is necessary | |||
at the receiver. This approach would reduce the overhead, because | at the receiver. This approach would reduce the overhead, because | |||
the additional header is only required after a failure. On the other | the additional header is only required after a failure. On the other | |||
hand, this approach would cause changes in the available MTU for some | hand, this approach would cause changes in the available MTU for some | |||
packets, since packets that include the Extension Header will have an | packets, since packets that include the Extension Header will have an | |||
MTU 8 octets shorter. However, path changes through the network can | MTU 8 octets shorter. However, path changes through the network can | |||
result in different MTU in any case, thus having a locator change, | result in different MTU in any case, thus having a locator change, | |||
which implies a path change, affect the MTU doesn't introduce any new | which implies a path change, affect the MTU doesn't introduce any new | |||
issues. | issues. | |||
Appendix C.3 Context Loss Detection | Appendix F.3 Context Loss Detection | |||
In this appendix we will present different approaches considered to | In this appendix we will present different approaches considered to | |||
detect context loss and potential context recovery strategies. The | detect context loss and potential context recovery strategies. The | |||
scenario being considered is the following: Node A and Node B are | scenario being considered is the following: Node A and Node B are | |||
communicating using IPA1 and IPB1. Sometime later, a shim context is | communicating using IPA1 and IPB1. Sometime later, a shim context is | |||
established between them, with IPA1 and IPB1 as ULIDs and | established between them, with IPA1 and IPB1 as ULIDs and | |||
IPA1,...,IPAn and IPB1,...,IPBm as locator set respectively. | IPA1,...,IPAn and IPB1,...,IPBm as locator set respectively. | |||
It may happen, that later on, one of the hosts, e.g. Host A looses | It may happen, that later on, one of the hosts, e.g. Host A looses | |||
the shim context. The reason for this can be that Host A has a more | the shim context. The reason for this can be that Host A has a more | |||
skipping to change at page 108, line 43 | skipping to change at page 111, line 43 | |||
exchange and at this point time may be critical since we are | exchange and at this point time may be critical since we are | |||
reestablishing a context that is currently needed (because context | reestablishing a context that is currently needed (because context | |||
loss detection may occur after a failure). So, another option, which | loss detection may occur after a failure). So, another option, which | |||
is the one used in this protocol, is to replace the error message by | is the one used in this protocol, is to replace the error message by | |||
a modified R1 message, so that the time required to perform the | a modified R1 message, so that the time required to perform the | |||
context establishment exchange can be reduced. Upon the reception of | context establishment exchange can be reduced. Upon the reception of | |||
this modified R1 message, the end that still has the context state | this modified R1 message, the end that still has the context state | |||
can finish the context establishment exchange and restore the lost | can finish the context establishment exchange and restore the lost | |||
context. | context. | |||
Appendix C.4 Securing locator sets | Appendix F.4 Securing locator sets | |||
The adoption of a protocol like SHIM that allows the binding of a | The adoption of a protocol like SHIM that allows the binding of a | |||
given ULID with a set of locators opens the doors for different types | given ULID with a set of locators opens the doors for different types | |||
of redirection attacks as described in [20]. The goal in terms of | of redirection attacks as described in [19]. The goal in terms of | |||
security for the design of the shim protocol is not to introduce any | security for the design of the shim protocol is not to introduce any | |||
new vulnerability in the Internet architecture. It is a non-goal to | new vulnerability in the Internet architecture. It is a non-goal to | |||
provide additional protection than the currently available in the | provide additional protection than the currently available in the | |||
single-homed IPv6 Internet. | single-homed IPv6 Internet. | |||
Multiple security mechanisms were considered to protect the shim | Multiple security mechanisms were considered to protect the shim | |||
protocol. In this appendix we will present some of them. | protocol. In this appendix we will present some of them. | |||
The simplest option to protect the shim protocol was to use cookies | The simplest option to protect the shim protocol was to use cookies | |||
i.e. a randomly generated bit string that is negotiated during the | i.e. a randomly generated bit string that is negotiated during the | |||
skipping to change at page 111, line 21 | skipping to change at page 114, line 21 | |||
So, the design decision adopted was that both mechanisms HBA and CGA | So, the design decision adopted was that both mechanisms HBA and CGA | |||
are supported, so that when only stable address sets are required, | are supported, so that when only stable address sets are required, | |||
the nodes can benefit from the low computational cost offered by HBA | the nodes can benefit from the low computational cost offered by HBA | |||
while when dynamic locator sets are required, this can be achieved | while when dynamic locator sets are required, this can be achieved | |||
through CGAs with an additional cost. Moreover, because HBAs are | through CGAs with an additional cost. Moreover, because HBAs are | |||
defined as a CGA extension, the addresses available in a node can | defined as a CGA extension, the addresses available in a node can | |||
simultaneously be CGAs and HBAs, allowing the usage of the HBA and | simultaneously be CGAs and HBAs, allowing the usage of the HBA and | |||
CGA functionality when needed without requiring a change in the | CGA functionality when needed without requiring a change in the | |||
addresses used. | addresses used. | |||
Appendix C.5 ULID-pair context establishment exchange | Appendix F.5 ULID-pair context establishment exchange | |||
Two options were considered for the ULID-pair context establishment | Two options were considered for the ULID-pair context establishment | |||
exchange: a 2-way handshake and a 4-way handshake. | exchange: a 2-way handshake and a 4-way handshake. | |||
A key goal for the design of this exchange was that protection | A key goal for the design of this exchange was that protection | |||
against DoS attacks. The attack under consideration was basically a | against DoS attacks. The attack under consideration was basically a | |||
situation where an attacker launches a great amount of ULID-pair | situation where an attacker launches a great amount of ULID-pair | |||
establishment request packets, exhausting victim's resources, similar | establishment request packets, exhausting victim's resources, similar | |||
to TCP SYN flooding attacks. | to TCP SYN flooding attacks. | |||
skipping to change at page 112, line 21 | skipping to change at page 115, line 21 | |||
should be noted, that because this is 2-way exchange, it is not | should be noted, that because this is 2-way exchange, it is not | |||
possible to use the number of half open sessions (as in TCP) to | possible to use the number of half open sessions (as in TCP) to | |||
detect an ongoing attack and different heuristics need to be | detect an ongoing attack and different heuristics need to be | |||
considered. | considered. | |||
The design decision taken was that considering the current impact of | The design decision taken was that considering the current impact of | |||
DoS attacks and the low impact of the 4-way exchange in the shim | DoS attacks and the low impact of the 4-way exchange in the shim | |||
protocol thanks to the deferred context establishment capability, a | protocol thanks to the deferred context establishment capability, a | |||
4-way exchange would be adopted for the base protocol. | 4-way exchange would be adopted for the base protocol. | |||
Appendix C.6 Updating locator sets | Appendix F.6 Updating locator sets | |||
There are two possible approaches to the addition and removal of | There are two possible approaches to the addition and removal of | |||
locators: atomic and differential approaches. The atomic approach | locators: atomic and differential approaches. The atomic approach | |||
essentially send the complete locators set each time that a variation | essentially send the complete locators set each time that a variation | |||
in the locator set occurs. The differential approach send the | in the locator set occurs. The differential approach send the | |||
differences between the existing locator set and the new one. The | differences between the existing locator set and the new one. The | |||
atomic approach imposes additional overhead, since all the locator | atomic approach imposes additional overhead, since all the locator | |||
set has to be exchanged each time while the differential approach | set has to be exchanged each time while the differential approach | |||
requires re-synchronization of both ends through changes i.e. that | requires re-synchronization of both ends through changes i.e. that | |||
both ends have the same idea about what the current locator set is. | both ends have the same idea about what the current locator set is. | |||
Because of the difficulties imposed by the synchronization | Because of the difficulties imposed by the synchronization | |||
requirement, the atomic approach was selected. | requirement, the atomic approach was selected. | |||
Appendix C.7 State Cleanup | Appendix F.7 State Cleanup | |||
There are essentially two approaches for discarding an existing state | There are essentially two approaches for discarding an existing state | |||
about locators, keys and identifiers of a correspondent node: a | about locators, keys and identifiers of a correspondent node: a | |||
coordinated approach and an unilateral approach. | coordinated approach and an unilateral approach. | |||
In the unilateral approach, each node discards the information about | In the unilateral approach, each node discards the information about | |||
the other node without coordination with the other node based on some | the other node without coordination with the other node based on some | |||
local timers and heuristics. No packet exchange is required for | local timers and heuristics. No packet exchange is required for | |||
this. In this case, it would be possible that one of the nodes has | this. In this case, it would be possible that one of the nodes has | |||
discarded the state while the other node still hasn't. In this case, | discarded the state while the other node still hasn't. In this case, | |||
a No-Context error message may be required to inform about the | a No-Context error message may be required to inform about the | |||
situation and possibly a recovery mechanism is also needed. | situation and possibly a recovery mechanism is also needed. | |||
A coordinated approach would use an explicit CLOSE mechanism, akin to | A coordinated approach would use an explicit CLOSE mechanism, akin to | |||
the one specified in HIP [26]. If an explicit CLOSE handshake and | the one specified in HIP [25]. If an explicit CLOSE handshake and | |||
associated timer is used, then there would no longer be a need for | associated timer is used, then there would no longer be a need for | |||
the No Context Error message due to a peer having garbage collected | the No Context Error message due to a peer having garbage collected | |||
its end of the context. However, there is still potentially a need | its end of the context. However, there is still potentially a need | |||
to have a No Context Error message in the case of a complete state | to have a No Context Error message in the case of a complete state | |||
loss of the peer (also known as a crash followed by a reboot). Only | loss of the peer (also known as a crash followed by a reboot). Only | |||
if we assume that the reboot takes at least the CLOSE timer, or that | if we assume that the reboot takes at least the CLOSE timer, or that | |||
it is ok to not provide complete service until CLOSE timer minutes | it is ok to not provide complete service until CLOSE timer minutes | |||
after the crash, can we completely do away with the No Context Error | after the crash, can we completely do away with the No Context Error | |||
message. | message. | |||
skipping to change at page 115, line 5 | skipping to change at page 118, line 5 | |||
coordinated approach using a CLOSE/CLOSE ACK exchange, there is still | coordinated approach using a CLOSE/CLOSE ACK exchange, there is still | |||
the possibility of a host rebooting without having the time to | the possibility of a host rebooting without having the time to | |||
perform the CLOSE exchange. So, it is true that the coordinated | perform the CLOSE exchange. So, it is true that the coordinated | |||
approach eliminates the possibility of a context confusion situation | approach eliminates the possibility of a context confusion situation | |||
because premature garbage collection, but it does not prevents the | because premature garbage collection, but it does not prevents the | |||
same situations due to a crash and reboot of one of the involved | same situations due to a crash and reboot of one of the involved | |||
hosts. The result is that even if we went for a coordinated | hosts. The result is that even if we went for a coordinated | |||
approach, we would still need to deal with context confusion and | approach, we would still need to deal with context confusion and | |||
provide the means to detect and recover from this situations. | provide the means to detect and recover from this situations. | |||
22. References | 19. References | |||
22.1 Normative References | 19.1 Normative References | |||
[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
Levels", BCP 14, RFC 2119, March 1997. | Levels", BCP 14, RFC 2119, March 1997. | |||
[2] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) | [2] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) | |||
Specification", RFC 2460, December 1998. | Specification", RFC 2460, December 1998. | |||
[3] Narten, T., Nordmark, E., and W. Simpson, "Neighbor Discovery | [3] Narten, T., Nordmark, E., and W. Simpson, "Neighbor Discovery | |||
for IP Version 6 (IPv6)", RFC 2461, December 1998. | for IP Version 6 (IPv6)", RFC 2461, December 1998. | |||
skipping to change at page 115, line 31 | skipping to change at page 118, line 31 | |||
[5] Conta, A. and S. Deering, "Internet Control Message Protocol | [5] Conta, A. and S. Deering, "Internet Control Message Protocol | |||
(ICMPv6) for the Internet Protocol Version 6 (IPv6) | (ICMPv6) for the Internet Protocol Version 6 (IPv6) | |||
Specification", RFC 2463, December 1998. | Specification", RFC 2463, December 1998. | |||
[6] Aura, T., "Cryptographically Generated Addresses (CGA)", | [6] Aura, T., "Cryptographically Generated Addresses (CGA)", | |||
RFC 3972, March 2005. | RFC 3972, March 2005. | |||
[7] Bagnulo, M., "Hash Based Addresses (HBA)", | [7] Bagnulo, M., "Hash Based Addresses (HBA)", | |||
draft-ietf-shim6-hba-01 (work in progress), October 2005. | draft-ietf-shim6-hba-01 (work in progress), October 2005. | |||
[8] Beijnum, I., "Shim6 Reachability Detection", | [8] Arkko, J. and I. Beijnum, "Failure Detection and Locator Pair | |||
draft-ietf-shim6-reach-detect-01 (work in progress), | ||||
October 2005. | ||||
[9] Arkko, J. and I. Beijnum, "Failure Detection and Locator Pair | ||||
Exploration Protocol for IPv6 Multihoming", | Exploration Protocol for IPv6 Multihoming", | |||
draft-ietf-shim6-failure-detection-02 (work in progress), | draft-ietf-shim6-failure-detection-03 (work in progress), | |||
October 2005. | December 2005. | |||
22.2 Informative References | 19.2 Informative References | |||
[10] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | [9] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | |||
specifying the location of services (DNS SRV)", RFC 2782, | specifying the location of services (DNS SRV)", RFC 2782, | |||
February 2000. | February 2000. | |||
[11] Ferguson, P. and D. Senie, "Network Ingress Filtering: | [10] Ferguson, P. and D. Senie, "Network Ingress Filtering: | |||
Defeating Denial of Service Attacks which employ IP Source | Defeating Denial of Service Attacks which employ IP Source | |||
Address Spoofing", BCP 38, RFC 2827, May 2000. | Address Spoofing", BCP 38, RFC 2827, May 2000. | |||
[12] Narten, T. and R. Draves, "Privacy Extensions for Stateless | [11] Narten, T. and R. Draves, "Privacy Extensions for Stateless | |||
Address Autoconfiguration in IPv6", RFC 3041, January 2001. | Address Autoconfiguration in IPv6", RFC 3041, January 2001. | |||
[13] Draves, R., "Default Address Selection for Internet Protocol | [12] Draves, R., "Default Address Selection for Internet Protocol | |||
version 6 (IPv6)", RFC 3484, February 2003. | version 6 (IPv6)", RFC 3484, February 2003. | |||
[14] Bagnulo, M., "Updating RFC 3484 for multihoming support", | [13] Bagnulo, M., "Updating RFC 3484 for multihoming support", | |||
draft-bagnulo-ipv6-rfc3484-update-00 (work in progress), | draft-bagnulo-ipv6-rfc3484-update-00 (work in progress), | |||
December 2005. | December 2005. | |||
[15] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, | [14] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, | |||
"RTP: A Transport Protocol for Real-Time Applications", STD 64, | "RTP: A Transport Protocol for Real-Time Applications", STD 64, | |||
RFC 3550, July 2003. | RFC 3550, July 2003. | |||
[16] Abley, J., Black, B., and V. Gill, "Goals for IPv6 Site- | [15] Abley, J., Black, B., and V. Gill, "Goals for IPv6 Site- | |||
Multihoming Architectures", RFC 3582, August 2003. | Multihoming Architectures", RFC 3582, August 2003. | |||
[17] Rajahalme, J., Conta, A., Carpenter, B., and S. Deering, "IPv6 | [16] Rajahalme, J., Conta, A., Carpenter, B., and S. Deering, "IPv6 | |||
Flow Label Specification", RFC 3697, March 2004. | Flow Label Specification", RFC 3697, March 2004. | |||
[18] Eastlake, D., Schiller, J., and S. Crocker, "Randomness | [17] Eastlake, D., Schiller, J., and S. Crocker, "Randomness | |||
Requirements for Security", BCP 106, RFC 4086, June 2005. | Requirements for Security", BCP 106, RFC 4086, June 2005. | |||
[19] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast | [18] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast | |||
Addresses", RFC 4193, October 2005. | Addresses", RFC 4193, October 2005. | |||
[20] Nordmark, E., "Threats relating to IPv6 multihoming solutions", | [19] Nordmark, E. and T. Li, "Threats Relating to IPv6 Multihoming | |||
draft-ietf-multi6-multihoming-threats-03 (work in progress), | Solutions", RFC 4218, October 2005. | |||
January 2005. | ||||
[21] Nordmark, E., "Shim6 Application Referral Issues", | [20] Huitema, C., "Ingress filtering compatibility for IPv6 | |||
multihomed sites", draft-huitema-shim6-ingress-filtering-00 | ||||
(work in progress), September 2005. | ||||
[21] Bagnulo, M. and E. Nordmark, "SHIM - MIPv6 Interaction", | ||||
draft-bagnulo-shim6-mip-00 (work in progress), July 2005. | ||||
[22] Nordmark, E., "Shim6 Application Referral Issues", | ||||
draft-ietf-shim6-app-refer-00 (work in progress), July 2005. | draft-ietf-shim6-app-refer-00 (work in progress), July 2005. | |||
[22] Abley, J., "Shim6 Applicability Statement", | [23] Abley, J., "Shim6 Applicability Statement", | |||
draft-ietf-shim6-applicability-00 (work in progress), | draft-ietf-shim6-applicability-00 (work in progress), | |||
July 2005. | July 2005. | |||
[23] Huston, G., "Architectural Commentary on Site Multi-homing | [24] Huston, G., "Architectural Commentary on Site Multi-homing | |||
using a Level 3 Shim", draft-ietf-shim6-arch-00 (work in | using a Level 3 Shim", draft-ietf-shim6-arch-00 (work in | |||
progress), July 2005. | progress), July 2005. | |||
[24] Bagnulo, M. and J. Arkko, "Functional decomposition of the | [25] Moskowitz, R., "Host Identity Protocol", draft-ietf-hip-base-05 | |||
multihoming protocol", draft-ietf-shim6-functional-dec-00 (work | (work in progress), March 2006. | |||
in progress), July 2005. | ||||
[25] Nordmark, E. and M. Bagnulo, "Multihoming L3 Shim Approach", | ||||
draft-ietf-shim6-l3shim-00 (work in progress), July 2005. | ||||
[26] Moskowitz, R., "Host Identity Protocol", draft-ietf-hip-base-04 | ||||
(work in progress), October 2005. | ||||
[27] Lear, E. and R. Droms, "What's In A Name:Thoughts from the | ||||
NSRG", draft-irtf-nsrg-report-10 (work in progress), | ||||
September 2003. | ||||
[28] Eronen, P., "IKEv2 Mobility and Multihoming Protocol (MOBIKE)", | [26] Eronen, P., "IKEv2 Mobility and Multihoming Protocol (MOBIKE)", | |||
draft-ietf-mobike-protocol-07 (work in progress), | draft-ietf-mobike-protocol-08 (work in progress), | |||
December 2005. | February 2006. | |||
Authors' Addresses | Authors' Addresses | |||
Erik Nordmark | Erik Nordmark | |||
Sun Microsystems | Sun Microsystems | |||
17 Network Circle | 17 Network Circle | |||
Menlo Park, CA 94025 | Menlo Park, CA 94025 | |||
USA | USA | |||
Phone: +1 650 786 2921 | Phone: +1 650 786 2921 | |||
skipping to change at page 118, line 41 | skipping to change at page 121, line 41 | |||
This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | |||
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | |||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | |||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
Copyright Statement | Copyright Statement | |||
Copyright (C) The Internet Society (2005). This document is subject | Copyright (C) The Internet Society (2006). This document is subject | |||
to the rights, licenses and restrictions contained in BCP 78, and | to the rights, licenses and restrictions contained in BCP 78, and | |||
except as set forth therein, the authors retain all their rights. | except as set forth therein, the authors retain all their rights. | |||
Acknowledgment | Acknowledgment | |||
Funding for the RFC Editor function is currently provided by the | Funding for the RFC Editor function is currently provided by the | |||
Internet Society. | Internet Society. | |||
End of changes. 288 change blocks. | ||||
681 lines changed or deleted | 1004 lines changed or added | |||
This html diff was produced by rfcdiff 1.29, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |