TCP congestion fix
jbn at wdl1.UUCP
jbn at wdl1.UUCP
Thu Nov 21 12:21:44 AEST 1985
Index: ucb/netinet/tcp_output.c 4.2BSD
Symptom:
Very poor TELNET performance over non-local networks; broken
network connections, gateway congestion, high dropped packet
rates in gateways, etc.
Description:
TCP sends too many tiny packets over long-haul links, congesting
networks, links, gateways, etc.
Sites with a connection to the ARPANET or CSNET, Ethernet
bridges, gateways, packet forwarders, DMC or DMR links, X.25 links,
or any non-trivial network architecture need this fix.
Any TELNET use of a low-speed net (<56Kb) by a 4.2 system without
this fix will clog the net to the point of unusability.
Sites with nothing but a local area net not connected to any other
net do not need this fix, although it is harmless in such situations.
There is a better solution in 4.3BSD but it is more complex.
There is a related fix to the TCP retransmission timer which
should also be installed in tcp_output.c but is not a mandatory
prerequisite for this fix. See Mt. Xinu buglist.
J. Nagle
Cause:
Poor TCP send policy in tcp_output.c.
Fix:
(Line numbers reference Mt. Xinu's 4.2BSD)
*** tcp_output.c ***
76,77c76,77
< * Sender silly window avoidance. If can send all data,
< * a maximum segment, at least 1/4 of window do it,
---
> * Sender silly window and congestion avoidance.
> * If a maximum segment, no outstanding data,
78a79,81
> * This is a simplified version of the technique described in
> * ACM Computer Communications Review, October 1984, p. 11.
> * J. Nagle
81c84
< if (len == tp->t_maxseg || off+len >= so->so_snd.sb_cc)
---
> if (len == tp->t_maxseg) /* if max size seg */
83c86
< if (len * 4 >= tp->snd_wnd) /* a lot */
---
> if (tp->snd_nxt == tp->snd_una) /* if no outstanding */
99,100c102
< * next expected input.) If this is 35% or more of the
< * maximum possible window, then want to send a segment to peer.
---
> * next expected input.)
103,105d104
< if (win > 0 &&
< ((100*(win-(tp->rcv_adv-tp->rcv_nxt))/so->so_rcv.sb_hiwat) >= 35))
< goto send;
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list