65
DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

Embed Size (px)

Citation preview

Page 1: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

DIY

Personal Fabrication

Drahtlose Kommunikation

Juergen Eckert – Informatik 7

Page 2: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

Fahrplan

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

Page 3: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 4: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 5: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 6: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)

Page 7: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 8: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 9: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 10: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 11: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 12: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 13: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 14: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 15: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 16: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 17: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 18: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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?

Page 19: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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“

Page 20: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 21: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 22: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 23: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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++

Page 24: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 25: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 26: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 27: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 28: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 29: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 30: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 31: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 32: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 33: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 34: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 35: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 36: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 37: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 38: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 39: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 40: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 41: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 42: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 43: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 44: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 45: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 46: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 47: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 48: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 49: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 50: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 51: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 52: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 53: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 54: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 55: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 56: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 57: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 58: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 59: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 60: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 61: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)/

Page 62: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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 !!

Page 63: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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

Page 64: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

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)

Page 65: DIY Personal Fabrication Drahtlose Kommunikation Juergen Eckert – Informatik 7

Nächstes mal...