2010-06-02 13 views
51

Wenn ich richtig verstehe, verwenden Anwendungen manchmal HTTP, um Nachrichten zu senden, da die Verwendung anderer Ports Firewall-Probleme verursachen kann. Aber wie funktioniert das ohne Konflikte mit anderen Anwendungen wie Webbrowsern? In der Tat, wie funktionieren mehrere gleichzeitig laufende Browser nicht? Überwachen sie alle den Port und werden benachrichtigt ... können Sie einen Port auf diese Weise teilen?Wie kann eine Anwendung Port 80/HTTP verwenden, ohne mit Browsern in Konflikt zu geraten?

Ich habe das Gefühl, dies ist eine dumme Frage, aber nicht etwas, an das ich jemals zuvor gedacht habe, und in anderen Fällen habe ich Probleme gesehen, wenn 2 Anwendungen für den gleichen Port konfiguriert sind.

Antwort

65

Es gibt zwei Anschlüsse: einen Quellport (Browser) und ein Zielport (Server).Der Browser fragt das Betriebssystem nach einem verfügbaren Quellport (beispielsweise) und stellt dann eine Socket-Verbindung zum Zielport her (normalerweise 80/HTTP, 443/HTTPS).

Wenn der Webserver die Antwort empfängt, sendet er eine Antwort mit 80 als Quellport und 33123 als Zielport.

Also, wenn Sie 2 Browser haben gleichzeitig Zugriff auf stackoverflow.com, würden Sie so etwas wie dieses:

Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80) 
Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80) 
+0

Bei gleichzeitigen Verbindungen scheinen Sie dies aus der Perspektive des ** Browsers ** zu erklären. Was ist mit der Perspektive der ** Anwendung? –

+6

Ein Browser ist eine Anwendung. Können Sie Ihre Frage näher ausführen? –

+1

Hat jeder Tab in einem Browser auch einen separaten Port? – huync

17

Ausgehende HTTP-Anforderungen treten nicht auf Port 80 auf. Wenn eine Anwendung einen Socket anfordert, erhält sie normalerweise einen zufällig. Dies ist der Quellport.

Port 80 dient zum Versorgen von HTTP-Inhalten (vom Server, nicht vom Client). Dies ist der Zielport.

Jeder Browser verwendet eine andere Quelle, um Anfragen zu generieren. Auf diese Weise gelangen die Pakete zurück zur richtigen Anwendung.

+0

Aber was, wenn mein Client/Server auf 80 kommunizieren ..., wenn der Kunde auf eine Nachricht empfängt, Port 80 (warum) wird der Browser den HTTP-Inhalt nicht abfangen? –

+1

Der Client verbindet sich mit Port 80 auf dem Server, verwendet jedoch einen anderen Port. Probieren Sie es selbst aus: Laden Sie eine Datei von einem Server herunter (zB ein Youtube-Video), öffnen Sie eine Eingabeaufforderung und geben Sie "netstat" ein. Ihr eigener Rechner verwendet einen zufälligen Port (wie 62123), um sich mit dem Server an Port 80 zu verbinden. – Konerak

+5

@John, No. Der * Webserver * öffnet Port 80, der * Browser * hat jedoch einen anderen, zufällig zugewiesenen Port. Wenn Ihre App über Port 80 kommuniziert, verhindern Sie, dass Ihre App auf demselben Computer wie ein Webserver verwendet wird, aber Sie stören überhaupt nicht das Surfen im Internet. –

1

Ein Browser ist eine Clientanwendung, die Sie verwenden, um Inhalt auf einem Webserver zu sehen, der sich normalerweise auf einem anderen Computer befindet. Der Webserver ist derjenige, der Port 80 überwacht, nicht der Browser auf dem Client.

+1

Ich verstehe nicht, warum dies abgelehnt wurde . Es ist vielleicht nicht die umfassendste Antwort, aber es ist nichts falsch daran. –

2

Port 80 Sie reden hier ist der remote Port auf dem Server, lokal Browser öffnet hohen Port für jede Verbindung eingerichtet.

Jede Verbindung hat Port-Nummern auf beide endet, wird einer als lokaler Port, andere remote-Port.

Die Firewall ermöglicht den Datenverkehr zu einem hohen Port für den Browser, weil sie weiß, dass die Verbindung von Ihrem Computer hergestellt wurde.

+0

"lokaler Browser öffnet hohen Port für jede Verbindung hergestellt" ... wie kommt das dann durch eine Firewall? Lassen Firewalls standardmäßig einen bestimmten Bereich von Ports offen? –

+1

@John: Im Allgemeinen erkennt eine Firewall die Ports und Adressen, die beim ersten Herstellen der Verbindung vom Client betroffen sind, und lässt den Datenverkehr vom Server automatisch zu, solange die Verbindung aktiv ist. –

+0

Firewalls ermöglichen ausgehende Verbindungen an jedem Port. Sie blockieren normalerweise eingehende Verbindungen auf den meisten Ports, sofern Sie sie nicht explizit öffnen. –

3

Sie müssen vorsichtig zwischen "Abhören von Port 80" und "Verbinden mit Port 80" unterscheiden.

Wenn Sie sagen, dass "Anwendungen manchmal HTTP verwenden, um Nachrichten zu senden, da die Verwendung anderer Ports Firewallprobleme verursachen kann", meinen Sie eigentlich "Anwendungen senden manchmal Nachrichten an Port 80".

Der Server überwacht Port 80 und kann mehrere Verbindungen an diesem Port akzeptieren.

6

Es ist das 5-Tupel (IP-Protokoll, lokale IP-Adresse, lokaler Port, Remote-IP-Adresse, Remote-Port), das eine Verbindung identifiziert. Mehrere Browser (oder tatsächlich ein einzelner Browser, der mehrere Seiten gleichzeitig lädt) verwenden jeweils den Zielport 80, aber der lokale Port (der vom O/S zugewiesen wird) ist in jedem Fall verschieden. Daher gibt es keinen Konflikt.

+0

Also sendet der Server intern die Antwort zurück an des Clients? –

+0

Richtig, in der Antwort schaltet der Server den lokalen und Remote-Port und die lokale und Remote-IP-Adresse, so dass die Antwort lokalen Port = 80 und Remote-Port = hat. – jchl

4

Clients wählen normalerweise einen Port zwischen 1024 und 65535. Es hängt vom Betriebssystem ab, wie dies zu handhaben ist. Ich denke, Windows-Clients erhöhen den Wert für jede neue Verbindung, Unix-Clients wählen eine zufällige Port-Nr.

Einige Dienste stützen sich auf einen statischen Client-Port wie NTP (123 UDP)

+0

1024 und * 65535 * (nicht 65536) – exoddus

+0

@exoddus behoben, danke. –

Verwandte Themen