Tipicamente, ogni host ha assegnato un solo indirizzo IP, ma esegue numerose applicazioni che comunicano sulla rete, quindi deve stabilire diversi flussi informativi contemporaneamente. A tale scopo, il livello di trasporto (nella pila TCP/IP, quindi in Internet) esegue il multiplexing (e demultiplexing) di più flussi informativi su un singolo indirizzo IP.
Per distinguere i flussi informativi multiplati a livello di trasporto, sono definiti dei valori numerici chiamati numeri di porta. Alcuni numeri di porta, detti well known ports, sono assegnati ad applicazioni precise , standardizzate: ad esempio, la porta 80 (con TCP) è assegnata a HTTP, mentre la porta 53 (con UDP) è assegnata a DNS.
Ogni flusso informativo tra due host è definito da (una tupla di) 5 parametri:
Tali parametri identificano un socket, che è l’interfaccia tra il livello di trasporto e il livello applicativo.
Il modello client/server è un modello astratto di comunicazione tra processi, che costituisce la base della maggior parte delle applicazioni di rete. Esso presuppone l’esistenza di un processo server, che offre un qualche servizio, e di un processo client, che richiede tale servizio.
Lo schema di funzionamento di questo modello è il seguente:
Come già detto, nella pila TCP/IP esistono due protocolli di trasporto, TCP e UDP, che offrono diversi tipi di servizi, quindi ciascuno di essi è più adatto a particolari tipi di applicazioni.
UDP, User Datagram Protocol, offre un servizio inaffidabile connectionless (cioè appunto a datagramma, come suggerisce il nome), senza la garanzia che i pacchetti arrivino a destinazione, nè tanto meno che arrivino in ordine di invio, senza duplicati, ecc. L’unica funzione del protocollo UDP è il multiplexing/demultiplexing dei flussi informativi.
Il vantaggio di UDP è un basso overhead: non ci sono ritardi dovuti all’instaurazione della connessione, alla ritrasmissione di pacchetti persi, ecc. Ciò rende questo protocollo adatto soprattutto per applicazioni real-time.