╨╧рб▒с > ■
■
ье┴ aр °┐ S╚ bjbjЪ═Ъ═ ч °зI\°зI\*ю ╥ ╖ 4╕ 4╕ м┼ м┼ м┼ м┼ м┼ D Ё┼ Ё┼ Ё┼ А p╞ д ╩ Д Ё┼ N╝ ╥ Ш╤ ╛0 V @ Ц Ц Ц ▐ h2 F6 L Т? и %╕ '╕ '╕ '╕ '╕ '╕ '╕ $ ┐ ╢ ╓┴ * K╕ ╜ м┼ :D ▐ ▐ :D :D K╕ м┼ м┼ Ц Ц H ╝ RY RY RY :D К
м┼ Ц м┼ Ц %╕ RY :D %╕ RY RY . sЪ Ф {в Ц PГ└с]╠╤ ─N . Ь ╕ ╝ 0 N╝ 'Ю T ┬ ЄN `
┬ А Зв Хв ┬ м┼ йв h :D :D RY :D :D :D :D :D K╕ K╕ RY :D :D :D N╝ :D :D :D :D ┬ :D :D :D :D :D :D :D :D :D 4╕ > r─ : [MC-PRCH]: Peer Channel Protocol
Intellectual Property Rights Notice for Open Specifications Documentation
Technical Documentation. Microsoft publishes Open Specifications documentation for protocols, file formats, languages, standards as well as overviews of the interaction among each of these technologies.
Copyrights. This documentation is covered by Microsoft copyrights. Regardless of any other terms that are contained in the terms of use for the Microsoft website that hosts this documentation, you may make copies of it in order to develop implementations of the technologies described in the Open Specifications and may distribute portions of it in your implementations using these technologies or your documentation as necessary to properly document the implementation. You may also distribute in your implementation, with or without modification, any schema, IDLТs, or code samples that are included in the documentation. This permission also applies to any documents that are referenced in the Open Specifications.
No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.
Patents. Microsoft has patents that may cover your implementations of the technologies described in the Open Specifications. Neither this notice nor Microsoft's delivery of the documentation grants any licenses under those or any other Microsoft patents. However, a given Open Specification may be covered by Microsoft HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=214445" Open Specification Promise or the HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=214448" Community Promise. If you would prefer a written license, or if the technologies described in the Open Specifications are not covered by the Open Specifications Promise or Community Promise, as applicable, patent licenses are available by contacting HYPERLINK "mailto:iplg@microsoft.com" iplg@microsoft.com.
Trademarks. The names of companies and products contained in this documentation may be covered by trademarks or similar intellectual property rights. This notice does not grant any licenses under those rights. For a list of Microsoft trademarks, visit HYPERLINK "http://www.microsoft.com/trademarks" www.microsoft.com/trademarks.
Fictitious Names. The example companies, organizations, products, domain names, email addresses, logos, people, places, and events depicted in this documentation are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.
Reservation of Rights. All other rights are reserved, and this notice does not grant any rights other than specifically described above, whether by implication, estoppel, or otherwise.
Tools. The Open Specifications do not require the use of Microsoft programming tools or programming environments in order for you to develop an implementation. If you have access to Microsoft programming tools and environments you are free to take advantage of them. Certain Open Specifications are intended for use in conjunction with publicly available standard specifications and network programming art, and assumes that the reader either is familiar with the aforementioned material or has immediate access to it.
Revision Summary
DateRevision HistoryRevision ClassComments08/10/20070.1MajorInitial Availability09/28/20070.2MinorUpdated the technical content.10/23/20070.3MinorUpdated the technical content.11/30/20070.3.1EditorialRevised and edited the technical content; updated links.01/25/20080.3.2EditorialRevised and edited the technical content.03/14/20080.3.3EditorialRevised and edited the technical content.05/16/20080.3.4EditorialRevised and edited the technical content.06/20/20080.3.5EditorialRevised and edited the technical content.07/25/20080.3.6EditorialRevised and edited the technical content.08/29/20081.0MajorUpdated and revised the technical content.10/24/20081.1MinorUpdated the technical content.12/05/20081.2MinorUpdated the technical content.01/16/20091.2.1EditorialRevised and edited the technical content.02/27/20091.3MinorUpdated the technical content.04/10/20091.4MinorUpdated the technical content.05/22/20092.0MajorUpdated and revised the technical content.07/02/20092.1MinorUpdated the technical content.08/14/20092.1.1EditorialRevised and edited the technical content.09/25/20093.0MajorUpdated and revised the technical content.11/06/20094.0MajorUpdated and revised the technical content.12/18/20094.0.1EditorialRevised and edited the technical content.01/29/20104.1MinorUpdated the technical content.03/12/20104.1.1EditorialRevised and edited the technical content.04/23/20104.1.2EditorialRevised and edited the technical content.06/04/20104.2MinorUpdated the technical content.07/16/20105.0MajorSignificantly changed the technical content.08/27/20106.0MajorSignificantly changed the technical content.10/08/20106.0No changeNo changes to the meaning, language, or formatting of the technical content.11/19/20107.0MajorSignificantly changed the technical content.01/07/20118.0MajorSignificantly changed the technical content.02/11/20119.0MajorSignificantly changed the technical content.03/25/201110.0MajorSignificantly changed the technical content.05/06/201110.0No changeNo changes to the meaning, language, or formatting of the technical content.06/17/201110.1MinorClarified the meaning of the technical content.09/23/201110.1No changeNo changes to the meaning, language, or formatting of the technical content.12/16/201111.0MajorSignificantly changed the technical content.03/30/201211.0No changeNo changes to the meaning, language, or formatting of the technical content.07/12/201211.0No changeNo changes to the meaning, language, or formatting of the technical content.10/25/201211.1MinorClarified the meaning of the technical content.01/31/201312.0MajorSignificantly changed the technical content.08/08/201312.1MinorClarified the meaning of the technical content.11/14/201312.1No changeNo changes to the meaning, language, or formatting of the technical content.02/13/201412.1No changeNo changes to the meaning, language, or formatting of the technical content.
Contents
TOC \f \h \t "DSTOC1-1,1,DSTOC1-2,2,DSTOC1-3,3,DSTOC1-4,4,DSTOC1-5,5,DSTOC1-6,6,DSTOC1-7,7,DSTOC1-8,8,DSTOC1-9,9,DSTOC2-2,2,DSTOC2-3,3,DSTOC2-4,4,DSTOC2-5,5,DSTOC2-6,6,DSTOC2-7,7,DSTOC2-8,8,DSTOC2-9,9,DSTOC3-3,3,DSTOC3-4,4,DSTOC3-5,5,DSTOC3-6,6,DSTOC3-7,7,DST HYPERLINK \l "_Toc378310022" 1 Introduction PAGEREF _Toc378310022 \h 7
HYPERLINK \l "_Toc378310023" 1.1 Glossary PAGEREF _Toc378310023 \h 7
HYPERLINK \l "_Toc378310024" 1.2 References PAGEREF _Toc378310024 \h 8
HYPERLINK \l "_Toc378310025" 1.2.1 Normative References PAGEREF _Toc378310025 \h 8
HYPERLINK \l "_Toc378310026" 1.2.2 Informative References PAGEREF _Toc378310026 \h 10
HYPERLINK \l "_Toc378310027" 1.3 Overview PAGEREF _Toc378310027 \h 10
HYPERLINK \l "_Toc378310028" 1.3.1 Mesh and Mesh Names PAGEREF _Toc378310028 \h 11
HYPERLINK \l "_Toc378310029" 1.3.2 Channel Types PAGEREF _Toc378310029 \h 11
HYPERLINK \l "_Toc378310030" 1.3.3 Discovery PAGEREF _Toc378310030 \h 11
HYPERLINK \l "_Toc378310031" 1.3.4 Connecting to Other Nodes PAGEREF _Toc378310031 \h 11
HYPERLINK \l "_Toc378310032" 1.3.5 Exchanging Application Messages PAGEREF _Toc378310032 \h 12
HYPERLINK \l "_Toc378310033" 1.3.6 Security PAGEREF _Toc378310033 \h 12
HYPERLINK \l "_Toc378310034" 1.3.6.1 Transport-Layer Security PAGEREF _Toc378310034 \h 12
HYPERLINK \l "_Toc378310035" 1.3.6.1.1 Password PAGEREF _Toc378310035 \h 12
HYPERLINK \l "_Toc378310036" 1.3.6.1.2 Trusted Certificate PAGEREF _Toc378310036 \h 12
HYPERLINK \l "_Toc378310037" 1.3.6.2 Message-Layer Security PAGEREF _Toc378310037 \h 12
HYPERLINK \l "_Toc378310038" 1.4 Relationship to Other Protocols PAGEREF _Toc378310038 \h 13
HYPERLINK \l "_Toc378310039" 1.5 Prerequisites/Preconditions PAGEREF _Toc378310039 \h 13
HYPERLINK \l "_Toc378310040" 1.6 Applicability Statement PAGEREF _Toc378310040 \h 13
HYPERLINK \l "_Toc378310041" 1.7 Versioning and Capability Negotiation PAGEREF _Toc378310041 \h 13
HYPERLINK \l "_Toc378310042" 1.8 Vendor-Extensible Fields PAGEREF _Toc378310042 \h 14
HYPERLINK \l "_Toc378310043" 1.9 Standards Assignments PAGEREF _Toc378310043 \h 14
HYPERLINK \l "_Toc378310044" 2 Messages PAGEREF _Toc378310044 \h 15
HYPERLINK \l "_Toc378310045" 2.1 Transport PAGEREF _Toc378310045 \h 15
HYPERLINK \l "_Toc378310046" 2.2 Common Message Syntax PAGEREF _Toc378310046 \h 15
HYPERLINK \l "_Toc378310047" 2.2.1 Namespaces PAGEREF _Toc378310047 \h 15
HYPERLINK \l "_Toc378310048" 2.2.2 Structures PAGEREF _Toc378310048 \h 16
HYPERLINK \l "_Toc378310049" 2.2.2.1 PeerHashToken Element PAGEREF _Toc378310049 \h 16
HYPERLINK \l "_Toc378310050" 2.2.2.2 PeerNodeAddress Structure PAGEREF _Toc378310050 \h 16
HYPERLINK \l "_Toc378310051" 2.2.2.3 Referral Structure PAGEREF _Toc378310051 \h 18
HYPERLINK \l "_Toc378310052" 2.2.2.4 RefuseReason Enumeration PAGEREF _Toc378310052 \h 18
HYPERLINK \l "_Toc378310053" 2.2.2.5 DisconnectReason Enumeration PAGEREF _Toc378310053 \h 19
HYPERLINK \l "_Toc378310054" 2.2.2.6 FloodMessage Header PAGEREF _Toc378310054 \h 21
HYPERLINK \l "_Toc378310055" 2.2.2.7 Endpoint Format PAGEREF _Toc378310055 \h 21
HYPERLINK \l "_Toc378310056" 2.2.3 Messages PAGEREF _Toc378310056 \h 21
HYPERLINK \l "_Toc378310057" 2.2.3.1 RequestSecurityToken Message PAGEREF _Toc378310057 \h 21
HYPERLINK \l "_Toc378310058" 2.2.3.1.1 Computing the PeerHashToken PAGEREF _Toc378310058 \h 22
HYPERLINK \l "_Toc378310059" 2.2.3.2 RequestSecurityTokenResponse Message PAGEREF _Toc378310059 \h 22
HYPERLINK \l "_Toc378310060" 2.2.3.3 Connect Message PAGEREF _Toc378310060 \h 23
HYPERLINK \l "_Toc378310061" 2.2.3.4 Welcome Message PAGEREF _Toc378310061 \h 23
HYPERLINK \l "_Toc378310062" 2.2.3.5 Refuse Message PAGEREF _Toc378310062 \h 23
HYPERLINK \l "_Toc378310063" 2.2.3.6 Disconnect Message PAGEREF _Toc378310063 \h 24
HYPERLINK \l "_Toc378310064" 2.2.3.7 Flood (Application) Message PAGEREF _Toc378310064 \h 24
HYPERLINK \l "_Toc378310065" 2.2.3.8 LinkUtility Message PAGEREF _Toc378310065 \h 25
HYPERLINK \l "_Toc378310066" 2.2.3.9 Ping Message PAGEREF _Toc378310066 \h 25
HYPERLINK \l "_Toc378310067" 2.2.4 Elements PAGEREF _Toc378310067 \h 26
HYPERLINK \l "_Toc378310068" 2.2.5 Complex Types PAGEREF _Toc378310068 \h 26
HYPERLINK \l "_Toc378310069" 2.2.6 Simple Types PAGEREF _Toc378310069 \h 26
HYPERLINK \l "_Toc378310070" 2.2.7 Attributes PAGEREF _Toc378310070 \h 26
HYPERLINK \l "_Toc378310071" 2.2.8 Groups PAGEREF _Toc378310071 \h 26
HYPERLINK \l "_Toc378310072" 2.2.9 Attribute Groups PAGEREF _Toc378310072 \h 26
HYPERLINK \l "_Toc378310073" 3 Protocol Details PAGEREF _Toc378310073 \h 27
HYPERLINK \l "_Toc378310074" 3.1 PeerService Port Receiving Node Details PAGEREF _Toc378310074 \h 27
HYPERLINK \l "_Toc378310075" 3.1.1 Abstract Data Model PAGEREF _Toc378310075 \h 27
HYPERLINK \l "_Toc378310076" 3.1.2 Timers PAGEREF _Toc378310076 \h 28
HYPERLINK \l "_Toc378310077" 3.1.3 Initialization PAGEREF _Toc378310077 \h 29
HYPERLINK \l "_Toc378310078" 3.1.3.1 Setting Configuration PAGEREF _Toc378310078 \h 29
HYPERLINK \l "_Toc378310079" 3.1.4 Higher-Layer Triggered Events PAGEREF _Toc378310079 \h 30
HYPERLINK \l "_Toc378310080" 3.1.4.1 Opening a Node PAGEREF _Toc378310080 \h 30
HYPERLINK \l "_Toc378310081" 3.1.4.2 Receiving a Message PAGEREF _Toc378310081 \h 31
HYPERLINK \l "_Toc378310082" 3.1.4.3 Closing a Node PAGEREF _Toc378310082 \h 31
HYPERLINK \l "_Toc378310083" 3.1.5 Message Processing and Sequencing Rules PAGEREF _Toc378310083 \h 31
HYPERLINK \l "_Toc378310084" 3.1.5.1 ProcessRequestSecurityToken PAGEREF _Toc378310084 \h 32
HYPERLINK \l "_Toc378310085" 3.1.5.1.1 Messages PAGEREF _Toc378310085 \h 32
HYPERLINK \l "_Toc378310086" 3.1.5.1.1.1 PeerService_ProcessRequestSecurityToken_InputMessage PAGEREF _Toc378310086 \h 32
HYPERLINK \l "_Toc378310087" 3.1.5.1.1.2 PeerService_ProcessRequestSecurityToken_OutputMessage PAGEREF _Toc378310087 \h 33
HYPERLINK \l "_Toc378310088" 3.1.5.2 Connect PAGEREF _Toc378310088 \h 33
HYPERLINK \l "_Toc378310089" 3.1.5.2.1 Messages PAGEREF _Toc378310089 \h 33
HYPERLINK \l "_Toc378310090" 3.1.5.2.1.1 ConnectInfo PAGEREF _Toc378310090 \h 34
HYPERLINK \l "_Toc378310091" 3.1.5.3 Welcome PAGEREF _Toc378310091 \h 35
HYPERLINK \l "_Toc378310092" 3.1.5.3.1 Messages PAGEREF _Toc378310092 \h 36
HYPERLINK \l "_Toc378310093" 3.1.5.3.1.1 WelcomeInfo PAGEREF _Toc378310093 \h 36
HYPERLINK \l "_Toc378310094" 3.1.5.4 Refuse PAGEREF _Toc378310094 \h 36
HYPERLINK \l "_Toc378310095" 3.1.5.4.1 Messages PAGEREF _Toc378310095 \h 37
HYPERLINK \l "_Toc378310096" 3.1.5.4.1.1 RefuseInfo PAGEREF _Toc378310096 \h 37
HYPERLINK \l "_Toc378310097" 3.1.5.5 Disconnect PAGEREF _Toc378310097 \h 37
HYPERLINK \l "_Toc378310098" 3.1.5.5.1 Messages PAGEREF _Toc378310098 \h 37
HYPERLINK \l "_Toc378310099" 3.1.5.5.1.1 DisconnectInfo PAGEREF _Toc378310099 \h 37
HYPERLINK \l "_Toc378310100" 3.1.5.6 LinkUtility PAGEREF _Toc378310100 \h 38
HYPERLINK \l "_Toc378310101" 3.1.5.6.1 Messages PAGEREF _Toc378310101 \h 38
HYPERLINK \l "_Toc378310102" 3.1.5.6.1.1 UtilityInfo PAGEREF _Toc378310102 \h 38
HYPERLINK \l "_Toc378310103" 3.1.5.6.1.1.1 Computing the LinkUtilityIndex PAGEREF _Toc378310103 \h 38
HYPERLINK \l "_Toc378310104" 3.1.5.7 Ping PAGEREF _Toc378310104 \h 38
HYPERLINK \l "_Toc378310105" 3.1.5.7.1 Messages PAGEREF _Toc378310105 \h 39
HYPERLINK \l "_Toc378310106" 3.1.5.7.1.1 PeerService_Ping_InputMessage PAGEREF _Toc378310106 \h 39
HYPERLINK \l "_Toc378310107" 3.1.5.8 Fault PAGEREF _Toc378310107 \h 39
HYPERLINK \l "_Toc378310108" 3.1.5.8.1 Messages PAGEREF _Toc378310108 \h 39
HYPERLINK \l "_Toc378310109" 3.1.5.8.1.1 PeerService_Fault_InputMessage PAGEREF _Toc378310109 \h 39
HYPERLINK \l "_Toc378310110" 3.1.5.9 FloodMessage PAGEREF _Toc378310110 \h 39
HYPERLINK \l "_Toc378310111" 3.1.5.9.1 Messages PAGEREF _Toc378310111 \h 40
HYPERLINK \l "_Toc378310112" 3.1.5.9.1.1 PeerService_FloodMessage_InputMessage PAGEREF _Toc378310112 \h 40
HYPERLINK \l "_Toc378310113" 3.1.6 Timer Events PAGEREF _Toc378310113 \h 42
HYPERLINK \l "_Toc378310114" 3.1.6.1 Security Handshake Timer PAGEREF _Toc378310114 \h 42
HYPERLINK \l "_Toc378310115" 3.1.6.2 Connect Handshake Timer PAGEREF _Toc378310115 \h 42
HYPERLINK \l "_Toc378310116" 3.1.6.3 LinkUtility Timer PAGEREF _Toc378310116 \h 42
HYPERLINK \l "_Toc378310117" 3.1.6.4 Maintenance Timer PAGEREF _Toc378310117 \h 43
HYPERLINK \l "_Toc378310118" 3.1.6.4.1 Maintenance Algorithm PAGEREF _Toc378310118 \h 43
HYPERLINK \l "_Toc378310119" 3.1.6.4.2 Pruning Algorithm PAGEREF _Toc378310119 \h 44
HYPERLINK \l "_Toc378310120" 3.1.6.4.3 Establish a Neighbor Connection PAGEREF _Toc378310120 \h 45
HYPERLINK \l "_Toc378310121" 3.1.6.4.4 Create a TCP/IP Connection PAGEREF _Toc378310121 \h 46
HYPERLINK \l "_Toc378310122" 3.1.6.4.5 No Security PAGEREF _Toc378310122 \h 46
HYPERLINK \l "_Toc378310123" 3.1.6.4.6 Password-Based Security PAGEREF _Toc378310123 \h 46
HYPERLINK \l "_Toc378310124" 3.1.6.4.7 Certificate-Based Security PAGEREF _Toc378310124 \h 47
HYPERLINK \l "_Toc378310125" 3.1.6.4.8 Password-Based Security Handshake PAGEREF _Toc378310125 \h 47
HYPERLINK \l "_Toc378310126" 3.1.6.4.9 Connect Handshake PAGEREF _Toc378310126 \h 47
HYPERLINK \l "_Toc378310127" 3.1.7 Other Local Events PAGEREF _Toc378310127 \h 49
HYPERLINK \l "_Toc378310128" 3.2 PeerService Port Sending Node Details PAGEREF _Toc378310128 \h 49
HYPERLINK \l "_Toc378310129" 3.2.1 Abstract Data Model PAGEREF _Toc378310129 \h 49
HYPERLINK \l "_Toc378310130" 3.2.2 Timers PAGEREF _Toc378310130 \h 49
HYPERLINK \l "_Toc378310131" 3.2.3 Initialization PAGEREF _Toc378310131 \h 49
HYPERLINK \l "_Toc378310132" 3.2.4 Higher-Layer Triggered Events PAGEREF _Toc378310132 \h 50
HYPERLINK \l "_Toc378310133" 3.2.4.1 Sending Messages PAGEREF _Toc378310133 \h 50
HYPERLINK \l "_Toc378310134" 3.2.4.1.1 Sending Signed Messages PAGEREF _Toc378310134 \h 50
HYPERLINK \l "_Toc378310135" 3.2.5 Message Processing Events and Sequencing Rules PAGEREF _Toc378310135 \h 50
HYPERLINK \l "_Toc378310136" 3.2.6 Timer Events PAGEREF _Toc378310136 \h 51
HYPERLINK \l "_Toc378310137" 3.2.7 Other Local Events PAGEREF _Toc378310137 \h 51
HYPERLINK \l "_Toc378310138" 4 Protocol Examples PAGEREF _Toc378310138 \h 52
HYPERLINK \l "_Toc378310139" 4.1 Establishing a Neighbor Connection in Password Mode PAGEREF _Toc378310139 \h 52
HYPERLINK \l "_Toc378310140" 4.1.1 Connection Initiator Sends the RequestSecurityToken Message PAGEREF _Toc378310140 \h 52
HYPERLINK \l "_Toc378310141" 4.1.2 Responding Node Sends Back a RequestSecurityTokenResponse PAGEREF _Toc378310141 \h 53
HYPERLINK \l "_Toc378310142" 4.1.3 Requesting Node Sends a Connect Message PAGEREF _Toc378310142 \h 54
HYPERLINK \l "_Toc378310143" 4.1.4 Responding Node Sends a Welcome Message PAGEREF _Toc378310143 \h 55
HYPERLINK \l "_Toc378310144" 4.2 Nonpassword Security Modes PAGEREF _Toc378310144 \h 56
HYPERLINK \l "_Toc378310145" 4.3 Flooding a Message PAGEREF _Toc378310145 \h 56
HYPERLINK \l "_Toc378310146" 5 Security PAGEREF _Toc378310146 \h 57
HYPERLINK \l "_Toc378310147" 5.1 Security Considerations for Implementers PAGEREF _Toc378310147 \h 57
HYPERLINK \l "_Toc378310148" 5.2 Index of Security Parameters PAGEREF _Toc378310148 \h 57
HYPERLINK \l "_Toc378310149" 6 Appendix A: Full WSDL Definitions PAGEREF _Toc378310149 \h 58
HYPERLINK \l "_Toc378310150" 7 Appendix B: Product Behavior PAGEREF _Toc378310150 \h 75
HYPERLINK \l "_Toc378310151" 8 Change Tracking PAGEREF _Toc378310151 \h 77
HYPERLINK \l "_Toc378310152" 9 Index PAGEREF _Toc378310152 \h 78
1 Introduction
The Peer Channel Protocol is used for broadcasting messages over a virtual network of cooperating HYPERLINK \l "z1" nodes. This protocol is used to send and receive messages between nodes in a named HYPERLINK \l "z2" mesh. The nodes form the network by establishing connections to each other using a HYPERLINK \l "z3" discovery service in which every node registers itself into a named mesh and HYPERLINK \l "z4" discovers other nodes using the name of the mesh. The network is not fully connected. Instead, it is sparsely connected, yet a message sent by any node is propagated to the entire mesh by nodes forwarding to each other in a cooperative manner.
Each node forwards a message to all other HYPERLINK \l "z5" neighbors. Each node is responsible for detecting and dropping duplicates of a message.
Each node maintains connections to a few other nodes in the mesh. A node must track the health of the HYPERLINK \l "z6" neighbor connection and tune its neighbor set based on the utility of the neighbor connection.
Sections 1.8, 2, and 3 of this specification are normative and can contain the terms MAY, SHOULD, MUST, MUST NOT, and SHOULD NOT as defined in RFC 2119. Sections 1.5 and 1.9 are also normative but cannot contain those terms. All other sections and examples in this specification are informative.
1.1 Glossary
The following terms are defined in HYPERLINK "[MS-GLOS].pdf" [MS-GLOS]:
GUID.NET Framework
The following terms are specific to this document:
authenticator: A security token of a node computed using the password of the mesh and the node's public key.
channel type: A logical grouping of operations (messages) that can be sent over the mesh. A mesh can be used to handle more than one channel type simultaneously. A channel type is identified by a unique URI.
discovery: The process used to discover other nodes in the mesh of interest.
discovery service: The service used to discover other nodes. Peer Channel can use PNRP HYPERLINK "[MS-PNRP].pdf" [MS-PNRP] or any other service implementing the HYPERLINK "[MC-PRCR].pdf" Peer Channel Custom Resolver Protocol [MC-PRCR] to discover other nodes.
endpoint: A tuple (composed of an IP address, port, and protocol number) that uniquely identifies a communication endpoint.
flood (or flooding): The process of propagating messages throughout a mesh.
flood message: An application message.
mesh: A network of nodes that are all identified with the same mesh name.
mesh name: Identifies a set of nodes that establish connections to each other to form a mesh, as described in section HYPERLINK \l "z54013004589246939e6af2620921e25b" 1.3.1.
multihoming: The practice of allowing TCP/IP connections on more than one interface adapter and network scope.
neighbor: A node that is directly connected to the given node.
neighbor connection: A TCP/IP connection between the endpoints of two nodes.
node: An instance of a channel endpoint participating in the mesh that implements the Peer Channel Protocol.
Peer Channel: The protocol detailed in this specification, used for broadcasting messages over a virtual network of cooperating nodes.
PNRP: The acronym for the Peer Name Resolution Protocol (PNRP) Version 4.0 (for more information, see [MS-PNRP]). Used with Peer Channel as a discovery mechanism.
requesting node: A node that is requesting the formation of a neighbor connection to another node in the mesh.
responding node: A node that is responding to a request to form a neighbor connection from another node in the mesh.
MAY, SHOULD, MUST, SHOULD NOT, MUST NOT: These terms (in all caps) are used as specified in HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90317" [RFC2119]. All statements of optional behavior use either MAY, SHOULD, or SHOULD NOT.
1.2 References
References to Microsoft Open Specifications documentation do not include a publishing year because links are to the latest version of the documents, which are updated frequently. References to other documents include a publishing year when one is available.
A reference marked "(Archived)" means that the reference document was either retired and is no longer being maintained or was replaced with a new document that provides current implementation details. We archive our documents online HYPERLINK "http://msdn.microsoft.com/en-us/library/jj633107.aspx" [Windows Protocol].
1.2.1 Normative References
We conduct frequent surveys of the normative references to assure their continued availability. If you have any issue with finding a normative reference, please contact HYPERLINK "mailto:dochelp@microsoft.com" dochelp@microsoft.com. We will assist you in finding the relevant information.
[MC-NBFS] Microsoft Corporation, " HYPERLINK "[MC-NBFS].pdf" .NET Binary Format: SOAP Data Structure".
[MC-NBFSE] Microsoft Corporation, " HYPERLINK "[MC-NBFSE].pdf" .NET Binary Format: SOAP Extension".
[MC-NMF] Microsoft Corporation, " HYPERLINK "[MC-NMF].pdf" .NET Message Framing Protocol".
[MS-DTYP] Microsoft Corporation, " HYPERLINK "[MS-DTYP].pdf" Windows Data Types".
[MS-ERREF] Microsoft Corporation, " HYPERLINK "[MS-ERREF].pdf" Windows Error Codes".
[MS-WSPOL] Microsoft Corporation, " HYPERLINK "[MS-WSPOL].pdf" Web Services: Policy Assertions and WSDL Extensions".
[METADATA] World Wide Web Consortium, "Web Services Addressing 1.0 - Metadata", W3C Recommendation, May 2007, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=161006" http://www.w3.org/TR/ws-addr-metadata/
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90317" http://www.rfc-editor.org/rfc/rfc2119.txt
[RFC3484] Draves, R., "Default Address Selection for Internet Protocol version 6 (IPv6)", RFC 3484, February 2003, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90424" http://www.ietf.org/rfc/rfc3484.txt
[RFC4122] Leach, P., Mealling, M., and Salz, R., "A Universally Unique Identifier (UUID) URN Namespace", RFC 4122, July 2005, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90460" http://www.ietf.org/rfc/rfc4122.txt
[RFC4346] Dierks, T., and Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.1", RFC 4346, April 2006, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90474" http://www.ietf.org/rfc/rfc4346.txt
[SOAP1.1] Box, D., Ehnebuske, D., Kakivaya, G., et al., "Simple Object Access Protocol (SOAP) 1.1", May 2000, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90520" http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
[SOAP1.1-Envelope] Box, D., Ehnebuske, D., Kakivaya, G., et al., "Simple Object Access Protocol (SOAP) 1.1 Envelope", May 2001, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=111315" http://schemas.xmlsoap.org/soap/envelope/
[SOAP1.2/1] Gudgin, M., Hadley, M., Mendelsohn, N., Moreau, J., and Nielsen, H.F., "SOAP Version 1.2 Part 1: Messaging Framework", W3C Recommendation, June 2003, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90521" http://www.w3.org/TR/2003/REC-soap12-part1-20030624
[WSADDR] Gudgin, M., Hadley, M., and Rogers, T., "Web Services Addressing (WS-Addressing) 1.0", W3C Recommendation, May 2006, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=113065" http://www.w3.org/2005/08/addressing
[WSAddressing] Box, D., Christensen, E., Ferguson, D., et al., "Web Services Addressing (WS-Addressing)", August 2004, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90575" http://www.w3.org/Submission/ws-addressing/
[WSAWSDL] World Wide Web Consortium, "Web Services Addressing 1.0 - WSDL Binding", May 2006, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=130726" http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/
[WSDL] Christensen, E., Curbera, F., Meredith, G., and Weerawarana, S., "Web Services Description Language (WSDL) 1.1", W3C Note, March 2001, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90577" http://www.w3.org/TR/2001/NOTE-wsdl-20010315
[WSDLSOAP] Angelov, D., Ballinger, K., Butek, R., et al., "WSDL 1.1 Binding Extension for SOAP 1.2", W3c Member Submission, April 2006, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=131790" http://www.w3.org/Submission/wsdl11soap12/
[WSENUM] Alexander, J., Box, D., Cabrera, L.F., et al., "Web Services Enumeration (WS-Enumeration)", March 2006, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90580" http://www.w3.org/Submission/2006/SUBM-WS-Enumeration-20060315/
[WSPOLICY] Bajaj, S., Box, D., Chappell, D., et al., "Web Services Policy Framework (WS-POLICY) and Web Services Policy Attachment (WS-PolicyAttachment)", March 2006, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=131794" http://schemas.xmlsoap.org/ws/2004/09/policy
[WSSU1.0] OASIS Standard, "WS Security Utility 1.0", 2004, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=161007" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
[WSTrust] IBM, Microsoft, Nortel, VeriSign, "WS-Trust V1.0", February 2005, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90584" http://specs.xmlsoap.org/ws/2005/02/trust/WS-Trust.pdf
[X509] ITU-T, "Information Technology - Open Systems Interconnection - The Directory: Public-Key and Attribute Certificate Frameworks", Recommendation X.509, August 2005, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90590" http://www.itu.int/rec/T-REC-X.509/en
NoteааThere is a charge to download the specification.
[XMLNS] Bray, T., Hollander, D., Layman, A., et al., Eds., "Namespaces in XML 1.0 (Third Edition)", W3C Recommendation, December 2009, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=191840" http://www.w3.org/TR/2009/REC-xml-names-20091208/
[XMLSCHEMA1] Thompson, H.S., Beech, D., Maloney, M., and Mendelsohn, N., Eds., "XML Schema Part 1: Structures", W3C Recommendation, May 2001, HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90608" http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/
1.2.2 Informative References
[MC-PRCR] Microsoft Corporation, " HYPERLINK "[MC-PRCR].pdf" Peer Channel Custom Resolver Protocol".
[MS-GLOS] Microsoft Corporation, " HYPERLINK "[MS-GLOS].pdf" Windows Protocols Master Glossary".
[MS-PNRP] Microsoft Corporation, " HYPERLINK "[MS-PNRP].pdf" Peer Name Resolution Protocol (PNRP) Version 4.0".
[MSDN-SECURITY_INFORMATION] Microsoft Corporation, "SECURITY_INFORMATION", HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90127" http://msdn.microsoft.com/en-us/library/aa379573.aspx
1.3 Overview
Nodes using the Peer Channel Protocol create a mesh of redundant connections used for broadcasting and receiving messages in a decentralized manner. Messages sent by any node should typically reach all other nodes; the Peer Channel Protocol is not intended for sending point-to-point messages.
Nodes learn of other participating nodes in the mesh via a resolver service or referrals from existing neighbors. Each node uses this information to establish neighbor connections. Depending on the application configuration, these connections may or may not be secured.
Figure 1: Sample diagram of a mesh
The preceding diagram shows one possible mesh shape with eight participating nodes. The mesh periodically reconfigures itself as the membership and message flow patterns change.
A mesh achieves broadcast semantics by means of sending messages to immediate neighbors who, in turn, forward the messages to their neighbors. This forwarding process stops when all participants in the mesh have received the message at least once.
1.3.1 Mesh and Mesh Names
A HYPERLINK \l "z12" mesh name is used to identify a set of nodes that establish connections to each other to form a mesh. The name is any unique identifier that follows the host name syntax rules of URI. This name is used as the key to look up and resol v e n o d e H Y P E R L I N K \ l " z 9 " e n d p o i n t s i n a d i s c o v e r y s e r v i c e .
T h e f o l l o w i n g a r e e x a m p l e s o f v a l i d m e s h n a m e s :
зЁ J o e s D o c u m e n t U p d a t e N o t i c e
зЁ B o b s N e w s F l a s h
зЁ A d a m s S t o c k T i c k e r
1 . 3 . 2 C h a n n e l T y p e s
A H Y P E R L I N K \ l " z 8 " c h a n n e l t y p e i s d e f i n e d a s a l o g i c al grouping of operations (messages) that can be sent over the mesh. A mesh can be used to handle more than one channel type simultaneously.
A channel type is identified by a unique URI. The HostName property of the URI must match the mesh name, and the scheme of the URI must be "net.p2p".
Following are some example ChannelType URIs in the mesh "BobsNewsFlash":
зЁ n e t . p 2 p : / / B o b s N e w s F l a s h / P o l i t i c a l
зЁ n e t . p 2 p : / / B o b s N e w s F l a s h / F i n a n c i a l / S t o c k s
1 . 3 . 3 D i s c o v e r y
T h e P e e r C h a n n e l P r o t o c o l u s e s a d i s c o v e r y s e r v i c e a s a r e p o s i t o r y t o s t o r e a n d r e t r i e v e e a c h n o d e ' s E n d p o i n t I n f o r m a t i o n ( s e c t i o n H Y P E R L I N K \ l " z 6 8 3 9 f 0 0 f 0 2 5 64d18bfd10d140d167a5b" 3.1.1). All nodes participating in a given mesh use the same discovery service. A node uses the discovery service to obtain connection information for a few nodes already present in the mesh that are attempting to join the mesh. The node uses this information to establish neighbor connections. The discovery service may return endpoints that are not currently active due to transient conditions. Connecting nodes can handle such error conditions by requesting additional connection information from the discovery service and then retrying the connect operations.
1.3.4 Connecting to Other Nodes
A node typically establishes three neighbor connections, if possible. A node that does not discover other nodes initially will at first be alone but will be discovered by other nodes that join the mesh later. Nodes register (and update) their endpoint information in the discovery service for the duration of their participation in the mesh. Nodes also periodically tune neighbor connection sets by dropping the least useful connections and acquiring new connections. Usefulness of a connection is determined by the number of new messages received over that connection.
To establish a connection, the HYPERLINK \l "z16" requesting node sends a message requesting a connection from another node. The HYPERLINK \l "z17" responding node sends back a message indicating its availability. If the connection is accepted by the responding node, the connection is now ready for sending and receiving application messages.
1.3.5 Exchanging Application Messages
After establishing connections with one or more neighbors, a node is ready to send and receive application messages. If per-message security is configured, each message is first processed for security before further processing. All application messages received are forwarded to all connected neighbors, except to the neighbor from whom the message is received.
All nodes receive all messages addressed to the mesh, even if some of the messages are only intended for a subset of the mesh.
Each message is identified by a unique message ID that is generated by the node that initially creates the message. Because a particular node may receive a message multiple times as a result of having multiple neighbors, this message ID is used to detect and discard all duplicate messages.
Outgoing messages (called HYPERLINK \l "z11" flood messages) are created by adding a Peer Channel Protocol header to the message (see section HYPERLINK \l "z028b8961aaff465a97a118553b6ff1d3" 2.2.3.7) and then sending the messages to the corresponding HYPERLINK \l "z3551c30075a147ef8bf10cbce6d7661f" ChannelType URI.
1.3.6 Security
A mesh can be secured at neighbor transport layer, message layer, or both.
1.3.6.1 Transport-Layer Security
A mesh may be configured to send and receive all messages over a secure transport. In this case, all neighbor-to-neighbor connections established will be Transport Layer Security (TLS) over TCP connections, as specified in HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90474" [RFC4346]. HYPERLINK \l "z14" Peer Channel supports two different types of credentials for achieving transport-layer security, as described in the following sections.
1.3.6.1.1 Password
Every node that attempts to join the mesh is required to prove knowledge of the mesh password. A secure neighbor-to-neighbor connection is established using any arbitrary X.509 certificate HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90590" [X509] (this certificate does not need to be trusted). A message exchange takes place in which both nodes exchange messages to send tokens that prove their knowledge of the password. Each node validates the other node's security token before initiating further message exchanges with that node.
1.3.6.1.2 Trusted Certificate
Every node has a certificate that all nodes can validate and trust that is provisioned out of band. Secure neighbor-to-neighbor connections are established using these certificates. Applications provide these certificates and the associated authentication functionality and scheme. The validation scheme is responsible for validating the X.509 certificates used to establish the underlying TLS connection. It has to be generic to include any node's certificate (it is unpredictable what other nodes a given node will be connected to at any time, so all nodes have to implement generic authentication schemes). However, no message exchange takes place. If the nodes fail to authenticate each other's certificate, the neighbor connection is dropped.
1.3.6.2 Message-Layer Security
Independent of transport-layer security, the Peer Channel Protocol also supports per-message security. Application messages (not protocol messages) are signed with a trusted X.509 certificate to make individual messages tamper-proof. The application must provide the scheme to validate and trust the certificate that is used to secure the message. The vendor must also distribute the certificates used to validate these messages.
1.4 Relationship to Other Protoc o l s
T h e P e e r C h a n n e l P r o t o c o l d e p e n d s o n t h e f o l l o w i n g n o n - n a t i v e p r o t o c o l s :
зЁ T h e . N E T M e s s a g e F r a m i n g P r o t o c o l S p e c i f i c a t i o n , a s s p e c i f i e d i n H Y P E R L I N K " [ M C - N M F ] . p d f " [ M C - N M F ] : f o r e x c h a n g i n g e n c o d e d S O A P m e s s a g e s o v e r T C P .
зЁ T h e . N E T B i n a r y F o r m a t : S O A P D a t a S t r u c t u r e , a s s p e c i f i e d i n H Y P E R L I N K " [ M C - N B F S ] . p d f " [ M C - N B F S ] : f o r e x c h a n g i n g a c o m p a c t l y e n c o d e d s t r e a m o f d a t a b e t w e e n t w o n o d e s .
зЁ T h e . N E T B i n a r y F o r m a t : S O A P E x t e n s i o n , a s s p e c i f i e d i n H Y P E R L I N K " [ M C - N B F S E ] . p d f " [ M C - N B F S E ] : f o r e x c h a n g i n g s t r i n g s o n c e , a n d t h e n r e f e r r i n g t o t h e m i n s u b s e q u e n t d o c u m e n t s .
зЁ T h e P e e r C h a n n e l C u s t o m R e s o l v e r P r o t o c o l , a s s p e c i f i e d i n H Y P E R L I N K " [ M C - P R C R ] . p d f " [ M C - P R C R ] : t h i s i s o p t i o n a l l y u s e d t o r e g i s t e r a n d r e s o l v e p e e r ' s a d d r e s s e s d u r i n g c o n n e c t i on and maintenance operations.
The Peer Channel Protocol also has an optional dependency on the HYPERLINK \l "z15" PNRP native protocol, as specified in HYPERLINK "[MC-PRCR].pdf" [MC-PRCR] (section HYPERLINK "[MC-PRCR].pdf" 1.4 HYPERLINK "[MC-PRCR].pdf" ). This protocol can be used to register and resolve the peer's addresses during connection and maintenance operations.
1.5 Prerequisites/Preconditions
In addition to the protocol dependencies listed in the section "Relationship to Other Prot o c o l s " , i t i s a s s u m e d t h a t a n o d e c o n n e c t i n g t o t h e m e s h i s c o n f i g u r e d w i t h t h e f o l l o w i n g d e t a i l s :
зЁ M e s h n a m e .
зЁ C o n n e c t i o n i n f o r m a t i o n f o r d i s c o v e r y s e r v i c e .
зЁ S e c u r i t y m e c h a n i s m e m p l o y e d i n t h e m e s h , a n d t h e c r e d e n t i a l s n e e d e d t o a u t h e n t i c a t e i n t o t h e m e s h .
зЁ C r e d e n t i a l s n e e d e d t o s i g n f l o o d m e s s a g e s i n c a s e t h e m e s s a g e a u t h e n t i c a t i o n f e a t u r e i s u s e d .
зЁ U R I o f e a c h o f t h e c h a n n e l s t h a t i t w a n t s t o s e n d m e s s a g e s t o ( o r r e c e i v e m e s s a g e s f r o m ) .
I t i s a s s u m e d t h a t t h e s e d e t a i l s a r e a v a i l a b l e t o a l l p a r t i c i pating nodes before connecting to the mesh. The Peer Channel Protocol is not used to communicate these details.
1.6 Applicability Statement
The Peer Channel Protocol is suitable for scenarios in which messages sent by any node should reach all other nodes participating in a single named mesh. It is suitable for both local networks and Global Internet scenarios on both trusted and untrusted networks.
The Peer Channel Protocol is not intended for sending point-to-point messages in a mesh. All messages must be addressed to the mesh, not to any particular peer.
The Peer Channel Protocol is suited for use in scenarios that do not require a high degree of reliability, because it does not include any mechanism to guarantee message delivery.
1.7 Versioning and Capability Negotiation
None.
1.8 Vendor-Extensible Fields
None.
1.9 Standards Assignments
None.
2 Messages
2.1 Transport
A node configured without transport security MUST use TCP as the neighbor-to-neighbor transport. A node configured with transport security MUST use TLS to secure the channel, as specified in HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90474" [RFC4346].
2.2 Common Message Syntax
The Peer Channel Protocol is comprised of messages that are based on SOAP (as specified in HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90521" [SOAP1.2/1]) syntax. Peer Channel Protocol messages are defined as a Web Services Description Language (WSDL) HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90577" [WSDL] operation binding. Peer Channel Protocol messages define the Action header and the element type in the SOAP body, with the exception of flood messages, which are identified by the presence of other Peer Channel ProtocolЦspecific headers in the SOAP message.
2.2.1 Namespaces
This specification defines and references various HYPERLINK "[MS-GLOS].pdf" XML namespaces using the mechanisms specified in HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90602" [XMLNS]. Although this specification associates a specific XML namespace prefix for each XML namespace that is used, the choice of any particular XML namespace prefix is implementation-specific and not significant for interoperability.
PrefixNamespace URIReferencesoapenchttp://schemas.xmlsoap.org/soap/encoding HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90520" [SOAP1.1]wsuhttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=161007" [WSSU1.0]wsdlhttp://schemas.xmlsoap.org/wsdl/ HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90577" [WSDL]soaphttp://schemas.xmlsoap.org/wsdl/soap/ HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90577" [WSDL]soap12http://schemas.xmlsoap.org/wsdl/soap12 HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=131790" [WSDLSOAP]soapenv11:http://schemas.xmlsoap.org/soap/envelope HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=111315" [SOAP1.1-Envelope]Wsa10:http://www.w3.org/2005/08/addressing HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=113065" [WSADDR]wsawhttp://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/ HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=130726" [WSAWSDL]wsa2004http://www.w3.org/Submission/ws-addressing/ HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90575" [WSAddressing]wsphttp://schemas.xmlsoap.org/ws/2004/09/policy HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=131794" [WSPOLICY]wsenhttp://www.w3.org/Submission/WS-Enumeration HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90580" [WSENUM]wsamhttp://www.w3.org/2007/05/addressing/metadata HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=161006" [METADATA]xs:http://www.w3.org/2001/XMLSchema HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90608" [XMLSCHEMA1]
See full WSDL listing in HYPERLINK \l "z55aaafef4a344549890184e271247170" Appendix A.mschttp://schemas.microsoft.com/ws/2005/12/wsdl/contract HYPERLINK "[MS-WSPOL].pdf" [MS-WSPOL]q2http://schemas.datacontract.org/2004/07/System.Net HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90608" [XMLSCHEMA1]
See full WSDL listing in Appendix A.tnsVariousThe tns ("this namespace") prefix is used as a convention to refer to the current document. See full WSDL listing in Appendix A.2.2.2 Structures
Peer Channel ProtocolЦspecific structures are specified in this section. These structures are reused across several Peer Channel Protocol messages.
2.2.2.1 PeerHashToken Element
The PeerHashToken element is used to transport authentication information when password-based authentication is used. It contains a node's HYPERLINK \l "z7" authenticator token. For details on how the PeerHashToken is computed using a node's certificate and the mesh password, see section HYPERLINK \l "z5cd49ac8b385419ca31e9ed58160ec00" 2.2.3.1.1.
ElementDescription PeerHashTokenMUST contain the token being validated. PeerHashToken/AuthenticatorMUST contain a token in base64-encoded form.2.2.2.2 PeerNodeAddress Structure
The PeerNodeAddress structure contains the URI of the node and the set of IP addresses on which the node is listening.
Element TypeDescription EndpointAddressEndPointReferenceTypeMUST contain an endpoint reference, as described in section 2.2 of HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90575" [WSAddressing].IPAddressesArrayOfIPAddressMUST contain one or more System.Net.IPAddress structures (see "System.Net" in section HYPERLINK \l "z55aaafef4a344549890184e271247170" 6).IPAddressDescribes a complete IPAddress.IPAddress/m_Address"0" MUST be used to indicate an IPv6 address. Otherwise, it MUST contain an address as an unsigned 32-bit number.IPAddress/m_FamilyThe address family of the IPAddress. The value MUST be "Internetwork" if the address is an IPv4 address, or "InternetworkV6" if the address is an IPv6 address.IPAddress/m_HashCodeThis value SHOULD be set to "0". On parsing this field from a received message, this element MUST be ignored. HYPERLINK \l "z20" <1>IPAddress/m_NumbersThis element MUST contain the serialized version of the address bytes grouped as 16-bit numbers in big-endian format. For IPv4 addresses, this element SHOULD contain 0 instances. For IPv6 addresses, this element MUST contain exactly 8 "unsignedShort" subelements.IPAddress/m_Numbers/unsignedShortMUST contain a 16-bit number. IPAddress/m_ScopeIdFor IPv6 address, this element MUST contain the Scope ID of the address. For IPv4 addresses, this element MUST be ignored.2.2.2.3 Referral Structure
A Referral contains the Endpoint Information (section HYPERLINK \l "z6839f00f02564d18bfd10d140d167a5b" 3.1.1) of a node. For information about how Referrals are used, see section HYPERLINK \l "zbb79dff4b07a49d7adcdd7f0427689b2" 3.1. Note that the Referral structure itself does not include any information about the node that is sending or receiving the Referral; it contains information only about the referred node.
Element Description ReferralInformation identifying a single node in the mesh.Referral/NodeIdMUST contain a 64-bit unique identifier.Referral/AddressMUST contain the HYPERLINK \l "z41b16ac0b65c4b22b9b4322d48d69a4e" PeerNodeAddress of the node. 2.2.2.4 RefuseReason Enumeration
The RefuseReason enumeration describes the reason a requested neighbor connection has been denied.
4
5
6
ElementDescriptionDuplicateNeighborA connection request by a node is refused because a connection between the two nodes already exists. A connection is deemed duplicate if the HYPERLINK "[MS-GLOS].pdf" GUID part of the listen URI of the PeerNode matches.DuplicateNodeIdThe responding node already has a connection to a node with the same NodeId as the NodeId given in the corresponding HYPERLINK \l "zfd1de6947a8145c59c37c0cd9b4fab1f" Connect message.NodeBusyThe responding node has already connected to the configured maximum number of nodes.2.2.2.5 DisconnectReason Enumeration
The DisconnectReason enumeration describes the reason a neighbor connection is closed.
Namespace: http://schemas.datacontract.org/2004/07/System.ServiceModel.Channels
2
3
4
5
6
10
ElementDescriptionLeavingMeshThe disconnecting node is leaving the mesh.NotUsefulNeighborThe receiving node that is receiving the message has been determined to be less useful than other neighbor nodes, as given by the sending node. See LinkUtility message in section HYPERLINK \l "zf77d360965884b538ff6a02f1fbdc290" 2.2.3.8.DuplicateNeighborA connection to the receiving node already exists.DuplicateNodeIdA connection to a node with the same NodeId as the receiving node already exists.NodeBusyThe receiving node is already serving up to the maximum number of allowed peers.InternalFailureAn unhandled internal failure caused this connection to be closed.2.2.2.6 FloodMessage Header
The FloodMessage header is used to identify HYPERLINK \l "z028b8961aaff465a97a118553b6ff1d3" flood (application) messages. The header MUST be formatted as follows.
PeerFlooder
2.2.2.7 Endpoint Format
An endpoint URI has the following syntax:
Scheme://Host:Port/Path/Guid
Where:
зЁ S c h e m e i s " n e t . p 2 p " f o r n e i g h b o r c o n n e c t i o n s o r " n e t . t c p " f o r a c o n n e c t i o n w i t h a r e s o l v e r s e r v i c e .
зЁ H o s t i s t h e h o s t n a m e o r I P a d d r e s s a s s o c i a t e d w i t h t h e h o s t o n w h i c h t h e n o d e i s c r e a t e d .
зЁ P o r t i s t h e c o n f i g u r e d p o r t f o r t h e n o d e ' s e n d p o i n t .
зЁ P a t h i s t h e U R I ' s p a t h .
зЁ G u i d i s g e n e r a t e d a n d a s s i g n e d t o t h e n o d e ' s e n d p o i n t . T h e G U I D M U S T b e f o r m a t t e d a s s p e c i f i e d i n H Y P E R L I N K " h t t p : / / g o . m i c r o s o f t . c o m / f w l i n k / ? L i n k I d = 9 0 4 6 0 " [ R F C 4 1 2 2 ] .
2 . 2 . 3 M e s s a g e s
2 . 2 . 3 . 1 R e q u e s t S e c u r i t y T o k e n M e s s a g e
T h e R e q u estSecurityToken (RST) message is sent to initiate the process of authenticating a neighbor connection. The HYPERLINK \l "z603d030129b049dfb3641a4c1026f94a" PeerHashToken element is used as the CustomToken binding of this message. The schema of this message is specified in HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90584" [WSTrust].
Element Legal value RequestSecurityToken/TokenType"http://schemas.microsoft.com/net/2006/05/peer/peerhashtoken" RequestSecurityToken/RequestType"http://schemas.xmlsoap.org/ws/2005/02/trust/Validate" 2.2.3.1.1 Computing the PeerHashToken
The HYPERLINK \l "z603d030129b049dfb3641a4c1026f94a" PeerHashToken contains only an authenticator element. The authenticator element carries a base64-encoded security token as the text node. The security token is an HMACSHA256 value that MUST be computed as follows.
NodeSecurityToken = HMACSHA256(HASHEDKEY)
HASHEDKEY = (SHA256(PWD)+PUBLICKEY)
Where:
зЁ H M A C S H A 2 5 6 i s t h e H a s h - b a s e d M e s s a g e A u t h e n t i c a t i o n M o d e ( H M A C ) f u n c t i o n w i t h h a s h f u n c t i o n S H A 2 5 6 .
зЁ S H A 2 5 6 r e f e r s t o t h e S H A 2 5 6 h a s h a l g o r i t h m .
зЁ P W D i s t h e p a s s w o r d a s a U n i c o d e b y t e s t r e a m . P W D b y t e s a r e u s e d a s t h e s e c r e t f o r t h e H M A C S H A 2 5 6 f u n c t i o n .
зЁ P U B L I C K E Y i s t h e p u b l i c k e y o f t h e n o d e f o r w h i c h t h e P e e r H a s h T o k e n i s b e i n g c o m p u t e d . P u b l i c k e y b i t s o f t h e c e r t i f i c a t e t h a t a r e p r o v i s i o n e d f o r t h e n e i g h b o r c o n n e c t i o n M U S T b e u s e d h e r e .
зЁ H A S H E D K E Y i s c o m p u t e d b y c o n c a t e n a t i n g t h e b y t e s t r e a m s o f ( a) the output of the function SHA256 over the PWD and (b) the public key in the node's certificate.
2.2.3.2 RequestSecurityTokenResponse Message
The RequestSecurityTokenResponse message is sent to complete the process of authenticating a neighbor connection. The message carries the validation results of the requesting node's HYPERLINK \l "z603d030129b049dfb3641a4c1026f94a" PeerHashToken element by the responding node. It also contains the PeerHashToken of the responding node. The schema of this message is specified in HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=90584" [WSTrust] section 5.
Element Legal value RequestSecurityTokenResponse/TokenTypeMUST contain the URI "http://schemas.microsoft.com/net/2006/05/peer/peerhashtoken". RequestSecurityTokenResponse/StatusMUST contain an instance of the "http://schemas.xmlsoap.org/ws/2005/02/trust/Code" element.RequestSecurityTokenResponse/Status/CodeMUST have the URI "http://schemas.xmlsoap.org/ws/2005/02/trust/status/valid" as the text node. In the case when the recipient is not able to validate the token in the incoming message, the connection MUST be aborted.RequestSecurityTokenResponse/RequestedSecurityTokenMUST contain an instance of PeerHashToken containing the hash of the responding party. For instructions on how to compute the hash, see section HYPERLINK \l "z5cd49ac8b385419ca31e9ed58160ec00" 2.2.3.1.1.2.2.3.3 Connect Message
The Connect message is used to request a connection to another node.
Element Legal value ConnectRequests a neighbor connection. MUST only contain information pertaining to the requesting node.ConnectInfo/AddressMUST contain the HYPERLINK \l "z41b16ac0b65c4b22b9b4322d48d69a4e" PeerNodeAddress of the requesting node.ConnectInfo/NodeIdMUST contain the NodeId of the requesting node.2.2.3.4 Welcome Message
The Welcome message is sent by a responding node to accept a neighbor connection.
Element Description WelcomeIndicates to the requesting node that a connection request has been accepted.WelcomeInfo/NodeIdMUST contain the NodeId of the responding node.WelcomeInfo/ReferralsA collection of HYPERLINK \l "z89373637dcaf43519e6a82d17cfd6e87" Referral elements. Each element in the Referrals collection MUST refer to a neighbor to which the responding node is currently connected.2.2.3.5 Refuse Message
The Refuse message is sent by a responding node to reject a neighbor connection.
Element Description RefuseIndicates to the requesting node that the connection request has been denied.RefuseInfo/Reason MUST contain a valid HYPERLINK \l "z1389482f30c4485d9be5b11b5044705b" RefuseReason (section HYPERLINK \l "z1389482f30c4485d9be5b11b5044705b" 2.2.2.4 HYPERLINK \l "z1389482f30c4485d9be5b11b5044705b" ) enumeration value indicating the error causing the denial of the neighbor connection. RefuseInfo/ReferralsA collection of HYPERLINK \l "z89373637dcaf43519e6a82d17cfd6e87" Referral (section HYPERLINK \l "z89373637dcaf43519e6a82d17cfd6e87" 2.2.2.3 HYPERLINK \l "z89373637dcaf43519e6a82d17cfd6e87" ) elements. Each element in the Referrals collection MUST refer to a node to which the responding neighbor is currently connected.2.2.3.6 Disconnect Message
The Disconnect message is sent by a node to close a neighbor connection.
Element Legal value DisconnectIndicates to the node receiving this message that the connection between the sending and receiving nodes is being shut down.DisconnectInfo/ReasonMUST contain a valid HYPERLINK \l "z6ef5a50982c34878bc439020d7db000b" DisconnectReason enumeration value indicating the cause for disconnecting the neighbor connection. DisconnectInfo/ReferralsA collection of HYPERLINK \l "z89373637dcaf43519e6a82d17cfd6e87" Referral elements. Each element in the Referrals collection MUST refer to a node to which the responding neighbor is currently connected.2.2.3.7 Flood (Application) Message
The Flood (application) message contains application-specific information.
All flood messages MUST add the following headers in the namespace "http://schemas.microsoft.com/net/2006/05/peer".
Name Description MessageIDA GUID that MUST uniquely identify the message in the mesh.FloodMessageMUST be a valid HYPERLINK \l "z4f4a024e3a2b467a83a5431a65deb29b" FloodMessage header. PeerViaIdentifies the target channel type of the message. MUST contain the URI of the node's listening endpoint.PeerToIdentifies the specific target for the message. SHOULD be set to the same value as PeerVia.Flood messages MAY have the following optional header to specify the maximum number of hops the message is allowed to travel.
NameDescriptionPeerHopCountAn integer value specifying the number of hops allowed for flood messages.2.2.3.8 LinkUtility Message
The LinkUtility message is used to transmit the LinkUtilityInfo value to another neighbor, indicating the usefulness of their neighbor connection.
Element Description LinkUtilityMUST contain LinkUtilityInfo details.LinkUtilityInfo/TotalMUST contain the total number of messages received by the node since the last sent LinkUtilityInfo message. MUST NOT refer to a cumulative total. LinkUtilityInfo/UsefulMUST indicate the number of messages (out of the LinkUtilityInfo/Total) that were not duplicates.2.2.3.9 Ping Message
The Ping message is used to check the validity of a connection when a node resumes activity from standby. It MUST NOT contain a body.
2.2.4 Elements
This specification does not define any common XML Schema element definitions.
2.2.5 Complex Types
This specification does not define any common XML Schema complex type definitions.
2.2.6 Simple Types
This specification does not define any common XML Schema simple type definitions.
2.2.7 Attributes
This specification does not define any common XML Schema attribute type definitions.
2.2.8 Groups
This specification does not define any common XML Schema group type definitions.
2.2.9 Attribute Groups
This specification does not define any common XML Schema attribute group type definitions.
3 Protocol Details
The Peer Channel Protocol will be defined from the perspective of two distinct roles:
зЁ T h e r e c e i v i n g n o d e : P r o c e s s e s i n c o m i n g m e s s a g e s a n d c o n n e c t i o n r e q u e s t s .
зЁ T h e s e n d i n g n o d e : T r a n s m i t s o u t b o u n d a p p l i c a t i o n m e s s a g e s t o n e i g h b o r s .
A l l n o d e s i m p l e m e n t i n g t h e P e e r C h a n n e l P r o t o c o l M U S T i m p l e m e n t b o t h r o l e s .
3 . 1 P e e r S e r v i c e P o r t R e c e i v i n g Node Details
3.1.1 Abstract Data Model
This section describes a conceptual model of a possible data organization that an implementation maintains to participate in this protocol. The described organization is provided to facilitate the explanation of how the protocol behaves. This document does not mandate that implementations adhere to this model as long as their external behavior is consistent with what is described in this document.
The receiving node MUST store the following information:
зЁ E n d p o i n t I n f o r m a t i o n : N e t w o r k i n f o r m a t i o n t h a t t h e P e e r C h a n n e l P r o t o c o l u s e s w h e n i t d e t e r m i n e s t h e n e e d t o e s t a b l i s h n e i g h b o r c o n n e c t i o n s . T h i s i n f o r m a t i o n S H O U L D b e s t o r e d a s a H Y P E R L I N K \ l " z 4 1 b 1 6 a c 0 b 6 5 c 4 b 2 2 b 9 b 4 3 2 2 d 4 8 d 6 9 a 4 e " P e e r N o d e A d d r e s s . T h e node MUST store its listening endpoint addresses in the discovery service under the mesh name corresponding to the mesh name used in the application. The listening endpoint addresses MUST be published as a PeerNodeAddress. For more information about a possible discovery service, see HYPERLINK "[MC-PRCR].pdf" [MC-PRCR] section 1.3.
зЁ M e s h n a m e : T h e n o d e M U S T s t o r e l o c a l l y t h e s t r i n g v a l u e o f t h e m e s h n a m e f o r u s e i n i n t e r a c t i n g w i t h t h e r e s o l v e r s e r v i c e .
зЁ N o d e I d : T h i s i s a n 8 - b y t e u n s i g n e d n u m b e r t h a t i s r a n d o m l y g e n e r a t e d o n c r e a t i o n o f t h e n o d e i t s e l f .
зЁ M e s s a g e I d c a c h e : E a c h n o d e M U S T m a i n t a i n a c a c h e o f p r e v i o u s l y s e e n M e s s a g e I d s . T h i s i s u s e d t o d e t e c t d u p l i c a t e m e s s a g e s . A n o d e S H O U L D c a c h e M e s s a g e I d s f o r a t l e a s t 5 m i n u t e s .
зЁ R e f e r r a l c a c h e : E a c h n o d e M U S T m a i n t a i n a c a c h e o f p r e v i o u s l y r e c e i v e d H Y P E R L I N K \ l " z 8 9 3 7 3 6 3 7 d c a f 4 3 519e6a82d17cfd6e87" Referrals from messages it receives, including HYPERLINK \l "z09f262f554ed43cb8a22ace6459c9ee6" Welcome, HYPERLINK \l "zd7a34973b3f544b59dc67f10995d4a91" Refuse, and HYPERLINK \l "z74d4c8b13bb349b1bfd9bc8dcfe89cce" Disconnect messages. The Referral cache is used in maintenance to supply additional neighbors when the neighbor count is less than the IdealNeighborCount.
зЁ L i n k U t i l i t y I n d e x : E a c h n o d e M U S T m a i n t a i n a v a l u e i n d i c a t i n g t h e u s e f u l n e s s o f t h e c o n n e c t i o n .
зЁ C o n n e c t i o n S t a t e : E a c h n o d e M U S T m a i n t a i n t h e c u r r e n t s t a t e o f e a c h c o n n e c t i o n . T h e C o n n e c t i o n S t a t e M U S T b e o n e o f t h e f o l l o w i n g v a l u e s : { C r e a t e d , A u t h e n t i c a t e d , o r C o n n e c t e d } .
зЁ C h a n n e l t y p e i n f o r m a t i o n : T h e f o l l o w i n g i n f o r m a t i o n M U S T b e s t o r e d f o r e a c h c h a n n e l t y p e s u p p o r t e d b y t h e r e c e i v i n g n o d e :
зЁ C h a n n e l T y p e U R I : T h e U R I t o w h i c h t h e c h a n n e l t y p e c o r r e s p o n d s . T h i s v a l u e M U S T m a t c h t h e P e e r V i a h e a d e r i n t h e i n c o m i n g m e s s a g e .
зЁ M e s s a g e V a l i d a t o r c a l l b a c k : T h e c a l l b a c k t h a t i s i n v o k e d t o v e r i f y t h e i n c o m i n g m e s s a g e s i g n a t u r e i f t h e p a r t i c u l a r c h a n n e l t y p e s u p p o r t s m e s s a g e a u t h e n t i c a t i o n .
зЁ M e s s a g e D i s p a t c h e r c a l l b a c k : T h e c a l l b a c k t h a t a c c e p t s i n c o m i n g m e s s a g e s f o r p r o c e s s i n g . L o c a l p r o c e s s i n g o f t h i s m e s s a g e i s h a n d e d o f f t o t h i s c a l l b a c k b y t h e n o d e .
зЁ ( O p t i o n a l ) X . 5 0 9 C e r t i f i c a t e f o r T r a n s p o r t S e c u r i t y : A n X . 5 0 9 c e r t i f i c a t e f o r t h e k e y t h a t i s u s e d t o e s t a b l i s h T L S o v e r T C P c o n n e c t i o n s . R e q u i r e d o n l y i f c e r t i f i c a t e s a r e u s e d t o s e c u r e m e s h c o n n e c t i o n s .
зЁ ( O p t i o n a l ) X . 5 0 9 C e r t i f i c a t e f o r M e s s a g e S i g n i n g : A n X . 5 0 9 c e r t i f i c a t e f o r t h e k e y t h a t i s u s e d t o s i g n m e s s a g e s . N e e d e d o n l y i f m e s s a g e a u t h e n t i c a t i o n i s e n a b l e d o n m e s h m e s s a g e s .
зЁ ( O p t i o n a l ) p a s s w o r d : A p a s s w o r d t h a t i s u s e d i n s e c u r i t y h a n d s h a k e s . S e e t h e H Y P E R L I N K \ l " z a 4 c c a a 7 c c f b e 4 d 0 b a 9 a e e 4 9 8 6 f d 5 e c 7 b " R e q u e s t S e c u r i t y T o k e n m e s s a g e . N e e d e d o n l y i f p a s s w o r d s a r e u s e d t o s e c u r e t h e m e s h .
зЁ D i s c o v e r y s e r v i c e i n f o r m a t i o n : I n f o r m a t i o n u s e d t o c o n n e c t t o t h e d i s c o v e r y s e r v i c e . T h i s M U S T i n c l u d e t h e s e r v i c e l o c a t i o n , p o r t n u m b e r , t r a n s p o r t , a n d a n y a p p l i c a b l e s e c u r i t y s e t t i n g s .
зЁ I d e a l N e i g h b o r C o u n t : T h e o p t i m a l n u m b e r o f n e i g h b o r c o n n e c t i o n s f o r a n o d e t o m a i n t a i n . T h i s v a l u e S H O U L D b e s e t t o 3 .
зЁ M a x N e i g h b o r C o u n t : T h e m a x i m u m n u m b e r o f n e i g h b o r c o n n e c t i o n s f o r e a c h n o d e . T h i s v a l u e S H O U L D b e s e t t o 7 .
зЁ M i n N e i g h b o r C o u n t : T h e m i n i m u m n u m b e r o f n e i g h b o r c o n n e c t i o n s f o r e a c h n o d e . T h i s v a l u e S H O U L D b e s e t t o 2 .
зЁ L i n k U t i l i t y t i m e r : E x i s t s f o r e a c h n e i g h b o r c o n n e c t i o n w h e r e t h e C o n n e c t i o n S t a t e d a t a e l e m e n t i s s e t t o t h e C o n n e c t e d v a l u e . I t i s u s e d t o s e n d a L i n k U t i l i t y m e s s a g e a t r e g u l a r i n t e r v a l s . T h e p e r i o d o f t h i s t i m e r S H O U L D b e 1 m i n u t e .
зЁ C o n n e c t H a n d s h a k e t i m e r : E x i s t s f o r e a c h n e i g h b o r c o n n e c t i o n w h e r e t h e C o n n e c t i o n S t a t e d a t a e l e m e n t i s s e t t o t h e A u t h e n t i c a t e d v a l u e . I t i s u s e d t o c l o s e t h e c o n n e c t i o n i f t h e r e m o t e n e i g h b o r d o e s n o t s e n d a t i m e l y r e s p o n s e . T h e p e r i o d o f t h i s t i m e r S H O U L D b e 1 m i n u t e .
зЁ S e c u r i t y H a n d s h a k e t i m e r : U s e d t o c l o s e t h e c o n n e c t i o n i f t h e r e m o t e n e i g h b o r d o e s n o t s e n d a t i m e l y r e s p o n s e d u r i n g t h e a u t h e n t i c a t i o n p r o t o c o l . T h e p e r i o d o f t h i s t i m e r S H O U L D b e 1 m i n u t e .
зЁ R e f e r r a l S h a r i n g m o d e : a B o o l e a n v a l u e i n d i c a t i n g w h e t h e r t h e P e e r C h a n n e l p r o t o c o l c l i e n t w i l l u s e r e f e r r a l s t o d i s c o v e r n e w n e i g h b o r s .
зЁ M e s s a g e I D C a c h e t i m e r : A p e r i o d i c t i m e r u s e d t o i n i t i a t e M e s s a g e I d c a c h e m a i n t e n a n c e . T h e p e r i o d o f t h i s t i m e r S H O U L D b e 1 m i n u t e .
N o t e а а T h i s r e m o v e s p r e v i o u s l y s e e n M e s s a g e I d s t o m a i n t a i n a r e a s o n a b l e c a c h e s i z e .
зЁ M a i n t e n a n c e t i m er: Used to regularly run the maintenance cycle, which examines the neighbor connection set and tunes it for optimal throughput. The period of this timer SHOULD be set as specified in section HYPERLINK \l "zb851e893adb64d0baa1ae1225f80a39b" 3.1.2.
3.1.2 Timers
Each receiving node MUST have the following timers:
зЁ H Y P E R L I N K \ l " z 7 a a 8 f 3 2 d 7 a 8 c 4 2 5 0 b 7 d 0 b 0 c 7 b 8 7 2 d b 5 b " M a i n t e n a n c e t i m e r :
зЁ T h i s t i m e r S H O U L D b e t r i g g e r e d i m m e d i a t e l y w h e n a n o d e i s f i r s t o p e n e d t o p e r f o r m t h e i n i t i a l m a i n t e n a n c e . I f t h e i n i t i a l m a i n t e n a n c e s u c c e e d s i n e s t a b l i s h i n g a t l e a s t o n e n e i g h b o r connection, this timer SHOULD be set to 5 minutes. If the initial maintenance fails to establish any neighbor connections, the second maintenance SHOULD be scheduled after 10 seconds.
NoteааAfter the second maintenance, this timer SHOULD be set to 5 minutes, whether a neighbor connection is established or not.
зЁ T h i s t i m e r i s u s e d t o r e g u l a r l y r u n t h e m a i n t e n a n c e c y c l e , w h i c h e x a m i n e s t h e n e i g h b o r c o n n e c t i o n s e t a n d t u n e s i t f o r o p t i m a l t h r o u g h p u t . T h e d u r a t i o n S H O U L D b e 5 m i n u t e s .
зЁ T h e t i m e r S H O U L D H Y P E R L I N K \ l " z 2 2 " <