Forum: PC-Programmierung Woher weiß ein Server, auf welche Subdomain man zugreift?


von Jonathan K. (burgerohnealles)


Lesenswert?

Wenn ich z.B. ne TCP Verbindung zu example.com aufbaue, wird zuerst über 
das DNS die IP von example.com ermittelt. Aber wenn ich nun eine 
Verbindung zu test.example.com aufbaue, kann ja dies ja die selbe 
IP-Adresse haben (ist ja z.B. bei den meisten Webservern so). Aber woher 
weiß der Server nun, dass ich auf test.example.com und nicht example.com 
zugreife? Weder im IP noch im TCP Header steht der Domainname drin, nur 
die IP, die ja gleich ist ...

Danke schon mal :)

von Jan L. (ranzcopter)


Lesenswert?

Jonathan K. schrieb:
> Wenn ich z.B. ne TCP Verbindung zu example.com aufbaue, wird zuerst über
> das DNS die IP von example.com ermittelt. Aber wenn ich nun eine
> Verbindung zu test.example.com aufbaue, kann ja dies ja die selbe
> IP-Adresse haben (ist ja z.B. bei den meisten Webservern so). Aber woher
> weiß der Server nun, dass ich auf test.example.com und nicht example.com
> zugreife? Weder im IP noch im TCP Header steht der Domainname drin, nur
> die IP, die ja gleich ist ...
>

Genau - und Tcp 'interessiert' auch nur die IP, DNS ist in diesem Fall 
nur eine optionale Merkhilfe.

Falls es um HTTP geht - was über Tcp sitzt - da gibt's dann den 
HOST-Header, der dem HTTP-Server den Zielhost mitteilt...

von René S. (thebit)


Lesenswert?

Auf dem Server laufen unter Apache verschiedene Virtuelle Server. Kommt 
eine Anfrage über einen DNS Server rein wird vom DNS Server mitgeteilt 
welche URL angefragt wurde. Gibt es nun einen Virtuellen Server der auf 
diese Adresse hört wird die Anfrage entsprechend behandelt. Dazu gibt es 
noch einen Standard Server, dieser behandelt alle Anfragen die nicht von 
einem virtuellen behandelt werden.


Gruß René

von Marc S. (marc_s86)


Lesenswert?

René S. schrieb:
> Auf dem Server laufen unter Apache verschiedene Virtuelle Server. Kommt
> eine Anfrage über einen DNS Server rein wird vom DNS Server mitgeteilt
> welche URL angefragt wurde. Gibt es nun einen Virtuellen Server der auf
> diese Adresse hört wird die Anfrage entsprechend behandelt. Dazu gibt es
> noch einen Standard Server, dieser behandelt alle Anfragen die nicht von
> einem virtuellen behandelt werden.

das ist absoluter Blödsinn. apache ist http und da gibts nen host header 
feld. dns und apache haben nichts miteinander zu tun.

von Jonathan K. (burgerohnealles)


Lesenswert?

Jan L. schrieb:
> Genau - und Tcp 'interessiert' auch nur die IP

Also, gibt es sozusagen keine Subdomains, wenn der DNS-Server mit der 
gleichen IP antwortet?


Jan L. schrieb:
> HOST-Header

Also wenn ich ne HTTP Verbindung zu test.example.com aufbaue ohne das 
Host-Feld zu senden, weiß der Server nicht, dass ich test.example.com 
haben möchte?


René S. schrieb:
> wird vom DNS Server mitgeteilt
> welche URL angefragt wurde

Ich weiß nicht, wie ich mir das vorstellen muss. Bei vielen Hostern ist 
ja der DNS vom Webserver getrennt. D.h. ich "frage" zuerst beim 
DNS-Server von example.com, welche IP test.example.com hat. Dieser 
"sagt" mir die IP sei z.B. 1.2.3.4. Hier sende ich die URL ja nicht mit, 
die steht nur im HTTP Header.
Wenn ich dich richtig verstehe, teilt der DNS Server dem Webserver mit, 
dass einer mit der IP 3.2.5.9 wissen wollte, welche IP test.example.com 
hat. Wenn ich nun mit meiner IP 3.2.5.9 auf den Webserver (1.2.3.4) 
zugreife, weiß dieser nun, dass ich auf test.example.com zugreife. 
Richtig so? Wenn ja wäre dies aber nicht sehr klug das so zu machen, 
oder? Denn die IP-Adressen werden ja gecached, also nicht jedes mal neu 
beim DNS Server erfragt. Außerdem könnte es ja zu Verwechselungen bei 
parallelen Anfragen kommen ..

von Finn S. (scooter757)


Lesenswert?

Das stichwort dazu ist der SNI (ServerNameIdentifier). Es laufen 
verschiedne Vhosts auf einem Server mit verschiedenen Namen (ServerName 
bei apache) und durch schon genannte header weiß der Apache, welcher 
Vhost der richtige ist.

Nicht verwirren lassen. SNI ist nur mit TLS verfügbar. Es funktioniert 
aber auch ohne durch die Header.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jonathan K. schrieb:
> Wenn ich dich richtig verstehe, teilt der DNS Server dem Webserver mit,
> dass einer mit der IP 3.2.5.9 wissen wollte, welche IP test.example.com
> hat.

Nein, das verstehst Du nicht richtig. Der DNS-Server weiß nichts vom 
Webserver und teilt dem auch nichts mit.

Der DNS-Server teilt Deinem Webbrowser mit, wie die IP-Adresse des 
Webservers lautet.

Und wenn Du (bzw. Dein Webbrowser) das http-Protokoll nicht richtig 
implementierst, bekommst Du nicht das zu sehen, was Du erwartest.

von PeterZ (Gast)


Lesenswert?

Den unterschied der subdomains (test. bla. usw.) macht z.B. ein Apache 
Server über vhosts. oder falls als reverseproxy verwendet als redirector 
zum entsprechendem Webserver bei .example.com

Beim hoster musst du auch die subdomains anlegen sonst werden die nicht 
vom DNS aufgelöst.

von René S. (thebit)


Lesenswert?

Der DNS-Server sagt nicht nur dem anfragenden Rechner die IP mit sondern 
leitet die Anfrage direkt an den angefragten Server weiter. Dabei teilt 
der DNS Server dem angefragten Server auch die eigentlich angefragte URL 
mit. Der DNS Server selbst kennt die zu den URL's gehörenden IP's. Dafür 
wird in der Domainzonenverwaltung des Providers ein entsprechnender A 
Record für jede Domain angelegt, heißt also zu einer IP Adresse kann es 
viele Domains geben.


Gruß René

von Finn S. (scooter757)


Lesenswert?

René S. schrieb:
> Der DNS-Server sagt nicht nur dem anfragenden Rechner die IP mit sondern
> leitet die Anfrage direkt an den angefragten Server weiter. Dabei teilt
> der DNS Server dem angefragten Server auch die eigentlich angefragte URL
> mit.

Kannst du ein Beispiel dafür bringen? Ich kenne kein DNS Server der sich 
gleich zu dem angefragten Server verbindet oder irgendetwas 
weiterleitet..
Das ist Quatsch

von Simon K. (kiboman)


Lesenswert?

Also nochmal von vorne

Im Browser gebe ich "sub.domain.de" ein.
in dem Moment wo ich enter drücke wird versucht die Domain aufzulösen

Ich frage jedem mir bekannten DNS Server nach der Domain "sub.domain.de"
Also frage ich beim Root DNS nach .

.de. / den zuständigen server erfahre ich vom RootDNS der Antwortet z.b. 
mit einem NS Record 1.1.1.1

Dann frage ich bei der DENIC nach "sub.domain.de" die antwortet keine 
Ahnung ich habe aber ein NS-Record für domain.de - 1.1.1.2

Dann frage ich bei diesen Server nach "sub.domain.de"

Der Antwortet Ja! "sub.domain.de" kenn ich A-Record 1.1.1.3

Jetzt Baut mein Browser ein Http/TCP was auch immer mit 1.1.1.3 Auf wenn 
das Routing stimmt kommen die Pakete da an wo sie sollen

Erst jetzt kommt der Webserver ins spiel, der auch fragt wie die 
aufgerufene URL war, dann wird der Inhalt aus dem Jeweiligem vHost 
verarbeitet und als Content rausgeschickt, der rest ist selbst erklärend

: Bearbeitet durch User
von Jonathan K. (burgerohnealles)


Lesenswert?

Rufus Τ. F. schrieb:
> Der DNS-Server weiß nichts vom
> Webserver und teilt dem auch nichts mit.

Ja sonst wäre das ganze System ein bissl undurchdacht. Aber wie muss 
dann Renes Antwort verstehen? Oder ist diese, wie Marc geschrieben hat, 
einfach nur falsch?


Finn S. schrieb:
> SNI ist nur mit TLS verfügbar. Es funktioniert
> aber auch ohne durch die Header.

Also am Ende läuft es bei HTTP immer auf das Host-Field oder bei TLS auf 
SNI hinaus .. ?


Simon K. schrieb:
> Im Browser gebe ich "sub.domain.de" ein.
> in dem Moment wo ich enter drücke wird versucht die Domain aufzulösen
>
> Ich frage jedem mir bekannten DNS Server nach der Domain "sub.domain.de"
> Also frage ich beim Root DNS nach .
>
> .de. / den zuständigen server erfahre ich vom RootDNS der Antwortet z.b.
> mit einem NS Record 1.1.1.1
>
> Dann frage ich bei der DENIC nach "sub.domain.de" die antwortet keine
> Ahnung ich habe aber ein NS-Record für domain.de - 1.1.1.2
>
> Dann frage ich bei diesen Server nach "sub.domain.de"
>
> Der Antwortet Ja! "sub.domain.de" kenn ich A-Record 1.1.1.3
>
> Jetzt Baut mein Browser ein Http/TCP was auch immer mit 1.1.1.3 Auf wenn
> das Routing stimmt kommen die Pakete da an wo sie sollen

Ja genau wenn ich jetzt aber 1.1.1.2 frage, wo ist denn 
"sub2.domain.de", dann sagt dieser ebenfalls 1.1.1.3

In beiden Fällen baue ich dann eine TCP-Verbindung zu 1.1.1.3 auf, ohne 
dass dieser Server weiß, auf welche Subdomain ich zugreife (bis zum TCP 
Header) ..

von Finn S. (scooter757)


Lesenswert?

ServerName Eigenschaft: 
http://httpd.apache.org/docs/2.2/de/vhosts/name-based.html
Oder falls SSL/TLS verwendet wird (ist aber ähnlich): 
https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Oder hier: 
http://stackoverflow.com/questions/758351/virtualhost-for-wildcard-subdomain-and-static-subdomain
Auf jeden Fall haben diese Subdomains nichts mehr mit DNS zutun.

: Bearbeitet durch User
von René S. (thebit)


Lesenswert?

Finn S. schrieb:
> Kannst du ein Beispiel dafür bringen? Ich kenne kein DNS Server der sich
> gleich zu dem angefragten Server verbindet oder irgendetwas
> weiterleitet..
> Das ist Quatsch

Gut sagen wir nicht Weiterleiten. Der DNS verkoppelt mehr oder weniger 
die abgefragte URL mit der dazugehörigen IP und veranlasst mit dem 
rückgesendeten Paket das anfragende Rechner die Ip kontaktiert.
Es Kann aber z.B. bei Nutzunmg von ENUM eine Anwahl eines über Telefon 
erreichbaren Netzteilnehmer durchgeführt werden, dann vermittelt der DNS 
tatsächlich die Daten.
In lokalen Netzen kann der DNS aber auch mithelfen von Intern kommende 
Anfragen an Interne Server die aber auch von außen erreichbar sind ins 
lokale Netz umzuleiten. Das macht der DNS Server allerdings nicht 
allein. Dazu braucht's einen Proxy der mit dem DNS Server 
zusammenarbeitet.


Gruß René

von PeterZ (Gast)


Lesenswert?

Simon K. schrieb:
> Ich frage jedem

Simon K. schrieb:
> Dann frage ich

Simon K. schrieb:
> Dann frage ich bei

Simon K. schrieb:
> fragt wie die
> aufgerufene URL

Bei der ganzen Fragerei buckelt es mir die Zehennägel hoch, da weiß ich 
nicht wo ich anfangen soll :/



René S. schrieb:
> DNS verkoppelt

René S. schrieb:
> weniger

genau, ein DNS tut nichts weiter als Auskunft zu erteilen "zu der von 
dir gefragten serveradresse gehört die IP bla" sonst Garnichts, evtl. 
sagt er dir noch die Adresse kenn ich nicht, ende kein gekoppel oder 
sonst was.

von Marc S. (marc_s86)


Lesenswert?

René hör bitte auf mit diesem unfug, alles was du hier schreibst ist 
schlicht falsch.

von Marc (gierig) Benutzerseite


Lesenswert?

@Rene
Nein Alles was du über DNS zu wissen glaubst spiegelt nicht
die technischen Begebenheiten wieder.
DNS kann man sich als Laie am ehesten als Wörterbuch vorstellen.
NAME <--> IP

Die einzigste Aufgabe des DSN Systems besteht darin "Name" in IPs zu 
verwandeln.(oder auch Ip in Namen). Es wird nichts weitergeleitet, 
vermittelt oder verknüpft mit dem Ziel der Anfrage.

Das einzigste was DNS Server machen ist andere DNS Server zu fragen
die ggf. besser geeignet sind die richtige Antwort zu liefern.


@Jonathan
bei HTTP Anfragen steht im headder dieser Anfrage drinnen
was angefragt wird. Damit kann bei gleichen Ip der Webserver
verschiedene Domain oder auch Subdomains auseinander halten wenn
sie die gleiche IP haben.

ein Einstieg:
https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Funktionsweise

Die Unterscheidbarkeit ist also teil des HTTP Protokolls.

von Jonathan K. (burgerohnealles)


Lesenswert?

Marc D. schrieb:
> Die Unterscheidbarkeit ist also teil des HTTP Protokolls.

Ahh alles klar, für Mitleser also zusammengefasst:

 - der Client muss dem Server mitteilen, auf welche Domain zugegriffen 
wird
 - bei HTTP über das Host-Feld
 - bei TLS über SNI
 - ansonsten muss man die geforderte Domain selbst dem Server mitteilen

: Bearbeitet durch User
von René S. (thebit)


Lesenswert?

Marc S. schrieb:
> René hör bitte auf mit diesem unfug, alles was du hier schreibst ist
> schlicht falsch.

Bevor du hier was von Unfug schreibst informiere dich bitte mal 
ausführlich über das Domain Name System. DNS kann weit mehr als reine 
Namensauflösung und vor allem in großen lokalen Netzen sowie bei IP 
Telefonie Providern erledigen die DNS Server Aufgaben die mit der 
Ursprungsidee des Namensauflösung eigentlich nichts mehr zu tun haben. 
Ein Anfang wäre mal bei Wikipedia den Bereich Erweiterung der Seite über 
da Domain Name System incl. der RFC's zu lesen

Gruß René

von Peter II (Gast)


Lesenswert?

Jonathan K. schrieb:
> Ahh alles klar, für Mitleser also zusammengefasst:
>
>  - der Client muss dem Server mitteilen, auf welche Domain zugegriffen
> wird
>  - bei HTTP über das Host-Feld
>  - bei TLS über SNI

um genau zu sein, wird bei https erst der Name über SNI übertragen und 
dann noch einmal im Host-Feld vom http. Das SNI wurde später eingeführt, 
wo man gemerkt hat das es gar nicht möglich ist für verschiedene Domains 
Verschiedene Zertifikate an den Client zu schicken.

von Bastler (Gast)


Lesenswert?

> mit der
Ursprungsidee des Namensauflösung eigentlich nichts mehr zu tun haben.

Also das Wikipedia, das ich benutze sagt, die Erweiterungen haben aber 
mit dem beschriebenen Scenario "Browser ruft Webserver" auch nichts zu 
tun. Ok, DNS liefert heute auch andere "Services", aber eben immer noch 
DNS.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Der DNS liefert lediglich die IP der physikalischen Maschine, auf der 
der Webserver läuft, der die Domain beherbergt.

Im GET-Statement des HTTP-Requests, den der Browser an diese IP richtet, 
steht die (Sub-) Domain, aus der ein Dokument geladen werden soll.

Ruft man z.B. einen Apache mit mehreren VHosts lediglich per IP (also 
ohne Angabe einer Domain), erhält man immer die Startseite des zuerst 
eingerichteten VHost - selber gerde vor einigen Tagen ausprobiert.

: Bearbeitet durch User
von Guest (Gast)


Lesenswert?

René S. schrieb:
> Marc S. schrieb:
>> René hör bitte auf mit diesem unfug, alles was du hier schreibst ist
>> schlicht falsch.
>
> Bevor du hier was von Unfug schreibst informiere dich bitte mal
> ausführlich über das Domain Name System. DNS kann weit mehr als reine
> Namensauflösung und vor allem in großen lokalen Netzen sowie bei IP
> Telefonie Providern erledigen die DNS Server Aufgaben die mit der
> Ursprungsidee des Namensauflösung eigentlich nichts mehr zu tun haben.
> Ein Anfang wäre mal bei Wikipedia den Bereich Erweiterung der Seite über
> da Domain Name System incl. der RFC's zu lesen
>
> Gruß René

Nichts desto Trotz sind deine Aussagen allesamt falsch. Auch mit allen 
Erweiterungen ist ein DNS Server Dienst eine Art Verzeichnisdienst, 
welcher  auf eine Anfrage eine entsprechende Antwort liefert. Mehr 
nicht.
Man kann sehr wohl einen erweiterten DNS Server mit einer Telefonnummer 
füttern. Der Server wird höchstens mit einer URI antworten, vermitteln 
wird er nichts. Wenn ich im Telefonbuch nach einer Telefonnummer suche 
und gefunden habe, brauche ich dennoch einen weiteren Dienst (Telefon, 
Handy) um den Anruf zu tätigen.

Vielleicht solltest du dich zuerst selbst mal über DNS informieren und 
die von dir  vorgeschlagenen RFCs mal lesen und verstehen...

von Jonathan K. (burgerohnealles)


Lesenswert?

Frank E. schrieb:
> Im GET-Statement des HTTP-Requests, den der Browser an diese IP richtet,
> steht die (Sub-) Domain, aus der ein Dokument geladen werden soll.

Nein, sofern mit dem GET-Statement nur die erste Zeile gemeint ist, also
1
GET /index.html HTTP/1.1
Erst danach wird die Domain im Host-Feld gesendet, im ganzen sieht es 
dann z.B. so aus:
1
POST / HTTP/1.1
2
Host: google.de
3
Cookie: irgend=was;
4
5
hallo=2&id=82&bla=bla

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Jonathan K. schrieb:
> Nein, sofern mit dem GET-Statement nur die erste Zeile gemeint ist, also

Ok, ich korrigiere: "Im HTTP-Header" steht der Host bzw. VHost also die 
Domain bzw. Subdomain.

Beim DNS sind alle Subdomains (sofern sie auf der gleichen Maschine 
liegen) mit der gleichen IP hinterlegt.

von Horst (Gast)


Lesenswert?

Muss man denn alles immer so schwer erklären?

Du willst die Seite abc.example.com aufrufen:

DNS:
1. Anfrage für .com
PC → Root-Server: Wer verwaltet .com?
PC ← DNS-Server: .com verwaltet der DNS-Server 1.2.3.4

2. Anfrage für example.com
PC → DNS-Server von .com: Wer verwaltet example.com?
PC ← DNS-Server: example.com verwaltet 4.3.2.1

3. Anfrage für abc.example.com
PC → DNS-Server von example.com: IP von abc.example.com?
PC ← DNS-Server: abc.example.com liegt auf 5.6.7.8

eigentliche Seite:
4. Anfrage für die Seite
PC → 5.6.7.8 (abc.example.com) Ahoi! gib mir mal die Seite index.html
PC ← 5.6.7.8 OK: ...

Schritte 2 und 3 macht normal der gleiche DNS-Server (üblich der vom 
Registrar), andere sind aber durchaus möglich.

Wenn der Server mehrere Subdomains ausliefern soll, muss man ihm das 
vorher einfach sagen →
"Hallo Server, du bist ab sofort für die Subdomains abc.example.com, 
def.example.com und fail.example.com zuständig. Das schreibt man in 
seine Konfiguration und bei Anfragen (Host: im HTTP-Header) schaut er 
einfach da nach (genauer im RAM) ob er die Subdomain kennt.

von Dirk B. (dirkb2)


Lesenswert?

Marc D. schrieb:
> DNS kann man sich als Laie am ehesten als Wörterbuch vorstellen.
> NAME <--> IP

Früher hätte man den Vergleich mit einem Telefonbuch gemacht :-)

Im Telefonbuch nach K. suchen
Nummer anrufen und sagen: "Ich möchte Jonathan K. sprechen."

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.