[Nsi-wg] Some questions/remarks on the v2 connection wsdl GlobalID

Jerry Sobieski jerry at nordu.net
Thu Dec 6 14:49:19 EST 2012


Hi Inder -

Some rebuttal to your GlobalID FEdEx analogy inline.   I am firmly 
convinced that the current GID specifications are superfluous and should 
be removed or at a minimum converted to the "Options" field (see below).

Now read on to see how brainwashed you have been by the corporate FedEx 
Borg...  :-)

Best regards
Jerry
On 12/6/12 10:22 AM, Inder Monga wrote:
>
> Let me point to Fedex or UPS as an example, a scalable system of 
> packet delivery end-to-end.
>
> a) Scenario with per-hop connection ID as the only way being suggested:
> If the sending customer, say John, sends a package, he will get a 
> tracking ID. Every time a logical point to point delivery happens, a 
> new ID is generated. so when the Fedex store sends the package to the 
> local warehouse, the local warehouse generates a new ID, and then the 
> plane flies to another town and package enters an intermediate 
> warehouse, a new ID is generated. Lets assume to make this case 
> consistent with NSI, that there is not one company, and each leg is 
> managed by a different administrative entity.
If John gives his package to FedEX,...is John then responsible for going 
to the warehouse to get a status, and then to the airfreight depot to 
get a status?  and then to DHL to see if FedEx used them for a portion 
of the trip? and then to UPS? and then to Redball Express, and then try 
to discover which carries in Europe or Asia those guys then handed it 
off to?   No.  Users would get pissed off if FedEx just handed the 
package to another carrier and washed their hands of it.   But this is 
your example.  Your example is an intra-domain example.  FedEx uses a 
single number inside their domain only.  Despite their marketing name 
for it as a "Global Tracking Number" they have a single administrative 
traking system and all their systems use it.   And I bet they had to com 
eup with an NSI analog to track shipments acorss different 
carriers...and those otehr carriers do not use FedEx tracking numbers in 
their systems.

  For a user to discover how his package is being shipped - and which 
carriers were subcontracted to do it - the user *still* needs to go to 
FedEx to get the information - and FedEx walks the tree to discover who 
they allocated it to.   And even for their subs - they only get the 
status their subs wish to release based upon the FedEx id they used.

FedEx acts as the query point for status as well as the point of service 
- and indeed uses its own Tracking number to query independent 
subcontractors or its own internal status.  This is exactly what NSI 
does in the Query() function.  But those subcontractors do not use FedEx 
numbers for tracking their own internal operations.    You look at a 
package and you will see multple tracking information.   THis is largely 
simplified for FedEx and UPS because they are essnetially a centrally 
managed domain within themselves across the globe.   They are a google 
for shipping. :-)   But they are not universal and the FedEx "Global 
tracking number" is more a marketing name - its not a globally unique 
identifier - except for FedEx.
>
> For the customer to track, he has to
>     1) Get the topology of the entire packet delivery, assuming he has 
> authorization. That is a chicken and egg problem because he does not 
> know which domains or service providers his packet is going to go 
> through as Fedex may have many sub-service providers. He can spend 
> months trying to figure that out, but maybe his local store can query 
> and try to figure it out for him
Exactly - so the user queries the service provider he gave the package 
to - FedEx, and FedEx walks the tree.  Just like NSI.
>     2) Then he has to send a query to try to get the tracking ID from 
> each of those service providers.
No - Customer does not do this - Fedex does this.  Just like NSI - you 
send a Query() to the head PA and that agent queries down the service 
tree recursively and rolls up the result.  One stop shopping.
>     3) and then he sends a query to each service provider to find out 
> if it left origin point of that service provider to the end point of 
> that service provider.
>     4) and then maybe he finds out where the delivery is at, if it did 
> get delivered and where the problem could have been if it didnt.
Sigh.

When is the last time you told FedEx which transport carriers to use to 
ship your package?   You just tell them where you want it to go. _/They 
decide how to get it there./_  And they assume responsibility for 
getting it there.  Which is why you can then go to *them* to get a valid 
status.   If you do not ask them to go end to end, then they will not 
give you end to end status.   If you ask FedEx to just deliver a package 
to an exporter in New York, and tell the exporter to deliver it to 
Copenhagen,, FedEx will have nothing to do with the status of NYC to 
CPH.   Not their issue. Likewise with NSI.   If you give the package to 
FedEX, you go back to FedEx to ask for the status - and FedEx goes out 
and finds the status from however they arranged for it and  rolls it up 
and presents it to you - even if they delegated delivery to another 
carrier.

If you got a subcontractor's tracking number and asked the sub for a 
status - they could tell you it came from FedEx, even give you a FedEx 
number,  and they can probably even push the query up the stack and 
query FedEx to get the status of the fedEx segment and roll it all up 
and present it to you.   And this is what the detailed Query() does.  
(Except the query up doesn't work in NSI because we have this crazy 
replyTo bogsity as our sole means to send messages up the service tree.)

You could not use the FedEx tracking number on the UPS system, or DHL, 
or GOD, or any other.    Nor could you use these other carriers tracking 
numbers with FedEx.

This is exactly what we should do with NSI - Let each NSA PA assign 
their own ConnectionID/ReservationID, and let the NSA PA decide how to 
subcontract it.  The RA and PA each assign and exchange their own 
ConnectionIDs as part of the Reserve/Confirm process.  And then if the 
user wants a status - he takes the ConnectionID that he is given and the 
NSA that assigned it, and queries that NSA for the end to end path.   No 
GlobalID required.

You still need to discover the path it took.  You need more than a 
globally unique ID to do this.  You need to know which NSA(s) are on the 
path - the most obvious one is the one that the RA used to start the 
process.   So now we need to encode NSA information in the GID so you 
know where to start.   So even if the GID contains that first NSA in the 
GID, you *still* need to go query that NSA to get a status and the 
path.    Does ESnet want to honor queries from NSAs that it would not 
otherwise have honored a Reservation Request?   If you only honor 
requests from "trusted" NSAs, then remote unknonw NSAs have no choice 
but to walk the tree to let each NSA that successfully estabslihed the 
reservation ask for the query.

There is no guaranty that the Global ID you have was actualy passed down 
to the NSA you are querying - even if you know for fact that connection 
transits that infrastructure.   Virtualization can hide this 
information, or the GID was not replicated down - maybe because the PA 
used different credentials to progress the connection.   Lots of 
legitimate reasons why the GID is not found.  And lots of ways to screw 
with the system (for instance - what if I deliberately send several 
requests that use the same GID...it doesn't even have to be one from my 
own namespace as it could be one I am simply replicating from a parent 
RA... )  We have no way of validating or verifying the vercity of the 
global id, so we are just sending jibberish for all we know.   The one 
identifier we know is valid is the one each NSA tells us is the segment 
ID for their portion.  So we recurse down the service tree walking these 
ConnectionIDs and construct a valid picture of the path and state.

>
> b) Scenario with a Global Connection ID , the way tracking really happens
>
> The sending customer delivers his package to a store and gets a global 
> connection ID.
No.  He gets a tracking ID issued by the particular Carrier that he gave 
the package to.   The Tracking ID is only "global" in the sense that the 
particular carrier uses that tracking number to track a shipment *they* 
are delivering anywhere in the world.   It is not used across *all* 
carrier's systems, nor is it "globally unique" across carriers.

> He comes home and can query against that.
He can only usefully query that tracking number against the carrier that 
took the package.  No one else.

> He can share the global connection ID to whomever he authorizes and 
> they can get status on the package,
Third party requesters can still only query the specific Carrier you 
gave the package to if they wish to get a status. A tracking number by 
itself does not indicate the carrier.    You give the tracking number to 
a different carrier - they won't know it from Peter.   So anyone with a 
tracking number /and the carrier that issued it/ can indeed get a status 
- from that carrier.   This is not a function of a globally unique 
identifier - this is an authorization policy of that carrier.   A 
different carrier may require you to login to the account that shipped 
the package.   And if you gave that number to a friend without telling 
them which carrier it belongs to, your friend is going to go off on a 
random exhaustive search poking that number at every carrier he knows 
about to see if it happens to return a result...and hopefully it is not 
duplicated in another carrier's system and gives him bogus results.  Now 
think if you had a rogue automated agent that was just probing for ESnet 
circuits in order to tee up a cyber attack...like the US did to Iran...

On the other hand, if an arbitrary agent knows a Connection ID (not a 
GID) and the NSA that issued that Conenction ID, and wishes to discover 
where that connection originates, what rights should that agent have to 
go and stalk that connection, or the user who owns it?   Should any 
agent be able to see how much traffic that connection is carrying?  
Should any agent be able to freely find out if it was explicitly asked 
to transit ESnet - and allowed to do so? and what path it tok thru 
ESnet?  Or if it explicitly avoided CERnet or some other network?   My 
contention is that these are *local policy decisions* and should not be 
backdoored simply because we have legacy software that breaks if we 
don't grandfather in a weak mechanism that was used in the past.   If 
ESnet wants to let people see their circiuts, then lower the security 
profiles you apply. i.e. unlock the door and prop it open, don't make a 
big hole in the wall next to it.
> third party services like Jeroens don't need special authorization for 
> every package sent and from every customer (it works now in AutoGOLE 
> because there is no security).  It is his package. but in order to 
> cancel it he has to provide authorization that only he can (a secure 
> token or cert based authentication)
Sure - we can have different authorization rules for reading vs 
writing/modifying status.. we just define different policy rules. Some 
can be very lax while others very tight.   But we still need to have 
authorization decision points that enforce policy.

But what do you mean "special" authorization.   If he requested a 
service instance, he should be able to query its status with his 
credentials.  If the carrier decides to use internal private policy to 
make path decisions and potentially uses different credentials to make 
it happen, does Jeroen still have rights to know those decisions?   I 
would contend he does not.  Authorizing a user's request to transport 
data at a certain rate, does not implicitly mean that the user is 
entitled to know other aspects about that service that were not 
explicitly part of the request.     At least not by default.  Such 
access needs to be authorized by a policy - even if that policy says 
anyone can do this.     The service was a data transport request - as 
long as the service is meeting that request, why should access to the 
engineering details be likewise available?     If someone else wants to 
query the status of his service instance, the credentials they present 
should be used to allow or disallow it.  Likewise for canceling the 
service.  It has nothing to do with who's package it is - it is a 
function of makng sure the actions performed are authorized - always - 
by asserting the actor's credentials and the action they wish to perform 
against a policy rule.   If you lower the authorization level to 
...nothing...  Then you are simply saying that you implement a policy 
where anyone's credentials can perform a any function - you don't bypass 
the authorization decision point.

And more importantly - the level of authorization required to perform 
some function is a policy imposed by the administrative body responsible 
for those resources or services.   Just because *you* in ESnet think 
that this information should be easily visible does not mean that 
NORDUnet feels the same way.  And NORDUnet may give you excellent 
connection service performance and reliability...   And just because 
NORDUnet might allow any academic user a great deal of latitude in 
provisioning services across NORDUnet does not mean ESnet will honor a 
similar policy.

We can all mutually agree to institute very lax policy, but we should 
not bypass the policy decision points or the policy enforcement points.

> Every step of the way, the global connection ID is scanned and 
> recorded. Regardless of the administrative provider, there is one 
> consistent ID that can track the package and it is easy for him to 
> know where it is.
> Isn't that a much better service interface?
Nope. FedEx simply calls _/their /_tracking a number a "global tracking 
number".   If I call the NORDUnet Connection ID the "NORDUnet Global 
Tracking ID" ...would you expect it to work in ESnet?   FedEx can impose 
their global tracking number on themselves - across all of their 
international divisions.  But  they can't impose it on the 
subcontractors.  Even the little guys use their own tracking number for 
actual operations, and simply correlate the FedEx number with their own. 
   And they only look for the FedEx "GlobalID" when FedEx comes 
asking....   If those little guys also also serve UPS, they map the UPS 
tracking number to their internal system for UPS packages... and track 
UPS numbers when UPS asks. And when they are simply tracking their own 
operations - should they use FedEX Global ID or the UPS Internaional 
ID?  Or could they use their own number..?

>
>
> The reason for the confusion around GlobalConnectionID (and the name 
> can be improved - please suggest and let the group decide), is because 
> it is not mandatory. Because of that the "prototype" NSAs don't fill 
> it out.
>
We need to approach the standard not as a mechanism we want to be able 
to work properly across /and beyond/ the academic networks.  ESnet tends 
to be focused on the US DoE lab requirements - a relatively limited 
horizon.  But NSI is intended to work across a wide array of network - 
R&E networks *AND* commercial networks.  We need to keep this in mind - 
NSI needs to function in other network contexts - often much MUCH larger 
and untrustworthy. And R&E networks should not be less able to secure 
themselves than commercial networks.  So if we elect to implement a 
loose authorization policy profile - this is fine.   And I agree can be 
useful in these development activities.    But we should not define a 
field to be something we cannot verify.  E.g. if an ID appears in the 
GID field - what happens if it is *NOT* globally unique?

Perhaps what we need is an "options" field in every message.  This is 
akin I guess to what Chin asked about in Oxford but I think that was for 
just reservation request...  So this field would contain arbitrary 
type-value pairs (or maybe TLVs.)  The Options field would be mandatory, 
but could be empty.  The contents are intended to be parameters for 
non-standard (i.e. implementation specific) functionality.    Since 
these are _/optional and non-standard/_ data, the NSI standard should 
make no rules about how the data elements are defined or how they are 
handled.  NSI should simply state how they are formatted within a 
message.  And I mean *NO* rules about their usage - they are non-stanard 
i.e. "NOT of the standard." (!) so should not be required or referenced 
by any feature in the standard.  The only thing that should be placed in 
the standard is that there is a message field that carries 0 or more 
non-standard parameters.  Since the parameters are non-standard, we can 
not even stipulate when they ought to be replicated by aggregators.   It 
is left to each particualr NSA implementations to interpret them or to 
ignore them altogether.

Thoughts?
Jerry


> My $0.02 representing the other side,
>
> Inder
>
>
>
>
>
> On Thu, Dec 6, 2012 at 4:19 AM, Jerry Sobieski <jerry at nordu.net 
> <mailto:jerry at nordu.net>> wrote:
>
>     The GlobalID was created at the request of the perfSONAR
>     developers to enable monitoring - how could you determine which
>     segments belonged to a end-to-end connection without each segment
>     being tagged with a Globally unique identifier?    (IMO this was a
>     situation where old ideas and processes die slowly.)
>
>     The proper way to do this is to just use the ConnectionID and walk
>     the tree - a detailed Query().   The detailed Query() exposes the
>     actual domains along the path that are actually responsible for
>     processing the service request - rather than trying to find just
>     the domains that are carrying the bits (think about virtualized
>     transit domains).   The Query() process provides _/authorized
>     access/_ to this information throughout the service tree, and it
>     provides genuine and reliable associations between the
>     ConnectionIDs assigned at each NSA for its children.   Using
>     GLobalID - without descending the tree - is a scattershot and
>     unreliable means of discovering which segments comprise a
>     reservation, and it bypasses all security policy asserted above. 
>     Bad bad bad.  The Query() command is fully authorized and so
>     completing a detailed query provides all the information about the
>     connection segments belonging to a reservation and does so
>     according to authorization policy along the tree and according to
>     the requesters that actually built (and are paying for and/or are
>     responsible for) the reservation.
>
>     The only other application of GlobalID that I recall was a batch
>     query possibility (not currently implemented) - the ability to
>     obtain information on a whole batch of unrelated connection
>     segments.  I.e. if my agent wanted to know about all the
>     connections your NSA was servicing then a global ID might provide
>     some correlation with upstream/downstream segments obtained
>     similarly.   Either way, this poses too many security or privacy
>     issues to count...
>
>     So our compromise was to allow a tag assigned by a RA to be
>     carried along the segmentation tree so that Connections that
>     wanted to be monitored by perfSONAR could be - but it was
>     optional.    For perfSONAR monitoring purposes - this tag needed
>     to be globally unique - thus its moniker.
>
>     As Vagellis observes - if each NSA in the tree wishes to assert
>     their own GlobalID downward, then the GlobalID from above gets
>     overwritten, or ignored altogether.  (I don't recall - it may be
>     the case that if the GID is present, it was supposed to be
>     replicated down - but this then prevents intermediate aggregator
>     RAs from asserting a GlobalID themselves. )   If we want all
>     GLobalIDs to be carried downward, the field must be able to carry
>     multiple GlobalIDs, possibly from each network along a path (think
>     hop-by-hop "chain" provisioning).  And if the field can carry
>     multiple GLobalIDs, why limit each NSA to only inserting a single
>     globalID?  Why not let each NSA insert multiple tags?   Indeed, is
>     there really any requirement for the tag to be globally unique in
>     some way?     It was only perfSONAR that required a globally
>     unique identifier.
>
>     Now two years later, I don't know that there has been any
>     perfSONAR tools modified to actually monitor NSI connections, much
>     less to utilize the GlobalID field to do so.    Does any one
>     know?    Are there any other tools that expect/require the GID to
>     be present? or to be globally unique?  (and how easy will it be to
>     break those tools? :-)
>
>     Given that NSI has the detailed Query() function that reliably and
>     _/securely/_ exposes the end-to-end segmentation, I do not think
>     the GlobalID field is required any more.  Does anyone have
>     continuing/additional reasons for having it?
>
>     Unless there is a specific and compelling reason to retain the
>     field as a general purpose communications field preserved in the
>     Reservation record, I propose we should deprecate it and simplify
>     the protocol.   As a general practice for standards, we should
>     *NOT* retain it simply "just in case"...to retain it we need a
>     specific and compelling reason to include it that makes it
>     worthwhile for every implementation to support it.  "optional
>     requirements" is a oxymoron.  Eitehr we need it, or we do not.   
>     If we retain the field, then we need to redefine it so that it can
>     carry multiple tags and so those tags can be recognized/parsed by
>     generalized other agents, and the field should be constrained in
>     size (don't want MPG4 movies being carried in the signaling messages.)
>
>     One last indirectly related note:  The ability of Query() to serve
>     generalized agents -besides the uRA- will rely upon these agents
>     issuing a detailed Query() to an NSA that is NOT the first hop PA
>     at the root of the service tree.  For instance, a NORDUnet
>     perfSONAR agent will see a local Connection ID it needs to monitor
>     - how does it discover which NSA is the first hop?  And should it
>     need to?   Why can't the local agent issue a detailed Query()
>     directly to the local NSA PA - and let the local NSA PA walk it
>     *UP and OVER* in the service tree as well as down the service
>     tree?   This is a "flooding" detailed Query().   The Query()
>     functions the same way as it does now, only that the Query() is
>     passed up to the parent RA as well, and the parent/child link from
>     which the Query() came (if it came from a parent/child NSA in this
>     connection's service tree) is pruned from the recursive flooding -
>     it just gets the result.
>
>     By tweeking the Query() in this fashion, we enable a much more
>     powerfull ability to manage the reservation.  This will also be an
>     important capability for Notify() functions - an error condition
>     could be flooded to all NSAs in the service tree using a similar
>     flooding model thus being able to notify all NSAs upstream and
>     downstream in the data plane of local interuptions.    Of course,
>     we won't be able to use the current funky WS respondTo process for
>     these upward bound messaging...we'll need a real symmetric session
>     MTL model to do this.   But we already know this.
>
>     Jerry
>
>
>     On 12/6/12 5:06 AM, Jeroen van der Ham wrote:
>>     Hi,
>>
>>     On 5 Dec 2012, at 18:24, Vangelis Chaniotakis<haniotak at es.net>  <mailto:haniotak at es.net>  wrote:
>>
>>>     Oh, speaking of globalreservationid!
>>>
>>>     we're only passing it around and persisting it not doing anything with it AFAICT.
>>>
>>>
>>>     - it's supposed to be a way to tie this connection with external services, right?
>>>     - if so, the name is not quite descriptive of its function
>>>     - it's also optional, while the name sounds terribly important
>>>     - why a URI instead of a string? or key-value pair
>>>     - there's only one of them, why not allow for a set?
>>     It is supposed to be the ID for the global reservation. The aggregator NSA receives a request, generates an ID and uses this global ID to make connection requests to each of the participating NSAs. They generate a connection ID for their segment, but must be able to relate that to the global reservation ID.
>>
>>     So yes, it does perform a very important global function :)
>>
>>     It is indeed also meant for tieing in to other services. The URN is used to make it very clear that this is a network global reservation ID.
>>
>>     Jeroen.
>>
>>     _______________________________________________
>>     nsi-wg mailing list
>>     nsi-wg at ogf.org  <mailto:nsi-wg at ogf.org>
>>     https://www.ogf.org/mailman/listinfo/nsi-wg
>
>
>     _______________________________________________
>     nsi-wg mailing list
>     nsi-wg at ogf.org <mailto:nsi-wg at ogf.org>
>     https://www.ogf.org/mailman/listinfo/nsi-wg
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ogf.org/pipermail/nsi-wg/attachments/20121206/624991d3/attachment-0001.html>


More information about the nsi-wg mailing list