Introduction
Naming and addressing form the backbone of computer network architecture, enabling the efficient and scalable transmission of data. This post explores the multiple levels of naming and addressing that exist in networks and the theoretical framework that define them.
Naming and addressing serve distinct yet interconnected roles in networking and computing environments. Naming refers to the use of location-independent identifiers to distinguish objects, such as applications, processes, or resources. Names are abstract, portable, and remain constant even if the entity they identify moves or changes its physical location. This portability allows for human-readable or logical identifiers that simplify interaction and enable entities to be referenced independently of their location.
In contrast, addressing involves location-dependent identifiers that specify the exact physical or logical location of an entity within a network. Addresses are critical for routing and delivering messages or resources, as they encode specific location information tied to the network’s topology. Unlike names, addresses may change dynamically as networks evolve or entities migrate.
While naming operates at a higher, abstract layer, addressing is concrete, providing the means to locate and reach the named entity. These two concepts are interconnected through binding mechanisms, such as Domain Name System (DNS), which maps names to addresses. The primary goal of naming and addressing in networks is to identify where to send data. This is achieved by using a network’s intermediate nodes to relay messages efficiently between sources and destinations. Routing messages involves mapping and binding between various layers of addressing. The process typically includes identifying a destination node, locating attachment points (physical interfaces), and determining paths (routes) to ensure message delivery.
Historical Context
In the early days of data communication, naming and addressing were not considered major concerns due to the simplicity of networks. Early systems relied on point-to-point or multidrop connections where simple enumeration sufficed. For example, ARPANET initially assigned 8-bit addresses to Interface Message Processors (IMPs), limiting the network to 64 nodes. This seemed adequate at the time, as the network was designed as a small-scale research project. However, ARPANET’s unexpected success and growth exposed limitations in its addressing scheme, prompting the transition to 16-bit addresses in the late 1970s.
Despite these expansions, addressing issues continued to surface. For example, dual-homed hosts, such as those required for reliability, highlighted the lack of logical address spaces to manage multiple connections. The lack of scalable solutions often resulted in workarounds rather than comprehensive fixes.
The transition from simple enumeration to scalable addressing required theoretical advances. J.H. Saltzer’s seminal work on naming and binding in computer systems laid a foundation for understanding network addressing. In RFC 1498, Saltzer identifies four distinct kinds of objects that can be named as the destination of a packet in a network:
- Services: High-level functions or applications that users wish to access, such as email or file transfer.
- Nodes: Individual devices or hosts within the network that provide one or more services.
- Network Attachment Points: Specific interfaces or ports through which a node connects to the network.
- Paths : Routes through the network that data packets traverse to reach their destination.
Saltzer introduces the operating system concept of “binding” to describe the relationships among these objects. Binding refers to the associations established between different levels of naming, such as linking a service to a specific node, a node to a network attachment point, and so on. Understanding these bindings is crucial for effective network communication and resource management.
Despite such insights, practical implementation lagged. The Internet, for instance, retained a simplified addressing model, often combining location-dependent addresses with application-level identifiers. This has led to challenges such as the lack of built-in support for dynamic mobility.
Data Link Layer Addressing
MAC addresses are unique identifiers assigned to network interface cards (NICs) at the Data Link layer of the OSI model, ensuring that data frames are directed to the correct devices within a local network. These addresses are typically 48 bits long and represented in 12 hexadecimal characters, such as ’00:14:22:01:23:45′. The first 24 bits of a MAC address represent the Organizationally Unique Identifier (OUI), which identifies the manufacturer of the NIC, while the remaining 24 bits are assigned by the manufacturer to uniquely identify the device. MAC addresses are intended to be globally unique, which ensures that each device has its own distinct address. They can be used in various forms: unicast (directed to a single device), multicast (directed to a group of devices), or broadcast (sent to all devices within the local network segment).
Network Layer Addressing
The development of IP addressing in the mid-1970s introduced a 32-bit structure, which allowed for greater scalability. However, IP inherited the semantics of earlier IMP addressing, naming interfaces rather than nodes, which posed challenges for multihoming, routing, and mobility. The expansion of the Internet has prompted the need to expand the address space to 128-bit.
IPv4 Addressing
IPv4 was introduced in 1981 by RFC 791. In the IPv4 addressing scheme each host or router connects to the network through a physical interface. While a host typically has a single interface, routers, which relay messages, have multiple interfaces—one for each connected link. Every interface is assigned a unique IPv4 address, ensuring that devices on the global Internet can be distinctly identified. An IPv4 address consists of 32 bits (4 bytes) and is commonly written in dotted-decimal notation, such as 192.168.0.1, where each segment of the address represents 8 bits in decimal form.
Subnets are logical groupings of devices that share a common network prefix. For instance, the subnet 223.1.1.0/24 includes addresses ranging from 223.1.1.0 to 223.1.1.255, with the “/24” indicating that the first 24 bits define the network portion. Devices within the same subnet share this network prefix but have unique host identifiers in the remaining bits, such as 223.1.1.1 and 223.1.1.2, both of which belong to the 223.1.1.0/24 subnet. Special addresses, like 255.255.255.255, are reserved for broadcasting messages to all devices in a subnet.
Historically, IPv4 addressing relied on a class-based system to distinguish between the network and interface portions of the address. Class A (8-bit network prefix, supporting 16 million hosts), Class B (16-bit network prefix, supporting 65,534 hosts), and Class C (24-bit network prefix, supporting 254 hosts). However, this rigid system led to inefficient address utilization and contributed to address exhaustion, prompting the adoption of CIDR as a more flexible and efficient solution.
Classless Interdomain Routing (CIDR) enhances subnetting by supporting variable-length prefixes, expressed in the format a.b.c.d/x, where “x” specifies the number of bits in the network prefix. For example, 192.168.0.0/16 has a 16-bit network prefix. CIDR improves address utilization and reduces routing table size by enabling address aggregation. Internet Service Providers (ISPs), for example, can advertise a single prefix, such as 200.23.16.0/20, to represent multiple subnets.
IPv6 Addressing
The Internet Engineering Task Force (IETF) developed IPv6 in the early 1990s to address the exhaustion of IPv4’s 32-bit address space due to rapid Internet growth. IPv6 introduced a 128-bit address space, ensuring virtually unlimited IP addresses. It also simplified the protocol header, removed certain IPv4 feature and introduced header compression, among other enhancements.
IPv6 addresses are written in hexadecimal notation, consisting of eight groups of four hexadecimal digits separated by colons. Leading zeros can be omitted, and consecutive zeros can be compressed using “::” (used only once per address). For example, a public IPv6 unicast address will look like ‘2001:0db8:85a3:0000:0000:8a2e:0370:7334’. The ‘2001’ part of the address is part of a range assigned for public use by the Internet Assigned Numbers Authority (IANA). The ‘0db8’ is a reserved block often used in documentation and examples (actual public addresses would use a different value here). Finally, the rest of the address is assigned hierarchically, allowing ISPs and organizations to assign unique subnets and hosts.
IPv6 supports various address types: unicast addresses are for one-to-one communication, multicast addresses are used for one-to-many communication, and anycast addresses are for delivering data to one of several interfaces. IPv6 does not use broadcast addresses, with multicast replacing this functionality.
IPv6 also defines several address prefixes. Reserved addresses include the loopback address (::1), multicast addresses (beginning with FF), and unspecified addresses (::). Local addresses are those used within a local network, including link-local addresses (beginning with FE80) and Unique Local Addresses (ULAs), which start with FC00::/7. Deprecated site-local addresses, once used within organizations, have been replaced by ULAs.
The adoption of IPv6 has been slow, but the growing demand for scalable and efficient network solutions has accelerated its usage. This demand is driven by Internet Service Providers (ISPs), cellular networks, IoT devices, and large-scale internal networks.
Upper Layers Addressing
Addressing mechanisms above the network layer focus on identifying applications and ensuring accurate data delivery. At the transport layer, port numbers differentiate services on the same device, such as port 80 for HTTP and port 53 for DNS. These port numbers, combined with the IP address, form a unique communication endpoint.
At the application layer, addressing is more user-friendly, involving domain names translated into IP addresses via DNS, and user-level identifiers like email addresses or URLs. For instance, ‘user@example.com’ targets a specific user, and ‘https://example.com/resource’ directs web traffic to a specific resource.
The Internet’s addressing has evolved from the simple ‘<hostname>’ format to a multilevel structure like ‘<local domain-id>.<host/site name>.<top-level domain>’ to accommodate more hosts. Efforts like the Universal Resource Name (URN) aimed to standardize resource naming and support database-driven searches. However, most applications still rely on simpler pathname-style hierarchies.
At the application layer, resources on TCP/IP networks are identified by Uniform Resource Identifiers (URIs), which include URLs and URNs. URLs specify a resource’s location and the method to access it. They consist of a scheme (protocol), host (e.g., DNS name or IP), port, and path, with optional parameters, queries, and fragments. They are the most widely used addressing mechanism, particularly for web resources. Example of URLs include (http://www.mysite.org:8080/cgi-bin/pix.php?Wedding03#Reception07) and telnet://user:password@host:23. URNs uniquely identify resources without tying them to a specific location, like ‘URN:isbn:0-679-73669-7’ for a book’s ISBN. While URNs introduced hierarchical conventions and flexibility, most applications remain simple and have not yet demanded more complex naming architectures beyond the basic pathname-style hierarchy.
Address Bindings
Saltzer’s theoretical framework for naming and addressing emphasizes a clear separation of four distinct types of identifiers: service names (location-independent), node names (location-dependent system identifiers), network attachment points (PoAs), and paths (routes between PoAs). Each type is bound explicitly and independently, preserving identities across changes and enabling features like mobility and multi-homing. In contrast, the current Internet architecture combine node names and PoA identifiers, using IP addresses to serve dual roles as both locators and identifiers. This design simplifies implementation but limits scalability and adaptability. While Saltzer’s model relies on explicit mappings, the Internet uses implicit bindings managed by DNS for application names and routing protocols like BGP for paths. Another critical difference is the Internet’s reliance on dynamic bindings between MAC addresses and IP addresses via the Address Resolution Protocol (ARP), which facilitates communication at the network layer but further combines addressing roles. These practical shortcuts prioritize operational feasibility but introduce inefficiencies and challenges for modern network demands, such as mobility and multi-homing.
Conclusion
Naming and addressing are fundamental to the design and operation of computer networks, serving as the bridge between abstract identification and concrete communication. From simple enumeration to the current implementations in multi-layered architectures, these mechanisms have evolved to address the growing complexity and scalability needs of modern networks.
This post introduced the components of the current naming and addressing architecture of the Internet. The current model have relied on tightly coupled naming and addressing schemes. The increasing demand for mobility, multihoming, and global scalability highlights the need for more flexible and decoupled approaches. Concepts like Saltzer’s framework could underscore the potential for innovation in this space.