Autor Beitrag
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mi 28.07.10 22:19 
Hallo,

wie können denn zwei Anwendungen (z.B. iexplore.exe und firefox.exe) am selben PC über den gleichen Port laufen?
Ich lerne nämlich gerade was über Netzwerktechnik, und da gibt es die Transportschicht mit Sockets, mit denen man eben einen Prozess mit einem Server verbinden kann (z.B. Firefox mit delphi-forum.de).

Und so ein Socket besteht ja aus IP-Adresse und Port-Nummer. Ja, wie geht das jetzt, wenn zwei Programme (wie die Browser) den gleichen Port benutzen, woher wissen die wer dann gemeint ist?

Danke schon mal!
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mi 28.07.10 22:24 
AFAIK geht das NICHT.
Sie könne sich zwar zum gleichen Port verbinden, hören aber auf verschiedenen.
z.b. FF auf Port 3100 und IE auf Port 3101 verbinden sich zum delphi-forum auf Port 80

BTW: Uni Rechnernetze LV?
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mi 28.07.10 22:41 
In der Ausbildung haben wir grad einen Kurs "Netzwerktechnik Level 1"...

hm, HTTP läuft also nur beim Server auf Port 80? Und Jeder Browser/Jedes Programm benutzt seinen eigenen Port...?

naja, ich weiß nicht ob die dann für FF und iexplore registriert sind, hier in der Liste find ich sie jedenfalls nicht: www.bekkoame.ne.jp/~...t/port3100-3199.html

danke jedenfalls schonmal
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 28.07.10 22:55 
Grundsätzlich musst du zwischen Listening Sockets (volgo Server) und Connecting Sockets (vulgo Client) unterscheiden.
Das ist aber nicht mehr Netzwerklayer, sonsern drüber (je nach Modell, allerdings).

Was richtig ist: Punkt-zu-Punkt-Verbindungen sind immer an einen Port gebunden. Sonst würde ein IP-Stack z.B. ein Datenpaket nicht einem Socket zuordnen können.
Also:
HostA:PortA <-> HostB:PortB
(wobei PortA und PortB auch gleich sein könnten, s.u.)

Wenn ich einen Listening Socket öffne (also z.B. einen HTTP-Server starte), dann muss der Port 80 z.B. dazu frei sein. Ist da schon jemand (Skype z.B., wenn man Ausweichports erlaubt), dann kann der Socket nicht geöffnet werden. Ist eben exklusiv.

Wenn ich mich aber als Client mit einem entfernten Socket verbinden möchte, sage ich i.allg. nur "Mach mir mal eine Verbindung nach HostB:PortB", und gebe dabei nicht an was mein lokaler Port sein soll. Im interaktiven Teil des letzten EE-AGS musste man das allerdings, war Teil des Rätsels... aber ich schweife ab.
Jedenfalls: die API wählt dann selbstständig einen Port aus, von dem sie weiß dass er frei ist. Die genaue Nummer kann man nicht vorhersagen. Sie ist aber definitiv größer als 1024, wie in irgend einer RFC nachzulesen ist.

Kurzes Beispiel (DNS etc spar ich mir mal und nehm mal an, dass wir grade persistente Verbindungen brauchen):
Firefox verbindet sich zu delphi-forum.de:80
Ergibt die vom OS geknotete Verbindung: localhost:XXXX <-> delphi-forum.de:80

Firefox verbindet sich zu google.de:80
Ergibt die vom OS geknotete Verbindung: localhost:YYYY <-> google.de:80

IE verbindet sich zu delphi-forum.de:80
Ergibt die vom OS geknotete Verbindung: localhost:ZZZZ <-> delphi-forum.de:80

:arrow: alles eindeutig.

Siehe dazu auch die Ausgabe von `netstat`.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Do 29.07.10 17:20 
Danke Martok, jetzt sind alle meine Fragen beantwortet!

Ich hab u.a. auch nicht ganz überrissen, dass nur der HTTP-Server auf Port 80 hört.

Meine Zusammenfassung:
Anderen Programmen (Clients) wird also irgendein freier Port zugeteilt, über den sie dann zum Server verbinden. Und der Port vom Server muss eben bekannt sein.

Genau und an netstat hab ich mich auch schwach erinnert und aber mir ists nicht mehr eingefallen, sonst hätt ichs mir auch gleich damit anschaun können.

Vielen Dank, bis bald...