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