Hallo,
ich habe einen Webserver mit einem ESp32 aufgebaut. Der ESp32 verbindet
sich per WLAn mit dem Router und wartet auf Anfragen. Jetzt kann man
einen PC mit dem Router verbinden und die html Seite vom ESP anfragen.
Diese Kommunikation funktioniert mit dem http Protokoll.
Jetzt bekam ich die Frage: Welches Protokoll für diese Kommunikation
verwendet wird ? Bzw. Welcher Industrie Standart verwendet wird ? Also
zwischen PC und ESP.
Aus meiner Sicht funktioniert diese Kommunikation über das Http
Protokoll.
Ist das soweit korrekt. Oder müsste man sagen über das Ethernet TCP/IP
Protokoll ?
Ich verstehe den Unterschied nicht. Wenn das Http Protokoll verwendet
wird wird doch automatisch auch die TCP Schicht,die IP Schicht und die
Ethernet Schicht benutzt.
Vielleicht kann mir hier jemand helfen ?
Die Bauen aufeinander auf, beispiele und erkläsrungen findets du im
zusammenhang mit dem schichtenmodell. HTTP kannst du auch z. b. plain
text über einen UART senden, wäre aber ungewöhnlich
Lars W. schrieb:> Danke für deine Antwort. Wenn also jemand wissen möchte welcher> Ethernet Standart verwendet wird, ist das Ethernet TCP/IP. Korrekt?
Du verwendest HTTP über TCP/IP über WiFi. Die Versionen der Protokolle
sollte man wohl noch angeben. Vermutlich:
* HTTP 1.1
* TCP/IP v4
* Wifi 802.11g oder n
Unter Ethernet verstehe ich verkabelte Verbindungen.
Lars W. schrieb:> Ist das soweit korrekt. Oder müsste man sagen über das Ethernet TCP/IP> Protokoll ?
Formal korrekt wäre: http (Anwendung) over TCP (Transport) over
IP(Vermittlung) over 802.11 (WLAN) typ. Bitübertragung in einen
geteilten Medium. 802.3 Ethernet wird typ. bei leitungsgebundener
Bitübertragung genutzt.
Vielen Dank für eure Antworten. Ich werde dann mal noch konkreter.
Im Anhang findet Ihr eine Möglichen Aufbau. Der PC ist über LAN mit dem
Router verbunden, der ESP32 kann auch über LAN mit dem Router verbunden
sein oder auch über WLAN.
Öffnet der PC einen Browser und tippt die IP ein, sendet der PC einen
HTTP GET Request an den ESP32. Dieser Antwortet indem er die index.html
überträgt.
Die Frage war: Welches Protokoll wird für diese Verbindung verwendet?
Antwort: Das http Protokoll, dieses basiert auf TCP/IP.
Dann ist die Frage doch korrekt beantwortet, oder nicht?
Lars W. schrieb:> Antwort: Das http Protokoll, dieses basiert auf TCP/IP.>> Dann ist die Frage doch korrekt beantwortet, oder nicht?
Nein. HTTP, TCP und IP sind drei der verwendeten Protokolle. Darunter
ist eben noch Ethernet, im Falle von Ethernet. Die Sache mit’m
Schichtenmodell wurde hier schon erwähnt – du solltest dich einlesen,
wenn es dich wirklich interessiert. Schon die Übersicht auf WP sollte
für Erleuchtung sorgen: https://de.wikipedia.org/wiki/EthernetLars W. schrieb:> Im Anhang findet Ihr eine Möglichen Aufbau.
Im Anhang finde ich leider nur Datenmüll. Mag daran liegen, dass ich die
benötigte Software nicht besitze. Ein Bild, im Falle von Schemata
idealerweise SVG, wäre die bessere, weil von jedem anschaubare, Option
gewesen.
Lars W. schrieb:> Dann ist die Frage doch korrekt beantwortet, oder nicht?
Nein, sie ist unvollständig beantwortet.
Die (möglicherweise auch nur fast*) vollständige Antwort wurde im Thread
bereits gepostet.
(*) Wenn der PC seinerseits per LAN und nicht per WLAN an den AP
angebunden ist, dann fehlt halt die Beschreibung dieses LAN-Stücks.
Es kann aber auch sein, das sie ZU vollständig beantwortet wurde, weil
der Frager seinerseits keine Ahnung hat und eigentlich nur "http"
hören/lesen wollte...
Wobei man in der Regel "TCP/IP" schreibt, nicht "TCP über IP". Keine
Ahnung, warum. Vielleicht weil diese beiden Layer in der Regel in ein
und dem Selben stück Programm/Treiber stecken.
Stefan ⛄ F. schrieb:> Wobei man in der Regel "TCP/IP" schreibt, nicht "TCP über IP". Keine> Ahnung, warum. Vielleicht weil diese beiden Layer in der Regel in ein> und dem Selben stück Programm/Treiber stecken.
In gut strukturierten Stacks sind IP und TCP natürlich ziemlich
weitgehend voneinander abgeschottet, genau so, wie das Modell das als
sinnvoll beschreibt. Man kann also TCP-Support i.d.R. einfach weglassen,
wenn man TCP nicht benötigt und der Protokollstack läuft trotzdem
(unterstützt dann aber natürlich kein TCP mehr).
Aber trotzdem hast du natürlich Recht, weil jeder Stack, der was auf
sich hält, natürlich TCP zumindest als Option anbietet.
Zumindest theoretisch wäre es aber denkbar, den Stack des einen
Anbieters ohne TCP zu benutzen, dafür aber die TCP-Implementierung eines
anderen. Aber nur, wer sonst nix zu tun hat, würde sich auf dieses
Abenteuer einlassen wollen...
Lars W. schrieb:> Öffnet der PC einen Browser und tippt die IP ein, sendet der PC einen> HTTP GET Request an den ESP32. Dieser Antwortet indem er die index.html> überträgt.
Im Prinzip ja. Tatsächlich passiert aber einiges mehr. Der PC baut erst
einmal eine TCP/IP-Verbindung auf, dann sendet er den HTTP GET request,
dann erhält er die Antwort, und dann wird die TCP/IP-Verbindung auch
irgendwann wieder abgebaut. Und jeder dieser Schritte besteht aus
mehreren Paketen die hin- und herfliessen. Zum Beispiel muss die
IP-Schicht des PC die Ethernet-Zieladresse (MAC) in den gesendeten
Paketen angeben, und wenn er die vom ESP32 (oder vom nächsten Gateway
auf der Route zum ESP32) noch nicht kennt muss er sie erst noch aus der
IP-Adresse ermitteln, bei IPv4 mit dem ARP-Protokoll.
Hilfreich zum Verständnis ist dabei immer Wireshark.
LG, Sebastian
Sebastian W. schrieb:> Der PC baut erst einmal eine TCP/IP-Verbindung auf,
Nein. Der PC sendet erst die Anforderung einer HTTP-Verbindung an den
ESP32 und dann bauen PC undESP32 eine HTTP/TCP-Verbindung auf
(Schicht 4/Verbindungs'sprache' durch Wahl von Verbindungsport:80;
aufbauend auf Schicht 3:TCP)
Hilfreich zum Verständnis könnte Erfahrungen mit einer Telefonverbindung
sein, die auf Anruf des PC-Nutzers nach Reaktion des Angerufenen
aufgebaut wird.
> dann sendet er den HTTP GET request,
mit Wireshark ließe sich auch das Senden von
connection:close|keep-alive
beobachten
> dann erhält er die Antwort,
korrekt
> und dann wird die TCP/IP-Verbindung auch> irgendwann wieder abgebaut.
Nein. Besser programmierte Anwendungen wie ein Browser belasten den
TCP/IP-Stack nicht unnötig mit ungenutzten TCP-Verbindungen bis sie
irgendwann durch irgendeine Ursache abgebaut werden.
> Jeder Schritte besteht aus> mehreren Paketen die hin- und herfliessen.
Korrekt werden IPv4/Ethernet und andere Pakete gesendet und empfangen.
Bei fließenden Paketen ist etwas in der IT defekt.
> Zum Beispiel muss die IP-Schicht des PC die> Ethernet-Zieladresse (MAC) in den gesendeten> Paketen angeben,
Nein, die IP-Schicht (IP == Internet Protokoll; Vermittlungsschicht)
kennt keine MAC.
Die lokal-Netzwerk-Schicht(Schicht 1 im TCP/IP-Schichtenmodell) muss
zusätzlich zur MAC-Adresse die IP-Zieladresse in den Paketen angeben,
damit der Inhalt über das LAN hinaus vermittelt werden kann.
> und wenn er die vom ESP32 (oder vom nächsten Gateway> auf der Route zum ESP32) noch nicht kennt muss er sie erst > noch aus der
IP-Adresse ermitteln, bei IPv4 mit dem ARP-Protokoll.
Das Address Resolution Protocol (ARP) ist ein Netzwerkprotokoll, das zu
einer Netzwerkadresse der Internetschicht die physische Adresse
(Hardwareadresse) der Netzzugangsschicht ermittelt
Schicht 2 (Internet) <--- ARP ---> Schicht 1 (LAN)
https://de.wikipedia.org/wiki/Address_Resolution_Protocol> Hilfreich zum Verständnis ist dabei immer Wireshark.
Nein. Mit Verständnis des verwendeten IP/TCP-Modell kann eine
HTTP-Verbindung
https://www.tecchannel.de/a/hypertext-transfer-protocol,401210,2
über den Rechner auf dem Wireshark läuft verstanden/analysiert werden.
Korrekte Kurzschreibweisen HTTP-Übertragung im TCP/IP-Schichtenmodell:
http://www.informatik.uni-hamburg.de/TKRN/world/lernmodule/LMint/Popup/TCP-IP-schichtenmodell.htm:
"HTTP - TCP - IP - Ethernet" (das Verständnis konnte alle 4 Schichten
mit dem gleichen Symbol trennen)
"HTTP1.1 über TCP über IPv4 über Ethernet" (zusätzlich die kulturelle
Angewohnheit "4 über 3 über 2 über 1" statt "4 über 3/2 über 1" zu
schreiben)
DNS-Übertragung im TCP/IP-Schichtenmodell:
"DNS/UDP/IPv4/Ethernet" (das Verständnis konnte alle 4 Schichten mit
dem gleichen Symbol trennen)
"DNS über UDP/IP über Ethernet" (wenn ein man in der Regel "UDP/IP"
statt "UDP über IP" schreibt)