14
CS 3830 Day 15 Introduction 1-1

CS 3830 Day 15 Introduction 1-1. Announcements r Quiz 3: Wednesday, Oct 10 r Prog3 due (in 1DropBox) on Wednesday, Oct 10 r Prog4: m Parts A and B m Work

Embed Size (px)

Citation preview

CS 3830

Day 15

Introduction 1-1

Announcements

Quiz 3: Wednesday, Oct 10 Prog3 due (in 1DropBox) on Wednesday,

Oct 10 Prog4:

Parts A and B Work in roups of two. Sign-up for groups IN CLASS by

Wednesday, Oct 10• If not, I will assign random groups!

Transport Layer 3-2

Transport Layer 3-3

Chapter 3 outline

3.1 Transport-layer services

3.2 Multiplexing and demultiplexing

3.3 Connectionless transport: UDP

3.4 Principles of reliable data transfer

3.5 Connection-oriented transport: TCP segment structure reliable data transfer flow control connection

management

3.6 Principles of congestion control

3.7 TCP congestion control

Transport Layer 3-4

Principles of Reliable data transfer important in app., transport, link layers top-10 list of important networking topics!

characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

Transport Layer 3-5

Principles of Reliable data transfer important in app., transport, link layers top-10 list of important networking topics!

characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

Transport Layer 3-6

Principles of Reliable data transfer important in app., transport, link layers top-10 list of important networking topics!

characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

Transport Layer 3-7

Reliable data transfer: getting started

sendside

receiveside

rdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper layer

udt_send(): called by rdt,to transfer packet over unreliable channel to

receiver

rdt_rcv(): called when packet arrives on rcv-side of channel

deliver_data(): called by rdt to deliver data to

upper

Transport Layer 3-8

Reliable data transfer: getting startedWe will: consider only unidirectional data transfer

but control info will flow on both directions!

assume data sent first are received first use finite state machines (FSM) to specify

sender, receiver

state1

state2

event causing state transitionactions taken on state transition

state: when in this “state” next state

uniquely determined by

next event

eventactions

Transport Layer 3-9

Rdt1.0: reliable transfer over a reliable channel

underlying channel perfectly reliable no bit errors no loss of packets

separate FSMs for sender, receiver: sender sends data into underlying channel receiver read data from underlying channel

Wait for call from above packet = make_pkt(data)

udt_send(packet)

rdt_send(data)

extract (packet,data)deliver_data(data)

Wait for call from

below

rdt_rcv(packet)

sender receiver

Reliable transfer over an unreliable channel Pkts may be corrupted or dropped! Solution:

Pkts should have sequence numbers Only two sequence numbers suffice: 0 and 1 Received pkts ACKed ACKs have sequence number of pkt being

ACKed Sender will have countdown timer

We will develop rdt3.0 from the book (see the book for intermediate rdt versions)

Transport Layer 3-10

Receiver

Always ACK last “good” pkt: If waiting for pkt0 and receive corrupt pkt, send ACK1 If waiting for pkt1 and receive corrupt pkt, send ACK0 If waiting for pkt0 and receive pkt0, send ACK0 If waiting for pkt0 and receive pkt1, send ACK1 If waiting for pkt1 and receive pkt0, send ACK0 If waiting for pkt1 and receive pkt1, send ACK1

Only 2 states needed!

Transport Layer 3-11

Transport Layer 3-12

rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq0(rcvpkt))

Wait for 1 from below

Wait for 0 from below

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)

extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)

rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt))

udt_send(sndpkt)

What if first pkt is corrupt?

rdt3.0 receiver

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt)

extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK0, chksum)udt_send(sndpkt)

udt_send(sndpkt)

Transport Layer 3-13

Must check if received ACK corrupt If waiting for ACK0 and receive corrupt pkt, re-send pkt0 If waiting for ACK1 and receive corrupt pkt, re-send pkt1

Duplicate ACK: resend current pkt If waiting for ACK0 and receive ACK0, send pkt1 If waiting for ACK0 and receive ACK1, re-send pkt0 If waiting for ACK1 and receive ACK0, re-send pkt1 If waiting for ACK1 and receive ACK1, send pkt0

ACK gets dropped: If waiting for ACK0 and receive no ACK, re-send pkt0 If waiting for ACK1 and receive no ACK, re-send pkt1

Handle re-sending of all pkts with countdown timer

Sender

Transport Layer 3-14

sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timer

rdt_send(data)

Wait for

ACK0

rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,1) )

Wait for call 1 from

above

sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timer

rdt_send(data)

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,0) )

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1)

stop_timerstop_timer

udt_send(sndpkt)start_timer

timeout

udt_send(sndpkt)start_timer

timeout

rdt_rcv(rcvpkt)

Wait for call 0from

above

Wait for

ACK1

rdt_rcv(rcvpkt)

rdt3.0 sender