LL31 Probing Interval

Stuart Cheshire <[email protected]>
Newsgroups gmane.ietf.zeroconf
Message-ID <[email protected]>
Right now, the document says:

   When ready to begin probing, the host should then wait
   for a random time interval selected uniformly in the range
   zero to one seconds, and should then send three probe
   packets, spaced randomly, zero to one seconds apart.

This means that, technically, if a device waits zero seconds, sends three 
ARP Probes spaced zero seconds apart, and then immediately begins using 
the address, that's legal.

It is clear that after waiting a total of zero seconds the host has NOT 
established to the required degree of certainty that the address is not 
already in use.

It may be *unlikely* for a properly implemented device to do this, but if 
you use a packet sniffer and observe a device do this, you can't say 
categorically that the device does not implement the specification 
properly. Indeed, every device that were to implement this random 
interval between probes would sometimes exhibit extremely short probing 
times.

I see that this text was offered by Christian Huitema, and the random 
spacing was proposed to "avoid synchronization effects".

This is, I believe, a misapplication of a common design principle. The 
common design principle that's being misapplied is that in a continuing 
ongoing periodic process on multiple machines, you should take care to 
avoid synchronization. The canonical example of this that's taught to 
computer science students is the synchronization of periodic DECnet 
routing messages. The canonical research paper on the subject is 
"Synchronization of Periodic Routing Messages" by Sally Floyd and Van 
Jacobson (do a Google search for "DECnet synchronization").

The problem in DECnet was that the device would do its work, then sleep 
for 120 seconds, then repeat. If it took time epsilon to do its work, 
this meant that the time between packets was epsilon+120seconds. Time 
epsilon was influenced by how many pages faults the process took, which 
was influenced by how long it was since it last ran, which was influenced 
by how long it was since it last received a packet from a peer. Devices 
that had just recently received a packet would tend to run faster and 
'catch up' with the device ahead; devices that had not recently received 
a packet would tend to run slower and let the others 'catch up' with 
them. It's not hard to see how over a period of time this would result in 
all the packets becoming synchronized into a monster packet blast every 
two minutes. The solution is to use a drift-free time model, so that 
execution time epsilon does not influence the overall time interval, and 
to introduce just the right amount of randomness to make sure the devices 
de-correlate and stay de-correlated.

This is all very interesting, but what has it got to do with link-local 
devices sending three probes? ABSOLUTELY NOTHING.

The document should simply say:

   When ready to begin probing, the host should then wait for a random
   time interval selected uniformly in the range zero to one seconds,
   and should then send three probe packets spaced one second apart.

Christian Huitema is a very well-known and widely respected academic in 
computer science; I'll hope he'll agree in retrospect that applying the 
DECnet de-synchronization principle to three probe packets is a mistake, 
and withdraw the suggestion.

Stuart Cheshire <[email protected]>
 * Wizard Without Portfolio, Apple Computer, Inc.
 * www.stuartcheshire.org
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.