Differenza tra un socket e una porta


121

Qualcuno potrebbe spiegare chiaramente la differenza tra una porta e un socket. So che una porta funge da porta nella rete per un processo di applicazione e che il processo di applicazione utilizza una connessione socket a un determinato numero di porta per gestire la comunicazione di rete ma quando hai più processi in ascolto su un singolo numero di porta, sto trovando è difficile capire la differenza tra socket e porta e come si incastrano tutti insieme.


9
La porta è un indirizzo fisico, mentre il socket è un oggetto.
superM

14
Se un pacchetto colpisce una tasca su un socket su una porta ...
user16764

Risposte:


116

S è un programma server: diciamo che è un server HTTP, quindi utilizzerà 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 10.0.0.4:80(perché è lì che tutti si aspetteranno di trovarlo).

All'interno di S , creerò un socket e lo legherò a quell'indirizzo: ora, il sistema operativo sa che le connessioni in entrata 10.0.0.4:80dovrebbero essere instradate al mio processo S tramite quel particolare socket.

  • netstat emette una volta associato socket:

    $ 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 è azzerato perché a S non importa come i suoi clienti lo raggiungono

Una volta che S ha questo socket vincolato, accetterà le connessioni - ogni volta che un nuovo client si connette, acceptrestituisce un nuovo socket, specifico per quel client

  • netstat emette 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:80rappresenta la fine di S della connessione ed è associato al socket restituito daaccept
    • 10.0.0.5:55715è la fine del client della connessione ed è associata al socket che il client ha passato alla connessione . La porta del client non viene utilizzata per nulla tranne i pacchetti di routing su questa connessione TCP al giusto processo: è assegnata casualmente dal kernel del client dall'intervallo di porte effimere.

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 indirizzo remoto univoco. S monitorerà lo stato del client (se presente) associandolo al socket.

Quindi, all'incirca:

  • l'indirizzo IP è per l'instradamento tra host sulla rete
  • la porta serve per il routing al socket corretto sull'host
    • Ho quasi detto il processo corretto , ma in realtà è possibile avere più processi (di solito figlio) che accettano tutti sullo stesso socket ...
    • tuttavia, ogni volta acceptche viene restituita una delle chiamate simultanee , lo fa in un solo processo, 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 determinata 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: per esempio socketpair crea una coppia di socket collegati tra loro che non hanno affatto uno schema di indirizzamento - l'unico modo per usare quel pipe è essere il processo che ha chiamato socketpair, essendo figlio di quel processo ed ereditando uno o essendo passato esplicitamente uno dei socket da quel processo

1
@Useless Vale la pena ricordare che i socket non devono essere basati su IP come indica la risposta. Non è esattamente rilevante per l'OP, ma una spiegazione delle famiglie di socket aiuterebbe a completare questa risposta.
hafichuk,

Un buon punto: mi stavo già preoccupando del creep dell'ambito quando ho iniziato a scrivere sui server multi-processo. Sentiti libero di modificarlo e, in caso contrario, ad un certo punto mi occuperò di esso ...
Inutile

11
questo non è affatto inutile
l

Cerco di capire la presa in elettronica, un server associa una presa a un numero di porta è come mettere una presa su una parete in attesa che alcuni dispositivi elettronici si colleghino per caricare la batteria. Ma quando accettato, viene restituito un nuovo socket? Perché? Una nuova presa è messa a muro? Per favore, aiutami a dare un senso a questo per analogia.
Aaron Shen,

3
Il problema qui è che la tua analogia è sbagliata. Dimentica cosa significa un socket nel mondo fisico: non è una metafora di qualcos'altro, solo un termine tecnico per un concetto specifico di software tecnico. Non è nemmeno fortemente correlato alle porte o ai socket di rete fisici: devi solo capirlo, in questo dominio, come un concetto alle sue condizioni.
Inutile

49

Pensa alla tua macchina come a un condominio:

  • Una porta è un numero di appartamento.

  • Una presa è la porta di un appartamento.

  • Un indirizzo IP è l'indirizzo della via dell'edificio.


3
Mi piace questa analogia anche se ora sto pensando di essere all'interno di quell'appartamento a guardare un corridoio infinito con molte porte. Non posso uscire. Non posso uscire! :)
Daniel Hollinrake,

1
@Caleb A socket is the door of an apartment.Ma non potrebbero esserci numerosi socket aperti su una porta?
Suhail Gupta,

3
@suhail A volte un appartamento ha più di una porta. Hanno tutti lo stesso numero di appartamento, ma sono porte diverse.
Caleb,

45

Una porta fa parte dell'indirizzo nei protocolli TCP e UDP. Viene utilizzato per aiutare il sistema operativo a identificare quale applicazione dovrebbe ottenere i dati ricevuti. Un sistema operativo deve supportare le porte per supportare TCP e UDP perché 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 a TCP e UDP, alcuni dei quali non hanno il concetto di porte. Un sistema operativo non deve supportare socket per supportare TCP o UDP; potrebbe fornire un'interfaccia diversa da utilizzare per le applicazioni. Un socket è semplicemente un modo per inviare e ricevere dati su una porta specifica.


Un socket è essenzialmente una 4 tupla composta da: IP di origine: IP Port-Dest: porta.
Tony The Lion,

vuoi dire che la porta esiste solo nei protocolli TCP e UDP ??? Che dire di http e altri protocolli?
Hosein Aqajani,

HTTP è un protocollo a livello di applicazione che viene eseguito su protocolli a livello di trasporto come TCP o UDP. Non ha il suo concetto di porte, le eredita dal protocollo del livello di trasporto sottostante.
Dirk Holsopple,

8

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


0

Un socket è un percorso di comunicazione verso una porta. Quando si desidera che il programma comunichi in rete, è stato fornito un modo per indirizzare la porta e ciò avviene creando un socket e collegandolo alla porta. Fondamentalmente, socket = IP + porte I socket forniscono l'accesso alla porta + ip


-1

Un indirizzo IP identifica il dispositivo, ovvero l'indirizzo al dispositivo particolare, quando si è raggiunto il computer utilizzando IP ora la porta definisce a quale processo in quel computer comunicare.

Pertanto, affinché avvenga la comunicazione effettiva, è necessario disporre sia della porta + IP che si chiama socket.

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.