Differenza tra un socket e una porta

118

Qualcuno potrebbe spiegare in modo chiaro la differenza tra una porta e una presa. So che una porta funge da porta nella rete per un'applicazione processo e che il processo dell'applicazione utilizza una connessione socket al numero di porta specificato per gestire le comunicazioni di rete ma quando si hanno più processi in ascolto su un singolo numero di porta, trovo difficile capire la differenza tra il socket e la porta e come tutti in forma.

    
posta cobie 29.10.2012 - 13:14
fonte

6 risposte

113

S è un programma server: diciamo che è un server HTTP, quindi userà il noto numero di porta per HTTP , che è 80. Lo eseguo su un host con indirizzo IP 10.0.0.4 , quindi ascolterà le connessioni su 10.0.0.4:80 (perché è lì che tutti si aspetteranno trovalo).

All'interno di S , creerò un socket e associare a quell'indirizzo: ora il sistema operativo sa che le connessioni arrivano in 10.0.0.4:80 dovrebbe essere indirizzato al mio S processo tramite quel particolare socket.

  • output netstat una volta che il socket è vincolato:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    NB. l'indirizzo locale è tutti zero perché S non interessa come i suoi clienti lo raggiungono

Una volta che S ha associato questo socket, accetta connessioni - ogni volta che un nuovo client si connette, accept restituisce un socket nuovo , specifico per quel client

  • output netstat una volta accettata una connessione:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80 rappresenta la fine della connessione S ed è associata al socket restituito da accept
    • 10.0.0.5:55715 è la fine della connessione del client ed è associata al socket passato al connect . La porta del client non viene utilizzata per nulla tranne l'instradamento dei pacchetti su questa connessione TCP con il processo corretto: è assegnato casualmente dal kernel del client dall'intervallo di porte temporaneo.

Ora S può tranquillamente continuare ad accettare più connessioni client ... ognuna avrà il proprio socket, ogni socket sarà associato a una connessione TCP univoca e ogni connessione avrà un unico indirizzo remoto S traccerà lo stato del client (se ce n'è uno) associandolo al socket.

Quindi, approssimativamente:

  • l'indirizzo IP è per il routing tra host sulla rete
  • la porta è per il routing al socket corretto sull'host
    • Ho quasi detto processo corretto , ma in realtà è possibile avere più processi (di solito figlio) che accettano tutti sullo stesso socket ...
    • tuttavia, ogni volta che una delle chiamate accept simultanee restituisce, lo fa solo in un processo one , il socket di ogni connessione in entrata è univoco per un'istanza del server
  • il socket è l'oggetto utilizzato da un processo per parlare al sistema operativo di una particolare connessione, proprio come un descrittore di file
    • come menzionato nei commenti, ci sono molti altri usi per i socket che non usano affatto le porte: ad esempio socketpair crea una coppia di socket connessi insieme che hanno uno schema di indirizzamento no - l'unico modo per usare quella pipe è il processo che ha chiamato socketpair , essendo un figlio di quel processo e ereditarne uno, o essere passato esplicitamente uno dei socket da quel processo
risposta data 29.10.2012 - 18:24
fonte
48

Pensa al tuo computer come a un condominio:

  • Una porta è un numero di appartamento.

  • Una presa è la porta di un appartamento.

  • Un indirizzo IP è l'indirizzo civico dell'edificio.

risposta data 29.10.2012 - 13:55
fonte
44

Una porta fa parte dell'indirizzo nei protocolli TCP e UDP. Viene utilizzato per aiutare il sistema operativo a identificare quale applicazione deve ricevere i dati ricevuti. Un sistema operativo deve supportare le porte per supportare TCP e UDP poiché le porte sono una parte intrinseca di TCP e UDP.

Un socket fa parte dell'interfaccia che il sistema operativo presenta alle applicazioni per consentire loro di inviare e ricevere dati di rete. La maggior parte delle implementazioni socket supporta molti protocolli oltre TCP e UDP, alcuni dei quali non hanno alcun concetto di porte. Un SO non deve supportare socket per supportare TCP o UDP; potrebbe fornire un'interfaccia diversa per le applicazioni da utilizzare. Un socket è semplicemente un modo per inviare e ricevere dati su una porta specifica.

    
risposta data 29.10.2012 - 13:23
fonte
8

Un computer ha un indirizzo IP che lo identifica come un'entità separata sulla rete. Aggiungiamo un numero aggiuntivo a quello per permetterci di distinguere tra le connessioni a quel computer. Questo è il numero di porta. Sul lato OS della connessione sono necessari i buffer, lo stato della connessione, ecc. Questo oggetto logico è il socket.

    
risposta data 29.10.2012 - 15:47
fonte
0

Un socket è un percorso di comunicazione verso una porta. Quando vuoi che il tuo programma comunichi attraverso la rete, hai dato un modo per indirizzare la porta e questo è fatto creando un socket e collegandolo alla porta. Fondamentalmente, socket = IP + porte Socket forniscono l'accesso alla porta + ip

    
risposta data 30.10.2012 - 12:48
fonte
-1

Un indirizzo IP identifica il dispositivo, ovvero l'indirizzo di un particolare dispositivo, quando si raggiunge la macchina usando la porta IP ora definisce quale processo in quella macchina comunicare.

Quindi, affinché le comunicazioni effettive abbiano luogo, è necessario avere sia la porta + IP che è chiamata socket.

    
risposta data 30.10.2012 - 12:59
fonte

Leggi altre domande sui tag