Chapter 24 - Socket Interface
Chapter 24 - Socket Interface
Introduction API The Socket API Sockets and socket libraries Sockets and UNIX I/O The socket API Summary of socket system calls socket close bind Socket address formats listen accept connect send sendto, sendmsg recv, recvfrom, recvmsg Other procedures Sockets and processes Summary
Introduction
The socket is one form of interface between application programs and protocol software Widely available - program portability Used by both clients and servers Extension to UNIX file I/O paradigm
API
Application interactions with protocol software: Passive listen or active open Protocol to use IP address and port number Interface to protocol is call Application Program Interface (API) Defined by programming/operating system Includes collection of procedures for application program
Socket
descriptor = socket(protofamily, type, protocol) Returns socket descriptor used in subsequent calls protofamily selects protocol family; e.g.: PF_INET - Internet protocols PF_APPLETALK - AppleTalk protocols type selects type of communication SOCK_DGRAM - connectionless SOCK_STREAM - connection-oriented protocol specifies protocol within protocol family IPPROTO_TCP - selects TCP IPPROTO_UDP - selects UDP
Close
close(descriptor) Terminates use of socket descriptor descriptor contains descriptor of socket to be closed
Bind
bind(socket, localaddr, address) Initially, socket has no addresses attached bind selects either local, remote or both addresses server binds local port number for incoming messages client binds remote address and port number to contact server
listen
listen(socket, queuesize) Server uses listen to wait for incoming connections socket identifies socket through which connections will arrive (address) New connection requests may arrive while server processes previous request Operating system can hold requests on queue queuesize sets upper limit on outstanding requests
Accept
accept(socket, caddress, caddresslen) Server uses accept to accept the next connection request accept call blocks until connection request arrives Returns new socket with server's end of new connection Old socket remains unchanged and continues to field incoming requests caddress returns struct sockaddr client address; format depends on address family of socket caddresslen returns length of address
Connect
connect(socket, saddress, saddresslen) Client uses connect to establish connection to server Blocks until connection completed (accepted) socket holds descriptor of socket to use saddress is a struct sockaddr that identifies server saddresslen gives length of saddress Usually used with connection-oriented transport protocol Can be used with connectionless protocol Marks local socket with server address Implicitly identifies server for subsequent messages
Send
send(socket, data, length, flags) Used to send data through a connected socket socket identifies socket data points to data to be sent length gives length of data (in bytes) flags indicate special options
Sendto, Sendmsg
sendto(socket, data, length, flags, destaddress, addresslen) sendmsg(socket, msgstruct, flags) Used for unconnected sockets by explicitly specifying destination sendto adds additional parameters: destaddress - struct sockaddr destination address addresslen - length of destaddress sendmsg combines list of parameters into single structure: struct msgstruct { struct sockaddr *m_addr; /* ptr to destination address */ struct datavec *m_vec; /* pointer to message vector */ int m_dvlength; /* num. of items in vector */ struct access *m_rights; /* ptr to access rights list */ int m_alength; /* num. of items in list */ }
recv
recv(socket, buffer, length, flags) Used to receive incoming data through connected socket socket identifies the socket Data copied into buffer At most length bytes will be recved flags give special options Returns number of bytes actually recved 0 implies connection closed -1 implies error
recvfrom, recvmsg
recvfrom(socket, buffer, length, flags, sndraddress, addresslen) recvmsg(socket, msgstruct, flags) Like recvfrom and recvmsg (in reverse!) Address of source copied into sndraddress Length of address in addresslen recvmsg uses msgstruct for parameters
Other procedures
getpeername - address of other end of connection getsockname - current address bound to socket setsockopt - set socket options
Summary
Socket API is de facto standard Originally developed for BSD UNIX Copied to many other systems Sockets are an extension of the UNIX file I/O system Use same descriptor addresses Can (but typically don't) use same system calls Many specific system calls for sockets
Introduction
IP assigns 32-bit addresses to hosts (interfaces) Binary addresses easy for computers to manage All applications use IP addresses through the TCP/IP protocol software Difficult for humans to remember: % telnet 204.82.11.70 The Domain Name System (DNS) provides translation between symbolic names and IP addresses
mil
Military organization
Organizations apply for names in a top-level domain: ubalt.edu microsoft.com Organizations determine own internal structure home.ubalt.edu server1.scitutor.com
Geographic structure
Top-level domains are US-centric Geographic TLDs used for organizations in other countries:
TLD Country
Countries define their own internal hierarchy: ac.uk and .edu.au are used for academic organizations in the United Kingdom and Australia
www.ubalt.edu ubalt.edu server1.ait.ubalt.edu ait.ubalt.edu mail.scitutor.com scitutor.com Authority for creating new subdomains is delegated to each domain Administrator of ubalt.edu has authority to create ait.ubalt.edu and need not contact any central naming authority
Client-server computing
Clients and servers communicate in distributed computing Client initiates contact to request some remote computation Server waits for clients and answers requests as received Clients are usually invoked by users as part of an end-user application Servers are usually run on central, shared computers
Name resolution
Resolver software typically available as library procedures Implement DNS application protocol Configured for local servers Example - UNIX gethostbyname Calling program is client Constructs DNS protocol message - a DNS request Sends message to local DNS server DNS server resolves name Constructs DNS protocol message - a DNS reply Sends message to client program and waits for next request
DNS messages
DNS request contains name to be resolved DNS reply contains IP address for the name in the request
DNS servers
Each DNS server is the authoritative server for the names it manages If request contains name managed by receiving server, that server replies directly Otherwise, request must be forwarded to the appropriate authoritative server
DNS caching
DNS resolution can be very inefficient Every host referenced by name triggers a DNS request Every DNS request for the address of a host in a different organization goes through the root server Servers and hosts use caching to reduce the number of DNS requests Cache is a list of recently resolved names and IP addresses Authoritative server include time-to-live with each reply
Abbreviations
May be convenient to use abbreviations for local computers; e.g. ubmail for ubmail.ubalt.edu Abbreviations are handled in the resolver; DNS servers only know full-qualified domain names (FQDNs) Local resolver is configured with list of suffixes to append Suffixes are tried sequentially until match found
Summary
Domain Name System maps from computer names and IP addresses Important to hide 32-bit IP addresses from humans DNS names are hierarchical and allocated locally Replication and caching are important performance enhancements DNS provides several types of records