2009-06-24 6 views
8

Da quello che ho capito, ogni richiesta HTTP utilizza la propria connessione TCP (correggimi se ho torto). Quindi, diciamo che ci sono due connessioni attuali allo stesso server. Ad esempio, codice javascript lato client che attiva un paio di richieste POST AJAX utilizzando l'oggetto XMLHttpRequest, uno subito dopo l'altro, prima di ottenere la risposta al primo. Quindi stiamo parlando di due connessioni allo stesso server, ognuna in attesa di una risposta per instradarla a ciascuna funzione di callback separata.Come vengono identificate diverse connessioni TCP nelle richieste HTTP?

Ora ecco la cosa che non capisco: il pacchetto TCP include l'ip e la porta di origine e di destinazione, ma entrambe queste connessioni non hanno gli stessi indirizzi IP src e dest e la porta 80? In che modo i pacchetti possono essere differenziati e instradati in modo appropriato? Ha qualcosa a che fare con il numero di sequenza del pacchetto che è diverso per ogni connessione?

risposta

9

Quando il browser crea una nuova connessione al server HTTP, utilizza una porta di origine diversa.

Ad esempio, supponiamo che il tuo browser crei due connessioni a un server e che il tuo indirizzo IP sia 60.12.34.56. La prima connessione potrebbe provenire dalla porta di origine 6e la seconda da 60127. Questo è incorporato nell'intestazione TCP di ciascun pacchetto inviato al server. Quando il server risponde a ciascuna connessione, utilizza la porta appropriata (ad esempio 6o 60127) in modo che il pacchetto ritorni nel punto giusto.

Uno dei modi migliori per conoscere questo è scaricare Wireshark e osservare il traffico sulla propria rete. Ti mostrerà questo e molto altro.

Inoltre, questo consente di comprendere in che modo la NAT (Network Address Translation) funziona su un router. È possibile avere più computer che condividono lo stesso indirizzo IP e il router riscriverà la richiesta per utilizzare una porta diversa in modo che due computer possano connettersi simultaneamente in posti come AOL Instant Messenger.

2

Sono differenziati dalla porta di origine.

Il motivo principale per cui ogni richiesta HTTP non genera una connessione TCP separata è denominata, per inciso, keepalives.

0

Un socket, in comunicazioni di rete a pacchetto, è considerato la combinazione di 4 elementi: IP server, porta server, IP client, porta client. Il secondo è di solito fissato in un protocollo, ad es. http di solito ascolta nella porta 80, ma la porta client è un numero casuale di solito nell'intervallo 1024-65535. Questo perché il sistema operativo potrebbe utilizzare tali porte per protocolli server noti (ad es. 21 per FTP, 22 per SSH, ecc.). Lo stesso dispositivo di rete non può utilizzare la stessa porta client per aprire due connessioni diverse anche a server diversi e se due client diversi utilizzano la stessa porta, il server può distinguerli in base ai loro indirizzi IP. Se una porta viene utilizzata in un sistema per ascoltare la connessione o stabilire una connessione, non può essere utilizzata per nient'altro. In questo modo il sistema operativo può inviare i pacchetti al processo corretto una volta ricevuto dalla scheda di rete.