Complementi Di Reti

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Complementi Di Reti as PDF for free.

More details

  • Words: 2,111
  • Pages: 5
Università degli Studi di Trieste Piazzale Europa 1, 34100 Trieste Facoltà di INGEGNERIA Corso di Laurea in INGEGNERIA INFORMATICA Anno Accademico 2005/2006

Complementi di reti

Studente: Giorgio Davanzo [email protected]

Docente: Prof. Alberto Bartoli

1

COMPLEMENTI DI RETI

di Giorgio DAVANZO

IMPLEMENTAZIONE TCP: RFC: 793, 1106, 1122, 1323 specificano una interfaccia di programmazione Æ non parlano di socket. TCP vs IP: IP comunica tra nodi, connetionless, unreliable e message-oriented. TCP comunica tra processi, è connection oriented, reliable e byte oriented. Header IP: circa 20 byte Header TCP: circa 20 byte

MTU: Maximum Transmission Unit, dimensione massima del pacchetto. Sulla stessa rete vale di solito 1436, su reti diverse 576. MSS: Maximum Segment Size, dimensione massima del payload; viene negoziato all’inizio prendendo il più piccolo dei proposti; ogni nodo deve accettare MSS > 536. Buffers: il buffer di ricezione ha i puntatori rcv.User (prossimo byte da consegnare) e rcv.Next (prossimo byte da ricevere); il valore di ack inviato è rcv.Next. Il buffer di trasmissione si basa su snd.Ack (prossimo byte da riscontrare Æ ho ricevuto tutto fino a Ack-1), snd.Next (prossimo byte da trasmettere) e snd.User (prossimo byte che l’applicazione deve trasmettere. RTO: Retransmission Time-Out è il tempo da aspettare prima di rinviare un segmento per il quale non si è ricevuto l’ACK. Si usa un contatore, inizializzato a 0 all’inizio e quando snd.ack=snd.next; alla scadenza di RTO lo si incrementa di 1 e si raddoppia RTO. Se counter = Max_Count (in Windows = 5) si chiude la conn. RTT: Round Trip Time, tempo tra trasmissione e ricezione dell’ack. Dead Gateway Detection: quando counter> Max_Count / 2 si cambia il gateway di default per quella connessione; se avviene nel 25% delle connessioni si cambia il gateway di tutto il nodo Æ TCP conosce alcuni pezzi di IP!! Selective Ack: si usa in caso di gap nel buffer di ricezione; permette al receiver di descrivere accuratamente il proprio buffer. Fast Retransmit: implementato sia su server che receiver per velocizzare la velocità di eliminazione dei gap. • Receiver: se ricevo un segmento accettabile ma fuori ordine o che riempie parte o tutto un gap, invio subito un ack al sender • Sender: se ricevo K ack uguali (in windows è 2, su RFC è 3) re-invio subito il segmento che sembra mancante.

FLOW CONTROL: Receive Window: deve essere sempre soddisfatta l’invariante rcv.buffer ≤ rcv.Next – rcv.User Windos Size: è pari a rcv.buffer – (rcv.Next – rcv.User) e indica il numero di byte liberi nel buffer; viene inviato al receiver tramite gli ack e viene usato solo se si riceve un ack corretto. Quindi, nel sender si deve avere sempre snd.Next – snd.Ack ≤ snd.winSize. Tempo trasferimento dati: winSize = M * MSS, l’applicazione ha N * MSS dati da trasmettere, t1 = tempo tra invio e ricezione del primo pacchetto. Tempo = N / M * t1 * 2 Scelta di rcv.BufSize: conviene prendere un multiplo di MSS, in modo che quando il server trasmette a full speed deve usare meno pacchetti e perché il costo è lo stesso. In win2k si sceglie il primo multiplo di [16kb, 64]

2 COMPLEMENTI DI RETI Persistence Timer: quando non si può trasmettere per il flow control, fa partire il pers.timer e, quando scade, invia un segmento senza dati per scoprire la window (magari l’ack che lo diceva è andato perso…) Delayed Acknowledgment: quando sul receiver l’appl.layer preleva dati o riceve un segmento, dovrebbe inviare un ack per informare il sender, ma invece di farlo subito aspetta un certo periodo (200ms su Win2k); in questo modo cerco di conglobarne più d’uno (fa eccezione il Fast Retransmit). Algoritmo di Nagle: il sender non trasmette finché tutti i dati non sono stati riscontrati; serve a limitare l’overhead delle applicazioni interattive: aumenta la latency media, ma migliora l’efficienza. Per le applicazioni non interattive non costa niente. SWS Avoidance: Silly Window Syndrome Avoidance: lo stato della window size viene inviata solo quando è pari a MSS; altrimenti, se l’app.layer legge pochi dati alla volta verrebbe inviata di continuo. Accettazione segmenti: se è accettabile, scarta i dati che non rientrano nel buffer o si sovrappongono ad altri e invia il delayed ack; altrimenti lo scarta e invia il delayed ack. Wrap Around: i numeri di sequenza hanno 32 bit (4gb) e si rischia di passare oltre lo 0 Æ bisogna fare attenzione quando il wrap-around è all’interno del buffer. Gestione di RTO: l’ottimo è di poco superiore a RTT. Di solito, i valori di RTT sono costanti per certi intervalli e hanno bruschi cambiamenti. Lo calcolo come RTO (n+1) = stimaRTT (n+1) + tolleranza. • stimaRTT: stimaRTT(0) = 0 e stimaRTT(n+1) = stimaRTT(n) + (misura (n) – stimaRTT(n)) / 8 • tolleranza: tolleranza = dev(n+1) / 4 • dev: dev(0) = 12 e dev(n+1) = dev(n) + (|misura (n) – stimaRTT(n)| – dev(n)) / 4 Backoff: il raddoppiare RTO alla sua scadenza serve a portarlo al di sopra del’RTT che ha causato il suo fallimento, tanto poi scende e si adegua rapidamente. Algoritmo di Karn: se eseguo una misura errata di RTT (es: mando 1(1), scade RTO, rimando 1(2), ricevo ack 1(1) e penso che sia ack 1(2)) rovino la stimaRTT Æ quando scade RTO si sospendono le stime fino a quando non ricevo l’ack di un segmento non ritrasmesso. TCP Timestamps: soluzione alternativa a Karn; ogni segmento ha un time stamp a 32 bit, e l’ack lo riporta. E’ un’opzione negoziata all’apertura della comunicazione. MSL: Maximum Segment Lifetime: IP può far circolare pacchetti per molto tempo, e rischio di trovarne uno relativo ad una vecchia connessione. Per evitare questo, TCP assume che se riceve un pacchetto allora è fresco; questo lo si risolve assumendo che un pacchetto TCP non può vivere più di 2minuti nel sistema (a 100Mbit il wrap around arriva dopo 5,4 minuti). Time Wait State: per evitare problemi con il wrap around, chi chiude una connessione deve aspettare almeno 2 MSL prima di poter riusare la porta. Quiet Time: se cade una connessione e entrambi i nodi subito ripartono, prima di trasmettere si aspetta MSL.

GESTIONE DELLE CONNESSIONI: ISS: Initial Sending sequence Number: numero di seq del primo byte da trasmettere. IRS: Initial Receiving sequence Number: numero di seq del primo byte che il receiver manderà. Generatore di ISN: il contatore viene incrementato ogni 4 micro secondi con incrementi casuali (per protezione). 3-way Handshake: S invia CR(seq=ISS) usando il flag SYN, R invia ACK(seq=IRS, ack=ISS) con il flah SYN e ACK, e S invia ACK(seq=ISS, ack=IRS): ora S inzia a mandare dati. Se ci sono errori uno dei due invia il messaggio Reject (flag RST). Gestione RST: RST viene inviato quando la richiesta di apertura non è valida; se si riceve il duplicato di un ACK per l’apertura di una connessione già in corso, NON viene inviato ma si manda un ACK. Chiusura di connessioni: la chiusura può essere normale (protocollo eseguito interamente) o anormale (se spontanea in caso di guasti, o protocollo non completato). Se la chiusura è normale, allora i dati di tutte le send() sono stati ricevuti dal TCP layer remoto, ma non è detto che siano stati passati all’app layer. Se A vuole chiudere: su A inibisco send() e receive(), e A invia un segmento con il flag FIN. B inibisce il send(), invia l’ack per FIN(A) e invia FIN(B). Tutto termina quando B riceve l’ack per FIN(B) – a questo punto A applica il Time Wait State. Keep-alive timer: se un nodo non riceve nulla per tanto tempo, invia un segmento senza dati: se non ottiene risposta effettua una chiusura unilaterale.

COMPLEMENTI DI RETI CONGESTION CONTROL:

3

Congestion Window: si cerca di capire se la send window è eccessiva per la internetwork; la CW è la quantità di bytes inviabili senza sovraccaricare la rete. Inizialmente è 2*MSS e si trasmette basandosi sul minimo tra CG e winSize. Per decidere l’algoritmo ci si basa sulla costante send.ssThresh = 64KB. • snd.CongWin < snd.ssThresh: si usa l’algoritmo slow start (crescita rapida della CongWin) • snd.CongWin > snd.ssThresh: si usa il congestion avoidance (crescita lenta della CongWin) Alla scadenza di RTO, congWin = MSS e ssThresh = max (2*MSS, (snd.Next-snd.Ack)/2) Slow Start: CongWin cresce di MSS ogni volta che arriva un ACK in tempo Congestion Avoidance: CongWin cresce di MSS quando arrivano tutti gli ACK in tempo Velocità: il controllo della congestione rende inizialmente lente le connessioni; infatti: • flow control: velocità = M * MSS / RTT • congestion control: se ricevo K segmenti di fila, velocità = (K+1) * MSS / (2 * RTT) Idle connections: se non trasmetto per molto tempo la stima della CongWin non vale più; percui, se non trasmetto per RTO si riparte con lo slowstart: CongWin = MSS Fast Recovery: se si deve effettuare il fast retransmit si ritrasmette senza slow start. Fairness: il controllo della congestione tende a dare equità nell’uso delle risorse condivise. Problemi: • web: molte connessioni verso lo stesso nodo • applicazioni multimediali: il TCP è educato, ma l’UDP cerca di andare a tutta velocità (usano sempre la stessa velocità)

SICUREZZA: IPSEC: l’autenticazione viene effettuata sul livello IP per ogni datagram. NTLM: è unilaterale del client, riferita alla sola connessione. C invia al server la richiesta di connessione; S manda una challenge che C deve restituire criptata con il MD (si usa MD4) della chiave di C. IL MD è di 16Byte, se ne aggiungono 5 di padding e si hanno 3 chiavi da 56bit, usate per crittare con DES. Dominio NT: la coppia <nome, MD(pw)> viene salvata in memoria, e se nessuna di quelle memorizzate funziona interroga l’utente. Mondando un remote folder, i dati vengono richiesti solo la prima volta. Authentication in Win2K: all’avvio si comunicano i metodi disponibili e si sceglie il più forte. HTTP Authentication: client manda use e password in chiaro (la pw è in base 64) HTTP con NTLM: S chiede NTLM [www-Authenticate: …]; C dice il suo nome [Authorization: NTLM …]; S manda la challenge [www-Authenticate: …]; C la cripta con il MD(pw) [Autorization: NTML …]. Non si autenticano le connessioni, ma le sessioni http! Kerberos: si basa su ticket contenenti l’informazione sulla loro durata (momento di emissione e tempo di vita), una chiave, il nome del client, il nome del server, l’IP del client criptati con KS. AS è l’authentication server, che conosce le chiavi di KC e KS. Interazione con TCP: • fortissima: tutto viene protetto • forte: solo le richieste sono criptate • debole: solo l’autenticazione usa kerberos. Sessione: è la durata di un ticket; infatti, ogni ticket può essere usato per più connessioni TCP.

4 COMPLEMENTI DI RETI Kerberos vero: esiste un nodo super protetto detto Key Distribution Center (KDC), contenente due servizi: Authentication Service (AS), che genera ticket di ≈ 10ore di durata per il TGS e il Ticket Granting Service (TGS), che genera ticket per i server S di ≈ 5 minuti di durata.

AS e TGS condividono le chiavi Ks per permettere ai server di autenticarsi a loro volta. Sdoppiando in AS e TGS si limita l’uso di Kc. Kerberos V5: AS risponde solo se C, nel passo 1, invia anche un time stamp fresco crittato con Kc Æ non si da la possibilità di fare attacchi do forza bruta per individuare le password.

NAT, NAPT e VPN: NAT: Network Addres Translation; si compra un indirzzo IP pubblico + uno per il router. Associa all’indirizzo interno IP-C quello di destinazione IP-X e sostituisce i campi nell’header di conseguenza. DNS NAT: Se si cerca di accedere ad un server che ha solo IP-C privato, il router incorpora anche un DNS che associa <nome, IP-C>. Alla richiesta di nome risponde con IP-E e associa IP-C con IP-X NAPT: Network Addres Port Translation; trasforma in . Per i server interni si creano associazioni fisse nella nat table. Problema: quando dati relativi all’indirizzo IP o port number sono inseriti nel payload del TCP. Es: risposta http con porta speciale o FTP (il comando PASV serve a cambiare porta). VPN: Virtual Private Network per connettere reti molto distanti purché abbiano indirizzi privati unici (solo i routers li hanno pubblici); si possono realizzare leased line (linea dedicata, molto cara). Di solito, si preferisce invece far criptare ai routers i dati indirizzati alla rete remota e far passare tutto su internet. Tunneling: invio di un datagram IP come payload di un altro. PPTP: Point-To-Point Tunneling Protocol; permette ad un nodo di accedere ad una internetwork. Dopo l’autenticazione, i pacchetti vengono criptati, gli si aggiunge uno header GRE (Generic Routing Encapsulation) e viene inserito come payload di un altro pacchetto; il GRE contiene l’informazione PPP (P2P Protocol) perché permette più tipi di payload oltre a IP.

Related Documents