[go: up one dir, main page]

0% found this document useful (0 votes)
73 views31 pages

Writing Client/Server Programs in C Using Sockets (A Tutorial) Session 5958 Greg Granger Grgran at Sas SAS/C & C++ Support Institute Cary, NC

This document provides an overview of socket programming and the TCP/IP networking protocol. It discusses what sockets are as an API for interprocess communication, the concepts of connections and associations in socket terms. It then introduces TCP/IP, describing the different protocols including IP, UDP, and TCP. It explains concepts like ports, routing, and name resolution processing. The overall purpose is to explain the basics of writing client/server programs using sockets and the TCP/IP networking protocol.

Uploaded by

Sudha Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
73 views31 pages

Writing Client/Server Programs in C Using Sockets (A Tutorial) Session 5958 Greg Granger Grgran at Sas SAS/C & C++ Support Institute Cary, NC

This document provides an overview of socket programming and the TCP/IP networking protocol. It discusses what sockets are as an API for interprocess communication, the concepts of connections and associations in socket terms. It then introduces TCP/IP, describing the different protocols including IP, UDP, and TCP. It explains concepts like ports, routing, and name resolution processing. The overall purpose is to explain the basics of writing client/server programs using sockets and the TCP/IP networking protocol.

Uploaded by

Sudha Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

C Socket Programming Tutorial SHARE Session 5958

Writing Client/Server Programs in C


Using Sockets (A Tutorial)
Part I

Session 5958

Greg Granger
grgran@sas.com

SAS/C & C++ Support


SAS Institute
Cary, NC
SAS Institute Inc. Slide 1
SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Part I: Socket Programming Overview


U Sockets (to me)
U Networking (or what’s natural about natural logs)
U TCP/IP (and what it means to your life)
U More Sockets (we didn’t get enough the first time)

SAS Institute Inc. Slide 2


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

What is “Sockets”
U An Application Programming Interface (API) used
for InterProcess Communications (IPC). [A well
defined method of connecting two processes,
locally or across a network]
U Protocol and Language Independent
U Often referred to as Berkeley Sockets or BSD
Sockets

SAS Institute Inc. Slide 3


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Connections and Associations


U In Socket terms a connections between two
processes in called an association.
U An association can be abstractly defined as a 5-
tuple which specifies the two processes and a
method of communication. For example:
• {protocol, local-addr, local-process, foreign-addr, foreign-process}

U A half-association is a single “side” of an


association (a 3-tuple)
• {protocol, addr, process}

SAS Institute Inc. Slide 4


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Networking Terms
U packet - the smallest unit that can be transferred
“through” the network by itself
U protocol - a set of rules and conventions between
the communicating participants
U A collection of protocol layers is referred to as a
“protocol suite”, “protocol family” or “protocol
stack”. TCP/IP is one such protocol suite.

SAS Institute Inc. Slide 5


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Introduction to TCP/IP
U What (the heck) is TCP/IP?
U Internet Protocol (IP)
U User Datagram Protocol (UDP)
U Transmission Control Protocol (TCP)
U TCP/IP Applications
U Name Resolution Processing
U TCP/IP Network Diagram

SAS Institute Inc. Slide 6


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

What is TCP/IP?
U Transmission Control Protocol/Internet Protocol
U A network protocol suite for interprocess
communication
U The protocol of the Internet
U Open, nonproprietary
U Integrated into UNIX operating systems
U Many popular networking applications
• telnet • NFS (network file system)
• X11 GUI • SMTP (mail)
• www • ftp (file transfer protocol)

SAS Institute Inc. Slide 7


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

TCP/IP Architectural Model


REXEC / SMTP / TELNET / FTP
Process (message)
/ DNS / RPC / Local Apps.

Transport (message) TCP UDP

Network (packets) ICMP IP (R)ARP

Data Link (frames) Ethernet Token-Ring FDDI X.25


SNA Hyperchannel Proprietary

SAS Institute Inc. Slide 8


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Internet Protocol (IP)


U Establishes a “virtual” network between hosts,
independent of the underlying network topology
U Provides “routing” throughout the network, using
IP addressing. For example: 149.173.70.9
U Features
• Best-effort packet delivery
TCP UDP
• Connectionless (stateless)
• Unreliable
IP
Physical Network

SAS Institute Inc. Slide 9


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

User Datagram Protocol (UDP)


U Application Interface to IP - Packet Oriented
U Establishes a “port”, which allows IP to distinguish
among processes running on the same host
U Features resemble IP semantics
• Connectionless
• Unreliable
TCP UDP
• Checksums (optional)
IP

Physical Network

SAS Institute Inc. Slide 10


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Transmission Control Protocol (TCP)


U Connection-oriented
U Stream Data Transfer TCP UDP
U Reliable IP
U Flow-Control
Physical Network
U Full-Duplex
U Suited for critical data transfer applications

SAS Institute Inc. Slide 11


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

The Importance of Ports


U Both the TCP and UDP protocols use 16 bit
identifiers called ports to uniquely identify the
processes involved in a socket.
U In UNIX the first 1024 ports for both protocols are
called “well known ports” and are defined in the file
/etc/services. Programs that bind to these ports
require “root” access.
U These numbers are managed by the Internet
Assigned Numbers Authority (IANA). A complete
list of these assignments and more information
about IANA can be found in RFC 1700
SAS Institute Inc. Slide 12
SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

How stuff gets around (routing)


U TCP/IP packets are routed based on their
destination IP address (ex: 10.24.2.123)
U Packets are passed from one network segment to
another by machines called “routers” until the
packet arrives at the network segment attached to
the host with the destination IP address.
U Routers that act as gates to larger networks are
called gateways.

SAS Institute Inc. Slide 13


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Name Resolution Processing


U Associates an IP address to a “name” (hostname)
U Structured method of identifying hosts within an internet
U The Domain Name System (DNS) implements a hierarchical
naming scheme which maps names like “mvs.sas.com” to
an IP address
U DNS is implemented by a set of cooperating servers
U Machines that process DNS requests are called nameservers
U A set of library routines called “the resolver” provide the
logic to query nameservers

SAS Institute Inc. Slide 14


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

TCP/UDP/IP Diagram
Dev1.sas.com
(149.179.3.3)
64K
TCP Ports
REXEC client
REXEC
Server
Dev2.sas.com
port 512
1023 (149.179.83.6)
Well-known Ports
0 IP Routing
0
Well-known Ports
1023 REXEC client

Server1.net.sas.com
(149.193.2.194)

UDP Ports 64K internet


NameServer
SAS Institute Inc. Slide 15
SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Back to Sockets
U Socket Definition and Components
U Socket Library Functions
U Primary Socket Header Files
U Sample Client/Server Dialog
U Ancillary Socket Topics
U Beyond Sockets

SAS Institute Inc. Slide 16


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Definition and Components


U Socket - endpoint of communication
U Sockets - An application programming interface
(API) for interprocess communication (IPC)
U Attributes:
• Protocol Independent
• Language Independent
• Sockets implies (not requires) TCP/IP and C
U Socket and Connection Association
• A local host can be identified by it’s protocol, IP address and port.
• A connection adds the IP address & port of the remote host.

SAS Institute Inc. Slide 17


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Socket Library Function


U System calls
• startup / close
• data transfer
• options control
• other
U Network configuration lookup
• host address
• ports for services
• other
U Utility functions
• data conversion
• address manipulation
• error handling
SAS Institute Inc. Slide 18
SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Primary Socket Calls


U socket() - create a new socket and return its descriptor
U bind() - associate a socket with a port and address
U listen() - establish queue for connection requests
U accept() - accept a connection request
U connect() - initiate a connection to a remote host
U recv() - receive data from a socket descriptor
U send() - send data to a socket descriptor
U close() - “one-way” close of a socket descriptor

SAS Institute Inc. Slide 19


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Network Database Administration functions


U gethostbyname - given a hostname, returns a structure
which specifies its DNS name(s) and IP address(es)
U getservbyname - given service name and protocol, returns a
structure which specifies its name(s) and its port address
U gethostname - returns hostname of local host
U getservbyname, getservbyport, getservent
U getprotobyname, getprotobynumber, getprotobyent
U getnetbyname, getnetbyaddr, getnetent

SAS Institute Inc. Slide 20


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Socket Utility Functions


U ntohs/ntohl - convert short/long from network byte order
(big endian) to host byte order
U htons/htonl - convert short/long from host byte order to
network byte order
U inet_ntoa/inet_addr - convert 32-bit IP address (network
byte order to/from a dotted decimal string)
U perror() - print error message (based on “errno”) to stderr
U herror() - print error message for gethostbyname() to stderr
(used with DNS)

SAS Institute Inc. Slide 21


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Primary Header Files


U Include file sequence may affect processing (order is
important!)
• <sys/types.h> - prerequisite typedefs
• <errno.h> - names for “errno” values (error numbers)
• <sys/socket.h> - struct sockaddr; system prototypes and constants
• <netdb.h.h> - network info lookup prototypes and structures
• <netinet/in.h> - struct sockaddr_in; byte ordering macros
• <arpa/inet.h> - utility function prototypes

SAS Institute Inc. Slide 22


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Sample TCP Client / Server Session


Iterative Server

socket()
Remote Client

bind() socket()

listen() gethostbyname()

accept() connect()

recv()/send() recv()/send()

close() close()

SAS Institute Inc. Slide 23


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Ancillary Socket Topics


U UDP versus TCP
U Controlling/managing socket characteristics
• get/setsockopt() - keepalive, reuse, nodelay
• fcntl() - async signals, blocking
• ioctl() - file, socket, routing, interface options
U Blocking versus Non-blocking socket
U Signal based socket programming (SIGIO)
U Implementation specific functions

SAS Institute Inc. Slide 24


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Design Considerations
U Data representation and conversion
U Server design alternatives
U Security Issues
U Portability Considerations

SAS Institute Inc. Slide 25


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Data Representation
U Transport Protocols detail data exchange/movement;
applications must interpret the data!
U Byte order affects data - not just addresses
U Text is often sent in ASCII, but ASCII versus EBCDIC is
decided by the application-level protocol
U Structure alignment and floating point pose problems
U External Data Representation (XDR) can be used (even
without RPC)

SAS Institute Inc. Slide 26


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Server Design Alternatives


U Single Threaded
• more complex code (must track multiple concurrent requests)
• generally lower system overhead
• crash of thread disables service
U Multi-Tasking
• less complex code (written only for handling only one connection)
• higher system overhead (each task requires it’s own process space)
• highly crash resistant (one or more tasks can fail without losing
service)
U [Multi-]Threaded
• shares less complex code of Multi-Tasking model
• system overhead between Single-Threaded and Multi-Tasking model
• crash resistant (but one badly behaved thread ‘can’ crash service)

SAS Institute Inc. Slide 27


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Security Considerations
U Socket semantics do NOT address security problems, such
as:
• IP and adapter addresses
• Userid and passwords
• data encryption
• traces
U UNIX systems require “root” privilege when a program binds
a “reserved” (<1024) port
U getpeername() returns the peer’s port and IP-address:
determine “privileged” peers and “trusted” hosts
U The Kerberos protocol provides password and data
encryption, along with service authentication

SAS Institute Inc. Slide 28


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Portability Considerations
U Limit applications to “standard” socket routines, BSD 4.x
U Implement a portable transport module
U Mainframe Environment - Distribute existing applications
• API Programmer’s Reference - Details
• SAS/C, C/370, Interlink, Open Connect, NSC
U OS/2 - REXX Sockets, Programmer’s Toolkit
U MS Windows Sockets 1.1 - 2 WINSOCK.DLL
(http://www.stardust.com ftp.stardust.com:/pub/winsock)

SAS Institute Inc. Slide 29


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Summary
U Basic networking and features of TCP/IP protocols
U Socket library organization
U Socket library coding techniques
U Awareness of more advanced topics

What’s Next
U Session 5959 - Part II - Client/Server Application

SAS Institute Inc. Slide 30


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998
C Socket Programming Tutorial SHARE Session 5958

Bibliography
U Internetworking with TCP/IP: Volumes I, II & III, Douglas
Comer, Prentice Hall, 1991 (ISBN Vol I: 0134685059, Vol
III: 0138487146)
U The Whole Internet User’s Guide & Catalog by Ed Kroll;
O’Reilly & Associates
U UNIX Network Programming by W. Richard Stevens;
Prentice Hall, 1990 (ISBN 0139498761)
U Socket API Programmer’s Reference
U UNIX “man” pages
U TCP/IP Illustrated: Volumes 1 & 2, W. Richard Stevens (v2
with Gary R. Wright); Addison-Wesley Publishing Company,
1994

SAS Institute Inc. Slide 31


SAS/C & C++ Compiler R&D
Cary, NC Feb. 1998

You might also like