Principle:ClickHouse ClickHouse Network Address Representation
| Knowledge Sources | |
|---|---|
| Domains | Networking, IP |
| Last Updated | 2026-02-08 00:00 GMT |
Overview
Unified abstraction over IPv4, IPv6, and socket endpoints that hides binary formats and provides semantic operations.
Description
Network address representation provides a type-safe, high-level interface for working with IP addresses and socket endpoints (IP + port combinations). Rather than manipulating raw binary structures like `sockaddr_in` or `sockaddr_in6`, applications work with objects that handle parsing from human-readable formats, validation, address classification (multicast, loopback, etc.), and conversion back to binary formats for system calls.
This principle enables writing protocol-agnostic code that works with both IPv4 and IPv6 transparently, reduces errors from manual binary manipulation, and provides semantic operations (subnet masking, address classification) at the domain level.
Usage
Use abstract network address representations whenever dealing with IP addresses or socket endpoints. This includes socket binding, connection establishment, access control lists, DNS resolution, and network configuration. The abstraction is particularly valuable when supporting both IPv4 and IPv6, as it allows writing protocol-agnostic code.
Theoretical Basis
Network address representation is based on:
- Value Object Pattern: Immutable objects representing domain concepts with no lifecycle
- Type Safety: Compiler-enforced correctness preventing misuse of address data
- Protocol Abstraction: Hiding differences between IPv4 and IPv6 behind common interface
- Encapsulation: Bundling data with operations, hiding binary representation details
- Polymorphism: Different address family implementations behind common interface
- Domain-Driven Design: Modeling network addresses as first-class domain concepts
The pattern recognizes that IP addresses and socket endpoints are domain entities with semantic meaning beyond their binary representation, warranting proper abstraction rather than treating them as raw byte sequences.