• No results found

SIP: Session Initiation Protocol

N/A
N/A
Protected

Academic year: 2021

Share "SIP: Session Initiation Protocol"

Copied!
10
0
0

Loading.... (view fulltext now)

Full text

(1)

Transport Layer 3-1

SIP: Session Initiation Protocol

Comes from IETF (RFC 3261)

SIP long-term vision

All telephone calls and video conference

calls take place over the Internet

People are identified by names or e-mail

addresses, rather than by phone numbers.

You can reach the callee, no matter where

the callee roams, no matter what IP device

the callee is currently using.

Transport Layer 3-2

SIP services

Setting up a call

❍Provides mechanisms for caller to let callee know she wants to establish a call

❍Provides mechanisms so that caller and callee can agree on media type and encoding. ❍Provides mechanisms to end call. ❒Determine current IP address of callee. ❍Maps mnemonic identifier to current IP address ❒Call management

❍Add new media streams

during call

❍Change encoding during

call

❍Invite others

❍Transfer and hold calls

Transport Layer 3-3

SIP: Setting up a call to a known IP address

• Alice’s SIP invite message indicates her port number & IP address. Indicates encoding that Alice prefers to receive (PCM ulaw)

• Bob’s 200 OK message indicates his port number, IP address & preferred encoding (GSM) • SIP messages can be sent over TCP or UDP; here sent over RTP/UDP. •Default SIP port number is 5060. time time Bob's terminal rings Alice 167.180.112.24 Bob 193.64.210.89 port 5060 port 38060 µLaw audio GSM port 48753 INVITE [email protected] c=IN IP4 167.180.112.24 m=audio 38060 RTP/AVP 0 port 5060 200 OK c=IN IP4 193.64.210.89 m=audio 48753 RTP/AVP 3 ACK port 5060 Transport Layer 3-4

Example of SIP message

INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 167.180.112.24 From: sip:[email protected] To: sip:[email protected] Call-ID: [email protected] Content-Type: application/sdp Content-Length: 885 c=IN IP4 167.180.112.24 m=audio 38060 RTP/AVP 0 Notes: ❍HTTP message syntax

❍sdp = session description protocol

❍Call-ID is unique for every call.

•Here we don’t know

Bob’s IP address. Intermediate SIP servers will be necessary.

•Alice sends and

receives SIP messages using the SIP default port number 5060. • Alice specifies in Via: header that SIP client sends and receives SIP messages over UDP

Transport Layer 3-5

SIP: Name translation and user location

❒Caller wants to call

callee, but only has callee’s name or e-mail address.

❒Need to get IP

address of callee’s current host:

❍user moves around

❍DHCP protocol

❍user has different IP

devices (PC, PDA, car device)

❒Result can be based on:

❍time of day (work, home)

❍caller (don’t want boss to

call you at home)

❍status of callee (calls sent

to voicemail when callee is already talking to someone) Service provided by SIP servers:

❒SIP registrar server ❒SIP proxy server

Transport Layer 3-6

SIP registrar

REGISTER sip:domain.com SIP/2.0 Via: SIP/2.0/UDP 193.64.210.89 From: sip:[email protected] To: sip:[email protected] Expires: 3600

When Bob starts SIP client, client sends SIP

REGISTER message to Bob’s registrar server

(similar function needed by Instant

Messaging)

Register Message:
(2)

Transport Layer 3-7

SIP proxy

❒Alice sends invite message to her proxy server

❍contains address sip:[email protected]

❒Proxy responsible for routing SIP messages to

callee

❍possibly through multiple proxies.

❒Callee sends response back through the same set

of proxies.

❒Proxy returns SIP response message to Alice

❍contains Bob’s IP address

❒Note: proxy is analogous to local DNS server

Transport Layer 3-8

SIP proxy example

Caller [email protected] with places a call to [email protected] (1) Jim sends INVITE message to umass SIP proxy. (2) Proxy forwards request to upenn registrar server. (3) upenn server returns redirect response, indicating that it should try [email protected]

(4) umass proxy sends INVITE to eurecom registrar. (5) eurecom registrar forwards INVITE to 197.87.54.21, which is running Keith’s SIP client. (6-8) SIP response sent back (9) media sent directly

between clients.

Note:also a SIP ACK message, which is not shown.

SIP client 217.123.56.89 SIP client 197.87.54.21 SIP proxy umass.edu SIP registrar upenn.edu SIP registrar eurecom.fr 1 2 3 4 5 6 7 8 9 Transport Layer 3-9

TDTS41 Computer networks

Lecture 3: Transport layer I

Juha Takkinen, [email protected] IDA/ADIT/IISLAB, Linköpings universitet

2005-08-29

Slides are modified from J.F Kurose and K.W. Ross

Transport Layer 3-10

Lecture 3: Transport layer I

1 Transport-layer services

2 Multiplexing and demultiplexing

3 Connectionless transport: UDP

4 Principles of reliable data transfer

Transport Layer 3-11

Transport services and protocols

❒ providelogical communication

between app processes running on different hosts

❒ transport protocols run in

end-systems

❍sender-side: breaks app

messages into segments, passes to network layer

❍receiver-side:

reassembles segments into messages, passes to app layer

❒ more than one transport

protocol available to apps

❍Internet: TCP and UDP

application transport network data link physical application transport network data link physical network data link physical network data link physical network data link physical network data link physical network data link physical logica l end-e nd tran sport Transport Layer 3-12

Transport vs. network layer

network layer:

logical

communication between hosts

transport layer:

logical

communication between processes

❍relies on, enhances,

network layer services

Household analogy:

12 kids sending letters

to 12 kids

❒processes = kids ❒app messages = letters

in envelopes

❒hosts = houses ❒transport protocol =

Ann and Bill

❒network-layer protocol

(3)

Transport Layer 3-13

Internet transport-layer protocols

❒reliable, in-order delivery (TCP) ❍congestion control ❍flow control ❍connection setup ❒unreliable, unordered delivery: UDP ❍no-frills extension of “best-effort” IP

❒services not available:

❍delay guarantees ❍bandwidth guarantees application transport network data link physical application transport network data link physical network data link physical network data link physical network data link physical network data link physical network data link physical logica l end-e nd tran sport Transport Layer 3-14

Lecture 3: Transport layer I

1 Transport-layer services

2 Multiplexing and demultiplexing

3 Connectionless transport: UDP

4 Principles of reliable data transfer

Transport Layer 3-15

Multiplexing/demultiplexing

application transport network link physical P1 application transport network link physical application transport network link physical P2 P3 P1 P4

host 1 host 2 host 3

= process = socket

delivering received segments to correct socket

Demultiplexing at rcv host:

gathering data from multiple sockets, enveloping data with header (later used for demultiplexing)

Multiplexing at send host:

Transport Layer 3-16

How demultiplexing works

❒ host receives IP datagrams

❍each datagram has source

IP address & destination IP address

❍each datagram carries one

transport-layer segment

❍each segment has source &

destination port number (recall: well-known port numbers for specific applications)

❒ host uses IP addresses & port

numbers used to direct segment to appropriate socket

source port # dest. port # 32 bits

application data (message) other header fields

transport-level (TCP/UDP) segment format

Transport Layer 3-17

Connectionless demultiplexing

❒Create sockets with port

numbers:

DatagramSocket mySocket1 = new DatagramSocket(99111); DatagramSocket mySocket2 = new

DatagramSocket(99222);

❒UDP socket identified by

two-tuple:

(dest. IP address, dest. port number)

❒When host receives UDP

segment:

❍checks destination port

number in segment

❍directs UDP segment to

socket with that port number

❒IP datagrams with

different source IP addresses and/or source port numbers directed to same socket

Transport Layer 3-18

Connectionless demultiplexing, cont'd

DatagramSocket serverSocket = new DatagramSocket(6428);

client IP:B P2 client IP: A P1P1 P3 server IP: C SP: 6428DP: 9157 SP: 9157DP: 6428 SP: 6428DP: 5775 SP: 5775DP: 6428

(4)

Transport Layer 3-19

Connection-oriented demultiplexing

❒TCP socket identified

by 4-tuple:

❍source IP address

❍source port number

❍destination IP address

❍destination port number

❒receiver host uses all four values to direct segment to appropriate socket

❒Server host may support

many simultaneous TCP sockets:

❍each socket identified by

its own 4-tuple

❒Web servers have

different sockets for each connecting client

❍non-persistent HTTP will

have different socket for each request

Transport Layer 3-20

Connection-oriented demultiplexing, cont'd

client IP:B P1 client IP: A P1 P2 P 4 server IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P 5 6P P3 D-IP:C S-IP: A D-IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B Transport Layer 3-21

Connection-oriented demux:

Threaded Web Server

client IP:B P1 client IP: A P1 P2 server IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P4 P3 D-IP:C S-IP: A D-IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B Transport Layer 3-22

Lecture 3: Transport layer I

1 Transport-layer services

2 Multiplexing and demultiplexing

3 Connectionless transport: UDP

4 Principles of reliable data transfer

Transport Layer 3-23

UDP: User Datagram Protocol

[RFC 768]

❒ “bare bones” Internet

transport protocol

❒ “best-effort” service,

UDP segments may be:

❍lost

❍delivered out of

order to application

❒ connectionless:

❍no handshaking

between UDP sender, receiver

❍each UDP segment

handled independent-ly of others

source port # dest port # 32 bits

Application data (message) UDP segment format

length checksum Length, in bytes of UDP segment, including header Transport Layer 3-24

UDP checksum (Internet checksum)

Sender:

❒ treat segment contents as

sequence of 16-bit integers

❒ checksum: addition (using

one’s complement) of segment contents

❒ sender puts checksum

value into UDP checksum field

Receiver:

❒ compute checksum of

received segment

❒ check if computed checksum

equals checksum field value:

❍NO - error detected

❍YES - no error detected.

But there maybe errors nonetheless?

Goal: detect “errors” (e.g., flipped bits) in transmitted segment

(5)

Transport Layer 3-25

Internet Checksum Example

❒One's complement addition

❍When adding numbers, a carryout from the most significant bit needs to be added to the result

❒Example: add two 16-bit integers

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 wraparound sum checksum Transport Layer 3-26

Lecture 3: Transport layer I

1 Transport-layer services

2 Multiplexing and demultiplexing

3 Connectionless transport: UDP

4 Principles of reliable data transfer

Transport Layer 3-27

Principles of Reliable data transfer

❒ important in application, transport, and link layers

❒ top-10 list of important networking topics!

❒ characteristics of unreliable channel will determine

complexity of reliable data transfer (rdt) protocol

Transport Layer 3-28

Reliable data transfer: Getting started

send

side receiveside

rdt_send():called from above,

(e.g., by app.). Passes 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 rdtto deliver data to upper

Transport Layer 3-29

Reliable data transfer: Getting started, cont'd

We will:

❒incrementally develop sender & receiver sides

of a reliable data transfer protocol (rdt)

❒consider only unidirectional data transfer

❍but control info will flow in both directions!

❒use finite state machines (FSM) to specify

sender & receiver:

state

1 state2

event causing state transition actions taken on state transition state: when in this

“state”, next state is uniquely determined by next event event actions Transport Layer 3-30

Rdt1.0: Reliable transfer over a reliable channel

❒Assumptions: underlying channel is perfectly reliable

❍no bit errors

❍no loss of packets

❒Show separate FSMs for sender & receiver, respectively:

❍sender sends data into underlying channel

❍receiver reads 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

(6)

Transport Layer 3-31

Rdt2.0: Channel with bit errors

❒underlying channel may flip bits in packet

❍need checksum to detect bit errors

the

question: How to recover from errors:

❍acknowledgements (ACKs): receiver explicitly tells sender

that pkt was received OK

❍negative acknowledgements (NAKs): receiver explicitly

tells sender that received pkt had errors

❍sender retransmits pkt on receipt of NAK

❒new mechanisms in rdt2.0(beyond rdt1.0):

❍error detection

❍receiver feedback: control msgs (ACK, NAK) from

receiver to sender Transport Layer 3-32

rdt2.0: FSM specification

Wait for call from above snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below sender receiver rdt_send(data) Λ Transport Layer 3-33

rdt2.0: Operation with no errors

Wait for call from above snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below rdt_send(data) Λ Transport Layer 3-34

rdt2.0: Error scenario

Wait for call from above snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below rdt_send(data) Λ Transport Layer 3-35

rdt2.0 has a fatal flaw!

What happens if ACK/NAK corrupted?

❒ sender doesn’t know what

happened at receiver!

❒ can’t just retransmit:

possible duplicate

Handling duplicates:

❒ sender adds sequence

number to each pkt

❒ sender retransmits current

pkt if ACK/NAK garbled

❒ receiver discards (doesn’t

deliver up) duplicate pkt

Sender sends one packet, then waits for receiver response

stop-and-wait

Transport Layer 3-36

rdt2.1: Sender that handles garbled ACK/NAKs

Wait for call 0 from

above

sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) Wait for ACK or NAK 0 udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) )

sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) rdt_send(data) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) Wait for call 1 from above Wait for ACK or NAK 1 Λ Λ

(7)

Transport Layer 3-37

rdt2.1: Receiver that handles garbled ACK/NAKs

Wait for 0 from below sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Wait for 1 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) &&

not corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Transport Layer 3-38

rdt2.1: Discussion

Sender: ❒seq. # added to pkt ❒two seq. #s (0, 1) will

suffice. Why?

❒must check if received

ACK/NAK corrupted

❒twice as many states

❍state must “remember”

whether “current” pkt has seq. # 0 or 1

Receiver:

❒must check if received

packet is duplicate

❍state indicates whether

0 or 1 is expected seq. # of pkt

❒note: Receiver can not

know if its last ACK/NAK was received OK at sender

Transport Layer 3-39

rdt2.2: A NAK-free protocol

❒same functionality as rdt2.1, butusing ACKs only ❒instead of NAK, receiver sends ACK for last pkt

that was received OK

❍receiver must explicitly include seq. # of the pkt being

ACKed

❒duplicate ACK at sender results in same action as NAK: retransmit current pkt

Transport Layer 3-40

rdt2.2: Sender and receiver (fragments of FSM)

Wait for call 0 from

above

sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1)) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) Wait for ACK 0 sender FSM fragment 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) receiver FSM fragment Λ Transport Layer 3-41

rdt3.0: Channel with errors

and

loss

New assumption: underlying channel can also lose packets (data or ACKs)

❍checksum, seq. #, ACKs,

retransmissions will be of help, but not enough

Approach: sender waits “reasonable” amount of time for ACK

❒ retransmits if no ACK

received in this time

❒ if pkt (or ACK) just delayed

(not lost):

❍retransmission will be

duplicate, but use of seq. #s already handles this

❍receiver must specify the

seq. # of pkt being ACKed

❒ requires countdown timer

Transport Layer 3-42

rdt3.0 sender

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_timer stop_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) Λ Λ Λ

(8)

Transport Layer 3-43

rdt3.0 in action

Transport Layer 3-44

rdt3.0 in action

Transport Layer 3-45

Performance of rdt3.0

❒rdt3.0 works, but performance stinks

❒example: 1-Gbps link, 15 ms end-to-end prop. delay, 1-KB packet:

Ttransmit= 8kb/pkt

10**9 b/sec = 8 microsecs

❍U sender: utilization – fraction of time sender busy sending

❍1KB pkt every 30 msec -> 33 KB/sec throughput over 1-Gbps link ❍network protocol limits use of physical resources!

U sender = L / R 30.008 .008 = 0.00027

RTT + L / R =

L (packet length in bits)

R (transmission rate, bps) =

Transport Layer 3-46

rdt3.0: Stop-and-wait operation

first packet bit transmitted, t = 0

sender receiver

RTT last packet bit transmitted, t = L / R

first packet bit arrives last packet bit arrives, send ACK

ACK arrives, send next packet, t = RTT + L / R U sender = .008 30.008 = 0.00027 L / R RTT + L / R = Transport Layer 3-47

Pipelined protocols

Pipelining: sender allows multiple, “in-flight”, yet-to-be-acknowledged pkts

❍range of sequence numbers must be increased

❍buffering at sender and/or receiver

❒Two generic forms of pipelined protocols: go-back-N

and selective repeat

Transport Layer 3-48

Pipelining: Increased utilization

first packet bit transmitted, t = 0

sender receiver

RTT last bit transmitted, t = L / R

first packet bit arrives last packet bit arrives, send ACK

ACK arrives, send next packet, t = RTT + L / R

last bit of 2ndpacket arrives, send ACK last bit of 3rdpacket arrives, send ACK

U sender = .024 30.008 = 0.0008 3 * L / R RTT + L / R = Increase utilization by a factor of 3!

(9)

Transport Layer 3-49

Go-back-N

Sender:

❒ k-bit seq. # in pkt header

❒ “window” of up to N, consecutive unACKed pkts allowed

❒ ACK(n): ACKs all pkts up to, including seq. # n - “cumulative ACK”

❍may deceive duplicate ACKs (see receiver)

❒ timer for each in-flight pkt

❒ timeout(n): retransmit pkt n and all higher seq.-# pkts in window

Transport Layer 3-50

GBN: Sender (extended FSM)

Wait start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1]) timeout rdt_send(data) if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt) Λ Transport Layer 3-51

GBN: Receiver (extended FSM)

ACK-only: always send ACK for correctly-received pkt with highest in-orderseq. #

❍may generate duplicate ACKs

❍need only remember expectedseqnum

❒out-of-order pkt:

❍discard (don’t buffer) -> no receiver-buffering!

❍Re-ACK pkt with highest in-order seq. #

Wait udt_send(sndpkt) default rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ expectedseqnum=1 sndpkt = make_pkt(expectedseqnum,ACK,chksum) Λ Transport Layer 3-52

GBN in

action

Transport Layer 3-53

Selective repeat

❒receiver individuallyacknowledges all correctly received pkts

❍buffers pkts, as needed, for eventual in-order delivery

to upper layer

❒sender only resends pkts for which ACK not

received

❍sender timer for each unACKed pkt

❒sender window

❍N consecutive seq. #s

❍again limits seq. #s of sent & unACKed pkts

Transport Layer 3-54

(10)

Transport Layer 3-55

Selective repeat

data from above :

❒ if next available seq. # in

window, send pkt

timeout(n):

❒ resend pkt n, restart timer

ACK(n) in [sendbase,sendbase+N]:

❒ mark pkt n as received

❒ if n smallest unACKed pkt,

advance window base to next unACKed seq. #

sender

pkt n in [rcvbase, rcvbase+N-1]

❒ send ACK(n)

❒ out-of-order: buffer

❒ in-order: deliver (also

deliver buffered, in-order pkts), advance window to next not-yet received pkt

pkt n in [rcvbase-N,rcvbase-1] ❒ ACK(n) otherwise: ❒ ignore receiver Transport Layer 3-56

Selective repeat in action

Transport Layer 3-57

Selective repeat:

Dilemma

Example: ❒ seq. #s: 0, 1, 2, 3 ❒ window size=3 ❒ receiver sees no difference in two scenarios! ❒ incorrectly passes

duplicate data as new in (a)

Q: What relationship between seq. # size and window size?

Transport Layer 3-58

Sliding window: Sequence number space

❒ SeqNum field is finite; sequence numbers wrap around

❒ Sequence number space must be larger then number of

outstanding frames

❒ Sender-window size SWS <= MaxSeqNum-1 is not sufficient

suppose 3-bit SeqNum field (0 ... 7)

SWS = Receiver-window size RWS = 7

sender transmit frames 0 ... 6

arrive successfully, but ACKs lost

sender retransmits 0 ... 6

receiver expecting 7, 0 ... 5, but receives second incarnation of 0 ... 5

SWS < (MaxSeqNum+1)/2 is correct rule

❍Intuitively, SeqNum “slides” between two halves of

sequence number space

Transport Layer 3-59

Reliable delivery in ARPAnet: Concurrent logical

channels

Multiplex 8 logical channels over a single link

Run stop-and-wait on each logical channel

Maintain three state bits per channel

❍channel busy

❍current sequence number out ❍next sequence number in

Header: 3-bit channel # and 1-bit sequence #

❍4 bits in total

❍same as sliding window protocol

Separates reliability from order

❍no errors and no packet loss, but not in order

Transport Layer 3-60

Lecture 3: Summary

❒principles behind transport

layer services: ❍multiplexing,

demultiplexing ❍reliable data transfer

• TCP: in-order, no packet lost, and no errors ❍flow control Next: ❒instantiation and implementation in the Internet ❍(UDP) ❍TCP • congestion control • timer management

References

Related documents

Mobile devices in between video server first before the streaming protocol for the rtsp accomplishes on the command and gatherings live streaming protocols are loaded as the

NOW IS THE TIME FOR HEROES! MUTANTS & MASTERMINDS A G R E E N RONIN PRODUCTION Design & Development Steve Kenson Cover Art Ramón Pérez Editing Jon Leitheusser Executive Producer

ó9ê¶Ø/ô9Õ~Ú;çuցè9ÚÕAÙ%Ú;ïˆ×¼ê£ð~Ù%Øu鼨7ÕÇÖwêŸÚ åaååaååaååaåHååaåHååHåaååaååaååaåaå õ ä/å¬ò9å~ä

[r]

[r]

[r]

Ö %HÑ Ø ÓUÓ1ÜåÖlðÒç1ÖÝ1ÝLÜ éçoæ ç!ÑÓ1Ô Ó1éÐÖRÓ1ܹԂälÑ ç!ÐÜsî·éçfÑ ØóÑ

[r]