Issues with computer networking was one of those things I remember clearly from when I was younger. Connecting up two computers could be a massive pain, I remember at one point wasting over a day because the AppleTalk protocol wasn't installed on a computer at all. Windows 95 initially didn't ship with networking support, Windows 95 didn't ship with the infamous internet explorer, the inclusion of which would eventually lead to a famous antitrust case vs Microsoft starting in 1998 (remember when big tech was the subject of antitrust cases?). Mac OS 6 I think also didn't ship with networking support, I seem to remember having to track down TCP/IP support from somewhere. But this wasn't something I spent anywhere near as much time thinking about because computers just weren't as connected back then, the pre-internet era was very much a different era. This is quite the contrast to now where you have ludicrous things like your fridge being internet connected. The late 1990s was the era where LAN parties were a thing, an event where people would bring their computers around to a place to network them up and play games, online games let alone mobile games just weren't a thing yet. Back then all I really cared about was getting on this new thing called "the internet" and that was via a dial up modem running PPP. What happened after it hit my ISP I cared much less about, they had an Integrated Services Digital Network line and did some ISP stuff to get everything hooked up. That ISDN line was one of the "fast"(!) T1 varieties with a whopping 1544 kbit/s available to them! It's funny to note that in the dot com speculative bubble that small local ISP sold for some huge amount and was acquired by a larger company. Their old location is now a pizza place.
I'd use my 28.8k modem to dial in and then browse some pages with Netscape Navigator. At the time I'm fairly sure that my computer didn't support ethernet with TCP/IP out of the box, I didn't really think much of that lack of network protocol support at the time. This is in part because the computer didn't actually have a built in ethernet card and I didn't have a network to plug it in to even if it did. If there was ever an annoyance it was with a notoriously annoying thing called "pair gain" which was one of those hacks that was made long ago in the past to get some additional voice line capacity on existing copper lines by multiplexing the signals. Unfortunately this ends up being really bad for running DSL lines and this turned out to be a massive nightmare for getting high speed internet in Australia because of a chronic lack of investment in "last mile" internet infrastructure, but more about that story in another post maybe.
Fast forward two and a half decades and I was teaching network automation with Python to a variety of people working at telecommunications companies. One thing that struck me at the time was the graveyard of old networking protocols that you see when you look at what protocol support there is in modern packages like Python's netifaces. Behold:
$ python3 Python 3.6.9 (default, Apr 18 2020, 01:56:04) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import netifaces >>> dir(netifaces) ['AF_APPLETALK', 'AF_ASH', 'AF_ATMPVC', 'AF_ATMSVC', 'AF_AX25', 'AF_BLUETOOTH', 'AF_BRIDGE', 'AF_DECnet', 'AF_ECONET', 'AF_FILE', 'AF_INET', 'AF_INET6', 'AF_IPX', 'AF_IRDA', 'AF_ISDN', 'AF_KEY', 'AF_LINK', 'AF_NETBEUI', 'AF_NETLINK', 'AF_NETROM', 'AF_PACKET', 'AF_PPPOX', 'AF_ROSE', 'AF_ROUTE', 'AF_SECURITY', 'AF_SNA', 'AF_UNIX', 'AF_UNSPEC', 'AF_WANPIPE', 'AF_X25', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'address_families', 'gateways', 'ifaddresses', 'interfaces', 'version']
I like moments like this because they give you a chance to step back and think about implementation details that you can easily take for granted. And there's a lot of these details, as you can see in my "page requests to the metal" series where I follow all the steps that a web request makes through the stack. This came up when I was running a network automation in Python workshop at a major telecommunications company and one of the network engineers asked me what protocols were supported with current versions of Python. I didn't know offhand since the vast majority of the time these days I'm just working with the major protocols, but I did want to find out. Hence we had a look at what the
netifaces package supported and had a bit of a collective nostalgia trip talking about various protocols in the list that we'd used in the past but don't use now.
You can see support here in modern Python for some protocols that simply aren't in widespread use anymore like AppleTalk1 and Novell's IPX. The interesting thing here is that these protocols are a just a subset of all the protocols out there. There are probably some legacy protocols that are being run in only a few places and some that aren't being used anywhere anymore. Because of the proprietary nature of some of the old protocols there are many older protocols that are simply lost to history now (some binary protocols especially come to mind). I think it's very interesting to note just how much TCP/IP has taken over in the network protocols space. Even if something else comes to supplant it in the future the open nature of TCP/IP will mean that people in the future can go back and look at the documentation to understand what was going on, provided of course that the file formats those documents were written in can still be interpreted correctly in the future.
I just checked and AppleTalk support was dropped all the way back in 2009 with the release of Mac OS X v10.6. ↩