Developing a brand new kernel implementation of the tcp/ip protocol stack that would perform as well as existing implementations was not an easy task. The decision not to port one of the existing implementations was made at a time when there was some uncertainty as to whether the existing implementations may become encumbered by restrictive copyrights because of the court case put by U.S.L. and when there was a lot of fresh enthusiasm for doing it differently and perhaps even better than had already been done.
The original volunteer to lead development of the kernel network
code was Ross Biro <biro@yggdrasil.com>. Ross
produced a simple and incomplete but mostly usable implementation
set of routines that were complemented by an ethernet driver for
the WD-8003 network interface card. This was enough to get many
people testing and experimenting with the software and some
people even managed to connect machines in this configuration to
live internet connections. The pressure within the Linux
community driving development for networking support was building
and eventually the cost of a combination of some unfair pressure
applied to Ross and his own personal commitments outweighed the
benefit he was deriving and he stepped down as lead developer.
Ross's efforts in getting the project started and accepting the
responsibility for actually producing something useful in such
controversial circumstances were what catalyzed all future work
and were therefore an essential component of the success of the
current product.
Orest Zborowski <obz@Kodak.COM> produced the
original BSD socket programming interface for the Linux kernel.
This was a big step forward as it allowed many of the existing
network applications to be ported to linux without serious
modification.
Somewhere about this time Laurence Culhane
<loz@holmes.demon.co.uk> developed the first
drivers for Linux to support the SLIP protocol. These enabled
many people who did not have access to Ethernet networking to
experiment with the new networking software. Again, some people
took this driver and pressed it into service to connect them to
the Internet. This gave many more people a taste of the
possibilities that could be realized if Linux had full networking
support and grew the number of users actively using and
experimenting with the networking software that existed.
One of the people that had also been actively working on the task
of building networking support was Fred van Kempen
<waltje@uwalt.nl.mugnet.org>. After a period
of some uncertainty following Ross's resignation from the lead
developer position Fred offered his time and effort and accepted
the role essentially unopposed. Fred had some ambitious plans for
the direction that he wanted to take the Linux networking
software and he set about progressing in those directions. Fred
produced a series of networking code called the `NET-2' kernel
code (the `NET' code being Ross's) which many people were able to
use pretty much usefully. Fred formally put a number of
innovations on the development agenda, such as the dynamic device
interface, Amateur Radio AX.25 protocol support and a more
modularly designed networking implementation. Fred's NET-2 code
was used by a fairly large number of enthusiasts, the number
increasing all the time as word spread that the software was
working. The networking software at this time was still a large
number of patches to the standard release of kernel code and was
not included in the normal release. The NET-FAQ and subsequent
NET-2-HOWTO's described the then fairly complex procedure to get
it all working. Fred's focus was on developing innovations to the
standard network implementations and this was taking time. The
community of users was growing impatient for something that
worked reliably and satisfied the 80% of users and, as with Ross,
the pressure on Fred as lead developer rose.
Alan Cox <iialan@www.uk.linux.org> proposed a
solution to the problem designed to resolve the situation. He
proposed that he would take Fred's NET-2 code and debug it,
making it reliable and stable so that it would satisfy the
impatient user base while relieving that pressure from Fred
allowing him to continue his work. Alan set about doing this,
with some good success and his first version of Linux networking
code was called `Net-2D(ebugged)'. The code worked reliably in
many typical configurations and the user base was happy. Alan
clearly had ideas and skills of his own to contribute to the
project and many discussions relating to the direction the NET-2
code was heading ensued. There developed two distinct schools
within the Linux networking community, one that had the
philosophy of `make it work first, then make it better' and the
other of `make it better first'. Linus ultimately arbitrated and
offered his support to Alan's development efforts and included
Alan's code in the standard kernel source distribution. This
placed Fred in a difficult position. Any continued development
would lack the large user base actively using and testing the
code and this would mean progress would be slow and difficult.
Fred continued to work for a short time and eventually stood down
and Alan came to be the new leader of the Linux networking kernel
development effort.
Donald Becker <becker@cesdis.gsfc.nasa.gov>
soon revealed his talents in the low level aspects of networking
and produced a huge range of ethernet drivers, nearly all of
those included in the current kernels were developed by Donald.
There have been other people that have made significant
contributions, but Donald's work is prolific and so warrants
special mention.
Alan continued refining the NET-2-Debugged code for some time
while working on progressing some of the matters that remained
unaddressed on the `TODO' list. By the time the Linux
1.3.* kernel source had grown its teeth the kernel
networking code had migrated to the NET-3 release on which
current versions are based. Alan worked on many different aspects
of the networking code and with the assistance of a range of
other talented people from the Linux networking community grew
the code in all sorts of directions. Alan produced dynamic
network devices and the first standard AX.25 and IPX
implementations. Alan has continued tinkering with the code,
slowly restructuring and enhancing it to the state it is in
today.
PPP support was added by Michael Callahan
<callahan@maths.ox.ac.uk> and Al Longyear
<longyear@netcom.com> this too was critical to
increasing the number of people actively using linux for
networking.
Jonathon Naylor <jsn@cs.nott.ac.uk> has
contributed by significantly enhancing Alan's AX.25 code, adding
NetRom and Rose protocol support. The AX.25/NetRom/Rose support
itself is quite significant, because no other operating system
can boast standard native support for these protocols beside
Linux.
There have of course been hundreds of other people who have made significant contribution to the development of the Linux networking software. Some of these you will encounter later in the technology specific sections, other people have contributed modules, drivers, bug-fixes, suggestions, test reports and moral support. In all cases each can claim to have played a part and offered what they could. The Linux kernel networking code is an excellent example of the results that can be obtained from the Linux style of anarchic development, if it hasn't yet surprised you, it is bound to soon enough, the development hasn't stopped.
There are a number of places where you can find good information about Linux networking.
There are a wealth of Consultants available. A listing can be found at LinuxPorts Consultants Database
Alan Cox, the current maintainer of the Linux kernel networking code maintains a world wide web page that contains highlights of current and new developments in linux Networking at: www.uk.linux.org.
Another good place is a book written by Olaf Kirch entitled the
Network Administrators Guide. It is a work of the
Linux Documentation
Project and you can read it interactively at Network
Administrators Guide HTML version or you can obtain it in
various formats by ftp from the metalab.unc.edu
LDP ftp archive. Olaf's book is quite comprehensive and
provides a good high level overview of network configuration
under linux.
There is a newsgroup in the Linux news hierarchy dedicated to networking and related matters, it is: comp.os.linux.networking
There is a mailing list to which you can subscribe where you may ask questions relating to Linux networking. To subscribe you should send a mail message:
To: majordomo@vger.rutgers.edu Subject: anything at all Message: subscribe linux-net
On the various IRC networks there are often #linux
channels on which people will be able to answer questions on
linux networking.
Please remember when reporting any problem to include as much relevant detail about the problem as you can. Specifically you should specify the versions of software that you are using, especially the kernel version, the version of tools such as pppd or dip and the exact nature of the problem you are experiencing. This means taking note of the exact syntax of any error messages you receive and of any commands that you are issuing.
If you are after some basic tutorial information on tcp/ip networking generally, then I recommend you take a look at the following documents:
this document comes as both a text version and a postscript version.
this document comes as both a text version and a postscript version.
If you are after some more detailed information on tcp/ip networking then I highly recommend:
Internetworking with TCP/IP, Volume 1: principles, protocols and architecture, by Douglas E. Comer, ISBN 0-13-227836-7, Prentice Hall publications, Third Edition, 1995.If you are wanting to learn about how to write network applications in a Unix compatible environment then I also highly recommend:
Unix Network Programming, by W. Richard Stevens, ISBN 0-13-949876-1, Prentice Hall publications, 1990.A second edition of this book is appearing on the bookshelves; the new book is made up of three volumes: check Prenice-Hall's web site to probe further.
You might also try the comp.protocols.tcp-ip newsgroup.
An important source of specific technical information relating to the Internet and the tcp/ip suite of protocols are RFC's. RFC is an acronym for `Request For Comment' and is the standard means of submitting and documenting Internet protocol standards. There are many RFC repositories. Many of these sites are ftp sites and other provide World Wide Web access with an associated search engine that allows you to search the RFC database for particular keywords.
One possible source for RFC's is at Nexor RFC database.