It always helps to figure out the challenges of a problem you’re planning to solve, and to have a well-defined terminology. This blog post will mention a few challenges we might encounter while addressing various layers of the networking stack, from data-link layer and all the way up to the application layer, and introduce the concepts of names, addresses and routes.
According to Martin Fowler, one of the best quotes I found on the topic originally came from Phil Karlton:
There are only two hard things in Computer Science: cache invalidation and naming things.
Jeff Atwood added a slight programming slant to that quote:
In computer networks we have to deal with both of these hard things, starting with naming things, which is the core topic of the Network Addressing section of the webinar, but we’ll also touch on caching. You’d usually encounter cached mappings between names and addresses (DNS cache) or caching mappings between addresses in different networking layers. For example, mappings of layer-3 addresses into layer-2 addresses would be stored in ARP/ND cache.
- A name of a resource indicates what we seek
- An address where it is
- A route tells us how to get there.
For example, your first and last name would be the name of the resource. I want to talk to you, so you are the one I’m seeking. Assuming I want to drive over and have a chat with you, I need your address – the usual street address, town, and country. That’s where you are. Finally, I enter those details into Google Maps (or whatever your preferred mapping app might be) and I get a route – it tells me how to get from where I’m sitting to where I can meet you
The sad part: more than 45 years ago, someone precisely summarized what we’ve been struggling with forever2, we all ignored what he wrote, and we’re still struggling with it. We are still not willing to admit that we have to have three different concepts3.
Back to what John F. Shoch wrote. A name (he wrote) is usually human readable string – today we’d call it a host name or URL – identifying a resource or a set of resources. If you want to make any use of that name, like connecting to that resource, it must be mapped into an address. Interestingly, as early as 1978, mr. Shoch identified a very important point: an address associated with a name may change over time. A resource can be moved from one host to another or the host might get a different network layer address.
Address, on the other hand, is just some data structure. It’s supposed to be machine readable – after all, the packets sent from me to you have to be parsed by the machines called routers sitting in the middle. Obviously, if we want the packet to get from here to there, then everyone in the whole domain has to recognize what that data structure is and has to be able to understand the data structure. The global Internet would be such a domain.
If on the other hand, we’re talking about MPLS transport networks, then an MPLS network would be such a domain, and everyone would have to recognize the format of an MPLS label. Similarly, a Wi-Fi network would be a layer-2 domain and everyone within that layer-2 domain would have to agree on how to parse the Wi-Fi MAC addresses.
An address therefore defines an addressable object (we’ll go into what they are in the next blog post). Most importantly, it must be meaningful throughout a domain – everyone has to agree what addresses mean – and must be drawn from uniform address space4. Every node within a domain must agree on the address space and everyone has to use the same address space if we want to get somewhere.
Finally some food for thought: if your network is using private (RFC 1918) IPv4 addresses, is it in the same domain as the global Internet? They must be different domains as the address space is not uniform5, and the private IP addresses are not meaningful on the global internet. We’ll cover the implications of this fact when we get to Network Address Translation (NAT) section where we’ll discuss the interesting question of connecting the two domains.
IEN stands for Internet Experiment Note – the documents that were written before RFC documents started to be written, from times when internet was still considered an experiment. ↩︎
Including using IP addresses as names ↩︎
Technologies like LISP try to work around the problem by having two layers of IP addresses, one layer serving as names, the other one as transport endpoints. ↩︎
Ignoring for the moment locally-significant MPLS labels ;), or you could argue that the addressing domain of the traditional MPLS is a single link between adjacent nodes. ↩︎
Multiple networks can use the same RFC 1918 addresses. ↩︎