[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Some comments on draft-ietf-v6ops-v6onbydefault-01.txt



Hi all,

I've had a look on draft-ietf-v6ops-v6onbydefault-01.txt , and have some comments on it.

In section 2, it says:

"  An application on this system is trying to communicate with a
   destination whose name resolves to public and global IPv4 and IPv6
   addresses.  The application uses an address resolution API that
   implements the destination address selection mechanism described in
   Default Address Selection for IPv6 [ADDRSEL].  The application will
   attempt to connect to each address returned in order until one
   succeeds. "

I think this para provides a hint on where the problem really lays. An application wants to use a service, not a specific node or a specific attachment point. Therefore, it shouldn't be involved in selecting the node or the network interface on which the server is provided.


In section 2.1, it says:


"  Fixing the destination address selection mechanism by adding such a
   rule is only a mitigating factor if applications use standard name
   resolution API's that implement this mechanism, and these
   applications try addresses in the order returned.  This may not be an
   acceptable assumption in some cases, as there are applications that
   use hard coded addresses and address search orders (DNS resolver is
   one example), and/or literal addresses passed in from the user."

I'm aware of this. However, I'd not say it's good practice to do this. So, well, if you have problems (delays, performance, whatever), for using a hard-coded address (for example), well, you should not be doing it!


In section 2.3, it says:


"  When the unreachability of a destination is obviated by the reception
   of an ICMPv6 destination unreachable message, the transport layer
   should make it possible for the application to deal with this by
   failing the connection attempt, passing ICMPv6 errors up to the
   application, etc... "

This one has to do with what I pointed out above: Should an application programmer be concerned with a (probably transient) error at the network layer.
Should, for example, a database programmer be knowledgeable on this stuff (i.e., at this level of detail)?



In section 2.3.2, it says:



"2.3.2 UDP Implications


   As noted in [HOSTREQS] section 4.1.3.3, UDP implementations MUST pass
   to the application layer all ICMP error messages that it receives
   from the IP layer.  As a result, proper handling destination
   unreachability by UDP applications is the responsibility of the
   applications themselves."

Note that, IIRC, the socket API pass ICMP errors only on *connected* sockets.



In section 3.2, it says:

"3.2 Poor IPv6 Network Performance

   Most applications on dual stack nodes will try IPv6 destinations
   first by default due to the Default Address Selection mechanism
   described in [ADDRSEL].  If the IPv6 connectivity to those
   destinations is poor while the IPv4 connectivity is better (i.e., the
   IPv6 traffic experiences higher latency, lower throughput, or more
   lost packets than IPv4 traffic), applications will still communicate
   over IPv6 at the expense of network performance.  There is no
   information available to applications in this case to advise them to
   try another destination address."

IMHO, this has to do with the design decisions of IPv6 (and IPv4). There's no knowledge about "nodes". So you cannot infer, from two IP addresses, if they correspond to the same node, or to two different nodes.

If there was a concept of "node", then this stuff would be handled by the network layer, in a transparent way.

So, strictly speaking, I don't think you need to address this issue. It has to do with the architecture itself, not with dual stacks or whatever.

There's a good theoretical discussion of this in RFC 1498. I think it provides very useful insights on all of the above stuff.

--
Fernando Gont
e-mail: fernando@gont.com.ar || fgont@acm.org