It's been nearly four years, I was wondering if anyone has had a thought on this change yet. :)

Mike "Silby" Silbersack

---------- Forwarded message ----------
Date: Tue, 30 Jul 2002 15:15:55 -0500 (CDT)
From: Mike Silbersack <[EMAIL PROTECTED]>
To: freebsd-net@freebsd.org
Subject: RFC: Updated window update algorithm

I'd appreciate if the tcp inclined could take a quick look over the
attached patch.  What it does is implement a simpler algorithm used to
determine whether or not to accept window updates.  Our existing algorithm
(the one in RFC793/1122) had a weakness in that it will ignore window
updates piggybacked on retransmitted packets.  In a unidirectional
transfer situation, this is not a problem.  However, in the case of a
bidirectional transfer, this could cause retransmission in one direction
to stall transmission in the other direction.

For more info on this case, see the thread at:

http://tcp-impl.grc.nasa.gov/tcp-impl/list/archive/2184.html

The algorithm I used in the attached patch is the one created by Alexey
Kuznetsov, currently used in Linux 2.4.

Any comments (on the algorithm or implementation) would be appreciated.

Thanks,

Mike "Silby" Silbersack
--- /usr/src/sys.old/netinet/tcp_input.c        Tue Jul 30 00:41:38 2002
+++ tcp_input.c Tue Jul 30 14:15:40 2002
@@ -1939,11 +1939,15 @@
        /*
         * Update window information.
         * Don't look at window if no ACK: TAC's send garbage on first SYN.
+        * Update window if:
+        * - New data acked
+        * - New data sent to us
+        * - Data has not advanced, but larger window is reported
         */
        if ((thflags & TH_ACK) &&
            (SEQ_LT(tp->snd_wl1, th->th_seq) ||
-           (tp->snd_wl1 == th->th_seq && (SEQ_LT(tp->snd_wl2, th->th_ack) ||
-            (tp->snd_wl2 == th->th_ack && tiwin > tp->snd_wnd))))) {
+            SEQ_LT(tp->snd_una, th->th_ack) ||
+            ((th->th_seq == tp->snd_wl1) && (tiwin > tp->snd_wnd)))) {
                /* keep track of pure window updates */
                if (tlen == 0 &&
                    tp->snd_wl2 == th->th_ack && tiwin > tp->snd_wnd)
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to