The client operation in RELOAD is currently underspecified and cannot be 
implemented based on the spec.  Here are the procedures that need to be 
specified to support client behavior with attachment at the identity owner.  
For attachment at any other arbitrary point, a lot more thought needs to be put 
in to ensure support for mobility and stability of operation.  My suggestion is 
that it is better left outside the scope of this draft and defined separately.  
In this case, RELOAD will only support attachment at the identity owner, which 
seems very reasonable.  

Message changes necessary to support clients: 
---------------------------------------------
We need to introduce a "Node Type" in the JOIN Request message that indicates 
that the joining node wishes to do so as a client. Also, Update messages need 
to have a "case clients" and the "case full" needs to include client 
information.  

I suggest adding a section on clients - suggested text below: 

Clients: 
--------
Clients are nodes that may provide and receive services in an overlay without 
participating in overlay routing or incurring the same amount of maintenance 
overhead as the overlay peers.  Clients are modeled as close to peers as 
possible in terms of overlay functionality.  In order to allow these nodes to 
participate in the overlay without inherently being a routing member of the 
overlay, some changes are required to the join process and the manner in which 
neighbor relationships are handled for such nodes.  However, all other 
procedures (e.g., data management using STORE, FETCH, etc.) are handled in 
exactly the same way as for any other peer in the overlay.  

We denote the point of attachment of the Non-Routing Peer on to the overlay as 
Overlay Attachment Point (OAP).  The peer responsible for the node ID of the 
client provides the OAP functionality.  This allows the integration of clients 
into the architecture with the least deviation from the peer.  Hence, any node 
that wishes to be a client finds the node that owns its identity space and 
attaches to it.  By definition, any node serving as a peer in the overlay MUST 
provide the OAP functionality as well.  The mode of using a different node as 
the OAP may be allowed as an extension to this protocol - this can be done for 
availability or load balancing reasons, for instance.  
 
Clients obtain overlay node identities just like peers do.  Hence, the 
enrollment server may be completely unaware of the distinction between a peer 
and a client.  By virtue of this, the enrollment procedure is identical for 
peers and clients.  The join procedure is somewhat simplified for a client and 
the section below describes that process.  All data management operations 
to/from a client are indistinguishable from those of a peer.   

The main difference between a client and a peer is that a client only has a 
single neighbor in the overlay, i.e., the OAP.  The client routes all messages 
through the OAP - i.e., it has a default route with the OAP as next hop that is 
used for all messages.  The OAP has the client as a neighbor and has it in its 
routing table.  None of the nodes in the overlay except the OAP are aware of 
the presence of the client. The messages to/from a client are natively routed 
on the overlay.  All messages that are sent to the client arrive at the OAP by 
regular overlay routing (since it owns the identity space that includes that of 
the client).  The OAP then looks up its routing table to route the message to 
the client.  

The OAP may make use of the presence of a client to offload some of its storage 
responsibilities or to replicate data stored at it.  This may be mutually 
beneficial in some cases - e.g., the client may be limited in terms of 
bandwidth and battery, while the OAP may be limited in memory. However, this is 
out of scope for this document itself and any such storage sharing that occurs 
between a client and OAP is not visible to the rest of the overlay.  Hence, any 
such thing must be managed out of band between the OAP and the client.  

Client Bootstrap Process: 
-------------------------
A client obtains a list of bootstrap peers from the enrollment server as any 
other node in the overlay.  The client triggers the join process the same way 
as a peer does.  But, the process is a bit more abridged than for a normal 
peer.  It is described below: 

1.  Client connects to its chosen bootstrap node. The client MUST form a TLS 
session with the bootstrap node, using the certificate or PSK required for 
overlay membership.  
2.  The client sends a Join request message to its own Node-ID c, through the 
BP.  The Join Request message indicates that the joining entity is a client 
(with Node Type being set to Client).  This is routed to the admitting peer 
(AP).  The AP sends a response to the Join, after noting that it must serve as 
the OAP.  
3.  The client also sends an Attach request message to c through the BP.  This 
may be sent in parallel with the Join message.  The AP sends an Attach 
response, resulting in connection establishment between the client and AP.  At 
this point, the AP has the client included in its routing and connection tables 
and the client has established a default route through the AP.  The join 
process is now complete.   

The OAP MUST NOT send any Update messages to other peers in the overlay as a 
result of a client joining the overlay.  The OAP simply updates its routing and 
connection tables with the client information.  The client does the same.  The 
OAP may, however, follow up the join process with a series of STORE request 
messages to transfer some data it stores to the client. 

Impact of Churn on Clients: 
---------------------------- 
As the ownership of the overlay identity space changes, the clients may be 
affected.  For instance, if the OAP to which a client is attached leaves the 
overlay or fails, the client needs to find the appropriate OAP to attach to.  
Also, when the identity ownership changes due to a new peer attaching between 
the OAP and the client in the identity space, the client needs to use the new 
peer as its OAP.   Essentially, the need to change OAP may arise from one of 
the following three conditions: 

* A new peer joined the overlay with an identity that lies between the 
identities of a client and its OAP

* The OAP of a client performs a graceful leave from the overlay

* The OAP of a client abruptly leaves the overlay or fails

These three cases are explained below. 

Handling New Peers: 
-------------------

Consider the case where a client (C1) is attached to an OAP (OAP1).  A new 
peer, P, attaches to the overlay, with an identity that falls between C1's and 
OAP1's identity.  P is now responsible for the identity that belongs to C1 and 
hence needs to serve as the OAP to C1 (say, OAP2).  When P completes its Join 
process, OAP1 detects that it no longer owns the identity corresponding to C1.  
OAP1 now sends an Update message to C1, indicating that it has a new neighbor.  
The Update message provides information about P to C1.  Upon receiving the 
Update message, C1 sends a Join Request via OAP1 to P.  The difference between 
this JOIN process and the regular one is that C1 can perform this Join via OAP1 
instead of finding a bootstrap peer to perform the join through.  Since P is 
part of the overlay and is OAP1's neighbor, OAP1 can reach P directly, thereby 
greatly reducing the number of hops the Join messages need to traverse.  Once 
the new Join process completes, P takes over as C1'
 s OAP (OAP2).  C1 may send a Leave Request to OAP1 subsequent to its 
attachment to OAP2 - this will trigger cleaning up of state corresponding to C1 
at OAP1.  

If OAP1 stored any of its data at C1, C1 must transfer that back to OAP1 before 
joining again with OAP2.  The mechanism to handle this is out of scope of this 
specification.  

When a change in the identity space ownership causes the OAP of a particular 
node to change, the present OAP MUST send an Update message to the client, 
indicating that it has a new neighbor.  Upon receiving the update message, the 
client MUST send a Join message to the new OAP - this JOIN message can be 
routed through its current OAP.  The client SHOULD send a Leave request to its 
old OAP, once it has successfully attached to the new OAP.    

Graceful Leave of an OAP:
-------------------------
When an OAP gracefully leaves an overlay, it typically sends a LEAVE request 
message to all its neighbors.  In addition, the OAP SHOULD send a Leave Request 
message to the client.  Further, the OAP SHOULD also send an Update message to 
the client, containing information about its successor, which will be the new 
OAP for the client.  When the client receives such an Update Request, it MUST 
send a Join Request message to its new OAP.  If the old OAP is able to assist 
in the Join process, the Join messages can traverse through it to set up the 
connection between the client and its new OAP.  However, if the old OAP leaves 
the overlay prior to that process, the client needs to find a bootstrap peer 
and route its Join Request message through that peer to its new OAP, in which 
case, the procedure becomes similar to the failure of an OAP case described 
below.   

Failure of an OAP: 
------------------
An abrupt leave or a failure of an OAP implies that there is no active 
messaging from the OAP to its clients indicating that an OAP change is 
required.  In this case, the client will detect the absence of its OAP due to a 
timeout indicating that the OAP is unreachable.  The client then needs to 
perform the Join process via a bootstrap peer in the overlay to find its new 
OAP.  
 
Impact on attach messages: 
---------------------------
There is an issue that nodes may send attach messages to the client's node id 
when looking for a finger.  The client needs to reject such Attach requests 
coming to it.  However, the client will be unable to distinguish Attach 
messages that are being sent to it to really set up an end-to-end connection 
for other purposes.  We may want to consider introducing a "purpose" in the 
Attach request messages that indicate the reason for the Attach.  This will 
make it possible for the client to reject a request that is sent to establish a 
finger.  The node sending the Attach request can then slightly alter the 
resource id to issue another request.  

Thanks,
Vidya
_______________________________________________
P2PSIP mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/p2psip

Reply via email to