TAGS: | |

Classful Routing Has Little Meaning In Modern Networking

Ethan Banks

Nelson writes…

Why do modern articles on network subnetting still use the language of classed routing? I cannot find anything that just uses CIDR (and in the most modern interpretation) terminology, they always fall back to “Let’s subnet a Class C address.” I am a lecturer in Computer Support at a community college. My usual topics are OS (Win/Linux) admin, Programming (Python, PS, Bash), Database. One of my colleagues asked me to sub for him to do the first of our Network course (Cisco). He said to teach them intro network terminology and introduce subnetting. I thought 5 minutes of googling would give me core material to get up to speed. I am 8 hours of work in, and everything is Classful tainted. Am I missing something?”

Here’s my two cents. Classful routing is a point of historical interest only. If I was preparing course material on this myself, I’d cover classful vs. CIDR in an intro module as it offers context for the terminology around “class A” etc. that crops up in networking literature, RFCs, and so on.

Much of the aging networking literature persists past the normal shelf life of tech literature as networking changes less quickly than other tech. Networking history is often important for reasons beyond pedantry or trivial pursuit. Once covered in the intro, I’d move on with the assumption that all usable IPv4 address space used in the real world is subnetted classlessly, because it is.

For what it’s worth, I’m old enough to remember when the default routing posture for a Cisco device was classful, and you actually had to tell the device you wanted to use CIDR via “ip classless”. “Ip classless” became the default posture as of Cisco IOS 12.0 if my Internet search-fu is strong today. That was a long time ago–I suppose around 20 years.

No networking practitioner thinks in terms of classes today, at least not in the way it was originally meant. We think in terms of slash notation. I would say “let’s create a /24” as opposed to “let’s create a class C”. Although to be fair, I might slip and say “class C” from time to time because old habits die hard—not because it’s correct as defined in RFC791 (1981!). But generally speaking, a networker with some gray hair would take you to mean “class A” as a /8, “class B” as a /16, and “class C” as a /24”, even though that isn’t technically accurate.

It’s worth pointing out that the class D and E address space is still meaningful. Multicast still occupies class D address space, and class E is still reserved. Both are still on bogon lists based on a quick check. Here’s an interesting recent thread discussing “Why can’t we use class E?

I suspect you’re already steeped in these, but in case not…RFC1519 and RFC1817 document the history of what was going on at the time in the mid-1990’s driving the transition from classful to classless.

And finally, I think this Wikipedia article explaining classful networks gets things about right.

About Ethan Banks: Hey, I'm Ethan, co-founder of Packet Pushers. I spent 20+ years as a sysadmin, network engineer, security dude, and certification hoarder. I've cut myself on cage nuts. I've gotten the call at 2am to fix the busted blinky thing. I've sat on a milk crate configuring the new shiny, a perf tile blowing frost up my backside. These days, I research new enterprise tech & talk to the people who are making or using it for your education & amusement. Hear me on the Heavy Networking podcast.

Leave a Comment

window.addEventListener("DOMContentLoaded", function() { var preElements = document.getElementsByTagName("pre"); if (preElements && preElements.length > 0) { for (var i = 0; i < preElements.length; i++) { var preElement = preElements[i]; var spanElement = document.createElement("span"); spanElement.classList.add("copy-container"); var buttonElement = document.createElement("button"); buttonElement.textContent = "Copy Snippet"; buttonElement.classList.add("copy-button"); buttonElement.addEventListener("click", createCopyTextHandler(preElement)); spanElement.appendChild(preElement.cloneNode(true)); spanElement.appendChild(buttonElement); preElement.parentNode.replaceChild(spanElement, preElement); } } }); function createCopyTextHandler(element) { return function() { var text = element.textContent; var tempInput = document.createElement("textarea"); tempInput.style = "position: absolute; left: -1000px; top: -1000px"; tempInput.value = text; document.body.appendChild(tempInput); tempInput.select(); document.execCommand("copy"); document.body.removeChild(tempInput); }; } */ ?>