Nozioni di base su TCP e UDP: connessione a un sito Web

6

Sto solo imparando le reti di computer quindi per favore perdonami se questa domanda è ingenua. So che il protocollo TCP si lega a una porta fino a quando il trasferimento dei messaggi non è terminato (porta 80) e UDP è il miglior sforzo (cioè nessun legame). La mia domanda è se provo ad accedere a due siti web contemporaneamente (più schede sul mio browser), supponendo che entrambi i siti Web siano server web, le mie domande sono

  1. Il mio computer comunica prima con un webservice (sito Web) e poi comunica con l'altro (in serie). Inoltre, se questo è il caso, la differenza di tempo è così piccola che la sento carica simultaneamente?

  2. Supponiamo di avere il mio server web (tomcat) in esecuzione sulla porta 80, come posso comunicare con altri siti Web se accade sulla stessa porta?

  3. I siti web decidono quale protocollo utilizzare TCP o UDP?

posta Rahul Kumar 16.09.2013 - 17:37
fonte

3 risposte

9

I know the TCP protocol binds itself to a port till the transfer of messages is over (port 80)

Una connessione TCP è identificata in modo univoco dalla tupla a quattro (indirizzo di origine, porta di origine, indirizzo di destinazione, porta di destinazione). Gli indirizzi IP di origine e destinazione si prenderanno cura di loro stessi, ma tu sei leggermente confuso riguardo alle porte.

Una porta è solo un numero intero a 16 bit, usato per distinguere tra più socket attivi sullo stesso host, ma ci sono alcune convenzioni che governano la loro allocazione ( riferimento: wikipedia ):

  1. Le "ben note" porte sono < 1024.

    Come hai notato, 80 è la porta "ben conosciuta" per HTTP, il che significa che è l'impostazione predefinita a meno che il tuo URL non specifichi diversamente. Queste porte sono generalmente protette dal sistema operativo, quindi un processo non privilegiato non può vincolare uno e quindi mascherarsi come un servizio ben noto.

  2. le porte "registrate", utilizzabili da processi non privilegiati per fornire servizi, sono comprese tra 1024 e 49152. Ad esempio, 8080 è comunemente utilizzato per un server HTTP non privilegiato
  3. i valori rimanenti da 49152 a 65535 vengono utilizzati per le porte effimere . Quando si crea un socket e si connette a un server, senza vincolare il socket a una particolare porta locale, il kernel assegna una porta libera dall'intervallo effimero. Questo è solo per creare una singola tupla in 4 che identifica la tua connessione, e di solito non ti interessa mai quale sia il valore.
    • NB. la portata effettiva utilizzata per le porte effimere può variare a seconda del sistema operativo e può anche essere configurata, tuttavia inizierà sempre al di sopra di 1024.

and UDP is best effort (ie no binding).

UDP sta per User Datagram Protocol . Hai ragione che è lo sforzo migliore, ma questo non ha nulla a che fare con le porte. Sia TCP che UDP utilizzano esattamente lo stesso schema di indirizzamento IP, con la stessa 4-tupla. Probabilmente non lo userai mai per HTTP (vedi la risposta alla tua ultima domanda di seguito).

My question is if I try and access two websites at the same time (multiple tabs on my browser), assuming both websites are web servers, my questions are

  1. Does my computer communicate with one webservice (website) first and then communicate with the other (serially). Also if this is the case is the time difference so small that I feel it loads simultaneously?

Sì e no. Crei due socket e li colleghi entrambi. L'IP di origine sarà lo stesso per ciascuno (poiché si trovano sullo stesso computer e presumibilmente utilizzano la stessa interfaccia di rete su quella macchina). L'IP e la porta di destinazione saranno gli stessi (si collegano allo stesso server HTTP). Tuttavia, la porta di origine sarà diversa, perché il tuo sistema operativo ha assegnato una porta temporanea diversa a ciascun socket.

Poiché ogni socket è il tuo endpoint per una diversa connessione TCP (hanno diverse tuple da 4 uniche), possono essere eseguite in parallelo. Tuttavia, supponendo che le due connessioni siano sopra la stessa interfaccia di rete fisica, non possono inviare o ricevere pacchetti fisici contemporaneamente. In pratica ciò non ha importanza, dal momento che il sistema operativo interleave i loro pacchetti sulla rete fisica per te.

Le connessioni saranno generalmente asincrone, quindi entrambi i socket possono avere richieste in volo contemporaneamente e le risposte possono anche essere intercalate.

  1. Suppose I have my own web server (tomcat) running on port 80, how can I communicate with other websites if it happens on the same port?

Il tuo sito web ascolterà sull'IP, port tuple (localhost, 80). Se ci si connette allo stesso computer, la connessione sarà simile a (localhost, effimero1, localhost, 80). Se ci si connette a un server Web su un altro computer, la connessione sarà simile a (localhost, effimero2, host remoto, 80). Sono ancora diversi, anche se entrambi hanno un 80 in uno dei 4 valori.

L'unica cosa che non puoi fare è avere due diversi server web che ascoltano la porta 80 sulla stessa macchina.

  1. Do websites decide which protocol to use TCP or UDP?

Puoi sempre controllare tu stesso questa roba: lo standard è qui . Ecco la sezione pertinente:

HTTP communication usually takes place over TCP/IP connections. The default port is TCP 80 [19], but other ports can be used. This does not preclude HTTP from being implemented on top of any other protocol on the Internet, or on other networks. HTTP only presumes a reliable transport; any protocol that provides such guarantees can be used; the mapping of the HTTP/1.1 request and response structures onto the transport data units of the protocol in question is outside the scope of this specification.

Quindi vedi HTTP non avere per usare TCP, ma fa assume un protocollo affidabile (e orientato alla connessione), quindi UDP è fuori.

    
risposta data 16.09.2013 - 19:47
fonte
2

Ecco alcune nozioni di base su cui puoi guidare l'apprendimento.

Le connessioni ai server Web sono sempre connessioni TCP e il numero di porta è il numero di porta sul server che riceve la connessione, non il client che effettua la connessione.

  1. È normale che i browser Web effettuino contemporaneamente più connessioni ai server Web. È considerata una buona idea di non effettuare più di 2 connessioni allo stesso server dallo stesso client in qualsiasi momento, ma i server Web occupati avranno centinaia (e persino migliaia) di connessioni client simultanee.

    1. La porta locale utilizzata per connettersi a un server remoto viene generata in modo casuale dal sistema operativo. Non è lo stesso numero di porta della porta remota a cui ci si connette, quindi non ci sono problemi di connessione a più server Web contemporaneamente alla gestione di un server Web localmente.

    2. Il protocollo parlato dai server Web è definito HTTP / 1.0 e HTTP/1.1 , e sono specificamente connessioni TCP.

risposta data 16.09.2013 - 17:53
fonte
1

Ogni connessione TCP ha 4 valori per identificarlo: IP1 (proprio indirizzo IP), port1 (la porta sulla mia estremità), IP2 (l'indirizzo dell'altro computer), port2 (la porta all'altra estremità).

Non appena qualcuno di questi è diverso, stai parlando di una connessione diversa. Ciò crea una connessione teorica di 4 miliardi di connessioni TCP tra 2 computer. tenendo presente ciò:

  1. i computer possono avere più connessioni attive al momento (la maggior parte delle volte sceglieranno una porta locale diversa dalla 65k disponibile),

    puoi persino connetterti due volte allo stesso server sulla stessa porta, a condizione che la porta scelta localmente sia diversa

  2. come sopra, c'è abbastanza margine nell'intervallo di porte locali per aprire più connessioni, (anche se nessuno userà mai 80 come porta locale per le connessioni in uscita)

  3. link

    UDP viene utilizzato solo per applicazioni specialistiche in cui è possibile perdere alcuni dati

risposta data 16.09.2013 - 17:49
fonte

Leggi altre domande sui tag