• No results found

The POSIX Socket API

N/A
N/A
Protected

Academic year: 2021

Share "The POSIX Socket API"

Copied!
21
0
0

Loading.... (view fulltext now)

Full text

(1)

The POSIX Socket API

Giovanni Agosta

Piattaforme Software per la Rete – Modulo 2

G. Agosta The POSIX Socket API

(2)

Outline

1 Sockets & TCP Connections

2 Socket API

3 UNIX-domain Sockets

4 TCP Sockets

(3)

TCP Connections

Preliminaries

TCP Application Interfaces Loosely specified

Multiple implementations (Berkeley Sockets, System V TLI) Finally, POSIX socket API

POSIX Sockets API

(Mostly) Unix networking interface abstraction Bidirection communication device

Allows many different underlying protocols (not just TCP) Also abstracts inter process communication (IPC)

G. Agosta The POSIX Socket API

(4)

Socket Concepts

Communication style

Data is sent in packets

Communications style determines packet handling and addressing

Communication styles

Connection (Stream and sequential sockets) In-order delivery

Automatic request for retrasmission of lost/reordered packets Reliably Delivered Messages

No in-order delivery guarantee

Automatic request for retrasmission of lost packets Datagram

No in-order delivery guarantee Actually, no delivery guaranty at all Raw

Low level access to network protocols and interfaces

G. Agosta The POSIX Socket API

(5)

Socket Concepts

Namespaces & Protocols

Namespaces

Define how socket addresses are written Local namespace

Socket addresses are filenames Internet namespace

Socket addresses are IP addresses plus port numbers Port numbers allow multiple sockets on the same host

Protocols

Specify the underlying protocol for transmitting data IP protocol family

IP version 6

UNIX local communication

Many others (Appletalk, Novell IPX, IRDA, Bluetooth...)G. Agosta The POSIX Socket API

(6)

Socket Concepts

Protocol-Style Combinations

Protocol Style

SOCK STREAM SOCK DGRAM SOCK RAW SOCK RDM SOCK SEQPACKET

PF LOCAL

PF INET TCP UDP IPv4

PF INET6 TCP UDP IPv6

PF NETLINK

PF X25

PF APPLETALK

PF PACKET

†Valid combination, with no special name

(7)

Socket API

Socket Representation and System Calls

Representation

File descriptors are employed to represent sockets

Once communication is established, POSIX I/O calls are used System Calls

socket Creates a socket close Destroys a socket

connect Creates a connection between two sockets bind Labels a server socket with an address listen Configures a socket to accept conditions

accept Accepts a connection and creates a new socket for the connection

G. Agosta The POSIX Socket API

(8)

Socket API

socket

Prototype

#include <sys/socket.h> int socket(int domain, int type, int protocol)

Operation

Creates a socket (data structure in the file table) Takes three parameters

domain Socket domain (protocol family, e.g., PF LOCAL, PF INET)

type Socket type (communication style) protocol Protocol (generally implicit)

Returns a file descriptor (positive integer) if successful, -1 otherwise

(9)

Socket API

close

Prototype

#include <unistd.h> int close(int f) Operation

Closes the socket

Actually, since it is a file descriptor, this is just the usual close call

Returns 0 if successful

G. Agosta The POSIX Socket API

(10)

Socket API

connect

Prototype

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr

*serv addr, socklen t addrlen);

Operation

Connects the socked sockfd to the specified (remote) address addrlen is an integer (size of the sockaddr structure) Connectionless sockets can use connect multiple times, to change the associated address

(11)

Socket API

bind

Prototype

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr, socklen t addrlen);

Operation

Assigns a local address to the socket

Necessary to make a socket visible outside the process The sockaddr structure depends on the address family Returns 0 if successful, -1 otherwise

G. Agosta The POSIX Socket API

(12)

Socket API

listen

Prototype

#include <sys/socket.h>

int listen(int sockfd, int backlog);

Operation

Marks the socket as passive

The socket must use the SOCK STREAM or SOCK SEQPACKET styles

It will then be used to accept incoming connections

backlog is the maximum length of the pending connections queue

Returns 0 if successful, -1 otherwise

(13)

Socket API

accept

Prototype

#include <sys/socket.h>

int accept(int sockfd, struct sockaddr *addr, socklen t *addrlen);

Operation

Used in passive connection-based sockets addr is filled with the peer socket address

addrlen initially contains the size of addr in memory, replaced with the actual size

Returns the file descriptor (positive integer) for the accepted socket if successful, -1 otherwise

G. Agosta The POSIX Socket API

(14)

Socket Address

Generic data structure

Rationale

Addresses differ for the various protocols Different structures must be used

Sockets are rather old (1982), and a non-ANSI C workaround was used instead of void ∗

The sockaddr structure s t r u c t s o c k a d d r {

s a f a m i l y t s a f a m i l y ; /∗ A F x xx ∗/

c h a r s a d a t a [ 1 4 ] ; /∗ a d d r e s s ∗/

}

(15)

Socket Address

Data types for sockaddr structures

Type Description Header

int8 t signed 8 bit integer sys/texttts.h

uint8 t unsigned 8 bit integer sys/texttts.h int16 t signed 16 bit integer sys/texttts.h uint16 t unsigned 16 bit integer sys/texttts.h int32 t signed 32 bit integer sys/texttts.h uint32 t unsigned 32 bit integer sys/texttts.h

sa family t address family sys/socket.h

socklen t address struct length (uint32 t) sys/socket.h in addr t IPv4 address (uint32 t) netinet/in.h in port t TCP or UDP port (uint16 t) netinet/in.h

G. Agosta The POSIX Socket API

(16)

Local Sockets

Using Sockets as IPC

Why?

Provide communication between programs/processes Use the same socket abstraction

How to use local/UNIX sockets

Namespace: PF LOCAL or PF UNIX Use the struct sockaddr un

The filename must be up to 108 bytes

The actual length is computed using SUN LEN

(17)

Local/UNIX Socket Address

The sockaddr structures

#d e f i n e UNIX PATH MAX 108 s t r u c t s o c k a d d r u n {

/∗ AF UNIX ∗/

s a f a m i l y t s u n f a m i l y ; /∗ pathname ∗/

c h a r s u n p a t h [ UNIX PATH MAX ] ; } ;

Values

sun family = AF LOCAL or sun family = AF UNIX sun path must be a file pathname

G. Agosta The POSIX Socket API

(18)

TCP Sockets

Generalities

Connection-based socket

Two sockets are involved, with different roles One socket (server) accept the connection

The other socket (client) establishes the connection

The client needs to know the server in advance, but not vice versa

(19)

TCP Connections

Three Way Handshake

client TCP

socket

connect (blocks)

server

socket

(blocks) bind

listen

accept

TCP

SYN_SENT SYN j

LISTEN

CLOSED CLOSED

SYN_RCVD

SYN k, ACK j+1

ACK k+1

accept (return) connect

(return)

ESTABLISHED ESTABLISHED

passive open active open

G. Agosta The POSIX Socket API

(20)

IPv4 Socket Address

The sockaddr structures

s t r u c t s o c k a d d r i n {

/∗ a d d r e s s f a m i l y : AF INET ∗/

s a f a m i l y t s i n f a m i l y ;

/∗ p o r t i n n e t w o r k b y t e o r d e r ( b i g −e n d i a n ) ∗/

i n p o r t t s i n p o r t ; /∗ i n t e r n e t a d d r e s s ∗/

s t r u c t i n a d d r s i n a d d r ; } ;

/∗ I n t e r n e t a d d r e s s . ∗/

s t r u c t i n a d d r {

/∗ a d d r e s s i n n e t w o r k b y t e o r d e r ∗/

i n a d d r t s a d d r ; } ;

(21)

TCP Connections

Well-known ports

TCP (and UDP) define well-known ports

Well-known ports are assigned numbers from 0 to 1023 The remaiing ports are divided in registered (up to 49151) and dynamic (up to 65535)

In Linux and BSD, well-known ports are reserved to processes with administration rights (only root can start the ssh server, e.g.)

Also, ports 1024–4999 and 61000–65535 are used as ephemeral ports (i.e., for client sockets)

G. Agosta The POSIX Socket API

References

Related documents

The ServerSocket Class contains Constructor that is used to create new ServerSocket Object on a particular local port and also contains method like accept() to listen

Simpel UDP Client/Server skabelon WSAStartup socket connect send recv WSACleanup WSAStartup socket bind recvfrom sendto WSACleanup Server Server Cl ient Cl ient Dummy call Chapter

Typically the meter sockets neutral buss is bonded to the meter socket's steel case and that shall satisfy the requirement to connect the meter sockets steel case to ground.. If

When a connection is requested and successfully established, the accept method returns a new socket object which is bound to a new port. The server can

To initiate a connection, the client program in Code Example 2-2 creates a stream socket and calls connect() , specifying the address of the socket to connect to.. If the target

The main server program accepts a connection and creates a new thread to handle communication for the connection, and then the server goes back to accept more connections. We shall

When several clients connect to a server concurrently, the server creates one socket for each client, and these sockets share the same local socket address (the server's

•  client initiates a TCP connection (creates socket) to server, port 80. •  server accepts the TCP connection