Cosa sono veramente le porte e i protocolli?


10

Sento che le persone parlano di porte e protocolli (in relazione alle reti di computer) e spesso forniscono loro delle analogie (ad esempio: "una porta è molto simile a una porta di spedizione, invia e riceve dati come una porta di spedizione invia e riceve merci da altri porti ") e cose del genere.

Capisco cosa significa tutto questo, ma solo a un livello molto artificiale. Fondamentalmente, so che cos'è una porta e capisco quali sono i protocolli, ma cosa sono realmente?

Queste porte sono oggetti fisici? Sono qualcosa di costruito in una parte del mio computer? Quante porte ci sono? Posso aumentare o diminuire il numero di porte? Sono anche qualcosa di fisico? O scritto nel codice? Dov'è questo codice? Il sistema operativo? Che cos'è veramente un porto?

Quali sono i protocolli? Immagino che siano una specie di codice ... Puoi creare il tuo protocollo? Come si ottiene una porta specifica per eseguire un protocollo specifico? Che lingua usi per creare un protocollo? Come definisci o inventi un nuovo protocollo?

Risposte:


7

In seguito alla risposta di Hello71s, potrebbe essere utile visualizzare una porta pensando alla struttura di un indirizzo in un pacchetto. Un pacchetto essendo un'unità di dati passati su una rete. TCP è un esempio di protocollo del livello di trasporto che utilizza le porte ed è comunemente utilizzato su IP.

Quindi l'IP ha due componenti di indirizzamento: l'IP di origine e l'IP di destinazione. TCP aggiunge a ciò utilizzando una porta di origine e una porta di destinazione. Sono le porte che consentono alla macchina di ricezione di differenziare il traffico destinato allo stesso indirizzo IP, ovvero se si dispone di un server che riceve sia le richieste Web che le e-mail su un singolo indirizzo IP, allora è necessario determinare quale applicazione deve ricevere i dati - il servizio di posta elettronica o il servizio web. Quindi possono apparire come se un singolo utente effettuasse una richiesta web e una richiesta di posta elettronica allo stesso server:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

Il servizio web possiede la porta 80 e il servizio di posta elettronica possiede la porta 25: "ascoltano" le rispettive porte, il che consente al traffico di finire nel posto giusto.

La porta di origine è "effimera", in quanto è composta al momento dell'invio del pacchetto. Tuttavia, ha ancora uno scopo utile. Consente a entrambe le estremità della connessione di tenere traccia delle conversazioni separate. Considera se il nostro utente ha inviato due richieste web simultanee:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

Ciò consente al servizio Web di sapere che si tratta di richieste separate, ma anche il traffico di ritorno dal server Web, le pagine Web, viene inviato alle rispettive porte di origine, consentendo al browser di sapere a quale richiesta il server sta rispondendo.

Nota che tutto questo si riferisce ai numeri di porta, da una prospettiva TCP / IP, i dati reali che vengono spostati attraverso queste porte potrebbero essere qualsiasi cosa. Non importa o non ha alcuna conoscenza delle applicazioni, quindi se avessi traffico web sulla porta 25 e email sulla porta 80, non sarebbe il più saggio.

Spetta all'applicazione di invio e di ricezione garantire che i dati siano la struttura corretta, ed è qui che entrano i protocolli delle applicazioni. HTTP è un esempio di protocollo applicativo che i browser Web utilizzano per comunicare con i server web. Si tratta di un protocollo ben definito che garantisce che il browser invii richieste a qualsiasi server Web e che il server Web comprenderà e risponderà in modo ragionevole. Ma ciò che non include nella sua definizione è qualcosa su come i pacchetti vanno da A a B - questa è la responsabilità dei livelli precedenti - i livelli di trasporto, internet e link.


Grazie! Questa era solo la risposta che stavo cercando, grazie per l'aiuto!
Bob

3

Hm. Penserei che il miglior punto di partenza sarebbe guardare la suite IP, ovvero il modello TCP / IP. (Ignorando gli altri livelli del modello OSI a fini di semplicità).

Fondamentalmente, è una serie di livelli:

Livello applicazione: HTTP, FTP, POP, SSH, ecc.
Livello di trasporto: TCP, UDP, ecc.
Internet Layer: IP, ICMP, ecc.
Link Layer - Ethernet, ecc.

Le porte sono, per la maggior parte, implementate a livello di trasporto (livello 4 - Sì, la numerazione è corretta).

La maggior parte degli stack TCP e / o UDP implementati nei sistemi operativi utilizza un sistema di base per assegnare le porte ai programmi e semplicemente aumentare gli eventi in questi programmi quando i pacchetti arrivano sulla rete. Tuttavia, qualsiasi implementazione potrebbe teoricamente funzionare; ci possono anche ipotetici pile alternative meditate nel mondo accademico.

TCP è stato definito come avente un totale di 65535 porte, che qualsiasi programma può usare per fare quello che vogliono con (anche se molti sistemi operativi limitano l'uso di porte inferiori a 1024, dando loro uno stato speciale ad hoc). Sebbene ci siano alcune liste limitate, non esiste uno standard reale per definire chi ottiene quale porta e quale porta esegue quale programma. Una porta è, quindi, più o meno un numero casuale che diverse implementazioni di un programma decidono di accettare di comunicare. Naturalmente, i progettisti di tali programmi cercano di evitare le porte che altri programmi popolari hanno già scelto.

Garantito che non è in alcun modo necessario eseguire l'uso di TCP. Alcuni protocolli vengono eseguiti sul livello Internet nudo o anche sullo strato di collegamento nudo, principalmente per scopi di efficienza o perché questi protocolli sono stati inventati prima dell'esistenza di TCP o IP. Naturalmente, quando si fa ciò, si scambiano la semplicità e l'estensivo controllo dei bug delle librerie di rete del SO.

Per maggiori dettagli, controlla le pagine di Wikipedia sul modello OSI, TCP e IP.


Capisco tutto questo. Quindi, in sostanza, una porta non è una cosa fisica? È qualcosa che è programmato? Dove è definita la porta su un computer? E poi per i protocolli, come vengono creati? Quelli sono programmati?
Bob

No, una porta non è una cosa fisica in questo contesto (ovviamente una porta USB è fisica ma non è correlata a questo argomento). I protocolli sono definiti tramite RFC ( en.wikipedia.org/wiki/Request_for_Comments ) e implementato in codice - programmato.
Paul

Sarebbe corretto dire che TCP è un processo di sistema che riserva la memoria per la memorizzazione dei dati in arrivo dall'IP (o la memorizzazione dei dati da recuperare dall'IP) e che questa memoria è divisa in "porte". E che altre applicazioni (processi) come HTTP, possono notificare a TCP che vorrebbero riservare porte specifiche (ad esempio 80 e 443). Quindi diventa il lavoro di TCP 1. consentire a HTTP di aggiungere dati in uscita a tali indirizzi di memoria e 2. informare HTTP quando i dati in entrata sono stati aggiunti a tali indirizzi di memoria?
Zach Smith

2

Sebbene questa domanda sia già stata contrassegnata come risposta, ho voluto rispondere ad alcune delle ulteriori domande poste nell'OP.

Queste porte sono oggetti fisici?

Nessuna porta non è un oggetto fisico.

Un numero di porta è un numero intero senza segno a 16 bit, il che significa che l'intervallo di porte disponibili per l'uso è compreso tra 1 e 65535 (il numero di porta 0 è riservato e non può essere utilizzato). Un processo associa i suoi canali di input o output tramite socket Internet, un tipo di descrittore di file, con un protocollo di trasporto, un numero di porta e un indirizzo IP. Questo processo è noto come vincolante e consente di inviare e ricevere dati tramite la rete.

Sono qualcosa di costruito in una parte del mio computer? Sono anche qualcosa di fisico? O   scritto nel codice? Dov'è questo codice? Il sistema operativo? Che cos'è veramente un porto?

Il software di rete del sistema operativo ha il compito di trasmettere i dati in uscita da tutte le porte delle applicazioni sulla rete e di inoltrare i pacchetti di rete in arrivo a un processo facendo corrispondere l'indirizzo IP e il numero di porta del pacchetto.

Solo un processo può essere associato a uno specifico indirizzo IP e combinazione di porte utilizzando lo stesso protocollo di trasporto. Errori di applicazione comuni, talvolta denominati conflitti di porte, si verificano quando più programmi tentano di collegarsi agli stessi numeri di porta sullo stesso indirizzo IP utilizzando lo stesso protocollo.

Il paragrafo precedente è la chiave per capire perché le porte / i protocolli sono usati in rete. Se non avessimo un modo per specificare il protocollo, che trasmette i dati su un numero di porta d'accesso concordato, non saresti in grado di fare più di 1 cosa alla volta (controlla la tua e-mail e usa il web) perché il tuo computer avrebbe nessun modo per distinguere tra i dati per il tuo client di posta elettronica e i dati per il sito web che stai navigando.

Quante porte ci sono?

I numeri di porta sono assegnati in vari modi, in base a tre intervalli:

  1. Well Known / System Ports (0-1023) - Questo intervallo di porte viene utilizzato dai processi di sistema che forniscono tipi di servizi di rete ampiamente utilizzati (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)

  2. Porte registrate / utente (1024-49151) - L'intervallo dei numeri di porta da 1024 a 49151 sono le porte registrate. Sono assegnati da IANA per servizi specifici su richiesta di un'entità richiedente. (Webmin / 10000, HTTP Proxy / 8080, Remote Desktop Protocol / 3389, ecc.)

  3. Porte effimere / dinamiche / private (49152-65535) - L'intervallo 49152-65535 contiene porte dinamiche o private che non può essere registrato con IANA. Questo intervallo viene utilizzato per scopi personalizzati o temporanei e per l'allocazione automatica di porte effimere.

Posso aumentare o diminuire il numero di porte?

Per quanto riguarda la possibilità di aumentare il numero di porte disponibili, non è possibile assegnare una porta superiore a 65535 a causa della matematica che consente il funzionamento in rete (binario) - quindi la risposta a questa domanda è no, non è possibile aumentare il numero totale di porte sopra 65535.

Quali sono i protocolli?

Nell'ambito dell'informatica, un protocollo di comunicazione è un sistema di regole digitali per lo scambio di messaggi all'interno o tra computer. Quando i messaggi vengono scambiati attraverso una rete di computer, il sistema di regole è chiamato un protocollo di rete. Un protocollo è fondamentalmente un insieme concordato di istruzioni / comandi / chiamate che due dispositivi in ​​rete possono entrambi comunicare. Pensa se non avessimo concordato protocolli e server web che avessero inviato dati casualmente ai browser web che il browser non sapeva cosa fare? Fortunatamente abbiamo HTTP e che ogni browser web creato è incorporato nel software in modo che possa comunicare con qualsiasi server web che parli anche la stessa lingua (HTTP).

Immagino che siano una specie di codice ... Puoi creare il tuo protocollo? Che lingua usi per creare un protocollo?

Sì, puoi creare i tuoi protocolli. I protocolli sono scritti in un'ampia varietà di lingue. Non sono uno sviluppatore di software, ma sono abbastanza sicuro che fino a quando qualunque lingua tu stia usando ci sono librerie che ti permettono di scrivere software in grado di comunicare su TCP / IP (ci sono altre suite di protocolli, ma TCP / IP è il più ampiamente utilizzato) è possibile utilizzare tale linguaggio per scrivere un protocollo. Il linguaggio di programmazione 'C' sembra essere il più comunemente usato per scrivere protocolli. Ciò è dovuto al fatto che molti dei primi protocolli di rete sono stati sviluppati su UNIX negli anni '70 e C sembra essere il linguaggio in cui è scritto lo stesso UNIX.

Come si ottiene una porta specifica per eseguire un protocollo specifico?

Questo differisce parecchio tra i sistemi operativi. Ad esempio, per modificare il numero di porta in cui viene eseguito il protocollo Desktop remoto in Windows, è necessario modificare il registro. Su Linux, molti dei servizi di rete possono essere configurati direttamente da un file .conf per un particolare servizio di rete.

Come definisci o inventi un nuovo protocollo?

Vedere https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/ per un post sul blog di qualcuno che ha recentemente sviluppato un nuovo protocollo di rete e che genere di cose ha dovuto fare lungo la strada.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.