Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
bs
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Moh Kh
bs
Commits
a07d50ff
Commit
a07d50ff
authored
Jun 8, 2020
by
Peter Gerwinski
Browse files
Options
Downloads
Patches
Plain Diff
Notizen und Schreenshot 8.6.2020
parent
2e9bfea0
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
20200608/HTTP_Antwort.png
+0
-0
0 additions, 0 deletions
20200608/HTTP_Antwort.png
20200608/bs-20200608.txt
+337
-0
337 additions, 0 deletions
20200608/bs-20200608.txt
with
337 additions
and
0 deletions
20200608/HTTP_Antwort.png
0 → 100644
+
0
−
0
View file @
a07d50ff
16.5 KiB
This diff is collapsed.
Click to expand it.
20200608/bs-20200608.txt
0 → 100644
+
337
−
0
View file @
a07d50ff
Netzwerke, 08.06.2020, 15:06:52
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
verschiedene Netzwerk-Protokolle:
- heute: TCP/IP
- früher: Novell (IPX), AppleTalk, NetBOUI(?)
Netzwerk-Geräte:
- keine Geräte-Dateien, sondern separat durch Kernel verwaltet
--> historische Gründe
Netzwerk-Geräte wurden bereits sehr früh zur Laufzeit ausgetauscht,
andere Geräte üblicherweise nicht.
Dann kam USB. Seitdem kann man auch Gerätedateien zur Laufzeit austauschen.
(Manche Unixe haben hier für Netzwerk-Geräte Geräte-Dateien.)
- auflisten: ifconfig -a # a = all
cassini/home/peter> /sbin/ifconfig -a
enx0022cff76a6c: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::2e32:a070:3d5c:b18f prefixlen 64 scopeid 0x20<link>
ether 00:22:cf:f7:6a:6c txqueuelen 1000 (Ethernet)
RX packets 22074567 bytes 25327005142 (23.5 GiB)
RX errors 1 dropped 0 overruns 0 frame 0
TX packets 17433143 bytes 5171001572 (4.8 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Lokale Schleife)
RX packets 2837413 bytes 2303026505 (2.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2837413 bytes 2303026505 (2.1 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1492
inet 85.212.20.155 netmask 255.255.255.255 destination 62.27.93.144
ppp txqueuelen 3 (Punkt-zu-Punkt-Verbindung)
RX packets 22034618 bytes 25060750410 (23.3 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17340266 bytes 4639072651 (4.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vlan.7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::222:cfff:fef7:6a6c prefixlen 64 scopeid 0x20<link>
ether 00:22:cf:f7:6a:6c txqueuelen 1000 (Ethernet)
RX packets 22074567 bytes 25238706874 (23.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17379259 bytes 5020937806 (4.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether ee:9a:9f:dc:22:2b txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Dieses Notebook hat 5 Netzwerk-Adapter.
3 davon haben sogenannte MAC-Adressen (Hardware-Adressen, "ether"):
enx0022cff76a6c: ether 00:22:cf:f7:6a:6c
vlan.7: ether 00:22:cf:f7:6a:6c --> virtuelles Sub-Interface von enx...
wlan0: ether ee:9a:9f:dc:22:2b
früher: Hardware-Adapter heißen "eth0", "eth1", "eth2", ...
heute: Hardware-Adapter heißen "enx" + MAC-Adresse
MAC-Adressen werden weltweit eindeutig vergeben
und identifizieren den Hardware-Adapter eindeutig.
Rechner, die miteinander verkabelt sind, können sich über ihre MAC-Adressen
eindeutig identifizieren. Man könnte also auf diesem Wege kommunizieren.
Probleme:
- Man müßte alle Rechner direkt (physikalisch) miteinander verkabeln.
- Wenn ein Netzwerk-Adapter ausgetauscht wird, ändert sich die MAC-Adresse.
Lösung: TCP-IP-Schichtenmodell
- Schicht 1: Ethernet (MAC-Adresse): so weit das Kabel reicht
- Schicht 2: IP-Adressen
- IP-Adressen
- Wir teilen jedem Rechner eindeutig eine IP-Adresse zu.
- Jeder Rechner merkt sich eine Tabelle mit den MAC- und IP-Adressen
seiner Kommunikationspartner: ARP-Tabelle.
phoenix/root# arp -n
Address Wtype HWaddress Flags Mask Iface
192.168.0.68 ther 00:21:27:c6:3c:55 C eth1
192.168.0.1 ther a4:2b:b0:de:ee:27 C eth1
Damit komme ich bis zum Ende des Kabels.
- Darüber hinaus: Routing
phoenix/root# route -n
Kernel-IP-Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
- Routing-Tabelle: Wenn ich einen Rechner mit der IP-Adresse x.x.x.x erreichen
will, muß ich mich ggf. an einen anderen Rechner wenden.
Beispiel: Ich will main-0.cvh-server.de = 88.99.194.201 erreichen.
In Routing-Tabelle nachschlagen:
Und-Verknüpfung der IP mit der Maske (Genmask)
Wenn dann das herauskommt, was unter "Ziel" steht,
muß ich mich an den "Router" wenden.
Wenn dort "0.0.0.0" steht, ist der Rechner direkt erreichbar.
2. Zeile:
88.99.194.201 & 255.255.255.0 = 88.99.194.0 != 192.168.0.0
--> Router "0.0.0.0" nicht verwendbar = nicht direkt erreichbar
1. Zeile:
88.99.194.201 & 0.0.0.0 = 0.0.0.0 = 0.0.0.0
--> Router "192.168.0.1" verwendbar = Ziel über 192.168.0.1 erreichbar
Das Datenpaket erreicht sein Ziel mit Umweg über einen (oder mehrere) Router.
- ping <Ziel-IP>: Erreichbarkeit prüfen
- traceroute <Ziel-IP>: Route anzeigen lassen
Routing funktioniert nur, wenn alle beteiligten Rechner die Routen kennen,
und zwar in beiden Richtungen. Andernfalls sind Rechner nicht erreichbar.
Wir können nun jeden Rechner im Netzwerk über seine IP-Adresse erreichen.
Problem: Mit welcher Software auf dem Rechner wollen wir kommunizieren?
Lösung: TCP-IP-Schichtenmodell
- Schicht 1: Ethernet (MAC-Adresse): so weit das Kabel reicht
- Schicht 2: IP-Adressen
- Schicht 3: TCP-Ports
- Schicht 4: Protokolle
- TCP-Ports
- Ein (TCP-)Port ist eine Nummer, die einen Netzwerk-Teilnehmer (Software)
auf dem Rechner eindeutig identifiziert.
Beispiel: Spreche mit 88.99.194.201 auf Port 80 (Webseiten abrufen)
Protokoll ("Sprache"): HTTP
phoenix/root# nc 88.99.194.201 80
Hallo?
HTTP/1.1 400 Bad Request
Date: Mon, 08 Jun 2020 14:06:48 GMT
Server: Apache/2.4.38 (Debian)
Strict-Transport-Security: max-age=15768000; includeSubDomains
Content-Length: 307
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Debian) Server at 0.cvh-server.de Port 80</address>
</body></html>
Beispiel: Spreche mit 88.99.194.201 auf Port 25 (E-Mails austauschen)
Protokoll ("Sprache"): ESMTP
phoenix/root# nc 88.99.194.201 25
220 main-0.cvh-server.de ESMTP Exim 4.92 Mon, 08 Jun 2020 16:07:40 +0200
Hallo?
500 unrecognized command
Quit
221 main-0.cvh-server.de closing connection
Port selbst öffnen: nc -l
main-0/home/pgerwinski> nc -p 8088 -l
phoenix/home/peter> nc 88.99.194.201 8088
Hallo?
Hier auch hallo.
Scheint zu klappen.
:-)
^C
phoenix/home/peter>
http://88.99.194.201:8088 geht ebenfalls auf
den Rechner 88.99.194.201, Port 8088.
main-0/home/pgerwinski> nc -p 8088 -l
GET /HalloPeterGrussMarkus HTTP/1.1
Host: 88.99.194.201:8088
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
<html>
<body>
<h1>Hallo!</h1>
<p>Dies ist ein Test.</p>
<p>:–)</p>
</body>
</html>
Besser:
<p>:–)</p>
Selbst eine Internet-Anwendung schreiben:
main-0/home/pgerwinski/test> nc -p 8088 -l -e ./hello
main-0/home/pgerwinski/test>
Dasselbe in einer Endlosschleife:
main-0/home/pgerwinski/test> while true; do nc -p 8088 -l -e ./hello; done
phoenix/home/peter> nc 88.99.194.201 8088
Hello, world!
Auf diese Weise kann man z.B. einen Roboter, der von einem Einplatinencomputer
gesteuert wird, per WLAN fernsteuern: Auf dem Einplatinencomputer läuft die
Steuer-Software in der o.a. Endlosschleife mit nc; der Steuercomputer sendet
Befehle an den Roboter an dessen IP-Adresse und Port.
Der Erfolg des Internet beruht darauf, daß es dermaßen einfach ist,
Internet-Anwendungen zu schreiben.
ACHTUNG: Wenn man eine Internet-Anwendung schreibt, muß man mit Angriffen
Dritter auf diese Anwendung rechnen! Sicherheitsaspekte beachten!
(Z.B. Einlesen von Strings mit scanf() wäre ein Sicherheitsloch!)
Speicherverwaltung, 08.06.2020, 17:12:09
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mikrocontroller:
- Es läuft überhaupt nur 1 Programm.
- Dieses hat vollen Zugriff auf den gesamten Speicher.
DOS: Real Mode
- Es läuft überhaupt nur 1 Programm.
- Dieses hat vollen Zugriff auf den gesamten Speicher.
- Speicheradressen sind zweigeteilt, z.B.: b800:0100 (im Bildschirmspeicher)
Nebenschauplatz: Probleme mit Virtualisierung (kvm)
Tastatur in der virutellen Maschine: ":" eingegeben ergibt "Ö"
vermuteter Grund: Auf "Ö" liegt in der US-Tastenbelegung der ":".
Die Software sieht einen ":", vermutet, daß "Ö" gedrückt wurde,
und korrigiert das dann.
Behelfslösung: virtuelle Maschine auf US-Tastatur umstellen,
dann korrigiert sie nicht mehr alles.
Speicheradressen in DOS-Rechnern: Segment:Offset
16-Bit-Prozessor: 8086
Ein 16-Bit-Register kann 2^16 = 65536 verschiedene Zahlen enthalten.
--> Mit einem 16-Bit-Zeiger kann man maximal 64 kiB ansprechen.
Tatsächlich kann der 8086 bis zu 1 MiB ansprechen. Wie?
Speicheradresse = 16 * Segment + Offset
Beispiel: b800:0100 = b8000 ist dasselbe wie b808:0080 = b8080
+ 0100 + 0080
----- --¹--
physikalische Adresse: b8100 b8100
--> Wir verwenden 32-Bit-Zeiger, um maximal 1 MiB anzusprechen.
Warum?
--> Es erleichtert die Relokation von Programmen.
.----.
Programm v v
[------------]
[------------------------------------------------------------------]
Speicher
Programm an anderer Stelle im Speicher --> Sprünge müssen antepaßt werden.
.----.
Programm v v
[------------]
[------------------------------------------------------------------]
Speicher
Lösung beim 8086: Beim Laden des Programms wird eine Segment-Adresse fest
vergeben. Innerhalb des Programms wird nur mit Offset-Adressen gearbeitet.
--> Programme können bis zu 64 kiB groß sein.
Mehr als 64 kiB: Unterteilung des Speichers des Programms in verschiedene
Segmente mit verschiedenen Zwecken:
Codesegment (CS): ausführbarer Code
Datensegment (DS): globale Variable
Stack-Segment (SS): lokale Variable, Rücksprungadressen usw.
Extra-Segment (ES): dynamischer Speicher (malloc())
--> Programme können bis zu 256 kiB groß sein.
Mehr als 256 kiB: Verwendung von 32-Bit-Zeigern für dynamischen Speicher
--> Programme können bis zu 1 MiB groß sein.
Tatsächlich: 640 kiB, da das Betriebssystem 384 kiB für sich reserviert
DOS: Protected Mode
32-Bit-Prozessor: 80386
"protected mode": Speicherschutzmechanismen
Offset-Adressen: 32 Bit statt 16 Bit --> bis 4 GiB adressierbar
Segment-Adressen umgewidmet zu "Selektoren": Array-Index für Deskriptorentabelle
Deskriptorentabelle enthält Beschreibungen von Speichersegmenten
Anfangsadresse, Länge, Zugriffsrechte (z.B. ausführbar, lesbar, schreibbar)
--> Relokation von Programmen im Speicher funktioniert weiterhin.
Lösung beim 80386: Beim Laden des Programms werden Segmente definiert und fest
vergeben. Innerhalb des Programms wird nur mit Offset-Adressen gearbeitet.
--> Programme können bis zu 4 GiB groß sein.
--> Da Länge und Zugriffsrechte bekannt sind, kann nun die Hardware dafür sorgen,
daß sich verschiedene Programme nicht gegenseitig in den Speicher schreiben.
--> Wenn ein Programm diese Rechte verletzt, wird eine "Exception" ausgelöst,
eine Art Interrupt, die das laufende Programm unterbricht und die Kontrolle
an das Betriebssystem zurückgibt. Dieses beendet das Programm mit einer
Fehlermeldung.
Virtueller Speicher
32-Bit-Prozessor: 80386
64-Bit-Prozessor: AMD-64-Bit-Architektur, Nachfolger des 80386 (64-Bit-Offset-Adressen)
MMU = Memory Management Unit
Zunächst: Speicheradresse = Nummer der Speicherzelle
MMM bekommt virtuelle Speicheradresse (Prozessorregister Segment:Offset)
und bildet sie auf physikalische Speicherzelle ab.
Der Speicher ist unterteilt in "Seiten" (pages) à 4 kiB.
Die Zuordnung von virtuellen Speicheradressen auf physikalischen Speicher
wird vom Betriebssystem bestimmt und kann beliebig sein.
Insbesondere auch erlaubt: virtuelle Adresse hat keinen physikalischen Speicher.
Wenn dann eine Anwendung darauf zugreift: Exception
Das Betriebssystem kann dann bei Bedarf Speicher zuweisen
und dafür nötigenfalls an anderer Stelle Speicher auf Platte auslagern.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment