Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7.

Ähnliche Präsentationen


Präsentation zum Thema: "DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7."—  Präsentation transkript:

1 DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

2 Fahrplan Bluetooth und WiFi Module (kurz) Proprietäre Kommunikationsmodule Robuste Kommunikation ISO OSI

3 Bluetooth (1/2) 1994 Entwicklung bei Ericsson Bluetooth nach Wikingerkönig (Harald Blauzahn) – Logo zeigt altnordischen Runen für H und B 1998 Gründung Bluetooth Special Interest Group (SIG) – Ericsson, Intel, IBM, Nokia, Toshiba, Version 1.1 (IEEE ), erste Produkte für den Massenmarkt 2004 Bluetooth Version 2.0 (ohne IEEE): Enhanced Data Rate (EDR) mit 3 Mbps 2009 Version 4.0: Low Energy – Nicht abwärtskompatibel – Stromsparender aber langsamer als Vorgänger – BT 4.x und älter kombiniert = „smart ready“ Wireless Personal Area Network (WPAN) – „Kabelersatz“ für die Verknüpfung von Rechner mit Peripherie, tragbaren Geräten, PDAs, Handys – Statt Infrarot, spontane drahtlose Kommunikation – Eingebettet in andere Geräte, preiswert, kurze Reichweiten

4 Bluetooth (2/2) Funkübertragung – 79 1-MHz-Kanäle im 2,4-GHz-ISM- Band mit Frequency Hopping Spread Spectrum (FHSS) – Gaussian Frequency Shift Keying (GFSK) Modulation, mW Sendeleistung Topologien – Pikonetze: Stern mit Master mit Slaves – Scatternetze: überlappende Pikonetze Sicherheit – Authentifikation und Verschlüsselung Fotos: Wikipedia FHSS FSK

5 Bluetooth Pikonetz Geräten vernetzen sich spontan (ad-hoc) Ein Gerät wird zum Master, die anderen verhalten sich als Slaves Master bestimmt die Sprungfolge, Slaves müssen dieser folgen Jedes Pikonetz ist durch seine Sprungfolge definiert Bis zu 7 aktive Slaves, bis zu 200 geparkte Slaves, weitere im Standby Kommunikation immer Master  Slave (nicht Slave  Slave) M=Master S=Slave P=Parked SB=Standby M S P SB S S P P

6 Bluetooth Scatternetz Verbindung mehrerer räumlich naher Pikonetze Slaves können zwischen den Pikonetzen hin und her springen Master kann Slave in anderem Pikonetz sein, aber nicht nochmal Master M=Master S=Slave P=Parked SB=Standby M S P SB S S P P M S S P Pikonetze (jedes mit max. Datenrate)

7 Bluetooth Host Stack Radio Baseband Link Manager Control Host Controller Interface Logical Link Control and Adaptation Protocol (L2CAP) Audio TCS BINSDP OBEX vCal/vCard IP NW-Anw. TCP/UDP BNEP RFCOMM (serial line interface) AT modem commands Telefonie-AnwendungAudioVerwaltung AT: attention sequence OBEX: object exchange TCS BIN: telephony control protocol specification – binary BNEP: Bluetooth network encapsulation protocol SDP: service discovery protocol RFCOMM: radio frequency comm. PPP

8 Bluetooth in DIY RFCOMM stellt serielle Verbindung her Kommunikation implementieren komplex/zeitaufwendig → Module nutzen Module mit seriellem Interface: – BT 2.1: HC05, BTM-112 – BT 4.0: HM11, HM10, nRF8001 Mikrocontroller mit BT 4.0: – nRF51822 (inkl BT Treiber) EXP-tech.de 10Euro

9 WLAN in DIY Hohe Kommunikationsgeschwindigkeit idR unwichtig Hoher Energiebedarf Kommunikation implementieren komplex/zeitaufwendig → Module nutzen Module mit integriertem TCP/IPv4 Stack: – ESP8266 (China, 2,50 Euro) Serielle Kommunikation Integrierter 32bit Mikrocontroller (GNU Toolchain) – TI CC3300 (> 30Euro) SPI – Atmel WILC3000 Bluetooth WiFi IEEE b/g/n Seit 2015 Adafruit CC3300

10 Proprietäre Kommunikation Wieso eine eigene Kommunikation aufbauen? – Standard braucht zu viel Strom – Latenzzeit nicht deterministisch – Kosten reduzieren – Reichweite erhöhen –... – Because we can...? Effizienteste Lösung verwenden

11 Transmitter Receiver (Old School) Unidirektional – Frequenz (üblich 0.1-5kHz Bandbreite) an Dateneingang von Transmitter anlegen – Gleiche Frequenz liegt (inkl. evtl. Störungen) an Datenausgang des Empfängers Encodierung und Decodierung obliegt dem Benutzer (im MCU) Einfacher Aufbau (DIY mögl.) Große Reichweite RF Link EXP-Tech

12 Transceiver Bidirektional (Sender und Empfänger in einem) En- und Decodierung übernimmt das Modul – RFM12B (5 Euro) 433/868 Mhz, 115.2kbps, SPI 16-bit RX Fifo (fast beliebige Paketlängen) Kontinuierliches Auslesen erforderlich, siehe UART Int. – NRF24L01+ (5 Euro) 2,4Ghz, 2Mbps, SPI Max 32byte Pakete (längere Pakete in ein paar Folien) Sparkfun.com Ali-Express Physikalische Schicht

13 Medienzugriff (MAC) (1/2) Zwei oder mehr Teilnehmer greifen auf ein Medium zu → Kollision → Koordinierung erforderlich Möglichkeiten für den Mehrfachzugriff – Feste Kanalaufteilung Geeignetes Multiplexverfahren in feste Kanäle für Knotenpaare aufgeteilt bekannt: Frequenz-, Zeit-, Raum-, Codemultiplex + Sprachkommunikation - Datenkommunikation: Daten werden typischerweise sporadisch versendet, ineffiziente Nutzung des Mediums Zeitschlitz Rahmen Time Division Multiplex Access (TDMA) Zeit

14 Medienzugriff (MAC) (2/2) (Weitere) Möglichkeiten für den Mehrfachzugriff – Zufallszugriffverfahren Stationen greifen zufällig auf Medium zu, eventuelle gleichzeitige Übertragungen (Kollisionen) müssen beachtet werden Urform: ALOHA, 1970ern zur Vernetzung von Rechnern der Uni Hawaii (Annahme: Medium kaum belegt): – Wenn die MAC-Schicht eines Knotens von der Netzwerkschicht ein Datagramm erhält, wird der Rahmen sofort gesendet – Wenn der Empfänger ihn fehlerlos erhält, sendet er eine positive Bestätigung (ACK) zurück – Wenn nach einem Timeout kein ACK zurückkommt, wartet der Sender eine zufällige Wartezeit (Backoff) und wiederholt dann das Senden

15 Carrier Sense Multiple Access (CSMA) Knoten prüfen vor dem Senden, ob Medium belegt (listen before talking) Reduziert Kollisionen, trotzdem immer noch mögl. wait for data trans- mission /m=0 from above(data)/ random(0,...,2 m -1)  t/ timeout/ m++ rcv(ACK)/ stop_timer; m=0 wait for ACK backoff [finished]/ start_timer m = #collisions t = constant time [free]/ wait one slot 1-p p [busy]/ slot/ sense P-persistentes CSMA

16 Mögliche Kollisionen „Gleichzeitiger“ Sendestart Hidden-Terminal Problem: – A, B hören sich – C, B hören sich – A, C hören sich nicht, A und C wissen nichts von möglichen Kollisionen bei B – genauso möglich durch Signaldämpfung: A B C A B C A’s signal strength space C’s signal strength

17 Weitere suboptimale Effekte Exposed-Terminal Problem – A, B 1 und C, B 2 hören sich – B 1, B 2 hören sich – A, B 2 sowie C, B 1 hören sich nicht – während B 1 an A sendet, KÖNNTE B 2 an C senden A B1B1 C B2B2

18 Zuverlässiges Übertragungsprotokoll (1/2) Funk ist sehr störanfällig (selbst bei optimalem Medienzugriff) Sehr lange Nachricht Daten: „Sehr lan“ ACK Bob Alice Alles? ACK angekommen? ACK 2 1)Bestätigungen werden NIE bestätigt! Timeouts nutzen! ACK 2 angekommen?

19 Zuverlässiges Übertragungsprotokoll (2/2) Sehr lange Nachricht Daten: „Sehr lan“ ACK Bob Alice 2) Daten müssen konsistent gehalten werden! Sequenznummern nutzen! Daten verloren? Nochmal... Daten: „Sehr lan“ ACK Daten: „Sehr lanSehr lan“ WTF?? Gesendet: „Sehr lan“ Daten: „ge Nachricht“

20 Fehlerkontrolle Übersitcht Zuverlässiges Übertragungspro tokoll Host A Host B rdt_send(data) udt_send(pkt) rdt_rcv(data) udt_rcv(pkt) Bitfehler, Paketverlust udt_rcv(ACK)udt_send(ACK) SendeprozeßEmpfangsprozeß Unzuverlässiger Kanal Zuverlässiges Übertragungspro tokoll

21 Protokolle für zuverlässigen Transport Stop-and-Wait – Sender fügt zur Fehlererkennung Prüfsumme (z.B. CRC) hinzu – Empfänger schickt Bestätigung (acknowledgment, ACK) – Wenn diese nach einem Timeout nicht eintrifft, wird das Paket erneut gesendet – Dadurch können evtl. Duplikate gesendet werden, um diese zu erkennen, benötigt man noch Sequenznummern (SQN) – Bei großem Bandbreiten-Verzögerungsprodukt: Sender ist die meiste Zeit blockiert, ineffizient Schiebefensterprotokolle (sliding window protocols) – Mehrere Pakete auf einmal senden, um Kanal zu füllen – Go-Back-N und Selective Repeat – Unterscheiden sich bei Timeout, Bestätigungen, Sendewiederholung

22 Stop-and-Wait (Sender) wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK)  SQN(ACK)  SQN]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [  biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ udt_rcv(ACK)/

23 Stop-and-Wait (Empfänger) wait for packet /SQN=1 udt_rcv(pkt) [biterror(pkt)  SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [  biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++

24 Rechnerkommunikation, Transportschicht 24 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK)  SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ time SQN = ? Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

25 Rechnerkommunikation, Transportschicht 25 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ time SQN = 1 Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

26 Rechnerkommunikation, Transportschicht 26 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ time SQN = 1 Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

27 Rechnerkommunikation, Transportschicht 27 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 time SQN = 1  Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

28 Rechnerkommunikation, Transportschicht 28 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 time SQN = 1  Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

29 Rechnerkommunikation, Transportschicht 29 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 time SQN = 1  ACK1 SQN = 2 Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

30 Rechnerkommunikation, Transportschicht 30 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 time SQN = 1 SQN = 2  ACK1 Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

31 Rechnerkommunikation, Transportschicht 31 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 time SQN = 1 SQN = 2 ACK1 SQN = 2 Stop-and-Wait: normaler Ablauf udt_rcv(ACK)/

32 Rechnerkommunikation, Transportschicht 32 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 time SQN = 2 ACK1 Stop-and-Wait: Paketverlust udt_rcv(ACK)/

33 Rechnerkommunikation, Transportschicht 33 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2  time SQN = 2 Stop-and-Wait: Paketverlust udt_rcv(ACK)/

34 Rechnerkommunikation, Transportschicht 34 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2  time SQN = 2 Stop-and-Wait: Paketverlust udt_rcv(ACK)/

35 Rechnerkommunikation, Transportschicht 35 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 2 Pkt2  Stop-and-Wait: Paketverlust udt_rcv(ACK)/

36 Rechnerkommunikation, Transportschicht 36 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 2 Pkt2  Stop-and-Wait: Paketverlust udt_rcv(ACK)/

37 Rechnerkommunikation, Transportschicht 37 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 2 SQN = 3 Pkt2  ACK2 Stop-and-Wait: Paketverlust udt_rcv(ACK)/

38 Rechnerkommunikation, Transportschicht 38 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 2 SQN = 3 Pkt2  ACK2 Stop-and-Wait: Paketverlust udt_rcv(ACK)/

39 Rechnerkommunikation, Transportschicht 39 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 Pkt2 ACK2 Stop-and-Wait: Paketverlust udt_rcv(ACK)/

40 Rechnerkommunikation, Transportschicht 40 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 Pkt2 ACK2 Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

41 Rechnerkommunikation, Transportschicht 41 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 Pkt2 ACK2 Pkt3  Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

42 Rechnerkommunikation, Transportschicht 42 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 Pkt2 ACK2 Pkt3  Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

43 Rechnerkommunikation, Transportschicht 43 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 SQN = 4 Pkt2 ACK2 Pkt3  ACK3 Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

44 Rechnerkommunikation, Transportschicht 44 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 SQN = 4 Pkt2 ACK2 Pkt3  ACK3 Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

45 Rechnerkommunikation, Transportschicht 45 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3  Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

46 Rechnerkommunikation, Transportschicht 46 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3  Duplikat! Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

47 Rechnerkommunikation, Transportschicht 47 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3  ACK3 Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

48 Rechnerkommunikation, Transportschicht 48 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 3 SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3  ACK3 Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

49 Rechnerkommunikation, Transportschicht 49 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Stop-and-Wait: Verlust eines ACKs udt_rcv(ACK)/

50 Rechnerkommunikation, Transportschicht 50 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

51 Rechnerkommunikation, Transportschicht 51 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

52 Rechnerkommunikation, Transportschicht 52 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

53 Rechnerkommunikation, Transportschicht 53 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  ACK4 Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

54 Rechnerkommunikation, Transportschicht 54 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  ACK4 Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

55 Rechnerkommunikation, Transportschicht 55 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  ACK4 Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

56 Rechnerkommunikation, Transportschicht 56 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  ACK4 Duplikat! Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

57 Rechnerkommunikation, Transportschicht 57 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  ACK4 Duplikat! Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

58 Rechnerkommunikation, Transportschicht 58 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 4 SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4  ACK4 Stop-and-Wait: verzögertes ACK Duplikat! udt_rcv(ACK)/

59 Rechnerkommunikation, Transportschicht 59 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4 ACK4 Stop-and-Wait: verzögertes ACK Duplikat! udt_rcv(ACK)/

60 Rechnerkommunikation, Transportschicht 60 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4 ACK4 Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

61 Rechnerkommunikation, Transportschicht 61 wait for data wait for ACK /SQN=1 rdt_send(data)/ pkt=pkt(SQN,data,CRC); udt_send(pkt); start_timer udt_rcv(ACK) [biterror(ACK) v SQN(ACK)  SQN)]/ timeout/ udt_send(pkt); start_timer udt_rcv(ACK) [¬biterror(ACK)  SQN(ACK)=SQN]/ stop_timer; SQN++ wait for paket /SQN=1 udt_rcv(pkt) [biterror(pkt) v SQN(pkt)  SQN]/ udt_send(ACK) udt_rcv(pkt) [¬biterror(pkt)  SQN(pkt)=SQN]/ data=extractdata(pkt); rdt_rcv(data); ACK=ACK(SQN,CRC); udt_send(ACK); SQN++ Pkt1 ACK1 Pkt2 time SQN = 5 Pkt2 ACK2 Pkt3 ACK3 Pkt3 ACK3 Pkt4 ACK4 Duplikat! Stop-and-Wait: verzögertes ACK udt_rcv(ACK)/

62 Open Systems Interconnection Modell Schnittstelle Anwendung Präsentation Sitzung Transport Netzwerk Verbindung Bitübertragung Host A Physical Data link Network Router Netzwerkprotokoll Host-Router Verbindungsprotokoll Host-Router Bitübertragungsprotokoll Host-Router Transportprotokoll Sitzungsprotokoll Präsentationsprotokoll Anwendungsprotokoll Schicht Name der ausgetauschten Informationseinheit Application Presentation Session Transport Network Data link Physical Host B PPDU APDU SPDU TPDU Packet Frame Bit PPDU APDU SPDU TPDU Paket Rahmen Bit Interface Layer Protokolle Router-Router Folie: Folie: Folie: ab 16 Folie 8+9 OSI von 1977 !!

63 Datenübertragung Gilt auf für DIY Projekte: – Abstieg: jeweils ein Kopf dazu, Aufstieg: Kopf wird entfernt Datagram Application Transport Network Link Physical Application Transport Network Link Physical Source HtHt HnHn HlHl M HtHt HnHn M HtHt M M Destination HtHt HnHn HlHl M HtHt HnHn M HtHt M M HtHt HnHn HlHl M Link Physical Network Link Physical HtHt HnHn HlHl M HtHt HnHn HlHl M HtHt HnHn M HtHt HnHn HlHl M HtHt HnHn M Link-layer switch Router Message Segment Frame Cross-Layer Optimierung Schichtentrennung wird aufgehoben Steigerung der Effizienz

64 Projektabschluss Abschlussvortrag gleich im Anschluss 6 Seiten IEEEtran Latex Dokumentation (PDF) – 48h vor der Prüfung Rechnungen bei mir abgeben – Inklusive Bankverbindung – Bis zu 40 Euro pro gemeldeter Person – NICHT zur Prüfung FabLab Gutscheine (je 50Euro) für – „Beste Doku“ – „Smarteste Umsetzung“ – Benachrichtigung per Mail (und Homepage)

65 Nächstes mal...


Herunterladen ppt "DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7."

Ähnliche Präsentationen


Google-Anzeigen