Sockets that share common communication properties, such as naming conventions and protocol address formats, are grouped into communication domains. A communication domain is sometimes referred to as name or address space.
The communication domain includes the following:
Communication domains also consist of two categories, socket types and descriptors. Socket types include stream, datagram, sequenced packet, raw, and connection-oriented datagram.
An address format indicates what set of rules was used in creating network addresses of a particular format. For example, in the Internet communication domain, a host address is a 32-bit value that is encoded using one of four rules based on the type of network on which the host resides.
Each communication domain has different rules for valid socket names and interpretation of names. After a socket is created, it can be given a name according to the rules of the communication domain in which it was created. For example, in the UNIX communication domain, sockets are named with operating system path names. A socket can be named /dev/foo. Sockets normally exchange data only with sockets in the same communication domain.
The socket subroutine takes an address family as a parameter. Specifying an address family indicates to the system how to interpret supplied addresses. The /usr/include/sys/socket.h and /usr/include/sys/socketvar.h files define the address families.
A socket subroutine that takes an address family (AF) as a parameter can use AF_UNIX (UNIX), AF_INET (Internet), AF_NS (Xerox Network Systems), or AF_NDD (AIX Network Device Drivers) protocol. These address families are part of the following communication domains:
|UNIX||Provides socket communication between processes running on the same operating system when an address family of AF_UNIX is specified. A socket name in the UNIX domain is a string of ASCII characters whose maximum length depends on the machine in use.|
|Internet||Provides socket communication between a local process and a process running on a remote host when an address family of AF_INET is specified. The Internet domain requires that Transmission Control Protocol/Internet Protocol (TCP/IP) be installed on your system. A socket name in the Internet domain is an Internet address, made up of a 32-bit IP address and a 16-bit port address.|
|XNS||Provides connection-oriented, reliable, full-duplex service to an application. A socket name in the XNS domain is made up of a four-byte network number, a six-byte host number, and a two-byte port number.|
|NDD||Provides socket communication between a local process and a process running on a remote host when an address family of AF_NDD is specified. The NDD domain enables applications to run directly on top of physical networks. This is in contrast to the Internet domain, in which applications run on top of transport protocols such as TCP, or User Datagram Protocol (UDP). A socket name in the NDD domain consists of AIX NDD name and a second part that is protocol dependent.|
Communication domains are described by a domain data structure that is loadable. Communication protocols within a domain are described by a structure that is defined within the system for each protocol implementation configured. When a request is made to create a socket, the system uses the name of the communication domain to search linearly the list of configured domains. If the domain is found, the domain's table of supported protocols is consulted for a protocol appropriate for the type of socket being created or for a specific protocol request. (A wildcard entry may exist for a raw domain.) Should multiple protocol entries satisfy the request, the first is selected.
Characteristics of the UNIX domain are:
|Types of sockets||In the UNIX domain, the SOCK_STREAM socket type provides pipe-like facilities, while the SOCK_DGRAM and SOCK_SEQPACKET socket types usually provide reliable message-style communications.|
|Naming||Socket names are strings and appear in the file system name space through portals.|
Characteristics of the Internet domain are:
|Socket types and protocols||The SOCK_STREAM socket type is supported by the Internet TCP protocol; the SOCK_DGRAM socket type, by the UDP protocol. Each is layered atop the transport-level IP. The Internet Control Message Protocol (ICMP) is implemented atop or beside IP and is accessible through a raw socket.|
|Naming||Sockets in the Internet domain have names composed of a 32-bit Internet address and a 16-bit port number. Options can be used to provide IP source routing or security options. The 32-bit address is composed of network and host parts; the network part is variable in size and is frequency encoded. The host part can be interpreted optionally as a subnet field plus the host on a subnet; this is enabled by setting a network address mask.|
|Raw access||The Internet domain allows a program with root-user authority access to the raw facilities of IP. These interfaces are modeled as SOCK_RAW sockets. Each raw socket is associated with one IP protocol number and receives all traffic for that protocol. This allows administrative and debugging functions to occur and enables user-level implementations of special-purpose protocols such as inter-gateway routing protocols.|
A characteristic of the Xerox Network System (XNS) domain is the SOCK_SEQPACKET socket type, which provides reliable message-style communications.
Characteristics of the AIX NDD domain are:
|Socket types and protocols||The SOCK_DGRAM socket type is supported by the connectionless datagram protocols. These include Ethernet, token ring, Fiber Distributed Data Interface (FDDI), and FCS protocols. This socket type allows applications to send and receive datagrams directly over these media types. The SOCK_CONN_DGRAM socket type is supported by connection-oriented datagram protocols. Currently, Asynchronous Transfer Mode (ATM) is the only protocol defined for this socket type. This socket type has the property of connection-oriented, unreliable, message delivery service.|
|Naming||Sockets in the NDD domain have names composed of the AIX NDD name and a second part that is protocol dependent. For example, for ATM, this part contains a 20-byte destination address and subaddress.|