wiki:Internal/SystemPrototyping/Workingdocuments/SpecificationsV10
close Warning: Can't synchronize with repository "(default)" ("(default)" is not readable or not a Git repository.). Look in the Trac log for more information.

12345678901234567890123456789012345678901234567890123456789012345678901234567890

Specifications

The following sections detail the specifications for a prototype MobilityFirst 
network, and includes details of overall architecture, network elements, software
services, protocols, end-host stack and network API. 

Network Architecture

Router

MF Packet =

An MF packet is more appropriately a PDU or APDU that tries to balance requirements from both application and network sides, consequently providing high flexibility in destination addressing, delivery mechanisms, and in-route handling.

The following is the packet format:

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version   | ServiceID (SID) | NextHeader |  UpperProtocol   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   HopCount   |  #SourceNAs  |  #destNAs  |   PayloadOffset    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Source GUID                                                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |   Source NA(s)                                                |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Destination GUID                                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |   Destination NA(s)                                           |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |  Service Header Extensions                                    |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Storage Aware Routing

Hop-by-Hop Block Transfer

Network cache

Name Assignment Service

Name Resolution Service

Interaction between Host/Client and Name Resolution Service

                                              LNRS servers          GNRS servers
                                                   ^                     ^
                                                   |                     |
                                                   |                     |
                                                   v                     v  
  +-----------+  req  +-------------+       +-------------+       +-------------+
  |           | ----> | Local Agent | ----> |             | ----> |             |
  |Host/Client|       |     OR      |       | LNRS server |       | GNRS server |
  |           | <---- |   Gateway   | <---- |             | <---- |             |
  +-----------+  resp +-------------+       +-------------+       +-------------+
                                                   ^                     ^
                                                   |                     |
                                                   |                     |
                                                   v                     v  
                                              LNRS servers          GNRS servers 

A host/client may interact with the name resolution service to either (1) report or update it's present network address binding(s), or, (2) to query corresponding bindings of other network entities. The target of such a query operation may constitute either a host, a service, content or even a named context. Similarly, an update is not limited to the host's location, but of any addressable entity so long as it is authorized to do so.

As illustrated above, an request message to the GNRS may be sent either to a local NRS agent, or to the default gateway if an agent isn't configured or hasn't been established at time of request. The address of such a local agent could be a static system configuration as in a '/etc' file on Unix systems, or established by a periodic broadcast from the agent itself.

It is presumed that the local agent or gateway can interpret name resolution request messages and are configured to forward them to a local name resolution service (LNRS) server. The agent or gateway implementations may support responding to 'lookup' requests if the request options do not forbid doing so.

Next, the LNRS server may decide to respond to the request if the request options allow it, subject to the following implicit exclusions: (1) the request is an 'insert' (should be done on global service plane), (2) request is an update, and the new address bindings differ from previous beyond just the local address component

A request that reaches the global service plane is handled by the receiving GNRS server or forwarded onto a peer that can service it. The response, however, is routed directly back to the original requesting client - doesn't need to retrace onward path.

Requests

The name resolution service supports 3 types of requests from a client: insert, update and, a lookup or query request, where the operations may be thought equivalent to the basic functions on a map data structure storing key/value pairings.

The difference between the insert and update requests is that the former equals a 'set' operation wherein any previous value mapped to the key is replaced by the new network location bindings. In an update operation, the semantics may be further qualified via an options field to either 'replace' or 'merge', for example, the existing with the presented bindings.

The following is the general format of a request message:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Version    |Type of Message|          Total Length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Request ID                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |                         Requestor Address                     |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |                         Request Payload                       |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version
protocol version
Type of Message
one of INSERT, UPDATE, LOOKUP
Total Length
total length of message including common header fields
Request ID
unique at client to differentiate among multiple outstanding requests
Requestor Address
route-able network address of request origin, for responding
Request Payload
variable size with format defined per request type -- see below
Insert/Update Request

An insert or update involves reporting new network location bindings to the name resolution service.

Following is the format for payload in a insert/update request.

      0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |                              GUID                             |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            Options                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Size (S)                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---+
      |                               |                               |    |
      |        Address Type           |        Address Length         |    |
      |                               |                               |    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |Entry#1 
      ~                                                               ~    |
      |                        Network Address #1                     |    | 
      ~                                                               ~    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---+
      ~                                                               ~
      |                            Entry #2                           |
      ~                                                               ~
      |...............................................................|
      ~                                                               ~
      |                            Entry #S                           |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
GUID
id of the network entity whose network address bindings are being inserted/updated
Options
TBD - e.g., caching restrictions, TTL
Size
number of network address bindings sent in this message
Address Type
address made generic to support multiple types such as flat network address, IP, geo location, etc
Address Length
length in bytes of corresponding address
Network Address
variable length value for the network address binding
Lookup Request

A lookup is performed to determine the present network location binding(s) of a network entity.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |                              GUID                             |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Options                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Response Messages

As indicated in arch. figure above, responses may be generated at any level in the NRS hierarchy, condition to the options stated in request. The response contains both the details of original request and the result of the request, along with details of the responder required for any client-side verification.

Following is the format of header fields of a response message:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Version    |Type of Message|          Total Length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Request ID                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |                         Origin Address                        |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Response Code          |                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                                                               ~
      |                            Payload                            |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type of Message
one of INSERT_ACK, UPDATE_ACK, LOOKUP_ACK
Total Length
total length of message including common header fields shown
Request ID
repeated from original request
Origin Address
route-able address of NRS entity that created the response
Response Code
integer values indicating result of operation and/or error code including SUCCESS, FAILED
Payload
custom response for each request type
Insert/Update Response

The payload is empty for responses to insert or update requests.

Lookup Response

The payload in a lookup response contains the network address bindings for the requested GUID, and follows format in the insert/update requests.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Size (S)                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---+
      |                               |                               |    |
      |        Address Type           |        Address Length         |    |
      |                               |                               |    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |Entry#1 
      ~                                                               ~    |
      |                        Network Address #1                     |    | 
      ~                                                               ~    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---+
      ~                                                               ~
      |                            Entry #2                           |
      ~                                                               ~
      |...............................................................|
      ~                                                               ~
      |                            Entry #S                           |
      ~                                                               ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Application Programming Interface

Client Protocol Stack

Early Binding

  • It is assumed that an end-host has obtained the GUID(s) of the other communication end-point or network entity through an out-of-band mechanism.
  • A host can initiate communication through one of the following API:
    • sendTo(GUID, message, [serviceId], [serviceOptios], ...)
    • get(GUID, ...)
    • ....
  • Implementations of the above API within the end-host's MF stack execute early-binding when requested
  • A GNRS lookup message (GL-msg) is prepared for the dest-GUID. See section on GNRS message specification for included fields.
  • Target NRS server: A default or preferred server may be specified in a local config file, or one obtained by listening to local advertisements
  • GL-msg is sent out on the default interface for GNRS lookups
  • Closest or preferred NRS server will execute the actual lookup on the GNRS service plane
  • A GNRS lookup response (GLR-msg) prepared by server with mapping is routed to the querying entity, and is picked up by the stack
  • End-host stack inserts the network address from GLR-msg into the message header and transmits the packet on appropriate interface

Context Resolution Service

Context Server

7. Appendix A: Service Identifiers for the Wire Protocol

Network service SID Value Description
Default 0x0000 Unicast, block transfer, temporary storage on poor link or down stream path, GNRS resolution
Multicast 0x0001
Anycast 0x0002
MultiHoming 0x0004
GUID-routing 0x0008 Flat routing, no GNRS resolution
Stream 0x0010
Real time 0x0020
Delay Tolerant 0x0040
Acknowledge on Store 0x0080
Acknowledge on Delivery 0x0100
Content Request 0x0200
Content Response 0x0400
Compute Layer Processing 0x0800
Source Routing 0x1000
Endpoint Broadcast 0x2000 Request broadcast of the data block at the destination, for example when addressing an access point. Ineffective when the destination has no mechanism to do broadcast
Future 1 0x4000
Extensions 0x8000

SIDs for services not included above and to be introduced as future extensions to the delivery service follow the pattern 0x8xxx, and have to be specified as part of the extension service header. The SID value at the beginning of the field will have the high bit set to 1 to indicate there are extension service headers.

Last modified 11 years ago Last modified on Aug 9, 2013, 8:15:53 PM
Note: See TracWiki for help on using the wiki.