| < draft-ietf-shim6-proto-09.txt | draft-ietf-shim6-proto-10.txt > | |||
|---|---|---|---|---|
| SHIM6 WG E. Nordmark | SHIM6 WG E. Nordmark | |||
| Internet-Draft Sun Microsystems | Internet-Draft Sun Microsystems | |||
| Expires: April 3, 2008 M. Bagnulo | Expires: August 17, 2008 M. Bagnulo | |||
| UC3M | UC3M | |||
| October 2007 | February 14, 2008 | |||
| Shim6: Level 3 Multihoming Shim Protocol for IPv6 | Shim6: Level 3 Multihoming Shim Protocol for IPv6 | |||
| draft-ietf-shim6-proto-09.txt | draft-ietf-shim6-proto-10.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 April 3, 2008. | This Internet-Draft will expire on August 17, 2008. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2008). | |||
| Abstract | Abstract | |||
| This document defines the Shim6 protocol, a layer 3 shim for | This document defines the Shim6 protocol, a layer 3 shim for | |||
| providing locator agility below the transport protocols, so that | 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 sharing | |||
| properties, without assuming that a multihomed site will have a | properties, without assuming that a multihomed site will have a | |||
| provider independent IPv6 address prefix which is announced in the | provider independent IPv6 address prefix which is announced in the | |||
| global IPv6 routing table. The hosts in a site which has multiple | global IPv6 routing table. The hosts in a site which has multiple | |||
| provider allocated IPv6 address prefixes, will use the Shim6 protocol | provider allocated IPv6 address prefixes, will use the Shim6 protocol | |||
| skipping to change at page 2, line 28 ¶ | skipping to change at page 2, line 28 ¶ | |||
| 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 (ULID) . . . . . . . 6 | 1.3. Locators as Upper-layer IDentifiers (ULID) . . . . . . . 6 | |||
| 1.4. IP Multicast . . . . . . . . . . . . . . . . . . . . . . 7 | 1.4. IP Multicast . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 1.5. Renumbering Implications . . . . . . . . . . . . . . . . 8 | 1.5. Renumbering Implications . . . . . . . . . . . . . . . . 8 | |||
| 1.6. Placement of the shim . . . . . . . . . . . . . . . . . . 9 | 1.6. Placement of the shim . . . . . . . . . . . . . . . . . . 9 | |||
| 1.7. Traffic Engineering . . . . . . . . . . . . . . . . . . . 11 | 1.7. Traffic Engineering . . . . . . . . . . . . . . . . . . . 11 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 2.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 12 | 2.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 2.2. Notational Conventions . . . . . . . . . . . . . . . . . 15 | 2.2. Notational Conventions . . . . . . . . . . . . . . . . . 16 | |||
| 3. Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 3. Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 18 | 4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.1. Context Tags . . . . . . . . . . . . . . . . . . . . . . 20 | 4.1. Context Tags . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 4.2. Context Forking . . . . . . . . . . . . . . . . . . . . . 20 | 4.2. Context Forking . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 4.3. API Extensions . . . . . . . . . . . . . . . . . . . . . 21 | 4.3. API Extensions . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 4.4. Securing Shim6 . . . . . . . . . . . . . . . . . . . . . 21 | 4.4. Securing Shim6 . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 4.5. Overview of Shim Control Messages . . . . . . . . . . . . 22 | 4.5. Overview of Shim Control Messages . . . . . . . . . . . . 23 | |||
| 4.6. Extension Header Order . . . . . . . . . . . . . . . . . 23 | 4.6. Extension Header Order . . . . . . . . . . . . . . . . . 24 | |||
| 5. Message Formats . . . . . . . . . . . . . . . . . . . . . . . 25 | 5. Message Formats . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 5.1. Common Shim6 Message Format . . . . . . . . . . . . . . . 25 | 5.1. Common Shim6 Message Format . . . . . . . . . . . . . . . 26 | |||
| 5.2. Payload Extension Header Format . . . . . . . . . . . . . 26 | 5.2. Payload Extension Header Format . . . . . . . . . . . . . 27 | |||
| 5.3. Common Shim6 Control header . . . . . . . . . . . . . . . 26 | 5.3. Common Shim6 Control header . . . . . . . . . . . . . . . 27 | |||
| 5.4. I1 Message Format . . . . . . . . . . . . . . . . . . . . 28 | 5.4. I1 Message Format . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.5. R1 Message Format . . . . . . . . . . . . . . . . . . . . 29 | 5.5. R1 Message Format . . . . . . . . . . . . . . . . . . . . 30 | |||
| 5.6. I2 Message Format . . . . . . . . . . . . . . . . . . . . 31 | 5.6. I2 Message Format . . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.7. R2 Message Format . . . . . . . . . . . . . . . . . . . . 33 | 5.7. R2 Message Format . . . . . . . . . . . . . . . . . . . . 34 | |||
| 5.8. R1bis Message Format . . . . . . . . . . . . . . . . . . 34 | 5.8. R1bis Message Format . . . . . . . . . . . . . . . . . . 35 | |||
| 5.9. I2bis Message Format . . . . . . . . . . . . . . . . . . 36 | 5.9. I2bis Message Format . . . . . . . . . . . . . . . . . . 37 | |||
| 5.10. Update Request Message Format . . . . . . . . . . . . . . 38 | 5.10. Update Request Message Format . . . . . . . . . . . . . . 39 | |||
| 5.11. Update Acknowledgement Message Format . . . . . . . . . . 39 | 5.11. Update Acknowledgement Message Format . . . . . . . . . . 40 | |||
| 5.12. Keepalive Message Format . . . . . . . . . . . . . . . . 40 | 5.12. Keepalive Message Format . . . . . . . . . . . . . . . . 41 | |||
| 5.13. Probe Message Format . . . . . . . . . . . . . . . . . . 41 | 5.13. Probe Message Format . . . . . . . . . . . . . . . . . . 42 | |||
| 5.14. Error Message Format . . . . . . . . . . . . . . . . . . 41 | 5.14. Error Message Format . . . . . . . . . . . . . . . . . . 42 | |||
| 5.15. Option Formats . . . . . . . . . . . . . . . . . . . . . 42 | 5.15. Option Formats . . . . . . . . . . . . . . . . . . . . . 43 | |||
| 5.15.1. Responder Validator Option Format . . . . . . . . . 45 | 5.15.1. Responder Validator Option Format . . . . . . . . . 46 | |||
| 5.15.2. Locator List Option Format . . . . . . . . . . . . . 45 | 5.15.2. Locator List Option Format . . . . . . . . . . . . . 46 | |||
| 5.15.3. Locator Preferences Option Format . . . . . . . . . 47 | 5.15.3. Locator Preferences Option Format . . . . . . . . . 48 | |||
| 5.15.4. CGA Parameter Data Structure Option Format . . . . . 49 | 5.15.4. CGA Parameter Data Structure Option Format . . . . . 50 | |||
| 5.15.5. CGA Signature Option Format . . . . . . . . . . . . 49 | 5.15.5. CGA Signature Option Format . . . . . . . . . . . . 50 | |||
| 5.15.6. ULID Pair Option Format . . . . . . . . . . . . . . 50 | 5.15.6. ULID Pair Option Format . . . . . . . . . . . . . . 51 | |||
| 5.15.7. Forked Instance Identifier Option Format . . . . . . 51 | 5.15.7. Forked Instance Identifier Option Format . . . . . . 52 | |||
| 5.15.8. Keepalive Timeout Option Format . . . . . . . . . . 51 | 5.15.8. Keepalive Timeout Option Format . . . . . . . . . . 52 | |||
| 6. Conceptual Model of a Host . . . . . . . . . . . . . . . . . 52 | 6. Conceptual Model of a Host . . . . . . . . . . . . . . . . . 53 | |||
| 6.1. Conceptual Data Structures . . . . . . . . . . . . . . . 52 | 6.1. Conceptual Data Structures . . . . . . . . . . . . . . . 53 | |||
| 6.2. Context States . . . . . . . . . . . . . . . . . . . . . 54 | 6.2. Context STATES . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 7. Establishing ULID-Pair Contexts . . . . . . . . . . . . . . . 56 | 7. Establishing ULID-Pair Contexts . . . . . . . . . . . . . . . 57 | |||
| 7.1. Uniqueness of Context Tags . . . . . . . . . . . . . . . 56 | 7.1. Uniqueness of Context Tags . . . . . . . . . . . . . . . 57 | |||
| 7.2. Locator Verification . . . . . . . . . . . . . . . . . . 56 | 7.2. Locator Verification . . . . . . . . . . . . . . . . . . 57 | |||
| 7.3. Normal context establishment . . . . . . . . . . . . . . 57 | 7.3. Normal context establishment . . . . . . . . . . . . . . 58 | |||
| 7.4. Concurrent context establishment . . . . . . . . . . . . 57 | 7.4. Concurrent context establishment . . . . . . . . . . . . 58 | |||
| 7.5. Context recovery . . . . . . . . . . . . . . . . . . . . 59 | 7.5. Context recovery . . . . . . . . . . . . . . . . . . . . 60 | |||
| 7.6. Context confusion . . . . . . . . . . . . . . . . . . . . 61 | 7.6. Context confusion . . . . . . . . . . . . . . . . . . . . 62 | |||
| 7.7. Sending I1 messages . . . . . . . . . . . . . . . . . . . 62 | 7.7. Sending I1 messages . . . . . . . . . . . . . . . . . . . 63 | |||
| 7.8. Retransmitting I1 messages . . . . . . . . . . . . . . . 63 | 7.8. Retransmitting I1 messages . . . . . . . . . . . . . . . 64 | |||
| 7.9. Receiving I1 messages . . . . . . . . . . . . . . . . . . 63 | 7.9. Receiving I1 messages . . . . . . . . . . . . . . . . . . 64 | |||
| 7.10. Sending R1 messages . . . . . . . . . . . . . . . . . . . 64 | 7.10. Sending R1 messages . . . . . . . . . . . . . . . . . . . 65 | |||
| 7.10.1. Generating the R1 Validator . . . . . . . . . . . . 65 | 7.10.1. Generating the R1 Validator . . . . . . . . . . . . 66 | |||
| 7.11. Receiving R1 messages and sending I2 messages . . . . . . 65 | 7.11. Receiving R1 messages and sending I2 messages . . . . . . 66 | |||
| 7.12. Retransmitting I2 messages . . . . . . . . . . . . . . . 66 | 7.12. Retransmitting I2 messages . . . . . . . . . . . . . . . 67 | |||
| 7.13. Receiving I2 messages . . . . . . . . . . . . . . . . . . 66 | 7.13. Receiving I2 messages . . . . . . . . . . . . . . . . . . 68 | |||
| 7.14. Sending R2 messages . . . . . . . . . . . . . . . . . . . 68 | 7.14. Sending R2 messages . . . . . . . . . . . . . . . . . . . 69 | |||
| 7.15. Match for Context Confusion . . . . . . . . . . . . . . . 68 | 7.15. Match for Context Confusion . . . . . . . . . . . . . . . 70 | |||
| 7.16. Receiving R2 messages . . . . . . . . . . . . . . . . . . 69 | 7.16. Receiving R2 messages . . . . . . . . . . . . . . . . . . 70 | |||
| 7.17. Sending R1bis messages . . . . . . . . . . . . . . . . . 70 | 7.17. Sending R1bis messages . . . . . . . . . . . . . . . . . 71 | |||
| 7.17.1. Generating the R1bis Validator . . . . . . . . . . . 71 | 7.17.1. Generating the R1bis Validator . . . . . . . . . . . 72 | |||
| 7.18. Receiving R1bis messages and sending I2bis messages . . . 71 | 7.18. Receiving R1bis messages and sending I2bis messages . . . 72 | |||
| 7.19. Retransmitting I2bis messages . . . . . . . . . . . . . . 72 | 7.19. Retransmitting I2bis messages . . . . . . . . . . . . . . 73 | |||
| 7.20. Receiving I2bis messages and sending R2 messages . . . . 72 | 7.20. Receiving I2bis messages and sending R2 messages . . . . 74 | |||
| 8. Handling ICMP Error Messages . . . . . . . . . . . . . . . . 75 | 8. Handling ICMP Error Messages . . . . . . . . . . . . . . . . 76 | |||
| 9. Teardown of the ULID-Pair Context . . . . . . . . . . . . . . 77 | 9. Teardown of the ULID-Pair Context . . . . . . . . . . . . . . 79 | |||
| 10. Updating the Peer . . . . . . . . . . . . . . . . . . . . . . 78 | 10. Updating the Peer . . . . . . . . . . . . . . . . . . . . . . 80 | |||
| 10.1. Sending Update Request messages . . . . . . . . . . . . . 78 | 10.1. Sending Update Request messages . . . . . . . . . . . . . 80 | |||
| 10.2. Retransmitting Update Request messages . . . . . . . . . 78 | 10.2. Retransmitting Update Request messages . . . . . . . . . 80 | |||
| 10.3. Newer Information While Retransmitting . . . . . . . . . 79 | 10.3. Newer Information While Retransmitting . . . . . . . . . 81 | |||
| 10.4. Receiving Update Request messages . . . . . . . . . . . . 79 | 10.4. Receiving Update Request messages . . . . . . . . . . . . 81 | |||
| 10.5. Receiving Update Acknowledgement messages . . . . . . . . 81 | 10.5. Receiving Update Acknowledgement messages . . . . . . . . 83 | |||
| 11. Sending ULP Payloads . . . . . . . . . . . . . . . . . . . . 83 | 11. Sending ULP Payloads . . . . . . . . . . . . . . . . . . . . 85 | |||
| 11.1. Sending ULP Payload after a Switch . . . . . . . . . . . 83 | 11.1. Sending ULP Payload after a Switch . . . . . . . . . . . 85 | |||
| 12. Receiving Packets . . . . . . . . . . . . . . . . . . . . . . 85 | 12. Receiving Packets . . . . . . . . . . . . . . . . . . . . . . 87 | |||
| 12.1. Receiving payload without extension headers . . . . . . . 85 | 12.1. Receiving payload without extension headers . . . . . . . 87 | |||
| 12.2. Receiving Payload Extension Headers . . . . . . . . . . . 85 | 12.2. Receiving Payload Extension Headers . . . . . . . . . . . 87 | |||
| 12.3. Receiving Shim Control messages . . . . . . . . . . . . . 86 | 12.3. Receiving Shim Control messages . . . . . . . . . . . . . 88 | |||
| 12.4. Context Lookup . . . . . . . . . . . . . . . . . . . . . 86 | 12.4. Context Lookup . . . . . . . . . . . . . . . . . . . . . 88 | |||
| 13. Initial Contact . . . . . . . . . . . . . . . . . . . . . . . 89 | 13. Initial Contact . . . . . . . . . . . . . . . . . . . . . . . 91 | |||
| 14. Protocol constants . . . . . . . . . . . . . . . . . . . . . 90 | 14. Protocol constants . . . . . . . . . . . . . . . . . . . . . 92 | |||
| 15. Implications Elsewhere . . . . . . . . . . . . . . . . . . . 91 | 15. Implications Elsewhere . . . . . . . . . . . . . . . . . . . 93 | |||
| 15.1. Congestion Control Considerations . . . . . . . . . . . . 91 | 15.1. Congestion Control Considerations . . . . . . . . . . . . 93 | |||
| 15.2. Middle-boxes considerations . . . . . . . . . . . . . . . 91 | 15.2. Middle-boxes considerations . . . . . . . . . . . . . . . 93 | |||
| 15.3. Other considerations . . . . . . . . . . . . . . . . . . 92 | 15.3. Operation and Management Considerations . . . . . . . . . 94 | |||
| 16. Security Considerations . . . . . . . . . . . . . . . . . . . 94 | 15.4. Other considerations . . . . . . . . . . . . . . . . . . 95 | |||
| 17. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 97 | 16. Security Considerations . . . . . . . . . . . . . . . . . . . 97 | |||
| 18. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 99 | 17. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 101 | |||
| Appendix A. Possible Protocol Extensions . . . . . . . . . . 100 | 18. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 103 | |||
| Appendix B. Simplified State Machine . . . . . . . . . . . . 102 | Appendix A. Possible Protocol Extensions . . . . . . . . . . 104 | |||
| Appendix B.1. Simplified State Machine diagram . . . . . . . . 107 | Appendix B. Simplified STATE Machine . . . . . . . . . . . . 106 | |||
| Appendix C. Context Tag Reuse . . . . . . . . . . . . . . . . 109 | Appendix B.1. Simplified STATE Machine diagram . . . . . . . . 111 | |||
| Appendix C.1. Context Recovery . . . . . . . . . . . . . . . . 109 | Appendix C. Context Tag Reuse . . . . . . . . . . . . . . . . 113 | |||
| Appendix C.2. Context Confusion . . . . . . . . . . . . . . . . 109 | Appendix C.1. Context Recovery . . . . . . . . . . . . . . . . 113 | |||
| Appendix C.3. Three Party Context Confusion . . . . . . . . . . 110 | Appendix C.2. Context Confusion . . . . . . . . . . . . . . . . 113 | |||
| Appendix D. Design Alternatives . . . . . . . . . . . . . . . 111 | Appendix C.3. Three Party Context Confusion . . . . . . . . . . 114 | |||
| Appendix D.1. Context granularity . . . . . . . . . . . . . . . 111 | Appendix D. Design Alternatives . . . . . . . . . . . . . . . 115 | |||
| Appendix D.1. Context granularity . . . . . . . . . . . . . . . 115 | ||||
| Appendix D.2. Demultiplexing of data packets in Shim6 | Appendix D.2. Demultiplexing of data packets in Shim6 | |||
| communications . . . . . . . . . . . . . . . . . 111 | communications . . . . . . . . . . . . . . . . . 115 | |||
| Appendix D.2.1. Flow-label . . . . . . . . . . . . . . . . . . . 112 | Appendix D.2.1. Flow-label . . . . . . . . . . . . . . . . . . . 116 | |||
| Appendix D.2.2. Extension Header . . . . . . . . . . . . . . . . 114 | Appendix D.2.2. Extension Header . . . . . . . . . . . . . . . . 118 | |||
| Appendix D.3. Context Loss Detection . . . . . . . . . . . . . 115 | Appendix D.3. Context Loss Detection . . . . . . . . . . . . . 119 | |||
| Appendix D.4. Securing locator sets . . . . . . . . . . . . . . 117 | Appendix D.4. Securing locator sets . . . . . . . . . . . . . . 121 | |||
| Appendix D.5. ULID-pair context establishment exchange . . . . 120 | Appendix D.5. ULID-pair context establishment exchange . . . . 124 | |||
| Appendix D.6. Updating locator sets . . . . . . . . . . . . . . 121 | Appendix D.6. Updating locator sets . . . . . . . . . . . . . . 125 | |||
| Appendix D.7. State Cleanup . . . . . . . . . . . . . . . . . . 121 | Appendix D.7. State Cleanup . . . . . . . . . . . . . . . . . . 125 | |||
| Appendix E. Change Log . . . . . . . . . . . . . . . . . . . 124 | Appendix E. Change Log . . . . . . . . . . . . . . . . . . . 128 | |||
| 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 130 | 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 135 | |||
| 19.1. Normative References . . . . . . . . . . . . . . . . . . 130 | 19.1. Normative References . . . . . . . . . . . . . . . . . . 135 | |||
| 19.2. Informative References . . . . . . . . . . . . . . . . . 130 | 19.2. Informative References . . . . . . . . . . . . . . . . . 135 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 132 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 137 | |||
| Intellectual Property and Copyright Statements . . . . . . . . . 133 | Intellectual Property and Copyright Statements . . . . . . . . . 138 | |||
| 1. Introduction | 1. Introduction | |||
| This document describes a layer 3 shim approach and protocol for | This document describes a layer 3 shim approach and protocol for | |||
| providing locator agility below the transport protocols, so that | 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 sharing | |||
| properties [11], without assuming that a multihomed site will have a | properties [11], 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 | |||
| skipping to change at page 9, line 8 ¶ | skipping to change at page 9, line 8 ¶ | |||
| 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. | |||
| In the worst case we could end up with two separate hosts using the | In the worst case we could end up with two separate hosts using the | |||
| same ULID while both of them are communicating with the same host. | same ULID while both of them are communicating with the same host. | |||
| This potential source for confusion is avoided requiring that any | This potential source for confusion is avoided requiring that any | |||
| communication using a ULID MUST be terminated when the ULID becomes | communication using a ULID MUST be terminated when the ULID becomes | |||
| invalid (due to the underlying prefix becoming invalid). This | invalid (due to the underlying prefix becoming invalid). This | |||
| behaviour can be accomplished by explicitly discarding the shim state | behavior can be accomplished by explicitly discarding the shim state | |||
| when the ULID becomes invalid. The context recovery mechanism will | when the ULID becomes invalid. The context recovery mechanism will | |||
| then make the peer aware that the context is gone, and that the ULID | then make the peer aware that the context is gone, and that the ULID | |||
| is no longer present at the same locator(s). | is no longer present at the same locator(s). | |||
| 1.6. Placement of the shim | 1.6. Placement of the shim | |||
| ----------------------- | ----------------------- | |||
| | Transport Protocols | | | Transport Protocols | | |||
| ----------------------- | ----------------------- | |||
| skipping to change at page 9, line 42 ¶ | skipping to change at page 9, line 42 ¶ | |||
| The proposal uses a multihoming shim layer within the IP layer, i.e., | The proposal uses a multihoming shim layer within the IP layer, i.e., | |||
| below the ULPs, as shown in Figure 1, in order to provide ULP | below the ULPs, as shown in Figure 1, in order to provide ULP | |||
| 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 for a | |||
| be made to be unaware of locator changes the same way that transport | native implementation of IPsec, IPsec can be made to be unaware of | |||
| protocols can be unaware. Thus the IPsec security associations | locator changes the same way that transport protocols can be unaware. | |||
| remain stable even though the locators are changing. This means that | ||||
| the IP addresses specified in the selectors should be the ULIDs. | A "bump-in-the-stack" or "bump-in-the-wire" IPsec implementation is | |||
| layered in the same place as the application of IPsec in security | ||||
| gateways. In that case there might be separate security associations | ||||
| for different locators. | ||||
| 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 11, line 9 ¶ | skipping to change at page 11, line 12 ¶ | |||
| Conceptually, one could view this approach as if both ULIDs and | Conceptually, one could view this approach as if both ULIDs and | |||
| locators are being present in every packet, and with a header | locators are being present in every packet, and with a header | |||
| compression mechanism applied that removes the need for the ULIDs to | compression mechanism applied that removes the need for the ULIDs to | |||
| be carried in the packets once the compression state has been | be carried in the packets once the compression state has been | |||
| established. In order for the receiver to recreate a packet with the | established. In order for the receiver to recreate a packet with the | |||
| correct ULIDs there is a need to include some "compression tag" in | correct ULIDs there is a need to include some "compression tag" in | |||
| 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. | |||
| There are different types of interactions between the Shim6 layer and | ||||
| other protocols. Those intereactions are influenced by the usage of | ||||
| the addresses that these other protocols do and the impact of the | ||||
| Shim6 mapping on these usages. A detailed analysis of the | ||||
| interactions of different portocols, including SCTP, MIP and HIP can | ||||
| be found in [19]. Moreover, some applications may need to have a | ||||
| richer interaction with the Shim6 sub-layer. In order to enable | ||||
| that, a API [23] has been defined to enable greater control and | ||||
| information exchange for those applications that need it. | ||||
| 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. | Shim6. | |||
| Inherent in a scalable multihoming mechanism that separates the | Inherent in a scalable multihoming mechanism that separates the | |||
| locator function of the IP address from identifying function of the | locator function of the IP address from identifying function of the | |||
| skipping to change at page 11, line 32 ¶ | skipping to change at page 11, line 45 ¶ | |||
| initial ULID, which automatically becomes the initial locator. In | initial ULID, which automatically becomes the initial locator. In | |||
| the case of Shim6 this is performed by applying RFC 3484 address | the case of Shim6 this is performed by applying RFC 3484 address | |||
| selection. | selection. | |||
| This is quite different than the common case of IPv4 multihoming | 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 | where the site has a single IP address prefix, since in that case the | |||
| peer performs no destination address selection. | peer performs no destination address selection. | |||
| Thus in "single prefix multihoming" the site, and in many cases its | Thus in "single prefix multihoming" the site, and in many cases its | |||
| upstream ISPs, can use BGP to exert some control of the ingress path | upstream ISPs, can use BGP to exert some control of the ingress path | |||
| used to reach the site. This capability can't easily be recreated in | used to reach the site. This capability does not by itself exist | |||
| "multiple prefix multihoming" such as Shim6. | "multiple prefix multihoming" such as Shim6. It is conceivable that | |||
| extensions allowing site or provider guidance of host-based | ||||
| mechanisms could be developed. But t should be noted that traffic | ||||
| engineering via BGP, MPLS or other similar techniques can still be | ||||
| applied for traffic on each individual prefix; Shim6 does not remove | ||||
| the capability for this. It does provide some additional | ||||
| capabilities for hosts to choose between prefixes. | ||||
| These capabilities also carry some risk for non-optimal behaviour | ||||
| when more than one mechanism attempts to correct problems at the same | ||||
| time. However, it should be noted that this is not necessarily a | ||||
| situation brought about by Shim6. A more constrained form of this | ||||
| capability already exists in IPv6 itself via its support of multiple | ||||
| prefixes and address selection rules for starting new communications. | ||||
| Even IPv4 hosts with multiple interfaces may have limited | ||||
| capabilities to choose interfaces on which they communicate. | ||||
| Similarly, upper layers may choose different addresses. | ||||
| In general, it is expected that Shim6 is applicable in relatively | ||||
| small sites and individual hosts where BGP-style traffic engineering | ||||
| operations are unavailable, unlikely or, if run with provider | ||||
| independent addressing, might even be harmful considering the growth | ||||
| rates in the global routing table. | ||||
| 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 option is merely a place | |||
| identical to the DNS SRV [6] specification of priority and weight, so | holder when it comes to providing traffic engineering; in order to | |||
| that DNS SRV records can be used for initial contact and the shim for | use this in a large site there would have to be a mechanism by which | |||
| failover, and they can use the same way to describe the preferences. | the host can find out what preference values to use, either | |||
| But the Locator Preference option is merely a place holder when it | statically (e.g., some new DHCPv6 option) or dynamically. | |||
| comes to providing traffic engineering; in order to use this in a | ||||
| large site there would have to be a mechanism by which the host can | ||||
| 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 | Thus traffic engineering is listed as a possible extension in | |||
| Appendix A. | Appendix A. | |||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [1]. | document are to be interpreted as described in RFC 2119 [1]. | |||
| skipping to change at page 15, line 20 ¶ | skipping to change at page 16, line 20 ¶ | |||
| 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). The locator set in not ordered in any particular | L2(A), ... Ln(A). The locator set in not ordered in any particular | |||
| way other than maybe what is returned by the DNS. | way other than maybe what is returned by the DNS. | |||
| 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(A) is a context tag assigned by A. | CT(A) is a context tag assigned by A. | |||
| STATE (in uppercase) refers to the the specific state of the state | ||||
| machine described in Section 6.2 | ||||
| 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. | |||
| skipping to change at page 16, line 18 ¶ | skipping to change at page 17, line 18 ¶ | |||
| handling path failures independently of the number of IP addresses | handling path failures independently of the number of IP addresses | |||
| (locators) available to the two communicating hosts, and | (locators) available to the two communicating hosts, and | |||
| independently of which host detects the failure condition. | independently of which host detects the failure condition. | |||
| Consider, for example, the case in which both A and B have active | Consider, for example, the case in which both A and B have active | |||
| Shim6 state and where A has only one locator while B has multiple | Shim6 state and where A has only one locator while B has multiple | |||
| locators. In this case, it might be that B is trying to send a | locators. In this case, it might be that B is trying to send a | |||
| packet to A, and has detected a failure condition with the current | packet to A, and has detected a failure condition with the current | |||
| locator pair. Since B has multiple locators it presumably has | locator pair. Since B has multiple locators it presumably has | |||
| multiple ISPs, and consequently likely has alternate egress paths | multiple ISPs, and consequently likely has alternate egress paths | |||
| toward A. However, B cannot vary the destination address (i.e., A's | toward A. B cannot vary the destination address (i.e., A's locator), | |||
| locator), since A has only one locator. | since A has only one locator. However, B may need to vary the source | |||
| address in order to ensure packet delivery. | ||||
| The above scenario leads to the assumption that a host should be able | ||||
| to cause different egress paths from its site to be used. The most | ||||
| reasonable approach to accomplish this is to have the host use | ||||
| different source addresses and have the source address affect the | ||||
| selection of the site egress. The details of how this can be | ||||
| accomplished is beyond the scope of this document, but without this | ||||
| capability the ability 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 | In many cases normal operation of IP routing may cause the packets to | |||
| filtering. | follow a path towards the correct (currently operational) egress. In | |||
| some cases it is possible that a path may be selected based on the | ||||
| source address, implying that B will need to select a source address | ||||
| corresponding to the currently operating egress. The details of how | ||||
| routing can be accomplished is beyond the scope of this document | ||||
| In addition, when the site's ISPs perform ingress filtering based on | Also, when the site's ISPs perform ingress filtering based on packet | |||
| packet source addresses, Shim6 assumes that packets sent with | source addresses, Shim6 assumes that packets sent with different | |||
| different source and destination combinations have a reasonable | source and destination combinations have a reasonable chance of | |||
| chance of making it through the relevant ISP's ingress filters. This | making it through the relevant ISP's ingress filters. This can be | |||
| can be accomplished in several ways (all outside the scope of this | accomplished in several ways (all outside the scope of this | |||
| document), such as having the ISPs relax their ingress filters, or | document), such as having the ISPs relax their ingress filters, or | |||
| selecting the egress such that it matches the IP source address | selecting the egress such that it matches the IP source address | |||
| prefix. | prefix. In the case that one egress path has failed but another is | |||
| operating correctly, it may be necessary for the packet's source | ||||
| Further discussion of this issue is captured in [16]. | (node B in the previous paragraph) to select a source address that | |||
| corresponds to the operational egress, in order to pass the ISP's | ||||
| ingress filters. | ||||
| The Shim6 approach assumes that there are no IPv6-to-IPv6 NATs on the | 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 | 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 | IPv6 addresses and that those addresses will also make sense to their | |||
| peer. | peer. | |||
| The security of the Shim6 protocol relies on the usage of Hash Based | The security of the Shim6 protocol relies on the usage of Hash Based | |||
| Addresses (HBA) [4] and/or Cryptographically Generated Addresses | Addresses (HBA) [4] and/or Cryptographically Generated Addresses | |||
| (CGA) [2]. In the case that HBAs are used, all the addresses | (CGA) [2]. In the case that HBAs are used, all the addresses | |||
| assigned to the host that are included in the Shim6 protocol (either | assigned to the host that are included in the Shim6 protocol (either | |||
| skipping to change at page 21, line 39 ¶ | skipping to change at page 22, line 39 ¶ | |||
| 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 Appendix A | Some other API extensions are discussed in Appendix A. The actual | |||
| API extensions are defined in [23]. | ||||
| 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 [4] for verifying the locators to prevent an | o The HBA technique [4] 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 /defined in [5]) before a new | o Requiring a Reachability Probe+Reply /defined in [5]) before a new | |||
| locator is used as the destination, in order to prevent 3rd party | locator is used as the destination, in order to prevent 3rd party | |||
| skipping to change at page 22, line 31 ¶ | skipping to change at page 23, line 31 ¶ | |||
| result is that through this technique, the Shim6 protocol is | result is that through this technique, the Shim6 protocol is | |||
| protected against off-path attackers. | protected against off-path attackers. | |||
| 4.5. Overview of Shim Control Messages | 4.5. Overview of Shim Control Messages | |||
| The Shim6 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 [19].] | message. [The names of these messages are borrowed from HIP [20].] | |||
| 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 Shim6 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 | |||
| skipping to change at page 42, line 42 ¶ | skipping to change at page 43, line 42 ¶ | |||
| | 1 | Critical Option not recognized | | | 1 | Critical Option not recognized | | |||
| | | | | | | | | |||
| | 2 | Locator verification method failed (Pointer to the | | | 2 | Locator verification method failed (Pointer to the | | |||
| | | inconsistent Verification method octet) | | | | inconsistent Verification method octet) | | |||
| | | | | | | | | |||
| | 3 | Locator List Generation number out of sync. | | | 3 | Locator List Generation number out of sync. | | |||
| | | | | | | | | |||
| | 4 | Error in the number of locators in a Locator Preference | | | 4 | Error in the number of locators in a Locator Preference | | |||
| | | option | | | | option | | |||
| | | | | | | | | |||
| | 120-127 | Reserved for debugging pruposes | | | 120-127 | Reserved for debugging purposes | | |||
| +---------+---------------------------------------------------------+ | +---------+---------------------------------------------------------+ | |||
| Table 2 | Table 2 | |||
| 5.15. Option Formats | 5.15. 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 [19]. However, there is no intention to track any changes to | format [20]. However, there is no intention to track any changes to | |||
| the HIP option format, nor is there an intent to use the same name | the HIP option format, nor is there an intent to use the same name | |||
| space for the option type values. But using the same format will | space for the option type values. But using the same format will | |||
| hopefully make it easier to import HIP capabilities into Shim6 as | hopefully make it easier to import HIP capabilities into Shim6 as | |||
| extensions to 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 | |||
| skipping to change at page 54, line 5 ¶ | skipping to change at page 55, line 5 ¶ | |||
| o Reachability state for the locator pairs as specified in [5]. | o Reachability state for the locator pairs as specified in [5]. | |||
| 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 [5]. | have been sent and received as specified in [5]. | |||
| o During context establishment phase, Init Nonce, Responder Nonce, | o During context establishment phase, Init Nonce, Responder Nonce, | |||
| Responder Validator and timers related to the different packets | Responder Validator and timers related to the different packets | |||
| sent (I1,I2, R2), as described in Section 7 | sent (I1,I2, R2), as described in Section 7 | |||
| 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 | | |||
| | | | | | | | | |||
| | I1-SENT | Initiating context establishment exchange | | | I1-SENT | Initiating context establishment exchange | | |||
| | | | | | | | | |||
| | I2-SENT | Waiting to complete context establishment | | | I2-SENT | Waiting to complete context establishment | | |||
| | | exchange | | | | exchange | | |||
| | | | | | | | | |||
| | I2BIS-SENT | Potential context loss detected | | | I2BIS-SENT | Potential context loss detected | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | ESTABLISHED | SHIM context established | | | ESTABLISHED | SHIM context established | | |||
| | | | | | | | | |||
| | E-FAILED | Context establishment exchange failed | | | E-FAILED | Context establishment exchange failed | | |||
| | | | | | | | | |||
| | NO-SUPPORT | ICMP Unrecognized Next Header type | | | NO-SUPPORT | ICMP Unrecognized Next Header type | | |||
| | | (type 4, code 1) received indicating | | | | (type 4, code 1) received indicating | | |||
| | | that Shim6 is not supported | | | | that Shim6 is not supported | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| In addition, in each of the aforementioned states, the following | In addition, in each of the aforementioned STATES, the following | |||
| state information is stored: | state information is stored: | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | State | Information | | | STATE | Information | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | IDLE | None | | | IDLE | None | | |||
| | | | | | | | | |||
| | I1-SENT | ULID(peer), ULID(local), [FII], CT(local), | | | I1-SENT | ULID(peer), ULID(local), [FII], CT(local), | | |||
| | | INIT nonce, Lp(local), Lp(peer), Ls(local) | | | | INIT nonce, Lp(local), Lp(peer), Ls(local) | | |||
| | | | | | | | | |||
| | I2-SENT | ULID(peer), ULID(local), [FII], CT(local), | | | I2-SENT | ULID(peer), ULID(local), [FII], CT(local), | | |||
| | | INIT nonce, RESP nonce, Lp(local), Lp(peer),| | | | INIT nonce, RESP nonce, Lp(local), Lp(peer),| | |||
| | | Ls(local), Responder Validator | | | | Ls(local), Responder Validator | | |||
| | | | | | | | | |||
| skipping to change at page 56, line 31 ¶ | skipping to change at page 57, line 31 ¶ | |||
| demultiplexed based solely on the context tag value (without using | demultiplexed based solely on the context tag value (without using | |||
| the locators), the context tag MUST be unique for each context. | the locators), the context tag MUST be unique for each context. | |||
| It is important that context tags are hard to guess for off-path | It is important that context tags are hard to guess for off-path | |||
| attackers. Therefore, if an implementation uses structure in the | attackers. Therefore, if an implementation uses structure in the | |||
| context tag to facilitate efficient lookups, at least 30 bits of the | context tag to facilitate efficient lookups, at least 30 bits of the | |||
| context tag MUST be unstructured and populated by random or pseudo- | context tag MUST be unstructured and populated by random or pseudo- | |||
| random bits. | random bits. | |||
| In addition, in order to minimize the reuse of context tags, the host | In addition, in order to minimize the reuse of context tags, the host | |||
| SHOULD randomly cycle through the unstrucutred tag name space | SHOULD randomly cycle through the unstructured tag name space | |||
| reserved for randomly assigned context tag values,(e.g. following the | reserved for randomly assigned context tag values,(e.g. following the | |||
| guidelines described in [13]). | guidelines described in [13]). | |||
| 7.2. Locator Verification | 7.2. Locator Verification | |||
| The peer's locators might need to be verified during context | The peer's locators might need to be verified during context | |||
| establishment as well as when handling locator updates in Section 10. | establishment as well as when handling locator updates in Section 10. | |||
| There are two separate aspects of locator verification. One is to | 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 | verify that the locator is tied to the ULID, i.e., that the host | |||
| skipping to change at page 62, line 42 ¶ | skipping to change at page 63, line 42 ¶ | |||
| 7.7. Sending I1 messages | 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.8. 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 | |||
| skipping to change at page 63, line 50 ¶ | skipping to change at page 64, line 50 ¶ | |||
| 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. | pair and the FII. | |||
| If no state is found (i.e., the state is IDLE), then the host replies | If no state is found (i.e., the STATE is IDLE), then the host replies | |||
| with a R1 message as specified below. | with a R1 message as specified below. | |||
| If such a context exists in ESTABLISHED state, the host verifies that | 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). | unnecessary if there is no ULID-pair option in the I1 message). | |||
| If the state exists in ESTABLISHED state and the locators do not fall | If the state exists in ESTABLISHED STATE and the locators do not fall | |||
| in the locator sets, then the host replies with a R1 message as | in the locator sets, then the host replies with a R1 message as | |||
| specified below. This completes the I1 processing, with the context | specified below. This completes the I1 processing, with the context | |||
| state being unchanged. | STATE being unchanged. | |||
| If the state exists in ESTABLISHED state and the locators do fall in | If the state exists in ESTABLISHED STATE and the locators do fall in | |||
| the sets, then the host compares CT(peer) for the context with the CT | the sets, then the host compares CT(peer) for the context with the CT | |||
| contained in the I1 message. | contained in the I1 message. | |||
| o If the context tags match, then this probably means that the R2 | o If the context tags match, then this probably means that the R2 | |||
| message was lost and this I1 is a retransmission. In this case, | message was lost and this I1 is a retransmission. In this case, | |||
| the host replies with a R2 message containing the information | the host replies with a R2 message containing the information | |||
| available for the existent context. | available for the existent context. | |||
| o If the context tags do not match, then it probably means that the | o If the context tags do not match, then it probably means that the | |||
| Initiator has lost the context information for this context and it | Initiator has lost the context information for this context and it | |||
| is trying to establish a new one for the same ULID-pair. In this | is trying to establish a new one for the same ULID-pair. In this | |||
| case, the host replies with a R1 message as specified below. This | case, the host replies with a R1 message as specified below. This | |||
| completes the I1 processing, with the context state being | completes the I1 processing, with the context STATE being | |||
| unchanged. | unchanged. | |||
| If the state exists in other state (I1-SENT, I2-SENT, I2BIS-SENT), we | If the state exists in other STATE (I1-SENT, I2-SENT, I2BIS-SENT), we | |||
| are in the situation of Concurrent context establishment described in | are in the situation of Concurrent context establishment described in | |||
| Section 7.4. In this case, the host leaves CT(peer) unchanged, and | Section 7.4. In this case, the host leaves CT(peer) unchanged, and | |||
| replies with a R2 message. This completes the I1 processing, with | replies with a R2 message. This completes the I1 processing, with | |||
| the context state being unchanged. | the context STATE being unchanged. | |||
| 7.10. Sending R1 messages | 7.10. Sending R1 messages | |||
| 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 Responder | message, generates a Responder Nonce and calculates a Responder | |||
| Validator option as suggested in the following section. No state is | Validator option as suggested in the following section. No state is | |||
| created on the host in this case.(Note that the information used to | created on the host in this case.(Note that the information used to | |||
| generate the R1 reply message is either contained in the received I1 | generate the R1 reply message is either contained in the received I1 | |||
| message or it is global information that is not associated with the | message or it is global information that is not associated with the | |||
| particular requested context (the S and the Responder nonce values)). | particular requested context (the S and the Responder nonce values)). | |||
| 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.14). | message (see Section 7.14). | |||
| 7.10.1. Generating the R1 Validator | 7.10.1. Generating the R1 Validator | |||
| One way for the responder to properly generate validators is to | As it is stated in Section 5.15.1, the Validator generation mechanism | |||
| maintain a single secret (S) and a running counter (C) for the | is a local choice since the validator is generated and verified by | |||
| Responder Nonce that is incremented in fixed periods of time (this | the same node i.e. the responder. However, in order to provide the | |||
| allows the Responder to verify the age of a Responder Nonce, | required protection, the Validator needs to be generated fullflling | |||
| independently of the context in which it is used). | the conditions described in Section 5.15.1. One way for the | |||
| responder to properly generate validators is to maintain a single | ||||
| secret (S) and a running counter (C) for the Responder Nonce that is | ||||
| incremented in fixed periods of time (this allows the Responder to | ||||
| verify the age of a Responder Nonce, independently of the context in | ||||
| which it is used). | ||||
| In the case the validator is generated to be included in a R1 | When the validator is generated to be included in a R1 message, that | |||
| message, for each I1 message. The responder use the current counter | is sent in respose to a specific I1 message, the responder can | |||
| C value as the Responder Nonce, and use the following information | perform the following procedure to generate the validator value: | |||
| concatenated as input to the one-way function: | ||||
| First, the responder uses the current counter C value as the | ||||
| Responder Nonce. | ||||
| Second, it uses the following information (concatenated) as input to | ||||
| the one-way function: | ||||
| o The secret S | o 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 is used as the validator | Third, it uses the output of the hash function as the validator value | |||
| octet string. | included in the R1 message. | |||
| 7.11. Receiving R1 messages and sending I2 messages | 7.11. 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.3: | specified in Section 12.3: | |||
| 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 found, then the R1 message 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 message then this is probably a reply | host has already sent an I2 message then this is probably a reply | |||
| to a retransmitted I1 message, 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 Responder | When the host sends an I2 message, then it includes the Responder | |||
| Validator option that was in the R1 message. The I2 message MUST | Validator option that was in the R1 message. The I2 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. If a ULID-pair option was included in the I1 message then it | fields. If a ULID-pair option was included in the I1 message then it | |||
| MUST be included in the I2 message as well. In addition, if the | MUST be included in the I2 message as well. In addition, if the | |||
| Forked 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 may also include the Initiator's locator list. If | The I2 message may also include the Initiator's locator list. If | |||
| this is the the case, then it must also include the CGA Parameter | this is the the case, then it must also include the CGA Parameter | |||
| Data Structure. If CGA (and not HBA) is used to verify one or more | Data Structure. If CGA (and not HBA) is used to verify one or more | |||
| fo the locators included in the locator list, then Initiator must | of the locators included in the locator list, then Initiator must | |||
| also include a CGA signature option containing the signature. | also include 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.12. Retransmitting I2 messages | 7.12. 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 Responder | binary exponential backoff and randomized timers. The Responder | |||
| Validator option might have a limited lifetime, that is, the peer | Validator option might have a limited lifetime, that is, the peer | |||
| might reject Responder Validator options that are older than | might reject Responder Validator options that are older than | |||
| VALIDATOR_MIN_LIFETIME to avoid replay attacks. In the case that the | VALIDATOR_MIN_LIFETIME to avoid replay attacks. In the case that the | |||
| initiator decides not to retransmit I2 messages or in the case that | initiator decides not to retransmit I2 messages or in the case that | |||
| the initiator still does not recieve an R2 message after | the initiator still does not receive an R2 message after | |||
| retransmitting I2 messages I2_RETRIES_MAX times, the initiator SHOULD | retransmitting I2 messages I2_RETRIES_MAX times, the initiator SHOULD | |||
| fall back to retransmitting the I1 message. | fall back to retransmitting the I1 message. | |||
| 7.13. Receiving I2 messages | 7.13. 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.3: | specified in Section 12.3: | |||
| 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 | |||
| skipping to change at page 67, line 27 ¶ | skipping to change at page 68, line 37 ¶ | |||
| If a CGA Parameter Data Structure (PDS) is included in the message, | If a CGA Parameter Data Structure (PDS) is included in the message, | |||
| then the host MUST verify if the actual PDS contained in the message | then the host MUST verify if the actual PDS contained in the message | |||
| corresponds to the ULID(peer). | corresponds to the ULID(peer). | |||
| If any of the above verifications fails, then the host silently | If any of the above verifications fails, then the host silently | |||
| discards the message and it has completed the I2 processing. | discards the message and it has completed the I2 processing. | |||
| If all the above verifications are successful, then the host proceeds | If all the above verifications are successful, then the host proceeds | |||
| to look for a context state for the Initiator. The host looks for a | to look for a context state for the Initiator. The host looks for a | |||
| context with the extracted ULID pair and FII. If none exist then | context with the extracted ULID pair and FII. If none exist then | |||
| state of the (non-existing) context is viewed as being IDLE, thus the | STATE of the (non-existing) context is viewed as being IDLE, thus the | |||
| actions 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, and sets its state to ESTABLISHED. It records | the context, and sets its STATE to ESTABLISHED. It records | |||
| CT(peer), and the peer's locator set as well as its own locator | CT(peer), and the peer's locator set as well as its own locator | |||
| set in the context. It SHOULD perform the HBA/CGA verification of | set in the context. It SHOULD perform the HBA/CGA verification of | |||
| the peer's locator set at this point in time, as specified in | the peer's locator set at this point in time, as specified in | |||
| Section 7.2. Then the host sends an R2 message back as specified | Section 7.2. Then the host sends an R2 message back as specified | |||
| below. | below. | |||
| o If the state is I1-SENT, then the host verifies if the source | o If the STATE is I1-SENT, then the host verifies if the source | |||
| locator is included in Ls(peer) or, it is included in the Locator | locator is included in Ls(peer) or, it is included in the Locator | |||
| List contained in the I2 message and the HBA/CGA verification for | List contained in the I2 message and the HBA/CGA verification for | |||
| this specific locator is successful | this specific locator is successful | |||
| * If this is not the case, then the message is silently discarded | * If this is not the case, then the message is silently discarded | |||
| and the context state remains unchanged. | and the context STATE remains unchanged. | |||
| * If this is the case, then the host updates the context | * If this is the case, then the host updates the context | |||
| information (CT(peer), Ls(peer)) with the data contained in the | information (CT(peer), Ls(peer)) with the data contained in the | |||
| I2 message and the host MUST send a R2 message back as | I2 message and the host MUST send a R2 message back as | |||
| specified below. Note that before updating Ls(peer) | specified below. Note that before updating Ls(peer) | |||
| information, the host SHOULD perform the HBA/CGA validation of | information, the host SHOULD perform the HBA/CGA validation of | |||
| the peer's locator set at this point in time as specified in | the peer's locator set at this point in time as specified in | |||
| Section 7.2. The host moves to ESTABLISHED state. | Section 7.2. The host moves to ESTABLISHED STATE. | |||
| o If the state is ESTABLISHED, I2-SENT, or I2BIS-SENT, then the host | 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 | verifies if the source locator is included in Ls(peer) or, it is | |||
| included in the Locator List contained in the I2 message and the | included in the Locator List contained in the I2 message and the | |||
| HBA/CGA verification for this specific locator is successful | HBA/CGA verification for this specific locator is successful | |||
| * If this is not the case, then the message is silently discarded | * If this is not the case, then the message is silently discarded | |||
| and the context state remains unchanged. | and the context STATE remains unchanged. | |||
| * If this is the case, then the host updates the context | * If this is the case, then the host updates the context | |||
| information (CT(peer), Ls(peer)) with the data contained in the | information (CT(peer), Ls(peer)) with the data contained in the | |||
| I2 message and the host MUST send a R2 message back as | I2 message and the host MUST send a R2 message back as | |||
| specified in Section 7.14. Note that before updating Ls(peer) | specified in Section 7.14. Note that before updating Ls(peer) | |||
| information, the host SHOULD perform the HBA/CGA validation of | information, the host SHOULD perform the HBA/CGA validation of | |||
| the peer's locator set at this point in time as specified in | the peer's locator set at this point in time as specified in | |||
| Section 7.2. The context state remains unchanged. | Section 7.2. The context STATE remains unchanged. | |||
| 7.14. Sending R2 messages | 7.14. 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.15. | using the same CT(peer) for the same peer host. See Section 7.15. | |||
| When the host needs to send an R2 message, the host forms the message | When the host needs to send an R2 message, the host forms the message | |||
| its context tag, copies the Initiator Nonce from the triggering | its context tag, copies the Initiator Nonce from the triggering | |||
| message (I2, I2bis, or I1). In addition, it may include alternative | message (I2, I2bis, or I1). In addition, it may include alternative | |||
| skipping to change at page 69, line 8 ¶ | skipping to change at page 70, line 18 ¶ | |||
| 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: | |||
| o Are in state ESTABLISHED or I2BIS-SENT. | o Are in STATE ESTABLISHED or I2BIS-SENT. | |||
| 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 either or both are different, then the peer is reusing the | o If either or both are different, then the peer is reusing the | |||
| context tag for the creation of a context with different ULID pair | context tag for the creation of a context with different ULID pair | |||
| or FII, which is an indication that the peer has lost the original | or FII, which is an indication that the peer has lost the original | |||
| context. In this case, we are in the Context confusion situation, | context. In this case, we are in the Context confusion situation, | |||
| and the host MUST NOT use the old context to send any packets. It | and the host MUST NOT use the old context to send any packets. It | |||
| MAY just discard the old context (after all, the peer has | MAY just discard the old context (after all, the peer has | |||
| discarded it), or it MAY attempt to re-establish the old context | discarded it), or it MAY attempt to re-establish the old context | |||
| by sending a new I1 message and moving its state to I1-SENT. In | by sending a new I1 message and moving its STATE to I1-SENT. In | |||
| any case, once that this situation is detected, the host MUST NOT | any case, once that this situation is detected, the host MUST NOT | |||
| keep two contexts with overlapping Ls(peer) locator sets and the | keep two contexts with overlapping Ls(peer) locator sets and the | |||
| same 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 both are the same, then this context is actually the context | o If both are the same, then this context is actually the context | |||
| that is created or updated, hence there is no confusion. | that is created or updated, hence there is no confusion. | |||
| 7.16. Receiving R2 messages | 7.16. 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.3: | specified in Section 12.3: | |||
| 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 (PDS) is | the following actions: If a CGA Parameter Data Structure (PDS) is | |||
| included in the message, then the host MUST verify that the actual | included in the message, then the host MUST verify that the actual | |||
| PDS contained in the message corresponds to the ULID(peer) as | PDS contained in the message corresponds to the ULID(peer) as | |||
| specified in Section 7.2. If the verification fails, then the | specified in Section 7.2. If the verification fails, then the | |||
| message is silently dropped. If the verification succeeds, then | message is silently dropped. If the verification succeeds, then | |||
| the host records the information from the R2 message in the | the host records the information from the R2 message in the | |||
| context state; it records the peer's locator set and CT(peer). | context state; it records the peer's locator set and CT(peer). | |||
| The host SHOULD perform the HBA/CGA verification of the peer's | 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. | locator set at this point in time, as specified in Section 7.2. | |||
| The host sets its state to ESTABLISHED. | 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 | (since this is likely to be a reply to a retransmitted I2 | |||
| message). | 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.15. | Section 7.15. | |||
| 7.17. Sending R1bis messages | 7.17. Sending R1bis messages | |||
| skipping to change at page 71, line 16 ¶ | skipping to change at page 72, line 27 ¶ | |||
| is computed as suggested in the next section. | is computed as suggested in the next section. | |||
| 7.17.1. Generating the R1bis Validator | 7.17.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 C for the | maintain a single secret (S) and a running counter C for the | |||
| Responder Nonce that is incremented in fixed periods of time (this | Responder Nonce that is incremented in fixed periods of time (this | |||
| allows the Responder to verify the age of a Responder Nonce, | allows the Responder to verify the age of a Responder Nonce, | |||
| independently of the context in which it is used). | independently of the context in which it is used). | |||
| In the case the validator is generated to be included in a R1bis | When the validator is generated to be included in a R1bis message, | |||
| message, for each received payload extension header or control | that is sent in respose to a specific controls packet or packet | |||
| message, the responder use the counter C value as the Responder | containing the Shim6 payload extension header message, the responder | |||
| Nonce, and use the following information concatenated as input to the | can perform the following procedure to generate the validator value: | |||
| one-way function: | ||||
| First, the responder uses the counter C value as the Responder Nonce. | ||||
| Second, it uses the following information (concatenated) as input to | ||||
| the one-way function: | ||||
| o The secret S | o The secret S | |||
| o That Responder Nonce | o That Responder Nonce | |||
| o The Receiver 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 the output of the hash function is used as the validator | Third, it uses the output of the hash function as the validator | |||
| octet string. | string. | |||
| 7.18. Receiving R1bis messages and sending I2bis messages | 7.18. 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.3: | specified in Section 12.3: | |||
| 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 message 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 | |||
| message 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 message, | state, transitions to I2BIS-SENT STATE, and sends a I2bis message, | |||
| including the computed Responder Validator option, the Packet | including the computed Responder Validator option, the Packet | |||
| Context Tag, and the Responder Nonce received in the R1bis | Context Tag, and the Responder Nonce received in the R1bis | |||
| message. This I2bis message is sent using the locator pair | message. This I2bis message is sent using the locator pair | |||
| included in the R1bis message. In the case that this locator pair | included in the R1bis message. In the case that this locator pair | |||
| differs from the ULID pair defined for this context, then an ULID | differs from the ULID pair defined for this context, then an ULID | |||
| option MUST be included in the I2bis message. In addition, if the | option MUST be included in the I2bis message. In addition, if the | |||
| Forked Instance Identifier for this context is non-zero, then a | Forked Instance Identifier for this context is non-zero, then a | |||
| Forked Instance Identifier option carrying the instance identifier | Forked Instance Identifier option carrying the instance identifier | |||
| value for this context MUST be included in the I2bis message. The | value for this context MUST be included in the I2bis message. The | |||
| I2bis message may also include a locator list. If this is the the | I2bis message may also include a locator list. If this is the the | |||
| case, then it must also include the CGA Parameter Data Structure. | case, then it must also include the CGA Parameter Data Structure. | |||
| If CGA (and not HBA) is used to verify one or more fo the locators | If CGA (and not HBA) is used to verify one or more of the locators | |||
| included in the locator list, then Initiator must also include a | included in the locator list, then Initiator must also include a | |||
| CGA signature option containing the signature. | CGA signature option containing the signature. | |||
| 7.19. Retransmitting I2bis messages | 7.19. Retransmitting I2bis messages | |||
| If the initiator does not receive an R2 message after I2bis_TIMEOUT | If the initiator does not receive an R2 message after I2bis_TIMEOUT | |||
| time after sending an I2bis message it MAY retransmit the I2bis | time after sending an I2bis message it MAY retransmit the I2bis | |||
| message, using binary exponential backoff and randomized timers. The | message, using binary exponential backoff and randomized timers. The | |||
| Responder Validator option might have a limited lifetime, that is, | Responder Validator option might have a limited lifetime, that is, | |||
| the peer might reject Responder Validator options that are older than | the peer might reject Responder Validator options that are older than | |||
| VALIDATOR_MIN_LIFETIME to avoid replay attacks. In the case that the | VALIDATOR_MIN_LIFETIME to avoid replay attacks. In the case that the | |||
| initiator decides not to retransmit I2bis messages or in the case | initiator decides not to retransmit I2bis messages or in the case | |||
| that the initiator still does not recieve an R2 message after | that the initiator still does not receive an R2 message after | |||
| retransmitting I2bis messages I2bis_RETRIES_MAX times, the initiator | retransmitting I2bis messages I2bis_RETRIES_MAX times, the initiator | |||
| SHOULD fallback to retransmitting the I1 message. | SHOULD fallback to retransmitting the I1 message. | |||
| 7.20. Receiving I2bis messages and sending R2 messages | 7.20. 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.3: | specified in Section 12.3: | |||
| 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 | |||
| skipping to change at page 73, line 22 ¶ | skipping to change at page 74, line 37 ¶ | |||
| If a CGA Parameter Data Structure (PDS) is included in the message, | If a CGA Parameter Data Structure (PDS) is included in the message, | |||
| then the host MUST verify if the actual PDS contained in the message | then the host MUST verify if the actual PDS contained in the message | |||
| corresponds to the ULID(peer). | corresponds to the ULID(peer). | |||
| If any of the above verifications fails, then the host silently | If any of the above verifications fails, then the host silently | |||
| discard the message 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, and sets its state to ESTABLISHED. The host SHOULD | the context, and sets its STATE to ESTABLISHED. The host SHOULD | |||
| NOT use the Packet Context Tag in the I2bis message 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 CT(peer), and the peer's | processes an I2 message. It records CT(peer), and the peer's | |||
| locator set as well as its own locator set in the context. It | locator set as well as its own locator set in the context. It | |||
| SHOULD perform the HBA/CGA verification of the peer's locator set | SHOULD perform the HBA/CGA verification of the peer's locator set | |||
| at this point in time as specified in Section 7.2. Then the host | at this point in time as specified in Section 7.2. Then the host | |||
| sends an R2 message back as specified in Section 7.14. | sends an R2 message back as specified in Section 7.14. | |||
| o If the state is I1-SENT, then the host verifies if the source | o If the STATE is I1-SENT, then the host verifies if the source | |||
| locator is included in Ls(peer) or, it is included in the Locator | locator is included in Ls(peer) or, it is included in the Locator | |||
| List contained in the I2 message and the HBA/CGA verification for | List contained in the I2 message and the HBA/CGA verification for | |||
| this specific locator is successful | this specific locator is successful | |||
| * If this is not the case, then the message is silently | * If this is not the case, then the message is silently | |||
| discarded. The the context state remains unchanged. | discarded. The the context STATE remains unchanged. | |||
| * If this is the case, then the host updates the context | * If this is the case, then the host updates the context | |||
| information (CT(peer), Ls(peer)) with the data contained in the | information (CT(peer), Ls(peer)) with the data contained in the | |||
| I2 message and the host MUST send a R2 message back as | I2 message and the host MUST send a R2 message back as | |||
| specified below. Note that before updating Ls(peer) | specified below. Note that before updating Ls(peer) | |||
| information, the host SHOULD perform the HBA/CGA validation of | information, the host SHOULD perform the HBA/CGA validation of | |||
| the peer's locator set at this point in time as specified in | the peer's locator set at this point in time as specified in | |||
| Section 7.2. The host moves to ESTABLISHED state. | Section 7.2. The host moves to ESTABLISHED STATE. | |||
| o If the state is ESTABLISHED, I2-SENT, or I2BIS-SENT, then the host | 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 | whther at least one of the two following conditions hold: i) if | |||
| included in the Locator List contained in the I2 message and the | the source locator is included in Ls(peer) or, ii) if the source | |||
| HBA/CGA verification for this specific locator is successful | locator is included in the Locator List contained in 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 | * If none of the two aforementioned conditions hold, then the | |||
| discarded. The the context state remains unchanged. | message is silently discarded. The the context STATE remains | |||
| unchanged. | ||||
| * If this is the case, then the host updates the context | * If at least one of the two aforementioned conditions hold, then | |||
| information (CT(peer), Ls(peer)) with the data contained in the | the host updates the context information (CT(peer), Ls(peer)) | |||
| I2 message and the host MUST send a R2 message back as | with the data contained in the I2 message and the host MUST | |||
| specified in Section 7.14. Note that before updating Ls(peer) | send a R2 message back as specified in Section 7.14. Note that | |||
| information, the host SHOULD perform the HBA/CGA validation of | before updating Ls(peer) information, the host SHOULD perform | |||
| the peer's locator set at this point in time as specified in | the HBA/CGA validation of the peer's locator set at this point | |||
| Section 7.2. The context state remains unchanged. | 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 destination unreachable, packet | |||
| big, and Unrecognized Next Header type. It is critical that these | too big, and Unrecognized Next Header type. In some cases, it is | |||
| packets make it back up to the ULPs so that they can take appropriate | critical that these packets make it back up to the ULPs so that they | |||
| action. | can take appropriate action. In other cases, it is probably the best | |||
| option to process these packets locally at the Shim6 layer and not | ||||
| inform to the ULP. | ||||
| This is an implementation issue in the sense that the mechanism is | This is an implementation issue in the sense that the mechanism is | |||
| completely local to the host itself. But the issue of how ICMP | completely local to the host itself. But the issue of how ICMP | |||
| errors are correctly dispatched to the ULP on the host are important, | errors are correctly dispatched to the ULP on the host are important, | |||
| hence this section specifies the issue. | hence this section specifies the issue. | |||
| The main issue to be consider is whether the reported error can be | ||||
| solved by the Shim6 layer or not. In some cases, it is clear that | ||||
| the shim6 layer cannot do anything to solve the problem reported by | ||||
| the ICMP error e.g. Port unreachable, Packet too big error. In | ||||
| these cases, the Shim6 layer should pass these messages to the ULP. | ||||
| However, in some other cases, the reported error can be solved by the | ||||
| Shim6 layer. For instance, in many of the cases, the Destination | ||||
| unreachable error will be solved by the Shim6 layer by changing the | ||||
| communication path. In this case, it maynot make sense to pass the | ||||
| ICMP error to the ULP, since the problem will be solved by the Shim6 | ||||
| layer. Nevertheless, it is not clear whether the Shim6 will be able | ||||
| to actually solve the problem, since it may be the case that there is | ||||
| no communication path available. So the basic guideline to handle | ||||
| this situation is: if the Shim6 layer cannot do anything to solve the | ||||
| problem reported in the ICMP error, then pass the error to the ULP as | ||||
| described below. If the Shim6 layer can try to solve the problem, it | ||||
| may make sense to not pass the error to the ULP. This, on the other | ||||
| hand, may be implementations specific, meaning that depending what is | ||||
| the response of the ULP to the ICMP error, it may be more or less | ||||
| critical to actually passing or not the ICMP errors back. In other | ||||
| words, if the response of a given ULP to the reception of an ICMP | ||||
| error is to close the communication, it is very important that the | ||||
| Shim6 layer does not passes the ICMP error unless it is certain that | ||||
| there is no alternative path available. If the response of the ULP | ||||
| is simply to ignore ICMP error, it may make sense to always pass the | ||||
| ICMP errors to the ULP. In any case, we reccommend that the Shim6 | ||||
| layer provides a configuration interface, so it is possible to | ||||
| configure how to process the different ICMP error messages. Below, | ||||
| we provide some guidelines on how to process the different ICMP | ||||
| errors. | ||||
| The following ICMP error messages should be processed by the Shim6 | ||||
| layer and not passed to the ULP: ICMP error Destiantion unreachable | ||||
| with codes 0 (No route to destination), 1 (Communication with | ||||
| destination administratively prohibited), 2 (Beyond scope of source | ||||
| address), 3 (Address unreachable), 5 (Source address failed ingress/ | ||||
| egress policy), 6 (Reject route to destination), ICMP Time exceeded | ||||
| error, ICMP Parameter problem error with the paramter that caused the | ||||
| error being a Shim6 paramter. | ||||
| The following ICMP error messages report problems that cannot be | ||||
| addressed by the Shim6 layer and that should be passed to the ULP (as | ||||
| described below): ICMP Packet too big error, ICMP Destination | ||||
| Unreachable with Code 4 (Port unreachable) ICMP Paramenter problem | ||||
| (if the paramter that caused the problem is not a Shim6 parameter). | ||||
| +--------------+ | +--------------+ | |||
| | IPv6 Header | | | IPv6 Header | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| | ICMPv6 | | | ICMPv6 | | |||
| | Header | | | Header | | |||
| - - +--------------+ - - | - - +--------------+ - - | |||
| | IPv6 Header | | | IPv6 Header | | |||
| | src, dst as | Can be dispatched | | src, dst as | Can be dispatched | |||
| IPv6 | sent by ULP | unmodified to ULP | IPv6 | sent by ULP | unmodified to ULP | |||
| skipping to change at page 75, line 50 ¶ | skipping to change at page 77, line 49 ¶ | |||
| When the ULP packets are sent without the payload extension header, | When the ULP packets are sent without the payload extension header, | |||
| that is, while the initial locators=ULIDs are working, this | that is, while the initial locators=ULIDs are working, this | |||
| introduces no new concerns; an implementation's existing mechanism | introduces no new concerns; an implementation's existing mechanism | |||
| for delivering these errors to the ULP will work. See Figure 30. | for delivering these errors to the ULP will work. See Figure 30. | |||
| But when the shim on the transmitting side inserts the payload | But when the shim on the transmitting side inserts the payload | |||
| extension header and replaces the ULIDs in the IP address fields with | extension header and replaces the ULIDs in the IP address fields with | |||
| some other locators, then an ICMP error coming back will have a | 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 | "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 | implementation will have to apply the reverse mapping to the "packet | |||
| in error" before passing the ICMP error up to the ULP. See | in error" before passing the ICMP error up to the ULP, including the | |||
| Figure 31. | ICMP extensions defined in [25]. See Figure 31. | |||
| +--------------+ | +--------------+ | |||
| | IPv6 Header | | | IPv6 Header | | |||
| | | | | | | |||
| +--------------+ | +--------------+ | |||
| | ICMPv6 | | | ICMPv6 | | |||
| | Header | | | Header | | |||
| - - +--------------+ - - | - - +--------------+ - - | |||
| | IPv6 Header | | | IPv6 Header | | |||
| | src, dst as | Needs to be | | src, dst as | Needs to be | |||
| skipping to change at page 78, line 35 ¶ | skipping to change at page 80, line 35 ¶ | |||
| in the same Update Request or in some future Update Request, will use | in the same Update Request or in some future Update Request, will use | |||
| that generation number to make sure the preferences get applied to | that generation number to make sure the preferences get applied to | |||
| the correct version of the locator list. | the correct version of the locator list. | |||
| The host picks a random Request Nonce for each update, and keeps the | The host picks a random Request Nonce for each update, and keeps the | |||
| 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. | |||
| The UPDATE message can also include a CGA Parameter Data Structure | The UPDATE message can also include a CGA Parameter Data Structure | |||
| (this is needed if the CGA PDS was not previously exchanged,). If | (this is needed if the CGA PDS was not previously exchanged,). If | |||
| CGA (and not HBA) is used to verify one or more fo the locators | CGA (and not HBA) is used to verify one or more of the locators | |||
| included in the locator list, then a CGA signature option containing | included in the locator list, then a CGA signature option containing | |||
| the signature must also be included in the UPDATE message. | the signature must also be included in the UPDATE message. | |||
| 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 | |||
| skipping to change at page 80, line 19 ¶ | skipping to change at page 82, line 19 ¶ | |||
| 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 (PDS) is included in the message, | If a CGA Parameter Data Structure (PDS) is included in the message, | |||
| then 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 I2 and proceed to process the message. | o If I2-SENT, then send I2 and proceed to process the message. | |||
| o If I2BIS-SENT, then send I2bis and proceed to process the message. | o If I2BIS-SENT, then send I2bis and proceed to process the message. | |||
| The verification issues for the locators carried in the Locator | The verification issues for the locators carried in the Locator | |||
| skipping to change at page 81, line 41 ¶ | skipping to change at page 83, line 41 ¶ | |||
| as specified in Section 7.17. | as specified in Section 7.17. | |||
| 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: | |||
| 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. | |||
| If the Request Nonce doesn't match the Nonce for the last sent Update | If the Request Nonce doesn't match the Nonce for the last sent Update | |||
| skipping to change at page 83, line 14 ¶ | skipping to change at page 85, line 14 ¶ | |||
| 11. Sending ULP Payloads | 11. Sending ULP Payloads | |||
| When there is no context state for the ULID pair on the sender, there | When there is no context state for the ULID pair on the sender, there | |||
| is no effect on how ULP packets are sent. If the host is using some | is no effect on how ULP packets are sent. If the host is using some | |||
| heuristic for determining when to perform a deferred context | heuristic for determining when to perform a deferred context | |||
| establishment, then the host might need to do some accounting (count | establishment, then the host might need to do some accounting (count | |||
| the number of packets sent and received) even before there is a ULID- | the number of packets sent and received) even before there is a ULID- | |||
| pair context. | pair context. | |||
| 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 can be sent unmodified by the shim. | If this is the case, then packets can be sent unmodified by the shim. | |||
| If it is not the case, then the logic in Section 11.1 will need to be | If it is not the case, then the logic in Section 11.1 will need to be | |||
| used. | used. | |||
| skipping to change at page 85, line 8 ¶ | skipping to change at page 87, line 8 ¶ | |||
| header. | header. | |||
| The inserted Shim6 Payload extension header includes the peer's | The inserted Shim6 Payload extension header includes the peer's | |||
| context tag. It takes on the next header value from the preceding | context tag. It takes on the next header value from the preceding | |||
| extension header, since that extension header will have a next header | extension header, since that extension header will have a next header | |||
| value of Shim6. | value of Shim6. | |||
| 12. Receiving Packets | 12. Receiving Packets | |||
| The receive side of the communication can receive packets associated | The receive side of the communication can receive packets associated | |||
| to a Shim6 context with or without the Shim6 extenson header. In | to a Shim6 context with or without the Shim6 extension header. In | |||
| case that the ULID pair is being used as locator pair, the packets | case that the ULID pair is being used as locator pair, the packets | |||
| received will not have the Shim6 extension header and will be | received will not have the Shim6 extension header and will be | |||
| processed by the Shim6 layer as described below. If the received | processed by the Shim6 layer as described below. If the received | |||
| packet does carry the Shim6 extension header, as in normal IPv6 | packet does carry the Shim6 extension header, as in normal IPv6 | |||
| receive side packet processing the receiver parses the (extension) | receive side packet processing the receiver parses the (extension) | |||
| headers in order. Should it find a Shim6 extension header it will | headers in order. Should it find a Shim6 extension header it will | |||
| look at the "P" field in that header. If this bit is zero, then the | look at the "P" field in that header. If this bit is zero, then the | |||
| packet must be passed to the Shim6 payload handling for rewriting. | packet must be passed to the Shim6 payload handling for rewriting. | |||
| Otherwise, the packet is passed to the Shim6 control handling. | Otherwise, the packet is passed to the Shim6 control handling. | |||
| 12.1. Receiving payload without extension headers | 12.1. Receiving payload without extension headers | |||
| The receiver extracts the IPv6 source and destination fields, and | The receiver extracts the IPv6 source and destination fields, and | |||
| uses this to find a ULID-pair context, such that the IPv6 address | uses this to find a ULID-pair context, such that the IPv6 address | |||
| fields match the ULID(local) and ULID(peer). If such a context is | fields match the ULID(local) and ULID(peer). If such a context is | |||
| found, the context appears not to be quiescent and this should be | found, the context appears not to be quiescent and this should be | |||
| remembered in order to avoid tearing down the context and for | remembered in order to avoid tearing down the context and for | |||
| reachability detection porpuses as described in [5]. The host | reachability detection purposes as described in [5]. The host | |||
| continues with the normal processing of the IP packet. | continues with the normal processing of the IP packet. | |||
| 12.2. Receiving Payload Extension Headers | 12.2. 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.17). | Section 7.17). | |||
| 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 I2 and proceed to process the message. | o If I2-SENT, then send I2 and proceed to process the message. | |||
| o If I2BIS-SENT, then send I2bis and proceed to process the message. | o If I2BIS-SENT, then send I2bis and proceed to process the message. | |||
| With the context in hand, the receiver can now replace the IP address | With the context in hand, the receiver can now replace the IP address | |||
| skipping to change at page 86, line 37 ¶ | skipping to change at page 88, line 37 ¶ | |||
| is generated and sent back. The Pointer field is set to point at the | is generated and sent back. The Pointer field is set to point at the | |||
| first octet of the shim message type. | first octet of the shim message type. | |||
| All the control messages can contain any options with C=0. If there | All the control messages can contain any options with C=0. If there | |||
| is any option in the message with C=1 that isn't known to the host, | is any option in the message with C=1 that isn't known to the host, | |||
| then the host MUST send a Shim6 Error Message with Error Code=1, with | then the host MUST send a Shim6 Error Message with Error Code=1, with | |||
| the Pointer field referencing the first octet of the Option Type. | the Pointer field referencing the first octet of the Option Type. | |||
| 12.4. Context Lookup | 12.4. Context Lookup | |||
| We assume that each shim context has its own state machine. We | We assume that each shim context has its own STATE machine. We | |||
| assume that a dispatcher delivers incoming packets to the state | assume that a dispatcher delivers incoming packets to the STATE | |||
| machine that it belongs to. Here we describe the rules used for the | machine that it belongs to. Here we describe the rules used for the | |||
| dispatcher to deliver packets to the correct shim context state | dispatcher to deliver packets to the correct shim context STATE | |||
| machine. | machine. | |||
| There is one state machine per context identified that is | There is one STATE machine per context identified that is | |||
| conceptually identified by ULID pair and Forked Instance Identifier | conceptually identified by ULID pair and Forked Instance Identifier | |||
| (which is zero by default), or identified by CT(local). However, the | (which is zero by default), or identified by CT(local). However, the | |||
| detailed lookup rules are more complex, especially during context | detailed lookup rules are more complex, especially during context | |||
| establishment. | establishment. | |||
| Clearly, if the required context is not established, it will be in | Clearly, if the required context is not established, it will be in | |||
| IDLE state. | IDLE STATE. | |||
| During context establishment, the context is identified as follows: | During context establishment, the context is identified as follows: | |||
| o I1 packets: Deliver to the context associated with the ULID pair | o I1 packets: Deliver to the context associated with the ULID pair | |||
| and the Forked Instance Identifier. | and the Forked Instance Identifier. | |||
| o I2 packets: Deliver to the context associated with the ULID pair | o I2 packets: Deliver to the context associated with the ULID pair | |||
| and the Forked Instance Identifier. | and the Forked Instance Identifier. | |||
| o R1 packets: Deliver to the context with the locator pair included | o R1 packets: Deliver to the context with the locator pair included | |||
| skipping to change at page 90, line 29 ¶ | skipping to change at page 92, line 29 ¶ | |||
| I2_RETRIES_MAX = 2 | I2_RETRIES_MAX = 2 | |||
| I2bis_TIMEOUT = 4 seconds | I2bis_TIMEOUT = 4 seconds | |||
| I2bis_RETRIES_MAX = 2 | I2bis_RETRIES_MAX = 2 | |||
| VALIDATOR_MIN_LIFETIME = 30 seconds | VALIDATOR_MIN_LIFETIME = 30 seconds | |||
| UPDATE_TIMEOUT = 4 seconds | UPDATE_TIMEOUT = 4 seconds | |||
| MAX_UPDATE_TIMEOUT = 120 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, | |||
| skipping to change at page 91, line 14 ¶ | skipping to change at page 93, line 14 ¶ | |||
| 15. Implications Elsewhere | 15. Implications Elsewhere | |||
| 15.1. Congestion Control Considerations | 15.1. Congestion Control Considerations | |||
| When the locator pair currently used for exchanging packets in a | When the locator pair currently used for exchanging packets in a | |||
| Shim6 context becomes unreachable, the Shim6 layer will divert the | Shim6 context becomes unreachable, the Shim6 layer will divert the | |||
| communication through an alternative locator pair, which in most | communication through an alternative locator pair, which in most | |||
| cases will result in redirecting the packet flow through an | cases will result in redirecting the packet flow through an | |||
| alternative network path. In this case, it recommended that the | alternative network path. In this case, it recommended that the | |||
| Shim6 follows the recommendation defined in [20] and it informs the | Shim6 follows the recommendation defined in [21] and it informs the | |||
| upper layers about the path change, in order to allow the congestion | upper layers about the path change, in order to allow the congestion | |||
| control mechanisms of the upper layers to react accordingly. | control mechanisms of the upper layers to react accordingly. | |||
| 15.2. Middle-boxes considerations | 15.2. Middle-boxes considerations | |||
| Data packets belonging to a Shim6 context carrying the Shim6 Payload | Data packets belonging to a Shim6 context carrying the Shim6 Payload | |||
| Header contain alternative locators other than the ULIDs in the | Header contain alternative locators other than the ULIDs in the | |||
| source and destination address fields of the IPv6 header. On the | source and destination address fields of the IPv6 header. On the | |||
| other hand, the upper layers of the peers involved in the | other hand, the upper layers of the peers involved in the | |||
| communication operate on the ULID pair presented by the Shim6 layer | communication operate on the ULID pair presented by the Shim6 layer | |||
| to them, rather on the locator pair contained in the IPv6 header of | to them, rather on the locator pair contained in the IPv6 header of | |||
| the actual packets. It should be noted that the Shim6 layer does not | the actual packets. It should be noted that the Shim6 layer does not | |||
| modify the data packets, but because a constant ULID pair is | modify the data packets, but because a constant ULID pair is | |||
| presented to upper layers irrespective of the locator pair changes, | presented to upper layers irrespective of the locator pair changes, | |||
| the relation between the upper layer header (such as TCP, UDP, ICMP, | the relation between the upper layer header (such as TCP, UDP, ICMP, | |||
| ESP, etc) and the IPv6 header is modified. In particular, when the | ESP, etc) and the IPv6 header is modified. In particular, when the | |||
| Shim6 Extension header is present in the packet, if those data | Shim6 Extension header is present in the packet, if those data | |||
| packets are TCP, UDP or ICMP packets, the presudoheader used for the | packets are TCP, UDP or ICMP packets, the pseudoheader used for the | |||
| checksum calculation will contain the ULID pair, rather than the | checksum calculation will contain the ULID pair, rather than the | |||
| locator pair contained in the data packet. | locator pair contained in the data packet. | |||
| It is possible that some firewalls or other middle boxes try to | It is possible that some firewalls or other middle boxes try to | |||
| verify the validity of upper layer sanity checks of the packet on the | verify the validity of upper layer sanity checks of the packet on the | |||
| fly. If they do that based on the actual source and destination | fly. If they do that based on the actual source and destination | |||
| addresses contained in the IPv6 header without considering the Shim6 | addresses contained in the IPv6 header without considering the Shim6 | |||
| context information (in particular without replacing the locator pair | context information (in particular without replacing the locator pair | |||
| by the ULID pair used by the Shim6 context) such verifications may | by the ULID pair used by the Shim6 context) such verifications may | |||
| fail. Those middle-boxes need to be updated in order to be able to | fail. Those middle-boxes need to be updated in order to be able to | |||
| skipping to change at page 92, line 29 ¶ | skipping to change at page 94, line 29 ¶ | |||
| failure (those using the Shim6 payload extension header with a TCP | failure (those using the Shim6 payload extension header with a TCP | |||
| packet inside it). Thus stateful firewalls that are modified to pass | packet inside it). Thus stateful firewalls that are modified to pass | |||
| Shim6 messages should also be modified to pass the payload extension | Shim6 messages should also be modified to pass the payload extension | |||
| header, so that the shim can use the alternate locators to recover | header, so that the shim can use the alternate locators to recover | |||
| from failures. This presumably implies that the firewall needs to | from failures. This presumably implies that the firewall needs to | |||
| track the set of locators in use by looking at the Shim6 control | track the set of locators in use by looking at the Shim6 control | |||
| exchanges. Such firewalls might even want to verify the locators | exchanges. Such firewalls might even want to verify the locators | |||
| using the HBA/CGA verification themselves, which they can do without | using the HBA/CGA verification themselves, which they can do without | |||
| modifying any of the Shim6 packets they pass through. | modifying any of the Shim6 packets they pass through. | |||
| 15.3. Other considerations | 15.3. Operation and Management Considerations | |||
| This section considers some aspects related to the operations and | ||||
| management of the Shim6 protocol. | ||||
| Deployment of th Shim6 protocol: The Shim6 protocol is a host based | ||||
| solution, so, in order to be deployed, the stacks of the hosts using | ||||
| the Shim6 protocol need to be updated to support it. This enables an | ||||
| incremental deployment of the protocol, since it does not requires a | ||||
| flag day for the deployment, just single host updates. If the Shim6 | ||||
| solution will be deployed in a site, host can be gradually updated to | ||||
| support the solution. Moreover, for supporting the Shim6 protocol, | ||||
| only end hosts need to be updated and no router changes are required. | ||||
| However, it should be noted that in order to benefit from the Shim6 | ||||
| protocol, both ends of a communication should support the protocol, | ||||
| meaning that both hosts must be updated to be able to use the Shim6 | ||||
| protocol. Nevertheless, the Shim6 protocol uses a deferred context | ||||
| setup capability, that allows to establish normal IPv6 communications | ||||
| and later on, if both endpoints are Shim6-capable, protect the | ||||
| communication with the Shim6 protocol. This has an important | ||||
| deployment benefit, since Shim6 enabled nodes can perfectly talk to | ||||
| non-Shim6 capable nodes wihtout introducing any problem in the | ||||
| communication. | ||||
| Configuration of Shim6-capable nodes: The Shim6 protocol itself does | ||||
| not requires any spcific configuration to provide its basic features. | ||||
| The Shim6 protocol is designed to provide a default service to upper | ||||
| layers that should satisfy general applications. Th Shim6 layer | ||||
| would automatically attempt to protect long lived communications, by | ||||
| triggering the establishment of the Shim6 context using some | ||||
| predefined heuristics. Of course, if some special tunning is | ||||
| required by some applications, this may required additional | ||||
| configuration. Similar considerations apply to a site attempting to | ||||
| perform some forms of traffic engineering using different preferences | ||||
| for different locators. | ||||
| Address and prefix configuration: The Shim6 protocol assumes that in | ||||
| a multihomed site multiple prefixes will be available. Such | ||||
| configuration can increase the operation work in a network. However, | ||||
| it should be noted that the capability of having multiupl prefixes in | ||||
| a site and multiple addresses assigned to an interface is an IPv6 | ||||
| capability that goes beyond the Shim6 case and it is expected to be | ||||
| widely used. So, even though this is the case for Shim6, we consider | ||||
| that the implications of such a configuration is beyond the | ||||
| particular case of Shim6 and must be addressed for the generic IPv6 | ||||
| case. Nevertheless, Shim6 also assumes the usage of CGA/HBA | ||||
| addresses by Shim6 hosts. this implies that Shim6 capable hosts | ||||
| should configure addresses using HBA/CGA generation mechanims. | ||||
| Additional consideration about this issue can be found at [19] | ||||
| 15.4. Other considerations | ||||
| 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, including: | solution, has implications elsewhere, including: | |||
| 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 [18]. But in order for such applications to be | as described in [18]. 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 | |||
| skipping to change at page 93, line 13 ¶ | skipping to change at page 96, line 14 ¶ | |||
| does not overload the flow label as a context tag; the in-path | does not overload the flow label as a context tag; the in-path | |||
| devices need to know about the use of the new locators even though | devices need to know about the use of the new locators even though | |||
| the flow label stays the same. | the flow label stays the same. | |||
| o MTU implications. The path MTU mechanisms we use are robust | o MTU implications. The path MTU mechanisms we use are robust | |||
| against different packets taking different paths through the | against different packets taking different paths through the | |||
| Internet, by computing a minimum over the recently observed path | Internet, by computing a minimum over the recently observed path | |||
| MTUs. When Shim6 fails over from using one locator pair to | MTUs. When Shim6 fails over from using one locator pair to | |||
| another pair, this means that packets might travel over a | another pair, this means that packets might travel over a | |||
| 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. In order to deal with this changes in the MTU, | |||
| to the path MTU mechanism to try a larger MTU? | the usage of Packetization Layer Path MTU Discovery as defined in | |||
| [24] is reccommended. | ||||
| 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. By conveying the information to the | |||
| transport layer, it can adapt and reduce the MSS accordingly. | ||||
| 16. Security Considerations | 16. Security Considerations | |||
| This document satisfies the concerns specified in [15] as follows: | This document satisfies the concerns specified in [15] as follows: | |||
| o The HBA [2] and CGA technique [4] for verifying the locators to | o The HBA [2] and CGA technique [4] for verifying the locators to | |||
| prevent an attacker from redirecting the packet stream to | prevent an attacker from redirecting the packet stream to | |||
| somewhere else. The minimum acceptable key length for public keys | somewhere else, preventing threats described in sections 4.1.1, | |||
| used in the generation of CGAs SHOULD be 1024 bits. Any | 4.1.2, 4.1.3 and 4.2 of [15]. These two approaches provide a | |||
| implementation should follow prudent cryptographic practice in | similar level of protection but they provide different | |||
| determining the appropriate key lengths. | functionality with a different computational cost. The HBA | |||
| mechanism relies on the capability of generating all the addresses | ||||
| of a multihomed host as an unalterable set of intrinsically bound | ||||
| IPv6 addresses, known as an HBA set. In this approach, addresses | ||||
| incorporate a cryptographic one-way hash of the prefix-set | ||||
| available into the interface identifier part. The result is that | ||||
| the binding between all the available addresses is encoded within | ||||
| the addresses themselves, providing hijacking protection. Any | ||||
| peer using the shim protocol node can efficiently verify that the | ||||
| alternative addresses proposed for continuing the communication | ||||
| are bound to the initial address through a simple hash | ||||
| calculation. In a CGA based approach the address used as ULID is | ||||
| a CGA that contains a hash of a public key in its interface | ||||
| identifier. The result is a secure binding between the ULID and | ||||
| the associated key pair. This allows each peer to use the | ||||
| corresponding private key to sign the shim messages that convey | ||||
| locator set information. The trust chain in this case is the | ||||
| following: the ULID used for the communication is securely bound | ||||
| to the key pair because it contains the hash of the public key, | ||||
| and the locator set is bound to the public key through the | ||||
| signature. Any of these two mechanisms HBA and CGA provide time- | ||||
| shifted attack protection (as described in section 4.1.2 of [15]), | ||||
| since the ULID is securely bound to a locator set that can only be | ||||
| defined by the owner of the ULID. The minimum acceptable key | ||||
| length for RSA keys used in the generation of CGAs MUST be at | ||||
| least 1024 bits. Any implementation should follow prudent | ||||
| cryptographic practice in determining the appropriate key lengths. | ||||
| o Requiring a Reachability Probe+Reply before a new locator is used | o 3rd party flooding attacks described in section 4.3 of [15] are | |||
| as the destination, in order to prevent 3rd party flooding | prevented by requiring a Shim6 peer to perform a successful | |||
| attacks. | Reachability probe + reply exchange before accepting a new locator | |||
| for use as a packet destination.. | ||||
| 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 | |||
| requires the attacker to create state, consuming his own resources | requires the attacker to create state, consuming his own resources | |||
| and also it provides an IPv6 address that the attacker was using. | and also it provides an IPv6 address that the attacker was using. | |||
| o The context establishment messages use nonces to prevent replay | o The context establishment messages use nonces to prevent replay | |||
| attacks, and to prevent off-path attackers from interfering with | attacks as described in section 4.1.4 of [15], and to prevent off- | |||
| the establishment. | path attackers from interfering with the establishment. | |||
| o Every control message of the Shim6 protocol, past the context | o Every control message of the Shim6 protocol, past the context | |||
| 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 | as described in section 4.4 of [15]. Such discovery probably | |||
| be sniff the context tag value. The result is that through this | requires to be along the path in order to be sniff the context tag | |||
| technique, the Shim6 protocol is protected against off-path | value. The result is that through this technique, the Shim6 | |||
| attackers. | protocol is protected against off-path attackers. | |||
| Interaction with IPsec | Interaction with IPsec | |||
| The Shim6 sub-layer is implemented below the IPsec layer within the | The Shim6 sub-layer is implemented below the IPsec layer within the | |||
| IP layer. This deserves some additional considerations for a couple | IP layer. This deserves some additional considerations for a couple | |||
| of specific cases: First, it should be noted that the Shim6 approach | of specific cases: First, it should be noted that the Shim6 approach | |||
| does not preclude using IPsec tunnels on Shim6 packets within the | does not preclude using IPsec tunnels on Shim6 packets within the | |||
| network transit path. Second, in case that IPsec is implemented as | network transit path. Second, in case that IPsec is implemented as | |||
| Bump-In-The-Wire (BITW) [3], either the shim MUST be disabled, or the | Bump-In-The-Wire (BITW) [3], either the shim MUST be disabled, or the | |||
| shim MUST also be implemented as Bump-In-The-Wire, in order to | shim MUST also be implemented as Bump-In-The-Wire, in order to | |||
| satisfy the requirement that IPsec is layered above the shim. | satisfy the requirement that IPsec is layered above the shim. | |||
| If a shim6 node has some protected and some unprotected interfaces | ||||
| [RFC 4301] for the purposes of IPsec, then it MUST treat the locator | ||||
| sets for the protected and unprotected interfaces as separate locator | ||||
| sets and not intermix them. This ensures that shim6 will never | ||||
| failover from using a protected interface to using an unprotected | ||||
| interface and vice versa. | ||||
| The same constraint applies to shim6 hosts which have interfaces | ||||
| attached to networks where there are different security | ||||
| considerations, for instance a host with some interfaces attached to | ||||
| the public Internet and some interfaces attached to an intranet. | ||||
| In a "bump-in-the-stack" (BITS) IPsec implementation, IPsec is | ||||
| implemented "underneath" an existing implementation of an IP protocol | ||||
| stack, between the native IP and the local network drivers. In that | ||||
| case it is not possible to make IPsec benefit from the failover | ||||
| capabilities of shim6; when shim6 fails over to a different locator | ||||
| pair then the BITS IPsec would end up using a different (and possibly | ||||
| establish a new) security association for that pair of IP addresses. | ||||
| Same thing applies to a "bump-in-the-wire" (BITW) IPsec | ||||
| implementation. In those cases shim6 and IPsec still work, but it is | ||||
| less efficient to have to use separate security associations as a | ||||
| result of a shim6 failover. | ||||
| In order for a BITS and BITW IPsec implementation on a host as well | ||||
| as a security gateway to be able to look at the same selectors before | ||||
| and after a failover, their implementation needs to skip the SHIM6 | ||||
| extension header to find the selectors for the next layer protocols | ||||
| (e.g., TCP, UDP, Stream Control Transmission Protocol (SCTP)) | ||||
| 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. | |||
| skipping to change at page 98, line 49 ¶ | skipping to change at page 102, line 49 ¶ | |||
| | 0 | Unknown Shim6 message type | | | 0 | Unknown Shim6 message type | | |||
| | | | | | | | | |||
| | 1 | Critical Option not recognized | | | 1 | Critical Option not recognized | | |||
| | | | | | | | | |||
| | 2 | Locator verification method failed | | | 2 | Locator verification method failed | | |||
| | | | | | | | | |||
| | 3 | Locator List Generation number out of sync | | | 3 | Locator List Generation number out of sync | | |||
| | | | | | | | | |||
| | 4 | Error in the number of locators | | | 4 | Error in the number of locators | | |||
| | | | | | | | | |||
| | 120-127 | Reserved for debugging pruposes | | | 120-127 | Reserved for debugging purposes | | |||
| +------------+--------------------------------------------+ | +------------+--------------------------------------------+ | |||
| 18. Acknowledgements | 18. Acknowledgements | |||
| Over the years many people active in the multi6 and shim6 WGs have | Over the years many people active in the multi6 and shim6 WGs have | |||
| contributed ideas a suggestions that are reflected in this | contributed ideas a suggestions that are reflected in this | |||
| specification. Special thanks to the careful comments from Geoff | specification. Special thanks to the careful comments from Sam | |||
| Huston, Shinta Sugimoto, Pekka Savola, Dave Meyer, Deguang Le, Jari | Hartman, Cullen Jennings, Magnus Nystrom, Stephen Kent, Geoff Huston, | |||
| Arkko, Iljitsch van Beijnum, Jim Bound, Brian Carpenter, Sebastien | Shinta Sugimoto, Pekka Savola, Dave Meyer, Deguang Le, Jari Arkko, | |||
| Barre, Matthijs Mekking, Dave Thaler, Bob Braden Wesley Eddy and Tom | Iljitsch van Beijnum, Jim Bound, Brian Carpenter, Sebastien Barre, | |||
| Matthijs Mekking, Dave Thaler, Bob Braden Wesley Eddy and Tom | ||||
| Henderson on earlier versions of this document. | Henderson on earlier versions of this document. | |||
| Appendix A. Possible Protocol Extensions | Appendix A. 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 | 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 | Shim6 protocol to be able to recover from a wide range of | |||
| failures, for instance when one of the communicating hosts is | failures, for instance when one of the communicating hosts is | |||
| singly-homed, and cope with a site's ISPs that do ingress | single-homed, and cope with a site's ISPs that do ingress | |||
| filtering based on the source IPv6 address, there is a need for | filtering based on the source IPv6 address, there is a need for | |||
| the host to be able to influence the egress selection from its | the host to be able to influence the egress selection from its | |||
| site. Further discussion of this issue is captured in [16]. | site. Further discussion of this issue is captured in [16]. | |||
| 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. | |||
| skipping to change at page 100, line 37 ¶ | skipping to change at page 104, line 37 ¶ | |||
| 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 Supporting the dynamic setting of locator preferences on a site- | o Supporting the dynamic setting of locator preferences on a site- | |||
| wide basis, and use the Locator Preference option in the Shim6 | wide basis, and use the Locator Preference option in the Shim6 | |||
| protocol to convey these preferences to remote communicating | protocol to convey these preferences to remote communicating | |||
| hosts. This could mirror the DNS SRV record's notion of priority | hosts. This could mirror the DNS SRV record's notion of priority | |||
| and weight. | 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 | is using, and be able to influence the choice of locators | |||
| (controlling preferences as well as triggering a locator pair | (controlling preferences as well as triggering a locator pair | |||
| switch). This includes providing APIs the ULPs can use to fork a | switch). This includes providing APIs the ULPs can use to fork a | |||
| shim context. | 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 | |||
| skipping to change at page 102, line 5 ¶ | skipping to change at page 106, line 5 ¶ | |||
| o ULP specified timers for the reachability detection mechanism | o ULP specified timers for the reachability detection mechanism | |||
| (which can be useful particularly when there are forked contexts). | (which can be useful particularly when there are forked contexts). | |||
| o Pre-verify some "backup" locator pair, so that the failover time | o Pre-verify some "backup" locator pair, so that the failover time | |||
| can be shorter. | can be shorter. | |||
| o Study how Shim6 and Mobile IPv6 might interact. There existing an | o Study how Shim6 and Mobile IPv6 might interact. There existing an | |||
| initial draft on this topic [17]. | initial draft on this topic [17]. | |||
| Appendix B. Simplified State Machine | Appendix B. 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: | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Trigger | Action | | | Trigger | Action | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Receive I1 | Send R1 and stay in IDLE | | | Receive I1 | Send R1 and stay in IDLE | | |||
| | | | | | | | | |||
| | Heuristics trigger | Send I1 and move to I1-SENT | | | Heuristics trigger | Send I1 and move to I1-SENT | | |||
| | a new context | | | | a new context | | | |||
| | establishment | | | | establishment | | | |||
| skipping to change at page 103, line 4 ¶ | skipping to change at page 107, line 4 ¶ | |||
| | | If fail, stay in IDLE | | | | If fail, stay in IDLE | | |||
| | | | | | | | | |||
| | R1, R1bis, R2 | N/A (This context lacks the required info | | | R1, R1bis, R2 | N/A (This context lacks the required info | | |||
| | | for the dispatcher to deliver them) | | | | for the dispatcher to deliver them) | | |||
| | | | | | | | | |||
| | Receive payload | Send R1bis and stay in IDLE | | | Receive payload | Send R1bis and stay in IDLE | | |||
| | extension header | | | | extension header | | | |||
| | or other control | | | | or other control | | | |||
| | packet | | | | packet | | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| The following table describes the possible actions in state I1-SENT | The following table describes the possible actions in STATE I1-SENT | |||
| and their respective triggers: | and their respective triggers: | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Trigger | Action | | | Trigger | Action | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Receive R1, verify | If successful, send I2 and move to I2-SENT | | | Receive R1, verify | If successful, send I2 and move to I2-SENT | | |||
| | INIT nonce | | | | INIT nonce | | | |||
| | | If fail, discard and stay in I1-SENT | | | | If fail, discard and stay in I1-SENT | | |||
| | | | | | | | | |||
| | Receive I1 | Send R2 and stay in I1-SENT | | | Receive I1 | Send R2 and stay in I1-SENT | | |||
| skipping to change at page 104, line 4 ¶ | skipping to change at page 108, line 4 ¶ | |||
| | unknown error | | | | unknown error | | | |||
| | | | | | | | | |||
| | R1bis | N/A (Dispatcher doesn't deliver since | | | R1bis | N/A (Dispatcher doesn't deliver since | | |||
| | | CT(peer) is not set) | | | | CT(peer) is not set) | | |||
| | | | | | | | | |||
| | Receive Payload or | Discard and stay in I1-SENT | | | Receive Payload or | Discard and stay in I1-SENT | | |||
| | extension header | | | | extension header | | | |||
| | or other control | | | | or other control | | | |||
| | packet | | | | packet | | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| The following table describes the possible actions in state I2-SENT | The following table describes the possible actions in STATE I2-SENT | |||
| and their respective triggers: | and their respective triggers: | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Trigger | Action | | | Trigger | Action | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Receive R2, verify | If successful move to ESTABLISHED | | | Receive R2, verify | If successful move to ESTABLISHED | | |||
| | INIT nonce | | | | INIT nonce | | | |||
| | | If fail, stay in I2-SENT | | | | If fail, stay in I2-SENT | | |||
| | | | | | | | | |||
| | Receive I1 | Send R2 and stay in I2-SENT | | | Receive I1 | Send R2 and stay in I2-SENT | | |||
| skipping to change at page 105, line 4 ¶ | skipping to change at page 109, line 4 ¶ | |||
| | | to I1-SENT | | | | to I1-SENT | | |||
| | | | | | | | | |||
| | R1bis | N/A (Dispatcher doesn't deliver since | | | R1bis | N/A (Dispatcher doesn't deliver since | | |||
| | | CT(peer) is not set) | | | | CT(peer) is not set) | | |||
| | | | | | | | | |||
| | Receive payload or | Accept and send I2 (probably R2 was sent | | | Receive payload or | Accept and send I2 (probably R2 was sent | | |||
| | extension header | by peer and lost) | | | extension header | by peer and lost) | | |||
| | other control | | | | other control | | | |||
| | packet | | | | packet | | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| The following table describes the possible actions in state I2BIS- | The following table describes the possible actions in STATE I2BIS- | |||
| SENT and their respective triggers: | SENT and their respective triggers: | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Trigger | Action | | | Trigger | Action | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Receive R2, verify | If successful move to ESTABLISHED | | | Receive R2, verify | If successful move to ESTABLISHED | | |||
| | INIT nonce | | | | INIT nonce | | | |||
| | | If fail, stay in I2BIS-SENT | | | | If fail, stay in I2BIS-SENT | | |||
| | | | | | | | | |||
| | Receive I1 | Send R2 and stay in I2BIS-SENT | | | Receive I1 | Send R2 and stay in I2BIS-SENT | | |||
| skipping to change at page 106, line 4 ¶ | skipping to change at page 110, line 4 ¶ | |||
| | | go to I1-SENT | | | | go to I1-SENT | | |||
| | | | | | | | | |||
| | R1bis | N/A (Dispatcher doesn't deliver since | | | R1bis | N/A (Dispatcher doesn't deliver since | | |||
| | | CT(peer) is not set) | | | | CT(peer) is not set) | | |||
| | | | | | | | | |||
| | Receive payload or | Accept and send I2bis (probably R2 was | | | Receive payload or | Accept and send I2bis (probably R2 was | | |||
| | 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, compare | If no match, send R1 and stay in ESTABLISHED| | | Receive I1, compare | If no match, send R1 and stay in ESTABLISHED| | |||
| | CT(peer) with | | | | CT(peer) with | | | |||
| | received CT | If match, send R2 and stay in ESTABLISHED | | | received CT | If match, send R2 and stay in ESTABLISHED | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| skipping to change at page 107, line 4 ¶ | skipping to change at page 111, line 4 ¶ | |||
| | extension header | | | | extension header | | | |||
| | other control | | | | other control | | | |||
| | packet | | | | packet | | | |||
| | | | | | | | | |||
| | Implementation | Discard state and go to IDLE | | | Implementation | Discard state and go to IDLE | | |||
| | specific heuristic | | | | specific heuristic | | | |||
| | (E.g., No open ULP | | | | (E.g., No open ULP | | | |||
| | sockets and idle | | | | sockets and idle | | | |||
| | for some time ) | | | | for some time ) | | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| The following table describes the possible actions in state E-FAILED | The following table describes the possible actions in STATE E-FAILED | |||
| and their respective triggers: | and their respective triggers: | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Trigger | Action | | | Trigger | Action | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | Wait for | Go to IDLE | | | Wait for | Go to IDLE | | |||
| | NO_R1_HOLDDOWN_TIME | | | | NO_R1_HOLDDOWN_TIME | | | |||
| | | | | | | | | |||
| | Any packet | Process as in IDLE | | | Any packet | Process as in IDLE | | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| The following table describes the possible actions in state NO- | The following table describes the possible actions in STATE NO- | |||
| SUPPORT and their respective triggers: | SUPPORT and their respective triggers: | |||
| +---------------------+---------------------------------------------+ | +---------------------+---------------------------------------------+ | |||
| | 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 B.1. Simplified State Machine diagram | Appendix B.1. Simplified STATE Machine diagram | |||
| Timeout/Null +------------+ | Timeout/Null +------------+ | |||
| I1/R1 +------------------| NO SUPPORT | | I1/R1 +------------------| NO SUPPORT | | |||
| Payload or Control/R1bis | +------------+ | Payload or Control/R1bis | +------------+ | |||
| +---------+ | ^ | +---------+ | ^ | |||
| | | | ICMP Error/Null| | | | | ICMP Error/Null| | |||
| | V V | | | V V | | |||
| +-----------------+ Timeout/Null +----------+ | | +-----------------+ Timeout/Null +----------+ | | |||
| | |<---------------| E-FAILED | | | | |<---------------| E-FAILED | | | |||
| +-| IDLE | +----------+ | | +-| IDLE | +----------+ | | |||
| I2 or I2bis/R2 | | | ^ | | I2 or I2bis/R2 | | | ^ | | |||
| skipping to change at page 119, line 16 ¶ | skipping to change at page 123, line 16 ¶ | |||
| securely bind an address that is being used as ULID with a locator | securely bind an address that is being used as ULID with a locator | |||
| set that can be used to exchange packets. The mechanism provided by | set that can be used to exchange packets. The mechanism provided by | |||
| IPsec to securely bind the address used with the cryptographic keys | IPsec to securely bind the address used with the cryptographic keys | |||
| is the usage of digital certificates. This implies that an IPsec | is the usage of digital certificates. This implies that an IPsec | |||
| based solution would require that the generation of digital | based solution would require that the generation of digital | |||
| certificates that bind the key and the ULID by a common third trusted | certificates that bind the key and the ULID by a common third trusted | |||
| party for both parties involved in the communication. Considering | party for both parties involved in the communication. Considering | |||
| that the scope of application of the shim protocol is global, this | that the scope of application of the shim protocol is global, this | |||
| would imply a global public key infrastructure. The major issues | would imply a global public key infrastructure. The major issues | |||
| with this approach are the deployment difficulties associated with a | with this approach are the deployment difficulties associated with a | |||
| global PKI. | global PKI. The other possibility would be to use some form of | |||
| opportunistic IPSec, like BTNS [22]. However, this would still | ||||
| present some issues, in particular, this approach requires a leap-of- | ||||
| faith in order to bind a given address to the public ky that is being | ||||
| used, which would actually prevent from providing the most critical | ||||
| security feature that a Shim6 security solution needs to achieve, | ||||
| i.e. proving identifier ownership. On top of that, using IPsec would | ||||
| require to turn on per-packet AH/ESP just for multihoming to occur. | ||||
| Finally two different technologies were selected to protect the shim | Finally two different technologies were selected to protect the shim | |||
| protocol: HBA [4] and CGA [2]. These two approaches provide a | protocol: HBA [4] and CGA [2]. These two approaches provide a | |||
| similar level of protection but they provide different functionality | similar level of protection but they provide different functionality | |||
| with a different computational cost. | with a different computational cost. | |||
| The HBA mechanism relies on the capability of generating all the | The HBA mechanism relies on the capability of generating all the | |||
| addresses of a multihomed host as an unalterable set of intrinsically | addresses of a multihomed host as an unalterable set of intrinsically | |||
| bound IPv6 addresses, known as an HBA set. In this approach, | bound IPv6 addresses, known as an HBA set. In this approach, | |||
| addresses incorporate a cryptographic one-way hash of the prefix-set | addresses incorporate a cryptographic one-way hash of the prefix-set | |||
| skipping to change at page 121, line 51 ¶ | skipping to change at page 126, line 10 ¶ | |||
| 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 [19]. If an explicit CLOSE handshake and | the one specified in HIP [20]. 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 124, line 9 ¶ | skipping to change at page 128, line 9 ¶ | |||
| because premature garbage collection, but it does not prevent the | because premature garbage collection, but it does not prevent 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. | |||
| Appendix E. Change Log | Appendix E. Change Log | |||
| [RFC Editor: please remove this section] | [RFC Editor: please remove this section] | |||
| The following changes have been made since draft-ietf-shim6-proto-09: | ||||
| o Explicitly added a reference to the applicability document | ||||
| o Added text on why oportunistic IPSec was not used for securing | ||||
| locator sets | ||||
| o Reowrded the Validator generation text to make it clearer | ||||
| o Reworded security considerations to explicitly address RFC 4218 | ||||
| threats | ||||
| o Added OandM section | ||||
| o Added text on TE considerations | ||||
| o Added requirement to properly support RFC4884 icmp messages | ||||
| o added th usage of Packetization Layer Path MTU Discovery | ||||
| o reworded the placement of shim6 w.r.t. ipsec | ||||
| o added text on the IPsec considerations | ||||
| The following changes have been made since draft-ietf-shim6-proto-08: | The following changes have been made since draft-ietf-shim6-proto-08: | |||
| o Clarified that the validator option must be included in R1 and I2 | o Clarified that the validator option must be included in R1 and I2 | |||
| messages | messages | |||
| o changed preferred peer/local locator to current peer/local locator | o changed preferred peer/local locator to current peer/local locator | |||
| to align it with faliure detection draft | to align it with faliure detection draft | |||
| o Reworded sections describing the generation and reception of | o Reworded sections describing the generation and reception of | |||
| I2,I2bis, R2 and Update message to clarify that the CGA PDS may be | I2,I2bis, R2 and Update message to clarify that the CGA PDS may be | |||
| skipping to change at page 130, line 19 ¶ | skipping to change at page 135, line 19 ¶ | |||
| [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] Aura, T., "Cryptographically Generated Addresses (CGA)", | [2] Aura, T., "Cryptographically Generated Addresses (CGA)", | |||
| RFC 3972, March 2005. | RFC 3972, March 2005. | |||
| [3] Kent, S. and K. Seo, "Security Architecture for the Internet | [3] Kent, S. and K. Seo, "Security Architecture for the Internet | |||
| Protocol", RFC 4301, December 2005. | Protocol", RFC 4301, December 2005. | |||
| [4] Bagnulo, M., "Hash Based Addresses (HBA)", | [4] Bagnulo, M., "Hash Based Addresses (HBA)", | |||
| draft-ietf-shim6-hba-03 (work in progress), May 2007. | draft-ietf-shim6-hba-05 (work in progress), December 2007. | |||
| [5] Arkko, J. and I. Beijnum, "Failure Detection and Locator Pair | [5] 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-09 (work in progress), | draft-ietf-shim6-failure-detection-11 (work in progress), | |||
| July 2007. | February 2008. | |||
| 19.2. Informative References | 19.2. Informative References | |||
| [6] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | [6] 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. | |||
| [7] Ferguson, P. and D. Senie, "Network Ingress Filtering: | [7] 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. | |||
| skipping to change at page 131, line 24 ¶ | skipping to change at page 136, line 24 ¶ | |||
| [16] Huitema, C., "Ingress filtering compatibility for IPv6 | [16] Huitema, C., "Ingress filtering compatibility for IPv6 | |||
| multihomed sites", draft-huitema-shim6-ingress-filtering-00 | multihomed sites", draft-huitema-shim6-ingress-filtering-00 | |||
| (work in progress), September 2005. | (work in progress), September 2005. | |||
| [17] Bagnulo, M. and E. Nordmark, "SHIM - MIPv6 Interaction", | [17] Bagnulo, M. and E. Nordmark, "SHIM - MIPv6 Interaction", | |||
| draft-bagnulo-shim6-mip-00 (work in progress), July 2005. | draft-bagnulo-shim6-mip-00 (work in progress), July 2005. | |||
| [18] Nordmark, E., "Shim6 Application Referral Issues", | [18] 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. | |||
| [19] Moskowitz, R., Nikander, P., Jokela, P., and T. Henderson, | [19] Bagnulo, M. and J. Abley, "Applicability Statement for the | |||
| Level 3 Multihoming Shim Protocol (Shim6)", | ||||
| draft-ietf-shim6-applicability-03 (work in progress), | ||||
| July 2007. | ||||
| [20] Moskowitz, R., Nikander, P., Jokela, P., and T. Henderson, | ||||
| "Host Identity Protocol", draft-ietf-hip-base-10 (work in | "Host Identity Protocol", draft-ietf-hip-base-10 (work in | |||
| progress), October 2007. | progress), October 2007. | |||
| [20] Schuetz, S., "TCP Response to Lower-Layer Connectivity-Change | [21] Schuetz, S., Koutsianas, N., Eggert, L., Eddy, W., Swami, Y., | |||
| Indications", draft-schuetz-tcpm-tcp-rlci-01 (work in | and K. Le, "TCP Response to Lower-Layer Connectivity-Change | |||
| progress), March 2007. | Indications", draft-schuetz-tcpm-tcp-rlci-02 (work in | |||
| progress), November 2007. | ||||
| [22] Williams, N. and M. Richardson, "Better-Than-Nothing-Security: | ||||
| An Unauthenticated Mode of IPsec", draft-ietf-btns-core-06 | ||||
| (work in progress), January 2008. | ||||
| [23] Komu, M., Bagnulo, M., Slavov, K., and S. Sugimoto, "Socket | ||||
| Application Program Interface (API) for Multihoming Shim", | ||||
| draft-ietf-shim6-multihome-shim-api-04 (work in progress), | ||||
| February 2008. | ||||
| [24] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | ||||
| Discovery", RFC 4821, March 2007. | ||||
| [25] Bonica, R., Gan, D., Tappan, D., and C. Pignataro, "Extended | ||||
| ICMP to Support Multi-Part Messages", RFC 4884, April 2007. | ||||
| 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 133, line 7 ¶ | skipping to change at page 138, line 7 ¶ | |||
| Av. Universidad 30 | Av. Universidad 30 | |||
| Leganes, Madrid 28911 | Leganes, Madrid 28911 | |||
| SPAIN | SPAIN | |||
| Phone: +34 91 6248814 | Phone: +34 91 6248814 | |||
| Email: marcelo@it.uc3m.es | Email: marcelo@it.uc3m.es | |||
| URI: http://www.it.uc3m.es | URI: http://www.it.uc3m.es | |||
| Full Copyright Statement | Full Copyright Statement | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2008). | |||
| This document is subject to the rights, licenses and restrictions | This document is subject to the rights, licenses and restrictions | |||
| contained in BCP 78, and except as set forth therein, the authors | contained in BCP 78, and except as set forth therein, the authors | |||
| retain all their rights. | retain all their rights. | |||
| 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, THE IETF TRUST AND | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | |||
| THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | |||
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | |||
| End of changes. 128 change blocks. | ||||
| 308 lines changed or deleted | 567 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||