IPv6 day and tunnels

Jimmy Hess mysidia at gmail.com
Tue Jun 5 02:47:41 UTC 2012


On 6/4/12, Owen DeLong <owen at delong.com> wrote:
[snip]
> Probing as you have proposed requires you to essentially do a binary search
> to arrive
> at some number n where 1280≤n≤9000, so, you end up doing something like
> this:
[snip]
> So, you waited for 13 timeouts before you actually passed useful
> traffic? Or, perhaps you putter along at the lowest possible MTU until you
[snip]
Instead of waiting for 13 timeouts, start with 4 initial probes in
parallel,  and react rapidly to the responses you receive;  say
9000,2200, 1500, 830.

Don't wait until any timeouts until the possible MTUs are narrowed.


FindLocalMTU(B,T)
   Let  B  :=  Minimum_MTU
   Let T  := Maximum_MTU
   Let  D :=   Max(1, Floor( ( (T - 1)  -  (B+1) ) / 4 ))
   Let  R := T
   Let  Attempted_Probes := []

   While  ( ( (B + D) < T  )   or    Attempted_Probes is not Empty )  do
        If    R is not a member  of   Attempted_Probes   or  Retries < 1  then
               AsynchronouslySendProbeOfSize  (R)
               Append (R,Tries) to list of Attempted_Probes  if not exists
                   or  if  (R,Tries) already in list then increment Retries.
       else
                   T :=  R - 1
                   Delete from Attempted_Probes (R)
       end

        if  ( (B +    D) < T )        AsynchronouslySendProbeOfSize  (B+ D)
        if  ( (B + 2*D) < T )        AsynchronouslySendProbeOfSize  (B+ 2*D)
        if  ( (B + 3*D) < T )       AsynchronouslySendProbeOfSize  (B+ 3*D)
        if  ( (B + 4*D) < T )       AsynchronouslySendProbeOfSize  (B+ 4*D)

         Wait_For_Next_Probe_Response_To_Arrive()
         Wait_For_Additional_Probe_Response_Or_Short_Subsecond_Delay()
         Add_Probe_Responses_To_Queue(Q)

         R :=  Get_Largest_Received_Probe_Size(Q)
         If     ( R > T )     then
                   T := R
         end

         If     ( R > B  )   then
                   B := R
                   D := Max(1, Floor( ( (R - 1)  -  (B+1) ) / 4 ))
         end
    done

    Result :=  B


#

If you receive the response at n=830 first, then wait 1ms and send the
next 4 probes 997   1164  1331  1498,  and resend the n=1500 probe
    If 1280 is what the probe needs to detect.  You'll receive a
response for 1164 , so wait 1ms  then retry  n=1498
    next 4 probes are  1247  1330  1413  1496
     if 1280 is what the probe needs to detect,  You'll receive a
response for 1247, so wait 1ms  resend n=1496
         next 4 probes are   1267 1307  1327   1347
            if 1280 is what you neet to detect, you'll receive
response for  1267, so
               retry n=1347  wait 1ms
              next 4 probes are:   1276  1285 1294 1303
              next 4 probes are:   1277 1278 1279 1280
                     next 2 parallel probes are:  1281 1282

You hit after  22 probes,  but you only needed to wait for n=1281   n=1282
and their retry to time out.


--
-JH




More information about the NANOG mailing list