Passa al contenuto principale

3. Background (Contesto)

3. Background (Contesto)

Il protocollo di controllo della trasmissione (Transmission Control Protocol, TCP) [RFC0793] e il protocollo di datagramma utente (User Datagram Protocol, UDP) [RFC0768] hanno goduto di un successo notevole nel corso dei decenni come i due protocolli di trasporto più ampiamente utilizzati su Internet. Si sono affidati al concetto di "porte" (ports) come entità logiche per la comunicazione Internet. Le porte hanno due scopi: in primo luogo, forniscono un identificatore di demultiplexing per differenziare le sessioni di trasporto tra la stessa coppia di endpoint, e in secondo luogo, possono anche identificare il protocollo dell'applicazione e il servizio associato a cui i processi si connettono. I protocolli di trasporto più recenti, come il protocollo di trasmissione a controllo di flusso (Stream Control Transmission Protocol, SCTP) [RFC4960] e il protocollo di controllo della congestione dei datagrammi (Datagram Congestion Control Protocol, DCCP) [RFC4342], hanno anche adottato il concetto di porte per le loro sessioni di comunicazione e utilizzano numeri di porta a 16 bit nello stesso modo di TCP e UDP (e UDP-Lite [RFC3828], una variante di UDP).

I numeri di porta sono il mezzo originale e più ampiamente utilizzato per l'identificazione di applicazioni e servizi su Internet. Le porte sono numeri a 16 bit, e la combinazione dei numeri di porta di origine e destinazione insieme agli indirizzi IP dei sistemi terminali comunicanti identifica univocamente una sessione di un dato protocollo di trasporto. I numeri di porta sono anche conosciuti con i loro nomi di servizio associati come "telnet" per il numero di porta 23 e "http" (così come "www" e "www-http") per il numero di porta 80.

Tutte le parti coinvolte —— host che eseguono servizi, host che accedono a servizi su altri host e dispositivi intermedi (come firewall e NAT) che limitano i servizi —— devono concordare su quale servizio corrisponde a una particolare porta di destinazione. Sebbene questa sia in definitiva una decisione locale con significato solo tra gli endpoint di una connessione, è comune per molti servizi avere una porta predefinita sulla quale quei server di solito ascoltano, quando possibile, e queste porte sono registrate dall'Internet Assigned Numbers Authority (IANA) attraverso il registro dei nomi di servizio e dei numeri di porta [PORTREG].

Nel tempo, l'assunzione che un particolare numero di porta implichi necessariamente un particolare servizio può diventare meno vera. Ad esempio, più istanze dello stesso servizio sullo stesso host generalmente non possono ascoltare sulla stessa porta, e più host dietro lo stesso gateway NAT non possono tutti avere una mappatura per la stessa porta sul lato esterno del gateway NAT, sia utilizzando mappature di porta statiche configurate manualmente dall'utente, sia mappature di porta dinamiche configurate automaticamente utilizzando un protocollo di mappatura delle porte come il protocollo di mappatura delle porte NAT [NAT-PMP] o il dispositivo gateway Internet [IGD].

Le applicazioni possono utilizzare direttamente i numeri di porta, cercare i numeri di porta basati sui nomi di servizio tramite chiamate di sistema come getservbyname() su UNIX, cercare i numeri di porta eseguendo query per record DNS SRV [RFC2782] [DNS-SD], o determinare i numeri di porta in una varietà di altri modi come il multiplexer di servizio porta TCP (TCP Port Service Multiplexer, TCPMUX) [RFC1078].

I progettisti di applicazioni e protocolli a livello di applicazione possono richiedere all'IANA un nome di servizio e un numero di porta assegnati per un'applicazione specifica, e possono —— dopo l'assegnazione —— presumere che nessun'altra applicazione utilizzerà quel nome di servizio o numero di porta per le sue sessioni di comunicazione. I progettisti di applicazioni hanno anche l'opzione di richiedere solo un nome di servizio assegnato senza un numero di porta fisso corrispondente se la loro applicazione non ne richiede uno, come le applicazioni che utilizzano record DNS SRV per cercare i numeri di porta dinamicamente in fase di esecuzione. Poiché lo spazio dei numeri di porta è finito (e quindi la conservazione è un obiettivo importante), l'alternativa di utilizzare nomi di servizio invece di numeri di porta è RACCOMANDATA quando possibile.