Transcription
[Musica] continuiamo il nostro studio del livello di trasporto qui esaminando le questioni di multiplexing e demultiplexing ora questi avvengono in realtà in tutti i livelli dello stack del protocollo ma li considereremo qui nel contesto del livello di trasporto ecco come pensare al demultiplexing pensate a un host Internet ha dei datagrammi che stanno arrivando questi datagrammi hanno dei payload che sono destinati a diverse applicazioni o possibilmente a diversi protocolli in esecuzione su quell'host il processo mediante il quale quei payload vengono indirizzati all'applicazione appropriata o al protocollo appropriato in esecuzione su quell'host questa è la questione del demultiplexing il multiplexing è essenzialmente l'inverso di ciò che abbiamo imparato nel capitolo 2 ad esempio che molte applicazioni possono inviare attraverso più socket i loro messaggi applicativi a TCP TCP prenderà quei messaggi e li incanalerà verso IP questo è il processo di multiplexing ora di nuovo guarderemo a questo principalmente nel contesto di TCP e UDP ma di nuovo questo è un argomento più generale che si verifica in tutti i livelli dello stack del protocollo ecco l'ambientazione nello scenario abbiamo un server HTTP al centro qui e questo server HTTP invierà messaggi HTTP al client sul lato sinistro ora naturalmente questo client ha molte applicazioni in esecuzione vediamo un'applicazione Skype un'applicazione Netflix e naturalmente abbiamo un browser web HTTP lì e quindi la domanda che vogliamo porci è come tra tutte quelle applicazioni quando un messaggio viene inviato dal server al client quelle informazioni vengono effettivamente demultiplexate al browser web e non a nessuna delle altre applicazioni in esecuzione sul client e dobbiamo anche pensare al demultiplexing sul server dove più client possono inviare messaggi HTTP al server questi messaggi potrebbero dover essere demultiplexati a diversi processi sul server ciascuno dei quali è responsabile della comunicazione con i client è stato fatto bene tutti abbiamo familiarità con il multiplexing e il demultiplexing da cose che accadono nella nostra vita quotidiana le autostrade sono un buon esempio di ciò in molti casi abbiamo più rampe di accesso dove le auto vengono multiplexate sull'autostrada e naturalmente ai grandi svincoli veniamo demultiplexati dall'autostrada su un certo numero di diverse rampe di uscita possibili forse un esempio ancora migliore è quello che succede quando arriviamo in un aeroporto ad esempio arrivi e immediatamente beh se hai la classe business vai qui la classe economica vai di là quando arrivi al pre-check se hai il TSA PreCheck vai a sinistra altrimenti vai a destra e una volta arrivato al gate naturalmente c'è un posto dove ti metti in coda per il servizio di classe premium e ci sono anche più linee di servizio di classe economica quella nozione di essere indirizzati di essere divisi e di essere indirizzati a una particolare classe di servizio è un po' al centro di ciò che riguarda il demultiplexing quindi continuiamo qui e diamo un'occhiata a questo ora in un contesto Internet naturalmente e diamo un'occhiata a cosa succede in UDP quindi qui abbiamo di nuovo il nostro scenario a tre host e in questo particolare esempio stiamo mostrando i processi che comunicheranno così come quei socket quei piccoli rettangoli gialli con il bianco al centro che mostrano dove sono effettivamente i buffer e quindi in questo esempio p1 e p3 comunicheranno e p2 e p4 comunicheranno vediamo come viene fatto beh sul lato del multiplexing se guardiamo all'host al centro vediamo che p1 e p2 invieranno attraverso i loro socket attraverso il livello di trasporto il livello di trasporto dovrà multiplexare i dati in arrivo da p1 e p2 prendere quei dati metterli in segmenti e aggiungere informazioni nell'intestazione di trasporto che verrà utilizzata per il successivo demultiplexing ora quando i pacchetti e i datagrammi vengono effettivamente ricevuti in quell'host al centro dovremo eseguire la doppia operazione lì l'operazione di demultiplexing e in quel caso il livello di trasporto utilizzerà le informazioni di intestazione per consegnare il contenuto dei segmenti ricevuti al socket corretto ok quindi approfondiamo come funziona il demultiplexing ricordate quando un host riceve un datagramma IP ogni datagramma ha un indirizzo IP sorgente l'indirizzo IP del mittente del datagramma ha anche un indirizzo IP di destinazione ed è effettivamente l'host dove stiamo effettivamente eseguendo questa elaborazione ogni datagramma porta anche un segmento di livello di trasporto e nel segmento di livello di trasporto c'è un'intestazione e saremo interessati a due campi all'interno dell'intestazione del segmento di livello di trasporto per i nostri scopi qui e questi sono il numero di porta sorgente e il numero di porta di destinazione e l'host utilizzerà gli indirizzi IP e i numeri di porta per indirizzare il segmento al socket appropriato e vedremo che questo è un po' diverso in TCP rispetto a UDP UDP è più semplice quindi iniziamo da lì ok per capire ora come funziona il demultiplexing senza connessione UDP dovremo ricordare un po' di ciò che abbiamo imparato nel capitolo 2 e ricordate lì quando guardavamo alla programmazione dei socket ricordate che quando si crea un socket un programmatore di applicazioni deve specificare un numero di porta locale dell'host ecco un frammento di codice qui dove viene creato il socket datagramma e c'è un numero di porta locale dell'host uno due cinque tre quattro che viene specificato ora quando si crea un datagramma che verrà effettivamente inviato in un socket dobbiamo specificare dove è destinato quel datagramma e lì specifichiamo l'indirizzo IP di destinazione e il numero di porta di destinazione non il numero di porta localhost ora sul lato ricevente quando l'host ricevente riceve il segmento UDP controllerà il numero di porta di destinazione e indirizzerà il segmento UDP a quel socket associato a quel numero di porta questo è il demultiplexing attivo lì ora potresti pensare per un secondo e dire beh aspetta un attimo possiamo avere più client che inviano datagrammi allo stesso numero di porta UDP a una destinazione se ciò accade i datagrammi UDP con lo stesso numero di porta di destinazione anche se provengono da indirizzi IP sorgente diversi e forse numeri di porta sorgente diversi questi verranno indirizzati allo stesso socket sull'host ricevente perché quel demultiplexing avviene solo nel caso di UDP sulla base del numero di porta di destinazione diamo ora un'occhiata a un esempio di demultiplexing UDP abbiamo i nostri tre host come al solito sul lato sinistro abbiamo il processo p3 che ha creato un socket datagramma con il numero di porta locale nove 157 sul lato destro abbiamo il processo p4 che ha creato un socket datagramma con un numero di porta locale cinque sette sette cinque e al centro abbiamo il processo p1 che ha un socket datagramma con un numero di porta associato di sei quattro due otto ora p1 e p3 comunicheranno tra loro p1 e p4 comunicheranno tra loro nel primo esempio qui vediamo datagrammi scambiati da p1 a p3 e da p1 a p3 diamo un'occhiata a ciò che p1 sta inviando a p3 e in particolare concentriamoci sul numero di porta sorgente e sul numero di porta di destinazione del datagramma mostrato in fondo alla figura qui il numero di porta sorgente nove uno cinque sette è il numero di porta associato al socket utilizzato dal mittente dalla sorgente la destinazione beh è destinato alla porta sei quattro due otto che è il numero di porta associato al socket datagramma del processo p1 al centro ora cosa succede quando p1 risponde a p3 beh abbiamo imparato nel capitolo 2 che il numero di porta di destinazione nove uno cinque sette è stato preso dal numero di porta sorgente dal datagramma in fondo il datagramma in arrivo a cui il datagramma di ritorno è una risposta quindi vediamo la porta di destinazione della più alta delle due datagrammi a sinistra ha un numero di porta di destinazione di nove cento cinquanta sette e il numero di porta sorgente di sei quattro due otto che di nuovo è il numero di porta associato al socket datagramma per p1 beh sul lato destro non specifichiamo quali siano i numeri di porta di destinazione e sorgente vediamo se riuscite a capirlo da soli è davvero lo specchio di ciò che sta accadendo sul lato sinistro beh così avviene il multiplexing e il demultiplexing in UDP ora diamo un'occhiata a TCP dove vedremo che le decisioni sono un po' più complicate beh nel caso di UDP abbiamo visto che il demultiplexing era davvero piuttosto semplice nel caso di TCP è orientato alla connessione ciò significa che abbiamo un lato mittente e un lato ricevente e come identificheremo il mittente e il ricevente beh certamente sulla base dell'indirizzo IP ma anche sulla base del numero di porta di invio e del numero di porta di ricezione quindi un socket TCP quando istanziamo un socket TCP sarà identificato da una quadrupla l'indirizzo IP sorgente il numero di porta sorgente che si trova sul lato mittente l'indirizzo IP di destinazione e il numero di porta di destinazione che si troverà sul lato ricevente della connessione ora quindi quando facciamo il demultiplexing il ricevitore utilizzerà tutti e quattro i valori di questa quadrupla per indirizzare un segmento al socket appropriato guarderemo un esempio tra un secondo concludiamo qui semplicemente notando che un server può avere molti socket TCP simultanei ogni socket sarà identificato dalla sua quadrupla e ogni socket sarà associato a un diverso processo client client di connessione il nostro esempio di demultiplexing TCP qui ha di nuovo i nostri familiari tre host tranne che questa volta al centro abbiamo un server Apache HTTP che scambierà messaggi HTTP tramite TCP con l'host sul lato sinistro che ha indirizzo IP A o l'host sul lato destro che ha indirizzo IP C e l'indirizzo del server HTTP è B diamo un'occhiata ora alla comunicazione che sta avvenendo tra il processo p3 in esecuzione sull'host A sul lato sinistro e il processo p4 in esecuzione nel server Apache in un datagramma che scorre da sinistra a destra vediamo l'indirizzo IP sorgente associato a quel datagramma naturalmente è A che è il centro del datagramma l'indirizzo IP di A e il numero di porta sorgente è nove 157 questo è effettivamente il numero di porta il numero di porta locale associato al socket che p3 ha creato cosa c'è nei campi di destinazione beh l'indirizzo IP di destinazione è B questo è l'indirizzo IP del server Apache e il numero di porta è 80 e potresti ricordare che 80 è il numero di porta associato al servizio HTTP diamo ora un'occhiata a una risposta proveniente da p4 a p3 qui vediamo l'indirizzo IP sorgente è B il numero di porta è 80 la destinazione naturalmente è l'indirizzo IP A e il numero di porta di destinazione è nove 157 stiamo anche mostrando qui sul lato destro due datagrammi che scorrono dall'host C al server HTTP il server web Apache qui al centro e quindi diamo un'occhiata ai valori dei campi speriamo che abbiano senso per voi l'unica cosa che vogliamo davvero evidenziare qui però è diamo un'occhiata ai tre datagrammi che stanno tutti arrivando al server HTTP al centro notate che il numero di porta di destinazione in tutti e tre questi datagrammi qui è 80 questo è assolutamente fondamentale ricordate con UDP avremmo demultiplexato solo sulla base di quell'ID di porta di destinazione nel caso di TCP perché è orientato alla connessione ricordate che demultiplexiamo sulla quadrupla e ognuna di queste quadrupla di quei tre messaggi in arrivo è unica quindi verranno demultiplexati correttamente a p4 p5 e p6 beh questo conclude il nostro studio di multiplexing e demultiplexing quindi riassumiamo ciò che abbiamo imparato abbiamo imparato che quel processo di demultiplexing a livello di trasporto è davvero quella domanda di decidere qual è il socket a cui dobbiamo prendere il payload del segmento e poi consegnarlo in quel socket nel caso del multiplexing sia TCP che UDP devono essere in grado di prendere dati da più socket e poi consegnarli metterli in segmenti e poi consegnarli al livello di rete sottostante abbiamo visto che nel caso di UDP quel demultiplexing viene fatto semplicemente sulla base del numero di porta di destinazione e abbiamo visto che in TCP viene fatto sulla base di una quadrupla e poi infine abbiamo imparato che il multiplexing e il demultiplexing avvengono in tutti i livelli dello stack del protocollo quindi lo vedremo di nuovo quando arriveremo al livello di rete e anche quando arriveremo alla costruzione del livello [Musica]