DIY
Personal Fabrication
Drahtlose Kommunikation
Juergen Eckert – Informatik 7
Fahrplan
• Bluetooth und WiFi Module (kurz)• Proprietäre Kommunikationsmodule• Robuste Kommunikation• ISO OSI
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, ...• 2001 Version 1.1 (IEEE 802.15.1-2002), 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
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, 1-100 mW Sendeleistung
• Topologien– Pikonetze: Stern mit Master mit
Slaves– Scatternetze: überlappende Pikonetze
• Sicherheit– Authentifikation und Verschlüsselung
Fotos: Wikipedia
FHSS
FSK
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=MasterS=Slave
P=ParkedSB=Standby
MS
P
SB
S
S
P
P
SB
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=MasterS=SlaveP=ParkedSB=Standby
MS
P
SB
S
S
P
P
SB
M
S
S
P
SB
Pikonetze(jedes mit max. Datenrate)
Bluetooth Host Stack
Radio
Baseband
Link Manager
Control
HostControllerInterface
Logical Link Control and Adaptation Protocol (L2CAP)Audio
TCS BIN SDP
OBEX
vCal/vCard
IP
NW-Anw.
TCP/UDP
BNEP
RFCOMM (serial line interface)
AT modemcommands
Telefonie-AnwendungAudio Verwaltung
AT: attention sequenceOBEX: object exchangeTCS BIN: telephony control protocol specification – binaryBNEP: Bluetooth network encapsulation protocol
SDP: service discovery protocolRFCOMM: radio frequency comm.
PPP
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)
HC05 @ EXP-tech.de 10Euro
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 4.0 + WiFi IEEE 802.11 b/g/n • Seit 2015
Adafruit CC3300
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
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 Kit @ EXP-Tech
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)
RFM12B @ Sparkfun.com
nrf24L01+ @ Ali-Express
Physikalische Schicht
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
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Zeitschlitz Rahmen
Time Division Multiplex Access (TDMA)
Zeit
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
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 fordata
trans-mission
/m=0 fromabove(data)/
random(0,...,2m-1)t/
timeout/m++
rcv(ACK)/stop_timer;m=0
wait for ACK
backoff
[finished]/start_timer
m = #collisionst = constant time
[free]/
wait oneslot 1-p
p[busy]/slot/
sense
P-persistentesCSMA
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:
AB
C
A B C
A’s signalstrength
space
C’s signalstrength
Weitere suboptimale Effekte
• Exposed-Terminal Problem– A, B1 und C, B2 hören sich
– B1, B2 hören sich
– A, B2 sowie C, B1 hören sich nicht
– während B1 an A sendet, KÖNNTE B2 an C senden
A B1 CB2
Zuverlässiges Übertragungsprotokoll (1/2)
• Funk ist sehr störanfällig (selbst bei optimalem Medienzugriff)
Sehr lange Nachricht
Daten: „Sehr lan“
ACKBobAliceAlles? ACK angekommen?ACK2
1) Bestätigungen werden NIE bestätigt!Timeouts nutzen!
ACK2 angekommen?
Zuverlässiges Übertragungsprotokoll (2/2)Sehr lange Nachricht
Daten: „Sehr lan“
ACKBobAlice
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“
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ässigerKanal
Zuverlässiges Übertragungspro
tokoll
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
Stop-and-Wait (Sender)
wait fordata
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_timerudt_rcv(ACK)
[biterror(ACK) SQN(ACK)=SQN]/stop_timer; SQN++
udt_rcv(ACK)/
Stop-and-Wait (Empfänger)
wait forpacket
/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++
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++
timeSQN = ? SQN = ?
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
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 forpaket
/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++
timeSQN = 1 SQN = 1
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 26
wait fordata
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++
timeSQN = 1 SQN = 1
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 27
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 1 SQN = 1
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 28
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 1 SQN = 1
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 29
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 1 SQN = 1
ACK1
SQN = 2
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 30
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 1 SQN = 2
ACK1
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 31
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 1 SQN = 2
ACK1
SQN = 2
Stop-and-Wait: normaler Ablauf
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 32
wait fordata
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 forpaket
/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
timeSQN = 2 SQN = 2
ACK1
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 33
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 2 SQN = 2
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 34
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 2 SQN = 2
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 35
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 2 SQN = 2
Pkt2
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 36
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 2 SQN = 2
Pkt2
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 37
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 2 SQN = 3
Pkt2
ACK2
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 38
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 2 SQN = 3
Pkt2
ACK2
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 39
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 3
Pkt2ACK2
Stop-and-Wait: Paketverlust
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 40
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 3
Pkt2ACK2
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 41
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 3
Pkt2ACK2
Pkt3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 42
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 3
Pkt2ACK2
Pkt3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 43
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 4
Pkt2ACK2
Pkt3
ACK3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 44
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 4
Pkt2ACK2
Pkt3
ACK3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 45
wait fordata
wait forACK
/SQN=1
rdt_send(data)/pkt=pkt(SQN,data,CRC);udt_send(pkt);start_timer udt_rcv(ACK)
[biterror(ACK) vSQN(ACK)SQN)]/
timeout/udt_send(pkt);start_timer
udt_rcv(ACK) [¬biterror(ACK) SQN(ACK)=SQN]/stop_timer; SQN++
wait forpaket
/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
timeSQN = 3 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 46
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3
Duplikat!
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 47
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3
ACK3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 48
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 3 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3
ACK3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 49
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Stop-and-Wait: Verlust eines ACKs
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 50
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 51
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 52
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 4
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 53
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
ACK4
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 54
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
ACK4
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 55
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Pkt4
ACK4
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 56
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Pkt4
ACK4
Duplikat!
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 57
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 4 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Pkt4
ACK4
Duplikat!
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 58
wait fordata
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 forpaket
/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
timeSQN = 4 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Pkt4
ACK4
Stop-and-Wait: verzögertes ACK
Duplikat!udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 59
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 5 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Pkt4 ACK4
Stop-and-Wait: verzögertes ACK
Duplikat!udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 60
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 5 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Pkt4 ACK4
ACK4
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Rechnerkommunikation, Transportschicht 61
wait fordata
wait forACK
/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 forpaket
/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
timeSQN = 5 SQN = 5
Pkt2ACK2
Pkt3ACK3
Pkt3ACK3
Pkt4
Pkt4 ACK4
ACK4Duplikat!
Stop-and-Wait: verzögertes ACK
udt_rcv(ACK)/
Open Systems Interconnection Modell
Schnittstelle
Anwendung
Präsentation
Sitzung
Transport
Netzwerk
Verbindung
Bitübertragung
Host A
Physical Physical
Data link Data link
Network Network
Router Router
Netzwerkprotokoll Host-RouterVerbindungsprotokoll Host-Router
Bitübertragungsprotokoll Host-Router
Transportprotokoll
Sitzungsprotokoll
Präsentationsprotokoll
Anwendungsprotokoll
SchichtName der ausgetauschtenInformationseinheit
Application
Presentation
Session
Transport
Network
Data link
PhysicalHost B
PPDU
APDU
SPDU
TPDU
Packet
Frame
Bit
7
6
5
4
3
2
1
PPDU
APDU
SPDU
TPDU
Paket
Rahmen
Bit
Interface
Layer
Protokolle Router-Router
Folie: 10-12
Folie: 13-15
Folie: ab 16
Folie 8+9OSI von 1977 !!
Datenübertragung• Gilt auf für DIY Projekte:
– Abstieg: jeweils ein Kopf dazu, Aufstieg: Kopf wird entfernt
Datagram
ApplicationTransportNetworkLinkPhysical
ApplicationTransportNetworkLinkPhysical
Source
HtHnHl MHtHn MHt M
M
Destination
HtHnHl MHtHn MHt M
M
HtHnHl M LinkPhysical
NetworkLinkPhysical
HtHnHl M
HtHnHl MHtHn M
HtHnHl MHtHn M
Link-layer switch
Router
MessageSegment
Frame
Cross-Layer Optimierung• Schichtentrennung wird aufgehoben• Steigerung der Effizienz
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)
Nächstes mal...