TCPIP
TCPIP
Acquisizione Dati
Elementi di TCP/IP
Who has?
Arp Reply
Per minimizzare il numero di
broadcast sula rete, gli host IP e I
gateway memorizzano le associazioni
IP-MAC in delle Address Resolution
Tables in cui timagono per un tempo
massimo detto Time to Live (TTL)
Fabio Garufi - TAADF 2005-2006 5
Il protocollo IP
• Al livello Network abbiamo il protocollo IP. Esso è:
– unreliable (consegna non garantita)
– connectionless (pacchetti indipendenti gli uni dagli altri)
– best-effort (tenta di consegnare il pacchetto)
• L’unità base è il datagram (65535 byte)
Default route
• Le porte di alcuni servizi sono fissate dall’autorità e sono “ben note”. Sono
listate in un file di sistema e sono quelle di valore inferiore a 1024.
• Esiste una funzione getservbyname(const char *name) che
riempie una struttura servnt che riflette la tabella che associa i nomi ai
servizi.
Fabio Garufi - TAADF 2005-2006 24
I Socket
• Il modello a cui si ispira la programmazione di TCP/IP è quella del
cavo con la spina: per avere flusso (di corrente o di dati) bisogna
prima infilare la spina nella presa (socket)
• I socket hanno un indirizzo determinato dalla coppia (host.porta) ed
esiste una struttura dati sockaddr_in che contiene questa
informazione:
struct sockaddr_in {
struct sockaddr {
short sin_family; /* AF_INET */
u_short sa_family;/* address family*/
u_short sin_port; /* service port */
char sa_data[14];/*max 14 byte addr*/
struct in_addr sin_addr; /* host number */
};
char sin_zero[8]; /* not used */
};
• Il socket si apre e si chiude come si fa con i file: I file si aprono con open(),
i socket con socket(int domain, int type, int protocol) che
restituisce un intero che è equivalente al file descriptor.
• domain indica il la famiglia di indirizzi che si usa: per IP è AF_INET (o
PF_INET)
• type specifica la semantica della comunicazione: SOCK_STREAM per TCP,
SOCK_DGRAM per UDP, SOCK_RAW per accedere al livello network.
• protocol è sempre 0 per TCP/IP
Fabio Garufi - TAADF 2005-2006 25
Connessione del client
• Un’applicazione sul client apre un socket, e si connette tramite la funzione
connect(int sockfd, const struct sockaddr *serv_addr, socklen_t
addrlen)ad un’applicazione server identificata dal suo socket address: