View Full Version : domanda tecnica stack tcp/ip
Morpheus_/_Neo
24-05-2006, 07:39
Salve, scusate la domanda oscenamente stupida, ma è possibile avere due applicazioni che usano contemporaneamnete una stessa porta locale(ad esempio TCP:80) ???
grazie per la pazienza.
M_/_N
Morpheus_/_Neo
24-05-2006, 16:16
ok, ma allora come avviene il routing dei pacchetti tcp in arrivo su quella porta verso l'applicazione corretta? mi spiego: se arriva un pacchetto tcp sulla porta condivisa da due applicazioni, come si stabilisce a quale applicazione va inoltrato il pacchetto??
allora, la composizione del pacchetto ip funziona cosi.
Nel datagram ip, vengono inserite 2 porte: quella sorgente e quella destinazione.
Quando il pacchetto arriva a destinazione (server http con ad esempio una pagina web), l'header del datagram ip (cioe dove ci sono ip dest e source, porte dest e source), viene invertito (porta destinatario viene messa come mittente etc...).
Come fa a capire il server da quale pc è avvenuta la richiesta e rispondere? (che poi è la tua domanda)
Allora: nella composizione di datagram ip che necessitano di messaggi di risposta (tutte le connessioni tcp e alcune udp dipende, ma nel nostro caso http si basa sul tcp quindi sempre) come le richieste get su una pagina html, il numero della porta sorgente è sempre un numero calcolato a caso sopra le well known port (dopo la 1024) mentre la porta di destinazione è la 80. Tutta
la successiva trasmissione sul canale tcp (che ricordo "crea" un collegamento logico tra mittente e destinatario, tipo il collegamento fisico delle linee telefoniche per capirci) avverrà tra queste 2 porte.
Quindi avrai i socket (accoppiamento ip-porta), ad esempio:
ip source: 88.90.22.11
port source: 3245
dest ip : 212.233.122.33
dest port: 80
l'header ip quindi, una volta arrivato a destinazione viene invertito, e spedito sulla porta corrispondente a quella da dove era arrivata.
spero di essermi spiegato bene, altrimenti vengo meno alla mia firma!
Ciao!
Morpheus_/_Neo
24-05-2006, 17:04
tu ti sei spiegato benissimo, sono io che mi sono spiegato male.
quando parlo di 2 applicazioni che usano la stessa porta intendo 2 applicazioni sullo stesso computer che ascoltano o inviano sulla stessa porta del computer locale stesso.
es:
sul pc x.y.z.w girano l'applicazione A e l'applicazione B
sia A che B si mettono in ascolto o inviano dati sulla porta tcp x.y.z.w:4356 (per esempio)
è lecito? e se si, quando arriva un pacchetto dall'esterno sulla porta 4356 del pc x.y.z.w, come si fa a stabilire se tale pacchetto è per A o per B??
grazie mille
come si fa a stabilire se tale pacchetto è per A o per B??
Non puoi.
Ogni applicazione deve avere delle porte riservate. Le porte esistono proprio per distinguere a quali applicazioni devono essere inoltrate i pacchetti in arrivo su una certa porta.
ciao!
Morpheus_/_Neo
24-05-2006, 22:22
a ok, grazie mille.
quindi quando fai il binding rispetto a una porta, il s.o. controlla che quella porta sia libera, giusto?
Ilpastore
25-05-2006, 06:36
potresti risolvere nattando le porte dell'applicazione... però se l'applicazione è la stessa...
quindi quando fai il binding rispetto a una porta, il s.o. controlla che quella porta sia libera, giusto?
No. Tu devi considerare sempre il modello osi. Quando il pacchetto arriva a destinazione (che puo essere anche il loopback) il pacchetto viene comunque accettato e va su fino al 4 livello (tcp). Quando il 4 livello lo passa al livello successivo, applicazione (secondo il modello tcp/ip), questo ha il compito, rispetto alla porta presente nel datagram, di girarlo alla relativa applicazione. Il s.o non controlla nulla, semplicemente il pacchetto non verra inoltrato e l'applicazione non ricevera niente.
Occhio che con "binding" si intende l'associazione tra un driver di periferica (a livello HAL) e un servizio software (ad esempio driver scheda di rete ----> tcp/ip).
ciao!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.