[153326] in North American Network Operators' Group
Re: IPv6 day and tunnels
daemon@ATHENA.MIT.EDU (Jimmy Hess)
Mon Jun 4 22:48:31 2012
In-Reply-To: <2AC1B772-1852-4135-A0D1-7DED309A37F2@delong.com>
Date: Mon, 4 Jun 2012 21:47:41 -0500
From: Jimmy Hess <mysidia@gmail.com>
To: Owen DeLong <owen@delong.com>
Cc: "nanog@nanog.org" <nanog@nanog.org>
Errors-To: nanog-bounces+nanog.discuss=bloom-picayune.mit.edu@nanog.org
On 6/4/12, Owen DeLong <owen@delong.com> wrote:
[snip]
> Probing as you have proposed requires you to essentially do a binary sear=
ch
> to arrive
> at some number n where 1280=E2=89=A4n=E2=89=A49000, 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 yo=
u
[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 :=3D Minimum_MTU
Let T :=3D Maximum_MTU
Let D :=3D Max(1, Floor( ( (T - 1) - (B+1) ) / 4 ))
Let R :=3D T
Let Attempted_Probes :=3D []
While ( ( (B + D) < T ) or Attempted_Probes is not Empty ) do
If R is not a member of Attempted_Probes or Retries < 1 t=
hen
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 :=3D 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 :=3D Get_Largest_Received_Probe_Size(Q)
If ( R > T ) then
T :=3D R
end
If ( R > B ) then
B :=3D R
D :=3D Max(1, Floor( ( (R - 1) - (B+1) ) / 4 ))
end
done
Result :=3D B
#
If you receive the response at n=3D830 first, then wait 1ms and send the
next 4 probes 997 1164 1331 1498, and resend the n=3D1500 probe
If 1280 is what the probe needs to detect. You'll receive a
response for 1164 , so wait 1ms then retry n=3D1498
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=3D1496
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=3D1347 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=3D1281 n=3D1=
282
and their retry to time out.
--
-JH