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.
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
sunsite.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.