Architettura e servizi Internet

Transcript

Architettura e servizi Internet
Architettura e servizi Internet
Laboratorio di Sistemi Operativi
Corso di Laurea in Informatica
Università degli Studi dell'Aquila
A.A. 2011/2012
Romina Eramo
materiale tratto da:
Fazio Vincenzo
e-mail: [email protected]
EURIX Group
Corso
Tortona, 17 Torino +39 011 8392311 • 10153 Torino
www.eurix.it
Indice
■
Internet: la storia
■ Architettura
Internet
■
Protocollo di Rete: IP (Internet Protocol)
■
Protocolli di Trasporto: TCP, UDP
■
Servizi Internet
■
Applicazioni
distribuite: programmazione socket
Internet : la storia
completamento dell’Internet Protocol
Suite, di cui i due protocolli più noti
sono il TCP e l’IP
ARPA + Università di Stanford
iniziano il progetto di una
suite di protocolli standard
create
il numero delle reti
inizia a crescere
Nascita di Internet : ARPANET
(prima rete di calcolatori a
commutazione di pacchetto)
Avvio delle ricerche di DARPA
(Defense Advanced Research
Project Agency) negli USA
1960
1970
1970-73
tempo
1973
1979
Internet : la svolta
Svluppo del primo browser: Mosaic
Gli standard Web definiscono:
➤ indirizzamento: Uniform Resource Locator (URL)
➤ protocollo: Hyper Text Transfer Protocol (HTTP)
➤ codifica: Hyper Text Markup Language (HTML)
marzo 1989: invenione del Web. Tim
Berners-Lee del CERN di Ginevra
propone il servizio WWW
periodo di notevole crescita
di Internet
1980
1989
1993
tempo
Internet…come funziona
router
Rete 1
Rete 2
router
Rete 4
router
Rete 3
Internet
■
■
Internet consiste di un insieme di reti interconnesse che possono essere
considerate come un'unica entità
Le reti sono collegate da particolari apparati detti Router, che hanno
come funzione primaria quella di instradare i dati sulla base dell'indirizzo
della rete destinataria
Router
Router
Network 2
Network 1
Network 3
Come individuare un computer sulla rete?
IP – Internet Protocol ■
Host e router sono collegati nella rete attraverso link fisici e comunicano
tramite un’ interfaccia
■ Ciascun router e host è in grado di inviare e ricevere, il protocollo IP
richiede che ciascuna interfaccia abbia un indirizzo IP
■ Interfaccia: è il confine tra host e collegamento fisico.
■
Indirizzo IP: ogni interfaccia di host e router di Internet ha un
indirizzo IP globalmente univoco
IP – Internet Protocol I router devono
necessariamente essere
connessi ad almeno due
collegamenti
■ Un host, in genere, ha
un’interfaccia
■
A ciascuna interfaccia
sono associati indirizzi IP
a 32 bit
■
Indirizzamento IPv4 ■
■
Un “indirizzo IP” (IP address) è un numero di 32 bit (4 byte) che identifica in modo
univoco un host TCP/IP su Internet o in una intranet.
Un indirizzo IP è composto da:
●
Un ID di rete (bit più a sinistra)
●
Un ID di host (bit più a destra)
Net ID
IP Address
Host ID
Indirizzamento IPv4 ■
Esempi di indirizzi IP
120
Host ID
Net ID
IP Address
Host ID
Net ID
IP Address
Net ID
IP Address
188
201
01111000.01111001.10111100.11001001
128
121
188
201
121
Host ID
10000000.01111001.10111100.11001001
195
121
188
201
11000011.01111001.10111100.11001001
Indirizzamento IPv4 Classi di indirizzamento:
■ Le classe di indirizzamento sono 5 e sono individuate con le prime cinque
lettere dell’alfabeto.
■ Gli indirizzi di classe D ed E sono poco usati.
Classe A
Classe C
Net ID
Host ID
Net ID
Host ID
120
121.188.201
195.121.188
121
Classe B
Net ID
Host ID
128.121
188.201
IP Address
IP Address
IP Address
Indirizzamento IPv4 Classi di indirizzamento
Classe A
0
1.0.0.0 – 127.255.255.255
ID
net
Classe
B
1 0
Classe
C
1 1 0
Classe
D
1 1 1 0
Classe
E 1 1 1 1 1
7 bit
24 bit
host ID
128.0.0.0 – 191.255.255.255
14 bit
net ID
16 bit
host ID
192.0.0.0 – 223.255.255.255
21 bit
net ID
host ID
28 bit
224.0.0.0 – 239.255.255.255
multicast group ID
28 bit
240.0.0.0 – 255.255.255.254
reserved
27 bit
Indirizzamento IPv4 Classe A
Host ID
Net ID
Reti disponibili
Host disponibili
126
16777214
IP Address
Reti disponibili
Host ID
Net ID
Classe B
Host disponibili
16384
65534
IP Address
Net ID
Host ID
Classe C
IP Address
■
Reti disponibili
Host disponibili
2097152
Alcuni indirizzi IP sono riservati: (per un elenco completo [http://ds.internic.net])
●
L’indirizzo 127 della classe A è usato a fini di diagnosi degli adattatori di rete
●
Gli indirizzi 0 e 255 sono riservati negli ID di host.
254
Architettura Internet
L'Interna*onal Organiza*on for Standardiza*on (ISO) nel 1979 ha definito la pila di protocolli Open Systems Interconnec*on (OSI), con l'intenzione di creare uno standard per le telecomunicazioni da usare nelle re* di tuBo il mondo ■ All'aBo pra*co però, lo standard de facto che viene comunemente usato nella maggior parte delle re*, è il TCP/IP ■
modello modello ISO-­‐OSI TCP/IP Applicazione Applicazione Presentazione Sessione Non previsto Trasporto TCP/UDP Rete IP Collegamento Da* Fisico Network Access Architettura Internet
Livello
Applicativo
Livello
Applicativo
TCP/UDP
TCP/UDP
Internet
Protocol
Connessione virtuale
Network
Access
Internet
Protocol
Network
Access
Internet
Architettura Internet
TCP/UDP
DATI
APP
APP
DATI
TCP/
UDP
TCP/
UDP
IP
IP
netw.
netw.
netw.
netw.
IP TCP/UDP DATI
netw. IP TCP/UDP DATI
Host A
DATI
TCP/UDP
DATI
IP TCP/UDP DATI
netw. IP TCP/UDP DATI
Host B
netw. IP TCP/UDP DATI
netw. IP TCP/UDP DATI
Internet
Strato di accesso alla Rete
■
Ha lo scopo di garantire il corretto interfacciamento verso una specifica rete,
in modo da rendere lo strato superiore indipendente dalle caratteristiche
fisiche della rete stessa.
Network
Access
Network
Access
Internet
Internet Protocol (IP)
■
■
Il protocollo IP è responsabile dell’instradamento dei datagram
da un host all’altro
Le funzioni principali del protocollo IP sono:
●
In trasmissione
u
Incapsula in datagram i dati provenienti dallo strato di trasporto
u
Prepone l’opportuna intestazione
u
Applica algoritmo di routing
u
●
unità elementare delle
informazioni trasmesse
contenente i dati che
servono a trasportare
l’informazione dal
mittente al destinatario
Invia i dati verso l’opportuna interfaccia di rete.
In ricezione
u
Verifica la validità del datagram in arrivo
u
Esamina l’intestazione
u
Verifica se sono dati da reinstradare
u
Se sono dati locali, sceglie l’opportuno protocollo dello strato di trasporto
e provvede ad inviarglieli nel formato opportuno.
■
Header IP
Formato datagram di IPv4
0
4
Versione
Lunghezza
intestazione
8
16
Tipo di servizio
Lunghezza totale del datagram (byte)
Identificatore a 16 bit
Tempo di vita
32
Indicatori
Protocollo dello
strato superiore
Offset frammento (13 bit)
Checksum intestazione
Indirizzo IP sorgente a 32 bit
Indirizzo IP destinatario a 32 bit
Opzioni IP (se presenti)
DATI
Padding (necessario a
completare i 32 bit)
●
●
Header: 20-64 byte
Dati + header <= MTU (Maximum Trasmission Unit), altrimenti si ha la frammentazione
■
Source address: indirizzo IP mittente
■
Destination address: indirizzo IP del destinatario
■
Protocol: protocollo di trasporto
■ Fragment offset: offsetdel frammento dll’ambito del totale dei dati da trasmettere
■
Identification: identificativo del datagramm
■
Flag: indica se il datagram rappresenta un frammento
■ Time-to-Live (TTL): numero di router che un datagram può attraversare
■
Header checksum: controllo errore sull’header
IHL: lunghezza dell’header
■
■ Total lenght: lunghezza totale
Campi fondamentali del datagram IPv4 ■
Header IP
Il datagram IP ha una lunghezza variabile:
Strato di Trasporto
■ Lo strato di trasporto fornisce il servizio di trasporto dei messaggi dello strato di
applicazione fra le estremità client e server di un’applicazione
■
Lo scopo principale è quello di fornire una comunicazione end-to-end a livello
di processi ■
Il software di questo strato è responsabile del meccanismo che permette di
distinguere, all’interno dello stesso host, il processo applicativo destinatario (o
sorgente) dei dati
■
Ogni elaboratore contiene un insieme di punti logici di accesso “ports” (porte)
■ Ad
■
ogni servizio è associato un port number differente che consente di
indirizzare il processo che realizza il servizio (server)
Nell’architettura Internet esistono due standard principali di protocolli di
trasporto:
●
User Datagram Protocol (UDP - rfc768)
●
Trasmission Control Protocol (TCP - rfc793)
Trasporto UDP
■
Il protocollo UDP (User Datagram Protocol) consente alle applicazioni di
scambiare messaggi singoli (protocollo Message oriented)
■
Servizio di trasporto fornito:
●
Non affidabile
Connessionless
● Flusso di dati strutturato a messaggi
● Non supporta meccanismi di riscontro e recupero d’errore
●
■
Può essere utilizzato per trasmissioni multicast (a differenza di TCP)
●
stesso messaggio UDP a più destinazioni, indirizzate attraverso un indirizzo multicast
<IP multicast address, UDP port>
■ Aggiunge
solo due funzionalità a quelle di IP
●
multiplexing delle informazioni tra le varie applicazioni tramite il
●
checksum per verificare l’integrità dei dati
Header UDP
●
Port sorgente, port destinazione
●
Campo per eventuali checksum
Trasporto TCP
■
Il protocollo TCP (Transmission Control Protocol) è un protocollo end-to-end
con connessione e offre un servizio stream-oriented affidabile
■
Trasferisce un flusso informativo bi-direzionale non strutturato (byte stream)
tra due host ed effettua operazioni di multiplexing (in trasmissione) e
de-multiplexing (in ricezione)
■
Servizio di trasporto fornito:
●
Affidabile
u
Integrità
u
Rispetto della sequenza
u
Assenza di duplicati
●
Orientato
alla connessione
●
Flusso di dati orientato al byte
●
Header TCP
Port sorgente, port destinazione
Informazione per la gestione della
connessione
● Informazioni per il ontrollo ed il
recupero degli errori
●
0
4
8
Header TCP
(Port address)
Header IP
(IP address)
16
Source Port
HLEN
TCP data
IP data
24
Destination Port
Sequence Number
Acknowledegment Number
Reserved
Code bits
Window
Checksum
Urgent Pointer
Options (if any)
Padding
Data
Data
31
Stato di Trasporto
■
La divisione dei compiti fra lo stato di trasporto (UDP, TCP) e IP è la
seguente:
●
●
■
Il stato IP si occupa del trasferimento dei dati fra elaboratori collegati alla rete
(l’intestazione IP identifica gli host sorgente e destinatario)
Lo strato UDP (TCP) si occupa dello smistamento dei dati fra sorgente e
destinatario all’interno dello stesso host (tramite il port number)
Per richiedere un servizio, fornito da un processo residente su host remoto, il
client deve conoscere il port number associato al servizio stesso
Modello Client/Server
■ Architettura fondamentale su cui si basa gran parte della programmazione
di rete in ambiente UNIX
■ Processo
●
Server
Rappresenta un programma che mette a disposizione un certo servizio (ad
esempio: ftp, mail, ecc.)
■ Processo
●
Client
È un programma che chiede l’esecuzione di un servizio ad un processo server.
NOTA: tipicamente il processo client si interfaccia con l’utente al terminale, invia
dati al processo server, li riceve e li propone all’utente
■
Modello Client/Server
Server concorrente - protocollo TCP
●
Il socket di comunicazione viene creato automaticamente quando viene accettata
la connessione.
■
Servizio FTP
Server Internet File Transfer Protocol
To = 21, dest addr
Connect(to)
ftp
?
File Transfer Protocol ?
Accept()
21
ftpd
ftpd
ftp
Il servizio FTP viene offerto da un demone che funge
da server e viene utilizzato da un programma client in
grado di comunicare attraverso il protocollo FTP
ftpd
Modello Client/Server
■
Server concorrente - protocollo UDP
●
■
Il socket di comunicazione viene creato dal programma server
Servizio tftp
tftp
To = 69, dest addr
sendto(msg,to)
?
Trivial File Transfer Protocol ?
tftp
TFTP è un protocollo di trasferimento file molto
semplice, con le funzionalità di base del FTP
Server Internet Trivial File Transfer Protocol
69
tftpd
?
tftpd
?
tftpd
L’Architettura Internet
FTP DNS
Telnet HTTP
FTP DNS
Telnet HTTP
UDP/TCP
UDP/TCP
IP
Network
Access
IP
Network
Access
Internet
I servizi Internet
■
I dati sono trasmessi a pacchetto: ciascun blocco di dati è preceduto da
intestazioni che specificano:
●
a quale macchina sono diretti (protocollo IP)
●
da quale programma debbono essere utilizzati (protocolli TCP/UDP)
IP TCP/UDP
header
header
20 byte 20 byte
data
IP
individua
l'host
Internet
TCP/UDP
individua
uno dei
SMTP
processi attivi sull'host
Telnet
FTP
I servizi Internet
■
I servizi inizialmente previsti per Internet erano:
●
●
ftp (trasferimento file): permette di trasferire file tra macchine interconnesse
●
e-mail (posta elettronica): permette di scambiare messaggi tra utenti della rete
●
■
telnet (terminale remoto): permette ad una macchina di essere vista come un
terminale connesso all’host destinazione.
……
Questi servizi erano caratterizzati da un’ interfaccia utente poco amichevole.
I servizi Internet
■
Domain Name System (DNS)
■
Telnet
■
Ftp
Domain Name System (DNS)
■
Il Domain name System (DNS) è alla base della risoluzione dei nomi di
Internet
[www.ssgrr.it]
195.31.235.39
■
Il DNS è
● un database distribuito implementato in una gerarchia di server dei nomi
● un protocollo dello strato di applicaziome che permette agli host di
comunicare ocn I server dei nomi in modo da fornire il servizio di traduzione
■
Il sistema dei domini su Internet è una gerarchia mondiale amministrata
dall’interNIC (Internet Network Information Center)
Domain Name System (DNS)
■
■
■
Quando Internet era costituito solo da pochi computer (ed era conosciuto con
il nome di ARPANet) la risoluzione dei nomi poteva essere gestita da un
unico computer che si trovava allo Stanford Research Institute (SRI).
Il file conservato nell’SRI si chiamava HOST ed altro non era che un elenco
di associazioni (indirizzo IP, nome del computer)
Con l’aumentare del numero dei computer connessi in rete si è reso
necessario escogitare un nuovo sistema:
DNS (Domain Name System)
Domain Name System (DNS)
■
■
■
Il DNS risolve i nomi di computer in indirizzi IP attraverso file configurati
manualmente, usando un database gerarchico di nomi che viene conservato
su più computer
La natura gerarchica garantisce maggiore efficienza in termini di velocità e
manutenibilità
Il DNS è un servizio definito nelle Request For Comments (RFC) 882 e 883 di
Internet.
Indirizzi:
[http://ds.internic.net/rfc/rfc882.txt]
[http://ds.internic.net/rfc/rfc883.txt]
Spazio dei nomi di dominio
Domain Name Service
■
Rappresenta la struttura dei dati che creano il DNS utilizzato su Internet.
■
La gerarchia dei nomi ha molti livelli, e sono molti i computer che definiscono
un livello.
■
Al livello “radice” ci sono i server dei nomi radice, mantenuti dall’InterNic.
■
La maggior parte dei server DNS è configurata con gli indirizzi IP dei server
radice (root)
Spazio dei nomi di dominio
■
Il secondo livello è rappresentato da domini “top” come:
.com, .net, .gov, .org, .edu, .mil, .int, .xx
■
.com
Organizzazioni commerciali
■
.edu
Organizzazioni nel campo istruzione
■
.gov
Enti pubblici e governativi
■
.int
Organizzazioni internazionali
.mil
Enti militari
.net
Organizzazioni di networking
.org
Organizzazioni non commerciali
■
■
■
■
Sotto i livelli “root”e “top” si trovano molti altri livelli.
Spazio dei nomi di dominio
Server di nome
InterNIC
del dominio
radice
mil
af
org
army
phoenix
good
net
internic
edu
com
harvard
sam
it
microsoft
ftp
ssgrr
www
Spazio dei nomi di dominio
■
Il nome della singola macchina è il livello più basso
■
Il percorso completo dal livello radice a quello della macchina è conosciuto
coma FQDN (Fully Qualified Domain Name)
■
Il FQDN va dal nome della macchina verso quello della root
Risoluzione dei nomi
■
■
La risoluzione dei nomi di dominio è simile a quella dei nomi host cioè la
conversione da un nome “amichevole” in indirizzo IP
Quando si usa il DNS i client chiamano un server DNS per la risoluzione
dei nomi
client
www.ssgrr.it
195.31.235.39
Server DNS
o Server dei
nomi
Risoluzione dei nomi
it
www.ssgrr.it
195.31.235.39
ssgrr.it
198.123.242.12
123.234.23.134
…
195.20.273.56
…
com
edu
198.123.252.12
123.234.24.134
…
195.31.279.123 …
abc
xyz
195.31.235.12
195.31.235.12
…
195.31.235.39 …
it
ssgrr
xxx
ftg
www
Telnet
■
La telnet è un’applicazione che permette il dialogo tra la macchina locale ed
una remota tramite il protocollo TCP/IP.
■
Più semplicemente la Telnet permette di aprire sul proprio computer una
finestra di terminale remota, ovvero una sessione Telnet ad un host remoto
■
Il programma Telnet implementa la parte client del protocollo. I client Telnet sono stati disponibili sulla maggior parte dei sistemi Unix per
parecchi anni e ora sono disponibili per qualsiasi tipo di computer
■
Telnet
Telnet Client
TCP
Internet
Protocol
Network
Access
port: 23
Virtual connection
Internet
Telnet Server
TCP
Internet
Protocol
Network
Access
Ftp
■
■
■
Ftp è l’acronimo di File-Transfer-Protocol, il protocollo utilizzato per il
trasferimento dei file
Con l’Ftp è possibile copiare da un computer remoto un file sull’hard-disk
locale e viceversa
E’ basato sul protocollo TCP/IP
Ftp
port 1173
port 1174
FTP (Client)
TCP
Internet
Protocol
Network
Access
Commands
Responses
Control
connection
Data connection
Data
ACKs
Internet
port 21
FTP (Server)
TCP
Internet
Protocol
Network
Access
port 20
Ftp
■
Fase di connessione
●
Il client FTP apre una connessione TCP e si autentica
Il server FTP accetta la richiesta di connessione e verifica autenticazione
● Se l’ autenticazione è OK il server si mette in attesa di ricevere comandi sulla
connessione di controllo (port = 21)
●
■
Trasferimento di un file
Il client richiede il file da trasferire all’FTP server.
● Il server accetta la richiesta in relazione alle protezioni del file-system relative al file.
●
●
●
Se la richiesta viene accettata il server stabilisce la connessione (dal port 20 a un port
dinamico del client definisce)
La connessione dati è mantenuta per il tempo necessario al trasferimento del file
Ftp
■
Operazioni FTP
●
●
●
Sul server la connessione per il controllo avviene sul port 21, mentre i dati
vengono trasferiti sul port 20
Il client invia al server il proprio indirizzo IP ed il numero del port sul quale il server
dovrà stabilire la connessione dati
Il server stabilisce la connessione
Ftp
■
FTP options
Tipi di dati : ASCII, EBCDIC, binari
● Tipi di file : strutture di file, di record, di pagine
● Modalità di trasmissione : stream, block, compressi.
●
■
Tipi di dati:
●
ASCII (default)
EBCDIC (opzionale)
● IMAGE : supporta efficientemente il trasferimento di file binari
●
●
LOCAL : usato per specificare una dimensione logica di byte da trasferire
Ftp
Comandi
ABOR
LIST listafile
Descrizione
Abortisce comando FTP ed il trasferimento di dati
Mostra la lista dei file o delle directory
Password sul server
PASS passwd
PORT
QUIT
RETR
nomefile
STOR nomefile
SYST
TYPE tipo
USER username
Indirizzo del client IP
Uscita (logoff) dal server
Recupera
un file dal server (get)
Memorizza un file sul server (put)
Tipo di sistema (restituito dal server)
Specifica
del tipo di file (e.g. A=ASCII; I=Immagine)
username sul server
ftp
Ftp da prompt di comando
Ftp
FTP server
windows
Ftp
FTP client
windows
Ftp
Il browser-web come client ftp
Il World Wide Web
■ Architettura
di un’applicazione Web
Tier 1
Tier 2
Browser
HTTP
135.31.235.200 TCP
IP
prot. acc.
rete
http://135.31.235.13:80
pagina
HTML
Web
Server
HTTP
TCP
IP
Internet
prot.
acc.
rete
pagine
HTML
135.31.235.13
Applicazioni distribuite
■ La programmazione mediante socket
●
●
Interfaccia socket. non è un livello ma una
u
Libreria di accesso ai servizi di trasporto
Alternativa: TLI (Transport Layer Interface)
FTP DNS
Telnet HTTP
Interfaccia socket
UDP/TCP
IP
Network
Access
■
Struttura di un’applicazione
Modello senza connessione
●
●
■
Predisposizione transport-endpoint
u
Rilascio transport-endpoint
Modello con connessione
●
Predisposizione transport-endpoint
u
u
●
■
Scambio messaggi
Instaurazione connessione
Ø
Scambio messaggi
Abbattimento connessione
Rilascio transport-endpoint
Predisposizione transport-endpoint
u
u
System call socket()
System call bind()
System Call socket()
■
■
Il socket costituisce la struttura dati che consente la ricezione e l’invio dei
messaggi.
È definito in un dominio
ogni socket è associato un nome che ha validità solo all’interno del
dominio di comunicazione in cui il socket è stato creato.
■ Ad
■
Un socket viene creato dalla System Call socket().
S = socket(domain, type, protocol)
int s, domain, protocol;
■ La System call restituisce un identificatore che verrà poi utilizzato nelle
successive system call o funzioni per referenziare il socket.
■ Eventuali processi figli hanno automaticamente accesso ai socket creati dal
processo padre (come per i file)
System Call socket()
Domain
■ Il parametro domain rappresenta il dominio di comunicazione che può
essere:
●
UNIX domain
●
Internet domain
●
Xerox Network System (XNS)
■
■
Il dominio UNIX consente la comunicazione tra processi residenti sulla stessa
macchina, mentre i restanti due vengono utilizzati per comunicazioni tramite
rete.
I valori da associare al parametro domain sono definiti nel file socket.h nel
modo seguente:
●
AF_UNIX (UNIX internal protocol)
●
AF_INET (ARPA Internet protocols)
●
AF_NS (Xerox Network System protocols)
Nota: AF = Address Family
System Call socket()
TYPE
■ Il tipo definisce la semantica della comunicazione; sono disponibili i seguenti
tipi principali i cui valori sono definiti nel file socket.h:
●
SOCK_DGRAM
●
SOCK_STREAM
●
SOCK_RAW
●
SOCK_SEQPACKET
■
Il tipo SOCK_DGRAM è basato sul protocollo udp
■
Non è garantita l’affidabilità
■ Il protocollo non è orientato alla connessione, per cui sono le stesse
operazioni di input ed output che consentono l’indirizzamento corretto dei
messaggi.
System Call socket()
■
Il tipo SOCK_STREAM è basato sul protocollo TCP
Un socket stream fornisce un modello di comunicazione orientato alla
connessione con un flusso di byte non strutturato, ma per il quale è garantita
l’affidabilità, la sequenza e la non duplicazione.
■ Adatto a problemi che richiedono un grosso scambio di informazioni tra
corrispondenti stabili.
■ Un socket di tipo SOCK_RAW permette l’accesso ai meccanismi di più basso
livello; può essere utilizzato quando si vuole costruire un protocollo
particolare.
■ Un socket SOK_SEQPACKET ha le caratteristiche di un socket stream, ma
in più garantisce il rispetto della struttura a messaggio della comunicazione; è
utilizzato solo neldominio XNS.
■
System Call socket()
protocol
■
Il parametro specifica il particolare protocollo che deve essere usato con i
socket
■
Normalmente solo un singolo protocollo viene fornito ad ogni tipo di socket.
■
Se il parametro è messo a zero, viene selezionato il protocollo associato al
tipo specificato.
■
Se si vuole specificare un protocollo come stringa ascii, si può richiamare la
funzione
getprotobyname()
che, data una stringa che rappresenta un
protocollo, fornisce il numero corrispondente.
System Call socket()
■
L’associazione nome/identificatore di protocollo viene effettuata nel file
/etc/protocols.
struct protoent *getprotobyname(name)
char *name;
■
Dove:
struct protoent {
char *p_name;
char **p_aliases;
int p_proto;
};
/* nome del protocollo (es. TCP) */
/* nomi alternativi */
/* identificativo del protocollo */
System Call bind()
■
La System Call bind() associa all’identificativo del socket un ‘name’ che
rappresenta il riferimento per il socket all’esterno del processo che lo ha
creato.
bind(s,name,namelen)
int s;
struct sockaddr_un *name; /* dominio Unix */
struct sockaddr_in *name; /* dominio Internet */
int namelen;
s = identifica il socket
name = identifica il nome che verrà assegnato al socket
namelen = la dimensione di name pari alla dimensione di struct sockaddr
System Call bind()
name
■
Il nome del dominio di comunicazione
■
Nel caso il dominio UNIX, name è un puntatore ad una struttura di tipo struct
sockaddr_un
è definita nel file
sys/un.h
struct sockaddr_un {
/* AF_UNIX */
short sun_family;
char sun_path[108]
};
■
Il socket è rappresentato da un nome nel file system alla stessa stregua di un
file, con l’unica differenza che il nome viene generato all’atto della bind.
System Call bind()
■
Nel caso di dominio Internet il nome di un socket viene identificato da una
struttura di tipo struct sockaddr_in (netinet/in.h)
struct sockaddr_in {
/* AF_inet */
short sin_family;
short sin_port;
struct in_addr sin_addr;
char sun_zero[8];
}; AF_INET : dominio Internet
sin_port : port number
sin_addr : indirizzo Internet
■
L’indirizzo Internet è costituito da 4 byte che consentono di individuare la rete,
e nell’ambito della rete, il calcolatore interessato.
Internet Address
address
■
L’indirizzo della macchina può essere espresso anche come una stringa.
■
La stringa può assumere una forma organizzata in sottodomini (domain
name) che consente di individuare a livello mnemonico l’indirizzo geografico
della macchina.
■
■
Il legame (nome della macchina)/(indirizzo) è definito nel file /etc/hosts e/o
nello spazio dei nomi gestiti dal DNS.
La funzione gethostbyname() fornisce l’indirizzo Internet per un certo nome
di macchina:
struct hostent *gethostbyname(name)
char *name;
Internet Address
■
■
La funzione restituisce un puntatore ad una struttura di tipo struct hostent
struct hostent {
char * h_name;
/* official name of host */
/* alias list */
char **h_aliases;
/* host address type */
int h_addrtype;
int h_length;
/* length of address */
char **h_addr_list; /* host IP address list */
};
define h_addr h_addr_list [0] /* usare come char *h_addr */
#
La funzione restituisce la struttura sempre sulla stessa area di memoria, una
successiva chiamata sovrascrive i vecchi valori, allora:
struct hostent *server;
struct in_addr server_addr;
server = gethostbyname(host);
bcopy(server->h_addr, &server_addr, server->h_length);
Port Number
■ Alcuni
■
■
valori per il port sono assegnati a servizi di rete eseguiti come
superuser (1-1023)
Identificativi maggiori di 1023 sono utilizzati dai processi eseguiti come utenti
normali (il port 1024 è riservato)
Poiché il port assume un valore intero è necessario tener presente un
problema che è legato al trasferimento di interi su una rete. Nella
rappresentazione dei numeri interi è possibile adottare due convenzioni:
●
●
■
MSBF : rappresentare prima (cioè all’indirizzo più basso) il byte più significativo
(big endian)
LSBF : rappresentare prima il byte meno significativo (little endian)
Il problema viene risolto stabilendo un ordine convenzionale di
rappresentazione;per la rete Internet si è scelta la convenzione MSBF.
Port Number
■
■
E’ necessario dunque che i processi applicativi in esecuzione sulle diverse
macchine rispettino tale convenzione quando inviano o ricevono interi sulla
rete.
Vengono fornite delle macro che consentono di invertire l’ordine dei bytes; il
loro nome è:
●
ntohs()
●
htons()
● ntohl()
●
htonl()
Nota: Le prime due trattano gli
short mentre le ultime i long.
■
Se il numero intero viene ricevuto dalla rete è necessario usare le funzioni
che iniziano con “n” (network to host), altrimenti le altre due che iniziano con
“h” (host to network).
■
E’ necessario utilizzare le macro htons() per assegnare il valore al campo port
della struttura struct sockaddr_in.
Port Number
■
■
Se il port è messo a zero nella chiamata alla bind(), il sistema assegna il
primo valore libero.
In questo modo è possibile conoscere il name associato ad un socket tramite
la system call
getsockname().
getsockname(s, name, namelen)
int s;
struct sockaddr_un *name; /* dominio UNIX */
struct sockaddr_in *name; /* dominio Internet */
int *namelen;
■
La system call restituisce nella struttura puntata da name il nome del socket e
nel parametro namelen la sua lunghezza effettiva; quest’ultimo parametro va
inizializzato con la lunghezza della struttura.
Modello senza connessione
scambio messaggi
■
Il modello si basa sul protocollo UDP
■
Per consentire la comunicazione tra i processi non è necessaria alcuna
ulteriore operazione preliminare, è sufficiente utilizzare le operazioni di
input/output.
■
Le operazioni di input vengono realizzate mediante:
●
●
●
■
read()
recv()
recvfrom()
Le operazioni di output vengono realizzate mediante:
●
sendto()
System Call: recv()
cc = recv(s, buf, buflen, flags)
int cc;
int s,buflen,flags;
char *buf;
■
■
La System Call recv() è identica a quella della read(), con la possibilità
aggiuntiva di specificare dei flag per modificare il modo canonico delle
operazioni di ricezione.
Con il campo flags impostato a:
●
●
MSG_PEEK : legge il messaggio senza consumerlo
MSG_OOB : legge messaggi con alta priorità (out-of-band)
■
System Call: recvfrom()
La recvfrom() rende possibile il colloquio bidirezionale in quanto permette di scoprire
chi è il mittente del messaggio letto.
cc = recvfrom(s, buf, buflen, flags, from, fromlen)
int cc;
int s,buflen,flags;
char *buf;
struct sockaddr_un *from; /* dominio UNIX */
struct sockaddr_in *from; /* dominio Internet */
int *fromlen
from : punta ad una struttura che individua il mittente
fromlen : contiene la sua lunghezza
■ Quando viene attivata la System Call è necessario inizializzare il parametro fromlen
■
con il valore della dimensione della struttura.
Quest’ultima System Call è sicuramente la più adatta per applicativi che usano UDP.
System Call: sendto()
■
Le operazioni di invio messaggi sono realizzate tramite la sendto() che
consente di specificare il destinatario.
cc = sendto(s, buf, buflen, flags, to, tolen)
int cc;
int s,buflen,flags;
char *buf;
struct sockaddr_un *to; /* dominio UNIX */
struct sockaddr_in *to; /* dominio Internet */
int tolen
flags:
● MSG_OOB : specifica l’invio di un messaggio ad alta priorità (out-of-band) solo
●
per socket-stream
MSG_DONTROUTE: specifica l’invio senza routing
to : socket destinatario
tolen : contiene la lunghezza effettiva
Comunicazione senza connessione
recvform()
read()
AF_INET, addr, port
AF_UNIX, “server”
AF_UNIX, “client”
in
out
recv()
AF_INET, addr, port
S
out
sendto()
sendto()
in
C
recvform()
read()
recv()
Schema di comunicazione tra processi
Esempio dominio Internet (udp) - server
char hostname[40];
pp = getprotobyname(“udp”);
s = socket(AF_INET, SOCKET_DGRAM, pp->p_proto);
struct hostent *server, *gethostbyname()
struct addr_in server_addr;
gethostname(hostname,40);
server = gethostbyname(hostname);
bcopy(server->h_addr,(char *)&server_addr,server->h_length);
struct sockaddr_in server_sock;
server_sock.sin_family = AF_INET;
server_sock.sin_addr = server_addr;
server_sock.sin_port = htons(2005);
bind(s,&server_sock,sizeof(server_sock));
recvfrom(s,buf, BUFLEN, 0, &client, &addrlen);
sendto(s, msg, strlen(msg)+1, 0, &client, addrlen);
SOCKET
Preleva indirizzo Internet
bind
Riceve richiesta ed invia
replica
BIND
■
In alternativa rispetto all’esempio, dove si utilizza un indirizzo specifico della
macchina locale, la bind può essere fatta senza indicare un indirizzo:
server_sock.sin_addr.s_addr = htonl(INADDR_ANY);
Esempio dominio Internet (udp) - client
Richiama in maniera analoga socket() e bind().
argv[1]:il nome della macchina
argv[2]:il port
struct hostent *server, *gethostbyname()
Preleva indirizzo Internet
dalla macchina remota
struct addr_in server_addr;
server = gethostbyname(argv[1]);
bcopy(server->h_addr,(char *)&server_addr,server->h_length);
struct sockaddr_in server_sock;
strcpy(command,”richiesta dal client”);
sscanf(argv[2],”%d”,&port);
server_sock.sin_family = AF_INET;
Invia la richiesta al server
server_sock.sin_addr = server_addr;
server_sock.sin_port = htons(port);
sendto(s,command,sizeof(command), 0, &server_sock,sizeof(server_sock));
Funzione getservbyname()
■
■
E’ possibile associare in maniera stabile un numero di port au un certo
servizio inserendo un entry nel file
/etc/services .
Il processo client può identificare il numero di port associato ad un certo
servizio tramite la funzione getservbyname()
.
struct servent *ss, *getservbyname();
ss = getservbyname(“nome_serv”,”udp”);
■ Dopo tale chiamata il campo s_port contiene il numero di port assegnato al
servizio.
struct servent {
char *s_name;
/* official service name */
char **s_aliases;
/* alias list */
int s_port;
/* port # */
char *s_proto;
/* protocol to use */
};
■
■
■
■
Modello con connessione
instaurazione conn.
È necessario introdurre ulteriori System Call per la fase di predisposizione
della connessione.
La System Call listen() predispone il processo ad accettare richieste di
connessioni su un socket.
listen(s, backlog)
int s,backlog;
s : individua il socket
backlog : individua la dimensione della coda
Il secondo parametro specifica il numero massimo di processi che possono
essere in coda sulla richiesta di connessione.
Quando il server è predisposto per accettare richieste di connessione lancia
la System Call accept().
■
■
■
System call : accept()
La System Call accept() mette il processo in attesa di richieste di
connessione sulla coda predisposta dalla
listen().
ns = accept(s, addr, addrlen)
int ns,s;
struct sockaddr_in *addr;
int *addrlen;
s : identifica il socket su cui è stata fatta la listen()
addr : identifica il nome del socket del client
addrlen : la lunghezza del nome
Quando una connessione viene accettata la richiesta viene rimossa dalla
coda e la accept() restituisce il socket da utilizzare per comunicare con il
processo client.
ns = accept(s, 0, 0)
In tale caso non viene restituito l’identificativo del corrispondente.
System call : connect()
■
Il processo client, per richiedere una connessione, lancia la System call
connect().
connect(s, name, namelen)
int s;
struct sockaddr_un *name; /* dominio UNIX */
struct sockaddr_in *name;/* dominio Internet */
int namelen;
s : identifica il socket creato in precedenza.
namelen : individua il server verso cui si chiede la connessione
In genere il processo server una volta accettata una connessione, genera un
figlio che gestisceil colloquio con il processo client mentre il server torna sulla
accept() in attesa di nuove richieste di connessione.
■
Modello con connessione
scambio messaggi
Una volta stabilita la connessione il server
(processo figlio) ed il client,
colloquiano sui rispettivi socket tramite le System Call read() e recv() (input)
e write() e send() (output).
■ La lettura e la scrittura sono orientate al byte
■ La send ha la stessa semantica della write(), ma in più consente di
specificare il parametro
flags .
■
cc = send(s, buf, buflen, flags)
int cc;
int s,buflen, flags;
char *buf;
Modello con connessione
schema
AF_INET, addr, port
in
S
recv()
fork() S1
send()
recv()
fork() S2
send()
out
connect()
in
out
AF_INET, addr, port
out
in
C1
recv()
in
out
out
in
Schema di comunicazione tra processi
send()
send()
C2
recv()
Modello con connessione
abbattimento connessione
■
Fase di disconnessione e rilascio transport-endpoint
■
La fase di disconnessione è rappresentata da una operazione di close() da
parte dei corrispondenti.
■
■
Il processo in lettura su un socket chiuso dal corrispondente riceve EOF (End
Of File)
Il processo in scrittura su un socket chiuso riceve un segnale (SIGPIPE), che
se non gestito in maniera opportuna provoca la terminazione del processo.
Esempio dominio Internet (TCP)
server
server_id = socket(AF_INET,SOCK_STREAM,0)
SOCKET
struct hostent *server, *gethostbyname();
struct addr_in server_addr;
server = gethostbyname(hostname);
bcopy(server->h_arrd,(char*)&server_addr,server->h_length);
struct sockaddr_in server_sock;
BIND
server_sock.sin_family = AF_INET;
server_sock.sin_addr = server_addr;
server_sock.sin_port = 0;
bind(server_id, &server_sock,sizeof(server_sock));
■
Il numero di port viene assegnato dal sistema il server stampa il valore del
port per renderlo noto ai processi client.
Esempio dominio Internet (TCP)
server
listen(server_id,4)
■ Accetta
connessioni con i client e genera processi figli che gestiscono la
comunicazione con il client.
while (1) {
s1_id = accept(server_id,0,0);
pid = fork();
if (pid== 0){
close(server_id);
< comunicazione con il client….>
close(s1_id);
exit(0);
}
close(s1_id);
}
■
Il processo padre genera il segnale SIGCLD per evitare il proliferare di
processo zombie
Esempio dominio Internet (TCP)
client
■
client_id = socket(AF_INET,SOCK_STREAM,0)
Richiede la connessione verso il server individuato dal port e dal nome della
macchina remota ricevuti come parametri.
struct hostent *server;
Struct sockaddr_in server_sock;
struct addr_in server_addr;
server = gethostbyname(argv[1]);
bcopy(server->h_addr,(char*)&server_addr,server->h_length);
sscanf(argv[2],”%d”,&port);
server_sock.sin_family = AF_INET;
server_sock.sin_addr = server_addr;
server_sock.sin_port = htons(port);
connect(client_id, &server_sock, sizeof(server_sock));
Invia messaggio di richiesta
send(client_id,command, strlen(command)+1,0)
Comunicazione in ambito distribuito
■
Tipi di associazione
A1
1:N
N:M
B1
A2
B2
A3
N:M
Modello senza connessione
●
C1
C2
A
C2
■ Associazione
S
1:1
■ Associazione
●
/client-server
Modello senza connessione
●
Modello con connessione
1:N
B
Struttura di un’applicazione
Associazione N:M/modello
senza connessione
A1
B1
socket()
socket()
bind()
bind()
sendto()
recvfrom()
recvfrom()
sendto()
close()
close()
Struttura di un’applicazione
Associazione N:M/modello senza connessione
Server
socket()
socket()
bind()
bind()
sendto()
fork()
recvfrom()
fork()
Richiesta servizio
socket()
bind()
Processo figlio
sendto()
Nuovo identificativo
recvfrom()
Parametri servizio
recvfrom()
sendto ()
servizio()
sendto()
close()
replica
recvfrom()
close()
Client
Struttura di un’applicazione
Client-server Modello con connessione
Server
socket()
socket()
bind()
listen()
accept()
Richiesta connessione
connect()
fork()
recv()
Processo figlio
Parametri servizio
send()
servizio()
send()
close()
replica
recv()
close()
Client