Laboratorio Reti di Calcolatori (A.A. 2008-2009) Programmazione di rete ed interfaccia API socket di Berkeley Delfina Malandrino delmal@dia.unisa.it http://www.dia.unisa.it/professori/delmal/ API Socket di Berkeley 2 Si utilizza un meccanismo che svolge il ruolo di interfaccia fra il Sistema Operativo e l applicazione di rete: Interazione con il SO realizzata mediante l invocazione di chiamate di sistema 1
3 Socket di Berkeley E una interfaccia locale all host, controllata dal sistema operativo, creata/posseduta dall applicazione tramite la quale il processo applicativo può inviare/ricevere messaggi a/da un altro processo applicativo (locale o remoto) Creato dinamicamente dal SO su richiesta del processo applicativo utente Persiste solo durante l esecuzione dell applicazione Il suo ciclo di vita è simile a quello di un file: Apertura Collegamento ad un endpoint Lettura/scrittura Chiusura 4 Le origini Inizialmente nasce in ambiente UNIX Negli anni 80 la Advanced Research Project Agency finanziò l università di Berkeley per implementare la suite TCP/IP nel sistema operativo Unix I ricercatori di Berkeley svilupparono il set originario di funzioni che fu chiamato interfaccia socket Rappresentano una estensione delle API di UNIX per la gestione dell I/O su periferica standard (files su disco, stampanti, etc) Rappresentano lo standard di riferimento per tutta la programmazione su reti 2
Interazione tra Applicazione e SO 5 L applicazione chiede al sistema operativo di utilizzare i servizi di rete Il sistema operativo crea un socket e lo restituisce all applicazione restituito un socket descriptor L applicazione utilizza il socket Open, Read,Write,Close L applicazione chiude il socket e lo restituisce al sistema operativo 6 Comunicazione Connection-Oriented In una comunicazione dati Connection-Oriented, i due end-points dispongono di un canale di comunicazione che: trasporta flussi è affidabile è dedicato preserva l ordine delle informazioni 3
Progettazione di un Server TCP 7 Creazione di un endpoint Richiesta al sitema operativo Collegamento dell endpoint ad una porta Ascolto sulla porta Processo sospeso in attesa Accettazione della richiesta di un client Letture e scritture sulla connessione Chiusura della connessione Progettazione di un Client TCP 8 Creazione di un endpoint Richiesta al sistema operativo Creazione della connessione Implementa open di TCP (3-way handshake) Lettura e scrittura sulla connessione Analogo a operazioni su file in Unix Chiusura della connessione Implementa close di TCP (4-way handshake) 4
9 Comunicazione Connection-Oriented socket bind() listen() CLIENT socket() connect() write() Dati (richiesta) Stabilisce una connessione accept() Aspetta una connessione read() SERVER read() Dati (risposta) write() close() Notificazione di fine comunicazione read() close() Comunicazione Connectionless o Datagram 10 In una comunicazione dati Datagram il canale: trasporta messaggi non è affidabile è condiviso non preserva l ordine delle informazioni 5
Progettazione di un Client UDP 11 Creazione di un endpoint Richiesta al sistema operativo Invio e ricezione di datagram Chiusura dell endpoint Progettazione di un Server UDP 12 Creazione di un endpoint Richiesta al sistema operativo Collegamento dell endpoint ad una porta open passiva in attesa di ricevere datagram Ricezione ed invio di datagram Chiusura dell endpoint 6
Struttura di un applicazione UDP 13 CLIENT socket() sendto() recvfrom() Aspetta un datagram close() Dati (richiesta) Dati (risposta) socket() bind() recvfrom() Aspetta un datagram sendto() close() SERVER Connection-Oriented vs Datagram 14 Connection oriented Principali vantaggi: Affidabilità Controllo di flusso Principali svantaggi: Overhead per instaurare la connessione Datagram Principali Vantaggi Basso overhead Principali svantaggi Nessun controllo sulla consegna 7
Connection-Oriented vs Datagram 15 I socket che utilizzano i protocolli Internet sfruttano rispettivamente TCP e UDP per implementare le due tipologie di comunicazione In entrambi i casi il protocollo di livello inferiore è IP (che è un protocollo datagram) Three Way handshake 16 Il server deve accettare connessioni client Invocazione di socket, bind, listen Open passiva Client esegue una Open attiva invocando la system call connect Invio di un segmento SYN Mandata info sul sequence number iniziale no data, solo IP header, TCP header ed eventualmente opzioni TCP Il server risponde con un ACK al SYN del client Invio del sequence number iniziale per i dati che il server invierà in quella connessione SYN ed ACK per il client SYN inviati in un singolo segmento Il client invia l ACK finale 8
Three Way handshake 17 client socket connect (blocks) (active open) connect returns server socket,bind,listen (passive open) accept (blocks) accept returns read (blocks) Terminazione di una connessione TCP 18 L applicazione che per prima invoca la system call close esegue una close attiva Inviato un segmento FIN per indicare che non verranno più inviati dati L altra applicazione esegue una close passiva Viene inviato un ACK Il FIN ricevuto è inviato all applicazione come end-of-file Successivamente, l applicazione che ha ricevuto l end-of-file chiuderà il socket (close) TCP invia un FIN TCP sul sistema che ha eseguito la close attiva invia un ACK per il FIN inviato 9
Four Way handshake 19 client close (active close) server (passive close) read return 0 close 20 Diagram mma a stati di TCP 10
TCP State Transition Diagram 21 TCP State Transition Diagram 22 11