La rete internet funziona abbastanza per quanto riguarda la consegna a destinazione dei pacchetti, per quanto riguarda le prestazioni, c'è bisogno di lavoro per ingegnerizzare la rete Fasi:
Il routing di internet è topology driven, ed è una limitazione in quanto non c'è la possibilità di bilanciare l'utilizzo delle risorse, ad esempio sfruttando link paralleli.
è una tabella che riporta per ogni coppia di nodi, quanto traffico entra da un nodo per andare all'altro (bit/s) Questa matrice viene costruita per i nodi che stanno sul confine della rete da considerare. Con N nodi sul confine abbiamo una tabella di N^2 nodi, con gli elementi sulla diagonale nulli, quindi N(N-1) incognite. Il traffico è un parametro che cambia nel tempo quindi la matrice sarà in funzione del tempo, anche se in questo caso consideriamo un tempo fissato. Viene sfruttato il meccanismo dell' interface counting che è una feature presente in tutti i router e indica quanti byte o pacchetti sono transitati per ogni interfaccia. Ogni interfaccia porta a due equazioni di N incognite (una per il traffico in ingresso e una per quello in uscita) In totale ho 2N equazioni in N^2 incognite, quindi non posso risolvere le equazioni Dato che il numero di incognite è praticamente fisso, mi serve aumentare il numero delle equazioni e posso farlo aumentando i contatori per interfaccia (es: differenziandoli per ip o servizio)
Normalmente per ogni contatore si considerano 64bit, per milioni di contatori
la memoria occupata diventa molta e non è possibile tenerli in memoria cache.
Una strategia efficace è tenere in cache i c bit più significativi di tutti i
contatori, suddividendoli in verticale
La probabilità di andare in overflow avendo pochi bit è elevata, quindi serve
resettare periodicamente i contatori piccoli e trasferire il conteggio sui contatori
lunghi.
Ogni b accessi scelgo un contatore corto, sommo il valore al corrispondente contatore
lungo e resetto il contatore corto
Quale contatore scelgo? largest count first
Copio per primo il contatore corto che ha il valore più grande, perchè è il più
vicino all'overflow
c deve essere circa log2log2bN (N=numero contatori) Quel valore garantisce che usando l'algoritmo largest count first, non si ha mai overflow. Il problema dell'algoritmo lcf è che trovare il massimo impiega tempo lineare. Sarebbe possibile tenere memorizzato l'indice e il valore del contatore più grande, ma questo vale finchè non viene resettato.
Algoritmo semplificato
Conteggio randomizzato
All'arrivo di un pacchetto aggiorna il relativo contatore con probabilità 1/c
Mettere l'intervallo di campionamento a distanza casuale riduce il rischio di aliasing,
Cioè la sincronizzazione dell' osservazione con i fenomeni (esempio zebra nella gabbia)
Se un contatore vale x allora il valore atteso del numero di pacchetti è x*c
La deviazione standard è pari a qualche c