Lasciamo ora il livello rete e passiamo al quarto livello dello stack: il livello trasporto.
Questo livello ha due compiti principali:
Rendere la comunicazione di rete - che è connectionless - affidabile end-to-end.
I router sono dei dispositivi che lavorano a livello 3, questo vuol dire che loro mandano avanti i pacchetti, come dei passamano, non gli importa cosa succede ai pacchetti: se non arrivano, se il buffer si riempie e fanno cadere i pacchetti in eccesso. Sono tutti problemi che per i router non sono importanti, semplicemente loro vanno avanti a spedire i pacchetti successivi.
Quindi il primo compito del livello trasporto è assicurarsi che i pacchetti dispersi vengano reinviati, in modo da rendere la connessione affidabile.
Gestire la congestione.
Immaginiamo questa situazione: un router riceve 300Gb di dati al secondo e ha un buffer di 300Gb, però riesce a elaborare e spedire solo 10Gb al secondo. Ne consegue che il primo secondo restano da gestire 290Gb, ma il secondo subito dopo arrivano altri dati che superano la capacità del buffer, quindi il router li lascia cadere. I router che hanno inviato quei pacchetti non riceveranno l'ack e quindi ripeteranno il processo; ben presto non solo il router centrale sarà congestionato, la congestione si espanderà a macchia d'olio verso tutti gli altri router.
Quello che fa il livello trasporto è regolare in maniera rapida e responsive la pressione sui router: non appena ci si rende conto che la rete inizia a congestionarsi bisogna subito mettere in pratica dei sistemi appositi per decongestionarla immediatamente.
I protagonisti della suite di protocolli del livello trasporto sono TCP e UDP.
I pacchetti a livello trasporto si chiamano segmenti.
Quando il destinatario finale riceve i segmenti provvede a fare il riordino, che è solo prerogativa sua, non di chi trasmette i dati (i router leggono solo la busta pacchetto, non quella segmento)
Il livello trasporto riguarda solo il mittente originale e il destinatario finale. Non riguarda i router nel mezzo, in questo modo la backbone di internet non viene appesantita e si mantiene la scalabilità.
Il destinatario finale deve crearsi un buffer in cui salvare i pacchetti e, una volta ricostruito il segmento originale (messo tutto in ordine), può passarlo al livello di sopra.
I pacchetti sono grandi pochi kilobit, se ne mando uno alla volta uso solo una frazione della rete (se ad esempio ho una 100 mega, uso pochissimo), quindi bisogna trovare un modo di inviare più pacchetti insieme.
Bisogna fare attenzione a non congestionare i router.
Noi che inviamo possiamo essere consapevoli di quale ritmo tenere per evitare che un router più avanti salti?
È un bel problema.
Basta perdere una porzione di dati di ogni segmento e tutto il segmento deve essere re-inviato (perché l'ack del segmento viene inviato solo se è presente tutto il segmento).
Problema: un informazione conosciuta dal destinatario deve essere resa nota al mittente.