Source: http://kohala.com/start/
Timestamp: 2019-04-18 18:42:35+00:00

Document:
UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications, Prentice Hall, 1999.
UNIX Network Programming, Volume 1, Second Edition: Networking APIs: Sockets and XTI, Prentice Hall, 1998.
TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols, Addison-Wesley, 1996.
TCP/IP Illustrated, Volume 2: The Implementation, Addison-Wesley, 1995.
TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley, 1994.
Advanced Programming in the UNIX Environment, Addison-Wesley, 1992.
UNIX Network Programming, Prentice Hall, 1990.
Allman, M., Paxson, V., Stevens, W. R. 1999. "TCP Congestion Control," RFC 2581.
Gilligan, R. E., Thomson, S., Bound, J., and Stevens, W. R. 1999. "Basic Socket Interface Extensions for IPv6," RFC 2553.
Stevens, W. R., and Thomas, M. 1998. "Advanced Sockets API for IPv6," RFC 2292.
Stevens, W. R., and Pendry, J.-S. 1995. "Portals in 4.4BSD," Proceedings of the 1995 Winter USENIX Technical Conference, pp. 1-10, New Orleans, La.
Stevens, W. R. 1989. "Heuristics for Disk Drive Positioning in 4.3BSD," Computing Systems, vol. 2, no. 3, pp. 251-274 (Summer).
Some of the following are papers that I have referenced in my books, often Usenet postings, that are not easily obtainable. Others are just papers that I think are interesting. Enjoy--most are classics.
Borman, D. A. 1997, " Re: Frequency of RST terminated connections," end2end-interest Mailing List, Jan. 30, 1997. A note that the upper limit of port 5000 for the ephemeral port numbers was a typo that occurred around 1986 right before 4.3BSD was released. The upper limit was meant to be 50,000.
Borman, D. A. 1997, " Re: SYN/RST cookies," tcp-impl Mailing List, June 6, 1997. A note that the concept of the listen() backlog is a limit on the number of established connections. The purpose of this limit is to prevent TCP from accepting new connection requests when the application is not accept()ing them.
Braden, R. T. 1993, " TCP Extensions for High Performance: An Update," Internet Draft, June 21, 1993. Unfortunately this Internet Draft expired quite a while ago and was never published as an RFC. Nevertheless, the ideas in the draft appear in all current implementations of RFC 1323.
I have always been a fan of Richard W. Hamming. I did not keep very many of the textbooks that I acquired in graduate school, but kept all four of his books (along with all my Knuth, Kernighan, and Kleinrock books). Here is a wonderful biography and obituary of Hamming (6 pages of PostScript), which includes a nice summary of his major accomplishments. Here are the three photos that go with the biography.
I will never forget having learned about digital filters from the classic Digital Signal Processing books of the 1970s (Oppenheim and Schafer, etc.) and then finding Hamming's Digital Filters book, and wondering why all the classic texts made the topic so hard to understand when Hamming could make it so easy to understand. Some readers have told me that they find that my books make a complicated subject (such as network programming) easy to understand--if that is true, then it is due to the influence of writers like Richard Hamming and Brian Kernighan.
Jacobson, V. 1987, " Re: Interpacket Arrival Variance and Mean," June 15, 1987. An explanation and example C code for estimating the mean and variance of a series of measurements.
Jacobson, V. 1987, " Re: Your congestion scheme," Nov. 16, 1987. An early email on slow start and congestion avoidance.
Jacobson, V. 1988, " Dynamic Congestion Avoidance / Control, Feb. 11, 1988. Another early posting on congestion avoidance.
Jacobson, V. 1988, " Some Interim Notes on the BSD Network Speedup," Usenet, comp.protocols.tcp-ip Newsgroup, Message-ID <8807200426.AA01221@helios.ee.lbl.gov>, July 20, 1988.
Jacobson, V. 1988, " 4BSD TCP Ethernet Throughput," tcp-ip Mailing List, Oct. 24, 1988.
Jacobson, V. 1988, " Performance," Usenet, comp.protocols.tcp-ip Newsgroup, Message-ID <8811231121.AA19744@helios.ee.lbl.gov>, Nov. 23, 1988.
Jacobson, V. 1990, " Modified TCP Congestion Avoidance Algorithm," end2end-interest Mailing List, Apr. 30, 1990.
Jacobson, V. 1992, " Design Changes to the Kernel Network Architecture for 4.4BSD, 4.4BSD Class, Berkeley, Calif., May 1992. These overheads contains additional details about the changes described in [Partridge 1993] and [Jacobson 1993]. Note that despite the title, these changes never made it into the 4.4BSD release.
Jacobson, V. 1993, " Some Design Issues for High-Speed Networks," Networkshop '93, Melbourne, Australia, Nov. 1993. Additional details about the changes described in [Partridge 1993].
Jacobson, V. 1994, " Problems With Arizona's Vegas," end2end-tf Mailing List, Mar. 14, 1994. PostScript illustration referenced in this posting.
Jacobson, V. 1994, " Re: half baked anycastoff idea...," end2end-interest Mailing List, Jun. 27, 1994. A note that 4.4BSD intended to incorporate a lazy accept for TCP.
Jacobson, V. 1999, " Re: traceroute history: why UDP?," Usenet, comp.protocols.tcp-ip Newsgroup, Message-ID: <79m7m4$reh$1@dog.ee.lbl.gov>, Feb. 8, 1999. People have wondered why traceroute uses UDP probes instead of ICMP echo probes (which apparently Microsoft traceroute uses). Here is the answer from the original author.
Readers (and copy editors) are occasionally surprised by my use of compound words, instead of using either the open or hyphenated form. That is, I write filesystem instead of either file system or file-system. The Chicago Manual of Style acknowledges this trend (Section 6.38). Don Knuth has a wonderul paragraph about why we should write email instead of e-mail and just accept the fact now that it will become a compound word.
Lanciani, D. 1996, " Re: sockets: AF_INET vs. PF_INET," Usenet, comp.protocols.tcp-ip Newsgroup, Message-ID: <3561@news.IPSWITCH.COM>, Apr. 1996. Contains a copy of the 4.1cBSD manual page for the original socket() function, showing why the PF_ constants existed, independent of the AF_ constants.
Libes, D. 1990, " Implementing Software Timers," C User's Journal, Nov. 1990. A handy set of C functions to implement any number of software timers in a process using a single timer signal.
Maslen, T. M. 1997, " Re: gethostbyXXXX() and threads," Usenet, comp.programming.threads Newsgroup, Message-ID: <maslen.862463530@shellx>, May 1997. An interesting history of the development of the Solaris gethostbyXXXX_r() functions.
Mogul, J. 1992, " Re: Holy Turbocharger Batman, (evil, cheating) NFS async writes fly," Usenet, comp.protocols.nfs Newsgroup, Message-ID: <1992Mar2.191711.9935@PA.dec.com>, March 1992.
Muuss, M. J., " The Story of the PING Program." A history of the PING program, by its original author.
There exists a children's book The Story About Ping, that, sadly, is not about this command. Nevertheless, a funny review of this book was posted to Amazon in March 1999. Amazon promptly removed the review (no sense of humor?), then put it back.
Partridge, C. 1993, " Jacobson on TCP in 30 Instructions," Usenet, comp.protocols.tcp-ip Newsgroup, Message-ID <1993Sep8.213239.28992@sics.se>, Sept. 1993.
Partridge, C., and Pink, S. 1993. " A Faster UDP," IEEE/ACM Transactions on Networking, vol. 1, no. 4, pp. 429-440 (PostScript, 148K).
This is a summary of the accidental priority inversion that occurred with the Mars Pathfinder mission in July, 1997. This summary is by Mike Jones, dated December 7, 1997, and was then widely circulated after it appeared in Peter G. Neumann's moderated Risks Forum (comp.risks) on December 9, 1997 in issue RISKS-19.49.
Paxson, V. 1995, " Re: Traceroute and TTL," Usenet, comp.protocols.tcp-ip Newsgroup, Message-ID <48407@dog.ee.lbl.gov> Sept. 1995. 30% of measured Internet routes are asymmetrical. See the next reference for the final version of the SIGCOMM paper that is referenced in the posting.
Paxson, V. 1996, " End-to-End Routing Behavior in the Internet," SIGCOMM 1996, Aug. 1996.
Jon Postel passed away unexpectedly on October 16, 1998. Here are three wonderful acknowledgments of Jon's many contributions to the Internet by Dave Farber, Vint Cerf, and Bob Braden.
Dennis Ritchie's home page contains some classic papers: "The Evolution of the Unix Time-sharing System," "The Development of the C Language," and "A Stream Input/Output System," for example.
Shimomura, T. 1995, " Technical details of the attack described by Markoff in NYT," Usenet, comp.protocols.tcp-ip Newsgroup, Message-ID <3g5gkl$5j1@ariel.sdsc.edu>, Jan. 1995. A technical explanation of the Internet break-in of December 1994 along with the CERT advisory.
RPC Mailing List Discussion, 1995, " RPC is a poor solution anyway, so why bother?," end2end-interest Mailing List, Feb. 1995. Whenever I teach RPC I always mention that it is a controversial topic. This is a collection of eight postings by some knowledgeable people on the topic of RPC, some pro, some con. This discussion was generated by the proposal from Sun to publish their RPC specifications as RFCs (which were published as RFCs 1831, 1832, and 1833, preceded by the agreement detailed in RFC 1790).
Torek, C. 1994, " Re: Delay in re-using TCP/IP port," Usenet, comp.unix.wizards Newsgroup, Message-ID <199501010028.QAA16863@elf.bsdi.com>, Dec. 1994. A great explanation of why the SO_REUSEADDR socket option is needed with the bind() function.
Unix International, 1991, " Data Link Provider Interface Specification, Revision 2.0.0," Aug. 1991. (1.4 Mbytes PostScript, 185 pages.) This paper and the next two are the only publicly available documentation that I am aware of for the System V Release 4 STREAMS interfaces to the datalink layer, network layer, and transport layer. They used to be available on the Unix International FTP site, when UI existed.
Unix International, 1992, " Transport Provider Interface Specification, Revision 1.5," Dec. 1992. (360 Kbytes PostScript, 51 pages.) The Transport Provider Interface is what sockets, XTI, and TLI talk to on an SVR4 system.
White, J. E. 1975. " A High-Level Framework for Network-Based Resource Sharing," RFC 707, Dec. 1975. This is probably one of the first papers describing RPC (remote procedure calls). Most RFC indexes list this RFC as not being on-line, but someone found a copy of it for posterity. This paper also appeared in the Proceedings of the National Computer Conference in June 1976, and that is how it is normally referenced in RPC papers and texts.
This section contains some notes on how I write books.
This used to be a tar file containing the Posix.1g getaddrinfo() function that supports both IPv4 and IPv6.
You should now go to here and fetch the source code from this book, which contains the implementation, and the sample chapter, which describes the implementation in great detail.
IP multicast API information. This describes the multicast API (application programming interface) using sockets for IPv4. It is from Steve Deering's original multicast release README (1989) but is still valid. Section 5 of RFC 2553 describes the multicast API for IPv6.
There is a complete description of multicasting in general along with a detailed description of the IPv4 and IPv6 multicast API using sockets in this book, with four example programs. Even if you don't want to buy the book, fetch the source code for the book, and look at the mcast_ functions in the lib/ directory along with the example programs in the mysdr, mcast, ssntp, and sntp directories.
This paper by Semeria and Maufer is a nice introduction to multicasting in general, and multicast routing.
mtest.c: the test program from Steve Deering's original multicast release. Use it as another example of the multicast API.
I received the B.S.E. in Aerospace Engineering from the University of Michigan (1973), and the M.S. (1978) and Ph.D. (1982) in Systems Engineering (image processing major, physiology minor) from the University of Arizona.
I have had many lives as a programmer. After getting my B.S.E. I spent 2 years writing operating systems in assembler, 7 years in the astronomy world (at Kitt Peak National Observatory in Tucson, doing real-time data acquisition and image processing), then 8 years as Vice President of a health-care software startup in Connecticut (Health Systems International). Since 1990 I have been self-employed, living in Tucson, writing books full-time with occasional teaching of classes based on the books.
In what seems to be a previous life (1970s) I was a flight instructor, although most of my flying these days is in the back of a commercial airliner or down the steeps at Taos Ski Valley. I am willing to admit that my first programming language was Fortran, that I once programmed in Forth and Cobol, and that I still have (from my undergraduate years) both my IBM green card and my slide rule (which Kelly Johnson calls a "Michigan calculator").
Here is a longer biography, mainly about how I got into computers and Unix.
Here is a chronological list of the various computer systems and programming languages that I have used.
Chronologically and geographically I have lived lots of places. When someone asks me "where are you from?" or "where did you grow up?" my reply begins with "it's a long story".
1951: I was born in Luanshya, Northern Rhodesia (now Zambia). My father (an American, although he had spent much of his youth in Southern Africa and Tasmania) was working at the Roan Antelope Copper Mine, where he had worked as a metallurgical engineer since graduating from Columbia University in 1937. My mother (also an American) had gone to Northern Rhodesia to visit her brother (another mining engineer from Columbia), met my father, got married, and stayed 16 years longer than planned.
1956-1960: Salt Lake City, Utah. My father was working for Kennecott Copper Corp. (Bingham Canyon).
1960-1964: Hurley, New Mexico. My father was working for Kennecott Copper Corp. (Chino Mines).
1964: Washington, D.C. My father was at the Brookings Institution for 6 months.
1964-1968: Waynesboro, Virginia. When my parents moved to South Africa I was about to start high school, and had my choice of a boarding school in the U.S. or an English-style boarding school in South Africa. I chose the former and attended Fishburne Military School for 4 years, going "home" to South Africa each summer.
1968-1973: Ann Arbor, Michigan, attending the University of Michigan.
1969: Sallisaw, Oklahoma. I had a summer job with Bechtel Corp. at the construction of the Kerr McGee uranium treatment plant in Gore, OK.
1971, 1972: Carrollton, Georgia. I had summer jobs with the Southwire Corp., the first summer as a computer operator, and the second summer as a programmer.
1973-1975: Santa Ana, California. After graduating from Michigan, I worked for 2 years at Singer's M & M Computer Division as a programmer.
1975-1982: Tucson, Arizona. I worked full-time for Kitt Peak Observatory and attended graduate school at the University of Arizona. Yes, it is possible to obtain a Ph.D. while working full-time, although you don't have much free time.
1982-1990: New Haven, Connecticut. I worked for Health Systems International.

References: V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V. 
 V.