╨╧рб▒с > ■
■
ье┴ aр °┐ P─ bjbjЪ═Ъ═ ч№ °зI\°зI\уя ╧ ╖ 4╕ 4╕ м┼ м┼ м┼ м┼ м┼ D Ё┼ Ё┼ Ё┼ А p╞ Ф ╩ | Ё┼ \╖ ╥ А╤ Ї0 t @ ┤ ┤ ┤ № h2 d6 L ░? и 3│ 5│ 5│ 5│ 5│ 5│ 5│ $ .║ ╢ ф╝ * Y│ ╜ м┼ XD № № XD XD Y│ м┼ м┼ ┤ ┤ H ╖ `T `T `T XD м┼ ┤ м┼ ┤ 3│ `T XD 3│ `T `T . БХ Ф ЙЭ ┤ `шаЧ╩╠╤ ZL . Ч │ ,╖ 0 \╖ 5Щ T ╜ ИL ╪ ╜ А ХЭ гЭ ╜ м┼ ╖Э h XD XD `T XD XD XD XD XD Y│ Y│ `T XD XD XD \╖ XD XD XD XD ╜ XD XD XD XD XD XD XD XD XD 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.
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 "_Toc370462658" 1 Introduction PAGEREF _Toc370462658 \h 7
HYPERLINK \l "_Toc370462659" 1.1 Glossary PAGEREF _Toc370462659 \h 7
HYPERLINK \l "_Toc370462660" 1.2 References PAGEREF _Toc370462660 \h 8
HYPERLINK \l "_Toc370462661" 1.2.1 Normative References PAGEREF _Toc370462661 \h 8
HYPERLINK \l "_Toc370462662" 1.2.2 Informative References PAGEREF _Toc370462662 \h 10
HYPERLINK \l "_Toc370462663" 1.3 Overview PAGEREF _Toc370462663 \h 10
HYPERLINK \l "_Toc370462664" 1.3.1 Mesh and Mesh Names PAGEREF _Toc370462664 \h 11
HYPERLINK \l "_Toc370462665" 1.3.2 Channel Types PAGEREF _Toc370462665 \h 11
HYPERLINK \l "_Toc370462666" 1.3.3 Discovery PAGEREF _Toc370462666 \h 11
HYPERLINK \l "_Toc370462667" 1.3.4 Connecting to Other Nodes PAGEREF _Toc370462667 \h 11
HYPERLINK \l "_Toc370462668" 1.3.5 Exchanging Application Messages PAGEREF _Toc370462668 \h 12
HYPERLINK \l "_Toc370462669" 1.3.6 Security PAGEREF _Toc370462669 \h 12
HYPERLINK \l "_Toc370462670" 1.3.6.1 Transport-Layer Security PAGEREF _Toc370462670 \h 12
HYPERLINK \l "_Toc370462671" 1.3.6.1.1 Password PAGEREF _Toc370462671 \h 12
HYPERLINK \l "_Toc370462672" 1.3.6.1.2 Trusted Certificate PAGEREF _Toc370462672 \h 12
HYPERLINK \l "_Toc370462673" 1.3.6.2 Message-Layer Security PAGEREF _Toc370462673 \h 13
HYPERLINK \l "_Toc370462674" 1.4 Relationship to Other Protocols PAGEREF _Toc370462674 \h 13
HYPERLINK \l "_Toc370462675" 1.5 Prerequisites/Preconditions PAGEREF _Toc370462675 \h 13
HYPERLINK \l "_Toc370462676" 1.6 Applicability Statement PAGEREF _Toc370462676 \h 13
HYPERLINK \l "_Toc370462677" 1.7 Versioning and Capability Negotiation PAGEREF _Toc370462677 \h 14
HYPERLINK \l "_Toc370462678" 1.8 Vendor-Extensible Fields PAGEREF _Toc370462678 \h 14
HYPERLINK \l "_Toc370462679" 1.9 Standards Assignments PAGEREF _Toc370462679 \h 14
HYPERLINK \l "_Toc370462680" 2 Messages PAGEREF _Toc370462680 \h 15
HYPERLINK \l "_Toc370462681" 2.1 Transport PAGEREF _Toc370462681 \h 15
HYPERLINK \l "_Toc370462682" 2.2 Common Message Syntax PAGEREF _Toc370462682 \h 15
HYPERLINK \l "_Toc370462683" 2.2.1 Namespaces PAGEREF _Toc370462683 \h 15
HYPERLINK \l "_Toc370462684" 2.2.2 Structures PAGEREF _Toc370462684 \h 16
HYPERLINK \l "_Toc370462685" 2.2.2.1 PeerHashToken Element PAGEREF _Toc370462685 \h 16
HYPERLINK \l "_Toc370462686" 2.2.2.2 PeerNodeAddress Structure PAGEREF _Toc370462686 \h 16
HYPERLINK \l "_Toc370462687" 2.2.2.3 Referral Structure PAGEREF _Toc370462687 \h 18
HYPERLINK \l "_Toc370462688" 2.2.2.4 RefuseReason Enumeration PAGEREF _Toc370462688 \h 18
HYPERLINK \l "_Toc370462689" 2.2.2.5 DisconnectReason Enumeration PAGEREF _Toc370462689 \h 19
HYPERLINK \l "_Toc370462690" 2.2.2.6 FloodMessage Header PAGEREF _Toc370462690 \h 21
HYPERLINK \l "_Toc370462691" 2.2.2.7 Endpoint Format PAGEREF _Toc370462691 \h 21
HYPERLINK \l "_Toc370462692" 2.2.3 Messages PAGEREF _Toc370462692 \h 21
HYPERLINK \l "_Toc370462693" 2.2.3.1 RequestSecurityToken Message PAGEREF _Toc370462693 \h 21
HYPERLINK \l "_Toc370462694" 2.2.3.1.1 Computing the PeerHashToken PAGEREF _Toc370462694 \h 22
HYPERLINK \l "_Toc370462695" 2.2.3.2 RequestSecurityTokenResponse Message PAGEREF _Toc370462695 \h 22
HYPERLINK \l "_Toc370462696" 2.2.3.3 Connect Message PAGEREF _Toc370462696 \h 23
HYPERLINK \l "_Toc370462697" 2.2.3.4 Welcome Message PAGEREF _Toc370462697 \h 23
HYPERLINK \l "_Toc370462698" 2.2.3.5 Refuse Message PAGEREF _Toc370462698 \h 23
HYPERLINK \l "_Toc370462699" 2.2.3.6 Disconnect Message PAGEREF _Toc370462699 \h 24
HYPERLINK \l "_Toc370462700" 2.2.3.7 Flood (Application) Message PAGEREF _Toc370462700 \h 24
HYPERLINK \l "_Toc370462701" 2.2.3.8 LinkUtility Message PAGEREF _Toc370462701 \h 25
HYPERLINK \l "_Toc370462702" 2.2.3.9 Ping Message PAGEREF _Toc370462702 \h 25
HYPERLINK \l "_Toc370462703" 2.2.4 Elements PAGEREF _Toc370462703 \h 26
HYPERLINK \l "_Toc370462704" 2.2.5 Complex Types PAGEREF _Toc370462704 \h 26
HYPERLINK \l "_Toc370462705" 2.2.6 Simple Types PAGEREF _Toc370462705 \h 26
HYPERLINK \l "_Toc370462706" 2.2.7 Attributes PAGEREF _Toc370462706 \h 26
HYPERLINK \l "_Toc370462707" 2.2.8 Groups PAGEREF _Toc370462707 \h 26
HYPERLINK \l "_Toc370462708" 2.2.9 Attribute Groups PAGEREF _Toc370462708 \h 26
HYPERLINK \l "_Toc370462709" 3 Protocol Details PAGEREF _Toc370462709 \h 27
HYPERLINK \l "_Toc370462710" 3.1 PeerService Port Receiving Node Details PAGEREF _Toc370462710 \h 27
HYPERLINK \l "_Toc370462711" 3.1.1 Abstract Data Model PAGEREF _Toc370462711 \h 27
HYPERLINK \l "_Toc370462712" 3.1.2 Timers PAGEREF _Toc370462712 \h 28
HYPERLINK \l "_Toc370462713" 3.1.3 Initialization PAGEREF _Toc370462713 \h 29
HYPERLINK \l "_Toc370462714" 3.1.3.1 Setting Configuration PAGEREF _Toc370462714 \h 29
HYPERLINK \l "_Toc370462715" 3.1.4 Higher-Layer Triggered Events PAGEREF _Toc370462715 \h 30
HYPERLINK \l "_Toc370462716" 3.1.4.1 Opening a Node PAGEREF _Toc370462716 \h 30
HYPERLINK \l "_Toc370462717" 3.1.4.2 Receiving a Message PAGEREF _Toc370462717 \h 31
HYPERLINK \l "_Toc370462718" 3.1.4.3 Closing a Node PAGEREF _Toc370462718 \h 31
HYPERLINK \l "_Toc370462719" 3.1.5 Message Processing and Sequencing Rules PAGEREF _Toc370462719 \h 31
HYPERLINK \l "_Toc370462720" 3.1.5.1 ProcessRequestSecurityToken PAGEREF _Toc370462720 \h 32
HYPERLINK \l "_Toc370462721" 3.1.5.1.1 Messages PAGEREF _Toc370462721 \h 32
HYPERLINK \l "_Toc370462722" 3.1.5.1.1.1 PeerService_ProcessRequestSecurityToken_InputMessage PAGEREF _Toc370462722 \h 32
HYPERLINK \l "_Toc370462723" 3.1.5.1.1.2 PeerService_ProcessRequestSecurityToken_OutputMessage PAGEREF _Toc370462723 \h 33
HYPERLINK \l "_Toc370462724" 3.1.5.2 Connect PAGEREF _Toc370462724 \h 33
HYPERLINK \l "_Toc370462725" 3.1.5.2.1 Messages PAGEREF _Toc370462725 \h 33
HYPERLINK \l "_Toc370462726" 3.1.5.2.1.1 ConnectInfo PAGEREF _Toc370462726 \h 34
HYPERLINK \l "_Toc370462727" 3.1.5.3 Welcome PAGEREF _Toc370462727 \h 35
HYPERLINK \l "_Toc370462728" 3.1.5.3.1 Messages PAGEREF _Toc370462728 \h 36
HYPERLINK \l "_Toc370462729" 3.1.5.3.1.1 WelcomeInfo PAGEREF _Toc370462729 \h 36
HYPERLINK \l "_Toc370462730" 3.1.5.4 Refuse PAGEREF _Toc370462730 \h 36
HYPERLINK \l "_Toc370462731" 3.1.5.4.1 Messages PAGEREF _Toc370462731 \h 37
HYPERLINK \l "_Toc370462732" 3.1.5.4.1.1 RefuseInfo PAGEREF _Toc370462732 \h 37
HYPERLINK \l "_Toc370462733" 3.1.5.5 Disconnect PAGEREF _Toc370462733 \h 37
HYPERLINK \l "_Toc370462734" 3.1.5.5.1 Messages PAGEREF _Toc370462734 \h 37
HYPERLINK \l "_Toc370462735" 3.1.5.5.1.1 DisconnectInfo PAGEREF _Toc370462735 \h 37
HYPERLINK \l "_Toc370462736" 3.1.5.6 LinkUtility PAGEREF _Toc370462736 \h 38
HYPERLINK \l "_Toc370462737" 3.1.5.6.1 Messages PAGEREF _Toc370462737 \h 38
HYPERLINK \l "_Toc370462738" 3.1.5.6.1.1 UtilityInfo PAGEREF _Toc370462738 \h 38
HYPERLINK \l "_Toc370462739" 3.1.5.6.1.1.1 Computing the LinkUtilityIndex PAGEREF _Toc370462739 \h 38
HYPERLINK \l "_Toc370462740" 3.1.5.7 Ping PAGEREF _Toc370462740 \h 38
HYPERLINK \l "_Toc370462741" 3.1.5.7.1 Messages PAGEREF _Toc370462741 \h 39
HYPERLINK \l "_Toc370462742" 3.1.5.7.1.1 PeerService_Ping_InputMessage PAGEREF _Toc370462742 \h 39
HYPERLINK \l "_Toc370462743" 3.1.5.8 Fault PAGEREF _Toc370462743 \h 39
HYPERLINK \l "_Toc370462744" 3.1.5.8.1 Messages PAGEREF _Toc370462744 \h 39
HYPERLINK \l "_Toc370462745" 3.1.5.8.1.1 PeerService_Fault_InputMessage PAGEREF _Toc370462745 \h 39
HYPERLINK \l "_Toc370462746" 3.1.5.9 FloodMessage PAGEREF _Toc370462746 \h 39
HYPERLINK \l "_Toc370462747" 3.1.5.9.1 Messages PAGEREF _Toc370462747 \h 40
HYPERLINK \l "_Toc370462748" 3.1.5.9.1.1 PeerService_FloodMessage_InputMessage PAGEREF _Toc370462748 \h 40
HYPERLINK \l "_Toc370462749" 3.1.6 Timer Events PAGEREF _Toc370462749 \h 42
HYPERLINK \l "_Toc370462750" 3.1.6.1 Security Handshake Timer PAGEREF _Toc370462750 \h 42
HYPERLINK \l "_Toc370462751" 3.1.6.2 Connect Handshake Timer PAGEREF _Toc370462751 \h 42
HYPERLINK \l "_Toc370462752" 3.1.6.3 LinkUtility Timer PAGEREF _Toc370462752 \h 42
HYPERLINK \l "_Toc370462753" 3.1.6.4 Maintenance Timer PAGEREF _Toc370462753 \h 43
HYPERLINK \l "_Toc370462754" 3.1.6.4.1 Maintenance Algorithm PAGEREF _Toc370462754 \h 43
HYPERLINK \l "_Toc370462755" 3.1.6.4.2 Pruning Algorithm PAGEREF _Toc370462755 \h 44
HYPERLINK \l "_Toc370462756" 3.1.6.4.3 Establish a Neighbor Connection PAGEREF _Toc370462756 \h 45
HYPERLINK \l "_Toc370462757" 3.1.6.4.4 Create a TCP/IP Connection PAGEREF _Toc370462757 \h 46
HYPERLINK \l "_Toc370462758" 3.1.6.4.5 No Security PAGEREF _Toc370462758 \h 46
HYPERLINK \l "_Toc370462759" 3.1.6.4.6 Password-Based Security PAGEREF _Toc370462759 \h 46
HYPERLINK \l "_Toc370462760" 3.1.6.4.7 Certificate-Based Security PAGEREF _Toc370462760 \h 47
HYPERLINK \l "_Toc370462761" 3.1.6.4.8 Password-Based Security Handshake PAGEREF _Toc370462761 \h 47
HYPERLINK \l "_Toc370462762" 3.1.6.4.9 Connect Handshake PAGEREF _Toc370462762 \h 47
HYPERLINK \l "_Toc370462763" 3.1.7 Other Local Events PAGEREF _Toc370462763 \h 49
HYPERLINK \l "_Toc370462764" 3.2 PeerService Port Sending Node Details PAGEREF _Toc370462764 \h 49
HYPERLINK \l "_Toc370462765" 3.2.1 Abstract Data Model PAGEREF _Toc370462765 \h 49
HYPERLINK \l "_Toc370462766" 3.2.2 Timers PAGEREF _Toc370462766 \h 49
HYPERLINK \l "_Toc370462767" 3.2.3 Initialization PAGEREF _Toc370462767 \h 49
HYPERLINK \l "_Toc370462768" 3.2.4 Higher-Layer Triggered Events PAGEREF _Toc370462768 \h 50
HYPERLINK \l "_Toc370462769" 3.2.4.1 Sending Messages PAGEREF _Toc370462769 \h 50
HYPERLINK \l "_Toc370462770" 3.2.4.1.1 Sending Signed Messages PAGEREF _Toc370462770 \h 50
HYPERLINK \l "_Toc370462771" 3.2.5 Message Processing Events and Sequencing Rules PAGEREF _Toc370462771 \h 50
HYPERLINK \l "_Toc370462772" 3.2.6 Timer Events PAGEREF _Toc370462772 \h 51
HYPERLINK \l "_Toc370462773" 3.2.7 Other Local Events PAGEREF _Toc370462773 \h 51
HYPERLINK \l "_Toc370462774" 4 Protocol Examples PAGEREF _Toc370462774 \h 52
HYPERLINK \l "_Toc370462775" 4.1 Establishing a Neighbor Connection in Password Mode PAGEREF _Toc370462775 \h 52
HYPERLINK \l "_Toc370462776" 4.1.1 Connection Initiator Sends the RequestSecurityToken Message PAGEREF _Toc370462776 \h 52
HYPERLINK \l "_Toc370462777" 4.1.2 Responding Node Sends Back a RequestSecurityTokenResponse PAGEREF _Toc370462777 \h 53
HYPERLINK \l "_Toc370462778" 4.1.3 Requesting Node Sends a Connect Message PAGEREF _Toc370462778 \h 54
HYPERLINK \l "_Toc370462779" 4.1.4 Responding Node Sends a Welcome Message PAGEREF _Toc370462779 \h 55
HYPERLINK \l "_Toc370462780" 4.2 Nonpassword Security Modes PAGEREF _Toc370462780 \h 56
HYPERLINK \l "_Toc370462781" 4.3 Flooding a Message PAGEREF _Toc370462781 \h 56
HYPERLINK \l "_Toc370462782" 5 Security PAGEREF _Toc370462782 \h 57
HYPERLINK \l "_Toc370462783" 5.1 Security Considerations for Implementers PAGEREF _Toc370462783 \h 57
HYPERLINK \l "_Toc370462784" 5.2 Index of Security Parameters PAGEREF _Toc370462784 \h 57
HYPERLINK \l "_Toc370462785" 6 Appendix A: Full WSDL Definitions PAGEREF _Toc370462785 \h 58
HYPERLINK \l "_Toc370462786" 7 Appendix B: Product Behavior PAGEREF _Toc370462786 \h 75
HYPERLINK \l "_Toc370462787" 8 Change Tracking PAGEREF _Toc370462787 \h 77
HYPERLINK \l "_Toc370462788" 9 Index PAGEREF _Toc370462788 \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. Please check the archive site, HYPERLINK "http://msdn2.microsoft.com/en-us/library/E4BD6494-06AD-4aed-9823-445E921C9624" http://msdn2.microsoft.com/en-us/library/E4BD6494-06AD-4aed-9823-445E921C9624, as an additional source.
[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/
If you have any trouble finding [WSAddressing], please check HYPERLINK "http://msdn2.microsoft.com/en-us/library/E4BD6494-06AD-4aed-9823-445E921C9624" here.
[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/
If you have any trouble finding [WSENUM], please check HYPERLINK "http://msdn2.microsoft.com/en-us/library/E4BD6494-06AD-4aed-9823-445E921C9624" here.
[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 resolve node HYPERLINK \l "z9" endpoints in a discovery service.
The fo 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 a l g r o u p i n g o f o p e r a t i o n s ( m e s s a g e s ) t h a t c a n b e s e n t o v e r t h e m e s h . 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 " <