A TCP/IP Tutorial (1991)
290 points by Liwink 5 years ago | 33 comments- systemvoltage 5 years agoTangential: Does anyone know how to generate HTML docs such as this? It looks like a page in a book - with a header/footer and page number. And, surprisingly no one in 1991 imaged we would be reading it on a 4k widescreen - and here I am, and it is extremely readable (using SF Mono on macOS). I would love to know what tools can be used to generate almost paper-like HTML docs.
Edit: I found the answer, tiny link at the bottom: https://tools.ietf.org/tools/rfcmarkup/
- lozf 5 years ago> Edit: I found the answer, tiny link at the bottom: https://tools.ietf.org/tools/rfcmarkup/
If you read the link, that just adds the HTML markup to plain text ASCII RFCs (which were deprecated in favour of XML, back in 2013 as per RFC 7994.)
RFC 7990 has more details on the format framework. But for actual guidance on the tools used, you probably want to peruse the "Prepare documents" section of the IETF's tools[0] page, or those at rfc-editor.org[1].
[1]: https://www.rfc-editor.org/pubprocess/tools/
XML, markdown, asciidoc, Bibtex, nroff, and even Word are covered.
- yjftsjthsd-h 5 years agopr(1) can do it - https://linux.die.net/man/1/pr
- andrewzah 5 years agoYou could also achieve this with LaTeX and pandoc.
- systemvoltage 5 years agoWith similar formatting and index?
- pan69 5 years agoYes. This book uses pandoc:
https://github.com/jagregory/abrash-black-book
This is the HTML output:
- pan69 5 years ago
- systemvoltage 5 years ago
- ducktective 5 years agoHow about a version-controllable markdown diagram generator? https://mermaid-js.github.io/mermaid/
- lozf 5 years ago
- hashhar 5 years agoIs there an up to errata to track what has changed in to 30(?) years?
This was quite easy to follow and worked up from basics. Don't really see such well written documentation these days.
- ainam48948 5 years agoYeah, this documentation was really well written.
- ainam48948 5 years ago
- state_less 5 years agoOpening raw sockets in Linux is a fun way to bang out your own IP, ARP, and ICMP packets for experimenting. I remember the joys of packet spoofing/flooding in college. I think with WiFi you're limited to the AP you're attached to?
It'd be a fun hack to read and inject raw wifi or LTE frames to get a count of radios within range, when they transmit and other details of the low level protocols. It looks like with SDR, folks are able to get better access to the physical layer.
https://www.crowdsupply.com/lime-micro/limesdr-mini/updates/...
- 2bitencryption 5 years agoOnly a few years ago in college (2014?) I lived in a fraternity house and frequently had to track people down for updates on projects.
Turns out Apple devices did (or still do?) expose the DNS hostname with a format like: JAKES-iphone-some-guid
I created a little script to ping the local network for known hosts, return a reverse lookup of the hostnames, parse the name from the iPhone hostname, and update their status in little list of who was in the building, in case I needed them for something.
- 2bitencryption 5 years ago
- middleclick 5 years agoAre there other good resources to learn about TCP and UDP? Everyone recommends the Stevens book so I think I should get that?
- commandlinefan 5 years agoI'll just second the Stevens book (TCP/IP Illustrated, volume 1). But get a used copy of the first edition, NOT the second edition that was desecrated by that other author, it's awful. Although the first edition is decades out of date, it still does a great job of explaining WHY things are designed the way they are, and you'll easily be able to make sense of the newer stuff on your own.
- tzs 5 years agoI miss the days of books like that. They seem much rarer for today's technology.
By "books like that", I mean a book that is well-written, detailed, gets you will up to speed on the topic, and does not assume you will be reading the thing while sitting at a computer.
For example, in college I got a part time job doing programming for the physics department in C. I bought K&R, and read it in the evenings. Maybe every couple of chapters or so I'd go to the computer center and write a program to test out what I'd read.
This was before personal computer were common, so the authors could not assume you were at a computer while reading...thus avoiding the fate of far too many modern books that end up more of a "how to use this particular tool set to compile and run X code" book than a "how to write programs in language X" book.
At a later job I was going to need to write router and bridge firmware. I bought and read the Stevens books and Tanenbaum's computer networking book. That got me sufficiently up to speed to cover most of what I needed for my firmware and gave me enough background to read specs and standards for whatever more I needed.
In the '70s, '80s, and much of the '90s that is how it went for every technical thing I needed to learn.
It's harder to find those kinds of resources today. Two things have changed.
First, as computing became more mainstream, a lot more people jumped in to do books. Instead of only one or two good books, like K&R and Harbison & Steel for C, there would be dozens of books and most of them were poor at best. The good books were still there, but harder to find.
Second, as more and more documentation moved to the web authors and site designers seem to have forgotten that we read and learn linearly. I want the site to tell me a good starting point, and provide "next" links on each page that will take me through the whole topic in a good learning order.
Too often each article just has a set of links to various related articles, and it is easy to end up in some closed subset of the articles and no idea you've missed anything unless you remember that the article you read 10 articles back had links to X, Y, and Z, you followed X, and Y eventually came up again and you read it, but you haven't seen a link to Z for a while, and so you go back to the top of the site and start looking for Z.
- tzs 5 years ago
- ignoramous 5 years agoIf you fancy reading some rust, smoltcp [0] by u/whitequark_ [1] is a pretty good starting point, especially considering it intentionally leaves out functionality and compliance for the sake of simplicity and safety [2][3].
Then there are the more complete netmap [4] and lwIP [5] TCP/IP implementations too, but in C.
---
[0] https://docs.rs/smoltcp/0.6.0/smoltcp/
[1] https://news.ycombinator.com/item?id=17896175
[2] https://github.com/smoltcp-rs/smoltcp/blob/master/README.md
[3] https://news.ycombinator.com/item?id=20241138
- ignoramous 5 years ago> Then there are the more complete netmap...
My bad. Netmap is a "kernel-network-stack bypass" mechanism [0]. Usually a userland TCP/IP implementation is used in conjunction with it [1].
Then there's NetStack for gVisor [2] in golang.
[0] https://news.ycombinator.com/item?id=10365731
- ignoramous 5 years ago
- XnoiVeX 5 years agoI really like Doug Comer's books on the topic. https://www.cs.purdue.edu/homes/comer/netbooks.html
- blueatlas 5 years agoI was just going to say the same - I learned basic networking and the TCP/IP stack with Comer's first edition of Internetworking with TCP/IP. His way of explaining it just clicked with me.
- blueatlas 5 years ago
- tptacek 5 years agoI started my career doing low-level TCP/IP stuff and always found Comer's books more readable and more coherent than Stevens, which I'm not especially a fan of.
https://www.amazon.com/Internetworking-TCP-IP-One-6th/dp/013...
I'd second everyone else's recommendation that you just start hacking on an embeddable TCP/IP stack. It's not even hard to build one from scratch once you get over the reading/writing ethernet frames hurdle (which is just a library integration challenge).
- JJMcJ 5 years agoNot really a full overview but a nice intro that covers much of what is done day to day, maybe most of it for a basic client or straightforward low capacity server:
- tptacek 5 years agoJulia Evans wrote something great about this, as she always does:
https://jvns.ca/blog/2014/08/12/what-happens-if-you-write-a-...
- tptacek 5 years ago
- JJMcJ 5 years ago
- echeese 5 years agoI've always been a fan of Beej's Guide to Network Programming https://beej.us/guide/bgnet/
- zw123456 5 years agoData and Computer Communications, William Stallings
- commandlinefan 5 years ago
- chrisweekly 5 years agoRelated tangent: "Browser-based Networking" (O'Reilly) is a fantastic, reasonably modern and fairly thorough resource that, in encompassing some higher levels in the stack, can at least complement core reference materials for the foundation. Highly recommended.
- qilo 5 years agoYou probably meant “High Performance Browser Networking” https://hpbn.co
- chrisweekly 5 years ago(facepalm) Yes, thank you, that's exactly what I meant. Left to confirm the title and link, got distracted, too late to edit.
HPBN is great!
- chrisweekly 5 years ago
- afroisalreadyin 5 years agoDo you mean "High Performance Browser Networking"? I couldn't find a "Browser-based Networking.
- chrisweekly 5 years agoyep, thanks, see my res to peer comment
- chrisweekly 5 years ago
- qilo 5 years ago
- Jahak 5 years agoAre there any new tutorials on TCP/IP? Modern computer networks and free articles, books, etc.
- oliverx0 5 years agoVery related to this discussion: https://news.ycombinator.com/item?id=18506651
I personally really enjoyed: https://hpbn.co/
- guu 5 years agoIt's .NET focused but this FAQ[0] (2009) has good general advice regarding things like message framing and detecting dropped connections.
[0]: https://blog.stephencleary.com/2009/04/tcpip-net-sockets-faq...
- oliverx0 5 years ago
- 0xff00ffee 5 years agoI think this is a great example of how to take a fairly complicated topic that goes deep, and progressively build an understanding with successive refinement of examples. They way the paper goes from the "what" to "why" is really well thought-out.
- ainam48948 5 years agoOh yeah, I was going to read this a while back, I'll be sure to keep this on my reading list.
- SeanFerree 5 years agoVery cool!