Index of /software/pub/tcpsack/bsdi-3.0
Name Last modified Size Description
Parent Directory 19-Aug-1998 12:29 -
netinet-patch.tar.gz 24-Sep-1998 13:06 13k
netinet-patch/ 20-Oct-1998 15:48 -
netinet.tar.gz 24-Sep-1998 13:05 55k
netinet/ 20-Oct-1998 15:47 -
tcpdump/ 20-Oct-1998 15:47 -
Last updated: September 24 1998
Release: 2.0
Authors: Hari Balakrishnan (hari@lcs.mit.edu)
Tom Henderson (tomh@cs.berkeley.edu)
Venkat Padmanabhan (padmanab@cs.berkeley.edu)
The authors are with the Daedalus research group at the University of
California, Berkeley (http://daedalus.cs.berkeley.edu).
Summary:
--------
This is BSD/OS 3.0 source code for the TCP Selective Acknowledgment
option based on IETF RFC 2018.
The main changes in the 3.0 code with respect to the SACK 2.1 code
(released summer 1996) are the following:
o In the 3.0 code, congestion avoidance is based on Reno TCP
with the "NewReno" bug fixes proposed by [Hoe96] and [FF97]. These
bug fixes prevent TCP from cutting its window multiple times due
to the same burst loss, and avoid false fast retransmissions after a timeout.
In the 2.1 code, congestion avoidance is based on Reno congestion control.
o If SACKs are disabled for a connection (either due to the
peer not supporting the option, or by user configuration), the default
congestion control behavior is NewReno.
o NewReno (without SACK) may be optionally compiled.
o SACK with Forward Acknowledgments (FACK), as described in
[MM96], may also be enabled. FACK makes use of SACK information to
more carefully control the amount of data outstanding during fast
recovery phases.
The file README.policy describes (in prose) the specific policies
implemented in the code.
The source code files in this directory are:
./netinet:
12 -rw-r--r-- 1 tomh daedalus in_proto.c
8 -rw-r--r-- 1 tomh daedalus tcp.h
87 -rw-r--r-- 1 tomh daedalus tcp_input.c
26 -rw-r--r-- 1 tomh daedalus tcp_output.c
18 -rw-r--r-- 1 tomh daedalus tcp_subr.c
12 -rw-r--r-- 1 tomh daedalus tcp_timer.c
-6 -rw-r--r-- 1 tomh daedalus tcp_usrreq.c
19 -rw-r--r-- 1 tomh daedalus tcp_var.h
./netinet-patch:
1 -rw-r--r-- 1 tomh daedalus in_proto.c.patch
2 -rw-r--r-- 1 tomh daedalus tcp.h.patch
27 -rw-r--r-- 1 tomh daedalus tcp_input.c.patch
11 -rw-r--r-- 1 tomh daedalus tcp_output.c.patch
2 -rw-r--r-- 1 tomh daedalus tcp_subr.c.patch
2 -rw-r--r-- 1 tomh daedalus tcp_timer.c.patch
2 -rw-r--r-- 1 tomh daedalus tcp_usrreq.c.patch
4 -rw-r--r-- 1 tomh daedalus tcp_var.h.patch
./tcpdump:
6 -r--r--r-- 1 hari daedalus interface.h
8 -rw-r--r-- 1 hari daedalus print-tcp.c
160 -rwxrwxr-x 1 hari daedalus tcpdump-i386-unknown-bsdi2.1.gz*
9 -r--r--r-- 1 hari daedalus tcpdump.c
The tcpdump directory contains the source modifications required for
SACKs, as well as a BSD/OS binary. This binary was originally compiled for
BSD2.1 but still works for BSD3.0. This version of tcpdump must be run as:
> tcpdump -T sack <other options>
for SACKs to be handled correctly.
Compiling this code:
-------------------
To compile this code without any porting, you must have source licenses for
BSDI (www.bsdi.com). Ports to other Net/3-derived stacks should be
straightforward.
Most of the code for SACK is in tcp_input.c, and a smaller amount is
in tcp_output.c. The other files have minor modifications or
additions. These files should be added or patched to /sys/netinet/.
There are three compile options:
i) To compile SACK alone
Add the following line to the /sys/i386/conf config file:
options SACK # TCP Selective Acknowledgments (IETF)
and config and make the kernel.
ii) To compile SACK and FACK (must be compiled together)
Add the following lines to the /sys/i386/conf config file:
options SACK # TCP Selective Acknowledgments (IETF)
options FACK # TCP SACK Forward Acknolwedgments
and config and make the kernel.
iii) To compile NEWRENO alone
Add the following line to the /sys/i386/conf config file:
options NEWRENO # TCP Reno bug fix
and config and make the kernel.
The BSD/OS 2.1 SACK code code has been used extensively for about two
years by the Daedalus project (http://daedalus.cs.berkeley.edu/) at UC
Berkeley. For the 2.1 code, cross-country experiments (16-18 Internet
hops) indicate a performance improvement of between 30 and 50% over
Reno for 32 KB socket buffer sizes, without sacrificing any of the
standard congestion control and avoidance mechanisms in TCP.
The SACK 3.0 code has been tested over emulated satellite links and
indicates a throughput improvement of up to 30% (for large file transfers) over
that of SACK 2.1, due to the NewReno congestion control behavior.
The FACK option has not been extensively tested or benchmarked as of September
1998, but is included for experimental purposes.
This BSD/OS 3.0 SACK code is largely based on the BSD/OS 2.1 code
written by Hari Balakrishnan, with modifications by Tom Henderson and
Venkat Padmanabhan.
Comments/bug reports can be sent to tomh@cs.berkeley.edu.
References:
----------
[FF96] K. Fall, and S. Floyd, Simulation-based Comparisons of Tahoe, Reno, and
SACK TCP. ACM CCR, Vol. 26, No. 3, July 1996.
[Hoe96] J. Hoe, Improving the Start-up Behavior of a Congestion Control Scheme
for TCP, Proc. ACM Sigcomm `96 Conference, pp. 270-280.
[MM96] M. Mathis and J. Mahdavi, Forward Acknowledgment: Refining TCP
Congestion Control, Proc. ACM Sigcomm `96 Conference.