Reko Testat Nr. 2

Rechnernetze und Kommunikationssysteme

Rechnernetze und Kommunikationssysteme


Özgür Sanane
Diese Lernkarten decken fortgeschrittene Themen der Informatik auf Universitätsniveau ab. Sie konzentrieren sich auf die Implementierung und Problemlösung von Threads, Sockets und deren Anwendung in Java, einschließlich der Unterscheidung zwischen verbindungsorientierten und verbindungslosen Sockets. Zudem werden Themen wie Deadlocks, Race Conditions und die Serialisierung von Objekten behandelt. Diese Lernkarten sind ideal für Studierende und Entwickler, die ihr Verständnis von multithreading und Netzwerkkommunikation vertiefen möchten.
Karten
33
Lernende
24
Sprache
Deutsch
Kategorie
Informatik
Stufe
Universität
Erstellt / Aktualisiert
21.01.2017 / 25.01.2023

Flashcards

Nennen Sie die Schutzziele von IT Sicherheit.

Geben Sie zu jedem Ziel 1-3 Beispiele

  • Authentizität
  • Integrität
  • Vertraulichkeit
  • Verfügbarkeit
  • Verbindlichkeit

Authentizität:

User / Passwort, Login am Rechner, Digitale Signaur von Mail

 

Vertraulichkeit

Verschlüsselung

 

Verfügbarkeit

High Availabillity, Tier-Level, Monitoring

 

Integrität

Prüfsummen, Hashfunktion MD5, Fehlerkorrekturen

 

Verbindlichkeit

Protokollierung, Audits

Beschreiben Sie die Schutzziele der IT-Sicherheit

Authentizität:

Echtheit und Glaubwürdigkeit des Objektes oder Person, anhand eindeutiger Identität überprüfbar

Integrität:

Daten können nicht ohne erlaubnis und unbemerkt manipuliert werden

Vertraulichkeit

Keine unautorisierte Informationsgewinnung möglich

Verbindlichkeit

Zuordnung von Aktionen ist eindeutig nachweisbar und kann nicht nachträglich abgestritten werden

Verfügbarkeit

Daten sind zu allen Zeitpunkten verfügbar, wenn sie benötigt werden

Was versteht man unter Authorisierung? Was versteht man unter Autorisierung? Geben Sie jeweils zwei praktische Beispiel für jeden Begriff an, wo diese im Einsatz sind.

Authorisierung:

"Wer bin ich" - Username + Passwort erforderlich

Autorisierung:

"Was darf ich" - Welche Rechte habe ich für eine Anwendung, Datei-System, Datenbank etc.

 

bsp:

Authorisierung --> Login am PC, Online für Facebook etc. - Beser zwei-faktor-authentifizierung z.b. bei Online Banking

Autorisierung -> Lese Rechte in einer Datenbank, Schreib und Ausführrechte bei einem PC

Wozu werden Verzeichnisdienste üblicherweise eingesetzt? 

Verzeichnisdienste in der Regel dazu verwendet, Benutzerdaten zentral zu sammeln und Applikationen zur Verfügung zu stellen. Gegenüber einer dezentralen Speicherung z. B. mit einem eigenen Dienst für jedes Programm hat die zentrale Verwaltung den Vorteil, dass Benutzer und Rechte an zentraler Stelle nur einmal geändert werden müssen.

Beschreiben Sie die Inhalte und Aufgaben von LDAP? 

Name des Protokolls und des Verzeichnisdienstes (Anwendung)

Hierarische "Datenbank"

Enthält Personen, Objekte, Konfigurationen etc..

OpenSource-Implementierung

Ermöglicht Authentifizierung und teilweise Autorisierung

Beschreiben Sie die Inhalte und Aufgaben von AD? 

Hierarchische Datenbank

Enthält Personen, Computer, Konfiguration, etc.

"spricht" LDAP

Quasi Standard bei Windows-Anwendungen

ermöglicht Authentifizierung und Autorisierung

Wozu werden digitale Zertifikate üblicherweise eingesetzt? 

bestätigt Vertraulichkeit, Authentizität und Integrität.

Z.B. bei Emails mit PGP 

Nennen Sie zwei unterschiedliche Beispiele wo diese zum Einsatz kommen. (Digitale Zertifikate)

Bei persönlichen Zertifikaten werden Digitale Zertifikate für verschlüsselte Emails verwenden, z.b. PGP.

Zertifikate von Uni etc. werden dafür genutzt um die Identität eines Nutzer zu prüfen (ohne Zertifikat könnten wir z.B. nicht in Eduram Wlan)

Wie kommen Sie zu einem digitalen Zertifikat?

Persönlich ausgestelltes Zertifikat

 Nutzer stellt sich ein eigenes Zertifikat aus • Zertifikat wird direkt an Empfänger weitergegeben

 

Zertifizierungsstelle

Zertifikat wird von einer vertrauenswürdigen Stelle ausgestellt

• CA prüft die Identität des Nutzers

• die digitale Signatur der CA findet sich im Nutzerzertifikat wieder

• hierarchische Verteilung von CAs

Wie wird eine Nachricht allgemein verschlüsselt?

Eine Nachricht im Klartext wird mit einem Verschlüsselungsverfahren zum "Geheimtext" z.B. mit C-Verschlüsseung oder mit einem bestimmten Key. Empfänger kann dann mit entsprechenden Key oder bestimmten Entschlüsselungsverfahren den Text wieder lesen.

Beschreiben Sie den Unterschied zwischen einem symmetrischen Schlüssel und einem asymmetrischen Schlüssel.

Beim symmetrischen Schlüssel sind die Schlüssel für Ver- bzw. Entschlüsselung gleich. Vorteil schnell. Nachteil, Schlüssel muss bei beiden Seiten vorhanden sein (Sender + Empfänger). Einsatz als 3DES bei Chipkarten. DES (Data Encryption Standard).

Beim assymemetrischen Schlüssel wird ein schlüsselpaar erzeugt. (Öffentlicher Schlüssel und privater Schlüssel). Nachricht wird mit öffentlichem Schlüssel des Empfänger verschlüsselt und mit dem privaten Schlüssel des Empfängers entschlüsselt. Beispiel AES (Advanced Encryption Standard). Standard-Schlüssel für viele Anwendungen, z.b. WPA2 (Wlan), SSH, IPsec

Wie werden die Schlüssel zwischen Sender und Empfänger ausgetauscht?

Austausch der Schlüssel über persönlichen Kontakt

In welchen Fällen wendent man welches Schlüssel Verfahren an?

Bei Verschlüsselung von Emails ist es besser mit asymmetrischen Schlüsseln zu arbeiten, da man den öffentlichen Key zur Verschlüssung nutz (beim Senden) der Empfänger aber mit seinem eigenen privaten Schlüssel entschlüsseln kann, man braucht dann nicht für jeden Kommunikaitonspartner einen identischen Schlüssel. Dafür ist das Verfahren langsamer.

Bei Schnellen einsatzgebieten dann symmetrische Schlüssel

Ablauf der Identitäsprüfung

Kunde stellt Antrag bei RA --> Ra prüft Identität von Kunde und leitet Antrag weiter --> CA erzeugt Zertifikat --> ZertifiizierungsSchlüssel erhält Kunde und eintrag im Verzeichnisdienst

Nennen und beschreiben Sie mind. zwei Verfahren für einen symmetrischen und asymmetrischen Schlüssel.

Symmetrische:

Stromverschlüsselung:

Verschlüsselung von einzelnen Zeichen nacheinander - Beliebige Mengen an Zeichen verschlüsselbar

Blockverschlüsselung:

Verschlüsselung von ganzen Zeichenblöcken auf ein Mal - Genügend große Anzahl an Zeichen vorausgesetzt

_________________________________________________________________________________________

Asymmetrisch:

mit öffentlichen Key und privatem Key (verschlüsselung öffentlicher Key + entschlüsseln nur mit prviaten key)

Welche Schlüssellänge gilt jeweils noch als sicher? 

Symmetrisch:

 3DES (min. 112 Bit) bzw. AES (min. 128 Bit) 

Asymmetrisch:

RSA (min. 1536 Bit für bestehende und min. 2048 Bit für zukünftige Systeme) bzw. ECDSA (min. 192 Bit für bestehende und min. 224 Bit für zukünftige Systeme

Sie können Threads von Tasks unterscheiden

Threads sind Prozesse innerhalb "normaler" Prozesse (TASKS). Mehrere Threads innerhalb eines Prozesses (Task) möglich. Ausführung -> Nebenläufig -> Quasi Parallel

Welche Probleme können bei Threads auftreten. 

Zugriff auf gemeinsame Daten/Objekte kann zur Inkonsistenzen führen. Deadlock kann enstehen, wenn ein Thread ewig auf einen anderen warten muss, oder ein Thread erst starten kann wenn der andere fertig ist etc.

Wie unterscheiden sich konkurrierende und kooperierende Threads voneinander?

Konkurrierende Threads

Threads greifen auf dieselben Ressourcen zu -> Sync des Zugriffs erforderlich zur Vermeidung inkonsistenter Daten

Kooperierende Threads:

Abfolge der Thread-Ausführung entscheidend

- Erzeuger-Verbraucher-Beziehung zwischen Threads

- Verbraucher-Thread nur dann erfolgreich, wenn Aufgabe von Erzeuger-Thread vollständig.

Beschreiben sie einen praktischen Fall für eine Race Condition

Welche Lösungsmöglichkeiten gibt es hierfür?

Race Condition z.B. bei einer Bankbuchung wo zwei Threads auf gleiche Ressource zugreifen müssen. Ergebnis hängt davon ab, wie die Verteilung der CPU-Zeit auf Threads ist. Wenn CPU die Berechnung von Thread 2 zur erst berechnet obwohl erst TH1, dann geht die Buchung verloren.

Lösung z.B. zweiter Thread darf erst nach einer Meldung von  Thread 1 starten, oder die Daten werden solange geblockt bis Thread 1 die Datei wieder entblockt. 

Nennen Sie die Klassen, Methoden, um Threads in Java zu implementieren 

Klasse Thread (ableitung erforderlich) oder Schnittstelle Runnable (implementierung erforderlich).

Klasse Thread:

1. public class XXX extends Threads {... }  | Klasse erstellen

2. public void run () | Methode run wird überschreiben

3. Thread meinthread = new XXX(); thread.start() | Thread Objekt erzeugen, und dann .start()

Implementierung:

1. public class XXX implements Runnable {...}

2. public void run ()

3 Thread meintrehad = new Thread(new XXX()); thread.start();

 

Nennen die unterschiedliche Zustände, welche ein Thread annehmen kann.

Running, Waiting, Blocked, Timded Waiting

wait(), join(), notify(), lock() etc.

Wie sieht der Ablauf graphisch aus?

Beschreiben Sie was ein Deadlocks ist und wie dieser auftreten kann.

"Verklemmung" | Problemeatik bei der Synchronisierung von Threads, wenn ein Thread auf den anderen warten muss und der andere auf den anderen wartet und einfach nichts mehr geht...

T1 hat Ressource A reserviert und wartet auf Ressource B

T2 hat Ressource B reserviert und wartet auf Ressource A

wait() und notify() in richtiger REIHENFOLGE, somit kann man Deadlocks vermeiden.

Beschreiben Sie was Starving ist und wie dies auftreten kann. 

Unzureichender, unfairer Anteil an Rechenleistung für mindestens einen Thread. Anderer Thread "verhungert". Mögliche Ursachen: Fehlerhafte Vergabe von Prioriäten. Thread 1 macht einfache Addition und CPU kiregt er 90%, Thread 2 mus komplizierte Algorithmen durchlaufen und schwierige multiplikationen berechnen, kriegt aber nur 10% CPU...

Prioritäten richtig setzen !!!

Wo und wozu wird die Serialisierungen bzw. Deserialisierung eingesetzt.

Serialisierung bedeutet die Umwandlung des Zustands eines Objekts in eine Folge von Bytes. Deserialisierung ist der umgekehrte Vorgang, bei dem aus einer Byte-Folge wieder ein programmierbares Objekt erzeugt wird. Dabei wird der ursprüngliche Zustand des Objekts wiederhergestellt. 

Eingesetzt in:

Persistente Objektspeicherung • Netzwerkkommunikation

bsp: JAVA RMI: Transport von Objekten: parameter und ergebnisse

 

Sie können ein Anwendungsbeispiel in Java beschreiben. Welche Möglichkeiten haben Sie in Java diese zu implementieren. (Serialliserung )

Alternative A: Implementierung der Schnittstelle Serializable

class MyClass implements Serializable | Schnittstelle Serialiable hat keine Methoden

 Keine weitere Implementierung erforderlich • Automatische Serialisierungdurch Laufzeitsystem

Alternative B: Superklasse ist serialisierbar • Rekursive Serialisierung der enthaltenen Objekte

 

Wozu dient die Transienz und wann wird diese eingesetzt? Beschreiben Sie ein praktisches Beispiel Java. 

Transienz 

Kennzeichnung der nicht zu serialisierenden Instanzvariablen mit transient 

Voraussetzung: Wert nach Deserialisierung unnötig oder wiederherstellbar

Vorteile •

Bandbreitenreduktion, Speicherplatzreduktion, schnellere Deserialisierung • Umgehen nicht serialisierbarer Objekte: Sonst NotSerializableException für gesamtes Objekt

 

Beschreiben Sie, was ein Sockets ist und wo dieser eingesetzt werden. 

Socket (Engl. für „Steckdose“) ist Endpunkt einer Verbindung, zwei Sockets definieren eine Verbindung. Wird genutzt für Verbindung zwischen Client und Server.

Welche unterschiedlichen Socket-Typen kennen Sie? Beschreiben Sie, wann Sie einen verbindungsorientierten oder verbindungslosen Socket verwenden.

Verbindungsorientierte Kommunikation (TCP) + Verbindslose Kommunikation (UDP)

TCP ->

TCP stellt sicher, dass der Client die Daten korrekt erhalten hat, und dass sie in der richtigen Reihenfolge ankommen. Dabei geht jedoch einiges an Bandbreite verloren, wodurch die Übertragung verlangsamt wird.

Besonders das erneute Senden von fehlerhaft erhaltenen oder verlorengegangenen Paketen schränkt die Bandbreite ein; da bei Videosequenzen kleinere Fehler in den Daten normalerweise nur in wenigen fehlerhaften Bildern resultieren ist es besser, die Daten fehlerhaft, dafür aber rechtzeitig zu erhalten.

Einsatz bei kritschen Daten (wo keine Fehler passieren dürfen).

 

UDP ->

verbindungsloses Protokoll. D.h. es wird keine Verbindung aufgebaut und der Empfänger sendet keine Bestätigung über dem Empfang der Daten. Der Vorteil von UDP liegt in einer schnellen Übertragung mit geringem Verwaltungsaufwand. UDP wird vor allem bei einfachen Anfrage/Antwort-Protokollen und bei Anwendungen mit eigenen Fehlerkorrekturmechanismen verwendet

In der Regel wird UDP für Anwendungen und Dienste verwendet, die mit Paketverlusten umgehen können oder sich selber um das Verbindungsmanagement kümmern. Typisch sind DNS-Anfragen, VPN-Verbindungen, Audio- und Video-Streaming

Beschreiben Sie den unterschiedlichen Ablauf für die unterschiedlichen Socket-Typen

Worin unterscheiden sich diese?

TCP

Socket-Erstellung (Server und Client) -> Verbindungsaufbau Server und Client -> Dann kommunikation, datenaustasuch -> aufräumen

UDP

Socket-Erstellung (Server und Client) -> direkt Kommunikation (kein Verbindungsaufbau), Datenaustausch FERTIG

Nennen Sie unterschiedliche typische Probleme von SocketVerbindungen.

ServerSocket exisiert nicht (Server läuft nicht)

ServerSocket.accept() blockiert Aufruf --> Server nicht bereit oder accept() vergessen

ServerSocket(port) -> Port ist bereits gebunden.

socket.getinputstream ja && socket.getoutputstream nein (oder umgekehrt). Aufruf blockiert manchmal. (nur ein Stream wird benötigt)

socket.getinputstream ja && socket.getoutputstream: ja. Aufruf blockiert mancmal (falsche reihenfolge)

 

 

 

Implementieren Sie den Ablauf für einen Client-Server-Socket in PseudoCode (Client und Server) 

 Pseudo-Code
         * [Server-Thread]
         * server = new socketserver(4711)
         * client = server.waitForClient()
         * ...
         * [Client-Thread]
         * client = new socket("localhost",4711)
         * a = console.readInt()
         * client.writeInt(a)
         * b=console.readInt()
         * client.writeInt(b)
         * [Server-Thread]
         * a = server.readInt();
         * b = server.readInt();
         * c = a + b;
         * server.writeInt(c);
         * [Client-Thread]
         * c = client.readInt();
         * print "Ergebnis: " + c

 

Study