Questi 2 pacchetti appartengono allo stesso socket tcp?
Diciamo che abbiamo due pacchetti Ae B.
A: Dispone di IP di origine, IP di S1destinazione D1, porta di origine, porta di SP1destinazioneDP1
B: Dispone di IP di origine, IP di S2destinazione D1, porta di origine, porta di SP2destinazioneDP1
Entrambi sono TCP. Entrambi questi pacchetti avranno ora lo stesso socket?
A proposito di UDP ho letto che il suo socket è costituito dall'IP di destinazione e dal numero della porta di destinazione. Quindi, se questo fosse fatto con UDP, entrambi i pacchetti sarebbero ricevuti dallo stesso socket.
Ma questo esempio è per TCP e qui non sono sicuro che passerebbe anche attraverso lo stesso socket per TCP?
Risposte
Primo, TCP non si preoccupa dei singoli pacchetti. Se questi sono solo pacchetti di dati senza alcuna connessione precedente, verranno semplicemente eliminati, senza che siano coinvolti socket. Quindi presumo che si tratti di connessioni stabilite o pacchetti iniziali per stabilire una connessione. Una connessione TCP è definita almeno dalla tupla 4 di (src-ip, src-port, dst-ip, dst-port). Poiché queste 4 tuple sono ovviamente diverse in entrambi i casi, saranno necessari socket diversi.
A proposito di UDP ho letto che il suo socket è costituito dall'IP di destinazione e dal numero della porta di destinazione.
Questo è vero solo per i socket UDP non collegati . Con le prese UDP collegate di nuovo, la tupla a 4 è rilevante.
A proposito di UDP ho letto che ...
La principale differenza tra TCP e UDP è che TCP è orientato alla connessione mentre UDP viene utilizzato per trasmettere singoli pacchetti.
Un socket UDP gestisce tutti i pacchetti UDP che arrivano a una determinata porta (destinazione) del computer.
Un socket TCP gestisce tutti i pacchetti che appartengono a una determinata connessione TCP.
Entrambi questi pacchetti avranno ora lo stesso socket?
È più complicato di quanto pensi:
La situazione che descrivi si verifica in genere sul "lato server" (sul computer che utilizza l' accept()API per gestire le connessioni in entrata, come un server web).
Supponiamo che due computer (con browser web in esecuzione) vogliano connettersi allo stesso server web. Entrambi i computer hanno scelto la stessa "porta TCP di origine". In questo caso i pacchetti inviati dai due computer al web server soddisfano la tua condizione: solo l'indirizzo IP di origine è diverso nei pacchetti inviati dai due computer mentre l'indirizzo IP di destinazione, la porta di destinazione e la porta di origine sono gli stessi.
Tuttavia, sul "lato server" due socket sono coinvolti nella gestione di una singola connessione TCP :
- Un socket che utilizza
listen()eaccept()per attendere le connessioni TCP in entrata. - Per ogni connessione TCP in entrata un socket restituito da
accept().
Quando un pacchetto TCP è il primo pacchetto di una connessione TCP, il pacchetto viene "gestito" dal socket TCP che esegue un'operazione listen()sulla porta di destinazione.
Questo socket non si preoccupa dell'indirizzo IP di origine né della porta TCP di origine, proprio come i socket UDP. Il socket gestisce tutti i primi pacchetti di connessioni TCP con un determinato indirizzo IP di destinazione e una determinata porta di destinazione.
Quando il primo pacchetto viene ricevuto, il secondo socket (che gestisce la connessione TCP) viene creato e restituito access()dall'API.
Questo socket gestisce una certa connessione (e quindi tutti gli ulteriori pacchetti della connessione TCP).
Poiché nell'esempio abbiamo due connessioni diverse con i due computer che si connettono allo stesso server utilizzando la stessa "porta TCP di origine", due socket diversi gestiranno solo i pacchetti che differiscono nella porta TCP di destinazione.