PDA

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

hmetal
24-05-2006, 09:31
si

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??

hmetal
24-05-2006, 16:43
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

hmetal
24-05-2006, 20:23
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...

hmetal
25-05-2006, 07:36
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!