ietf
[Top] [All Lists]

Re: A simple question

2003-04-22 20:19:54
let me see if I can clarify this by restating it.

1. Apps know best what kinds of services they need.  The network doesn't know
this unless the app has some way of telling the network 
(e.g. TOS/QoS/diffserv/intserv/packet-class flavor-of-the-year).

2. The network knows best where hosts are located, and how to get packets from
here to there (if possible). The network also knows whether it's permitted to
send packets from here to there (perhaps limited by available routes or
policy, perhaps limited by packet filtering).  Most apps don't know these
things and shouldn't have to know them.  However it can be useful if the
network has some way to tell hosts and apps that it's not possible to get
packets from here to there, and the reason for that.  Traditionally ICMP has
fulfilled this role.

Now there are apps that have to know about network topology, such as network
management tools.  But in general we don't want to burden hosts and apps with
having to have this kind of knowledge, because there's no good way to get it
from the network, and to make it work reliably would require requiring the
network to feed routing and policy information to potentially all hosts.

3. Neither the kind of service being requested/provided nor information
about whether traffic is permitted should be wired into an IP address -
First because it forces a binding between policy and/or service and network
location which is inflexible and doesn't scale well; second because it
invites/begs/demands hosts and apps to know about network topology - i.e. to
second-guess the network.

4. Hosts shouldn't have to pick the "right" source or destination address in
order to get the network to do its job of getting the bits from here to there
(for some well-defined "here" and "there"), because hosts don't have the
requisite knowledge to do this, and because a requirement to pick the right
destination address means that addresses don't have a consistent meaning from
one source host to another.  To the extent that a host has to pick the "right"
interface, it needs to be possible to make the right choice from information
that the host normally has at hand (like matching prefix lengths).

Similarly, using address selection as a means to select a particular service
quality, or a particular security level, etc. is a best a stopgap measure 
because once again it requires apps to know about specific address ranges
and/or network topology.  

Note that scoped addresses make it difficult for each of the network, hosts,
and apps to do  their jobs - the network can't tell whether it can get the
traffic to the destination because the destination address is ambiguous (so
for instance, how can it tell the difference between "prohibited" and "no
route to destination" and "no such host" - and while it might have unambiguous
rules for how to route such addresses, that doesn't mean the traffic went to
the right place); hosts can't tell which interface to use to send the traffic;
and apps can't tell whether or not the address is usable to reach the desired
peer (either locally or by another peer).

--

Does any of the above mean that apps should never explicitly select source
and/or destination addresses or interfaces?  No, it means our network
architecture should not expect ordinary apps to make such selections
in order to sucessfully obtain services from the network. 

Now, because of mobile IP and privacy addresses, we're still going to have
situations where apps need to give their hosts an idea of what kinds of
addresses they need.  E.g. Does the app need an address that continues to work
as the host moves, or will the in-care-of address do?  Does it prefer an
address that is stably associated with the host, or is a temporary address
more appropriate?  But the answers to both of these questions *are* things
that the app can be expected to know.  Furthermore, unlike service quality or
security, these things inherently require address selection.  And unlike
site-local, these properties are essentially opaque to other hosts in the
network - thus we cannot expect/demand that other hosts use information
embedded in the address and behave differently for different kinds of
addresses.

And of course it will always be possible to set up or encounter situations
where apps that have knowledge about the network topology (or which
exhaustively try all known source/destination pairs) can succeed where apps
that don't go to extreme measures will fail.  In some ways this is an argument
about how we divide up the burden - which burdens we should place on hosts and
apps and which ones we should place on the network.  And the essence of the 
argument is:  don't expect either one to make decisions about things it
doesn't know about.  And this further argues for not having more addresses for
a host than necessary,  for not using multiple addresses as a mechanism to
provide different levels of access to a host, and for eschewing ambiguous
addresses.

Keith

I disagree that the IP stack can supply reasonable defaults in
the face of multiple scopes.  The criteria for choosing a
source address varies widely from one application to another.
Some applications need stable addresses, others need addresses
usable from all of their potential peers, others need to
choose the source address that results in the best performance
(where there is more than one meaning of 'best performance').
The default address selection rules are at best a guess.

We should let the network do routing, so that hosts and apps
aren't expected to make routing decisions.

Keith,

I don't understand your point here, and would like to.  It seems 
to me that your first paragraph ("I disagree...") suggests that 
the applications need to specify the addresses/interfaces 
because they know their needs and the stack can't figure it out. 
And the second argues for pushing the decisions onto the 
network, which has no information at all (and, if it had it, 
could probably apply it only by changing addresses mid-flight -- 
NAT-like or worse).  That suggests to me a conclusion of "not 
application, not stack, not network either" which leaves very 
few options.

If I ignore that apparent contradiction, I'm left with the 
conclusion that we need some new addressing and routing 
abstractions so that the applications can tell the stack (and 
the stack might tell, or negotiate with, the network) what 
considerations they need optimized and do so without specifying 
specific addresses or inspecting components of addresses.  It 
seems to me that such abstractions would also eliminate one of 
the arguments against site local: having an application able to 
tell the stack:

      * I need a local address
      
      * I need an appropriate address for routing to <DNS name>
      
      * I need a completely-global address

Are all far more reasonable than having the application itself 
recognize particular addresses or prefixes and trying to figure 
out which ones make sense in its context.  It also _might_ 
suggest that we need to reexamine ICMP in the IPv6 context to be 
sure that, if the stack needs information from the network to 
make satisfactory choices along these lines, it can ask them 
without, e.g., trying to set up one or more TCP connections (or 
sending UDP packet using an unspecified protocol) and waiting 
for the responses or timeouts.

Is that really where we need to be headed and, if so, is anyone 
doing the work rather than being stuck on "local-good / 
local-bad", "scope-necessary / scope-bad", types of arguments?




<Prev in Thread] Current Thread [Next in Thread>