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: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 universitet2005-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:
logicalcommunication between hosts
❒
transport layer:
logicalcommunication 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
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 P4host 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
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
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
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-33rdt2.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-35rdt2.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 Λ Λ
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) willsuffice. 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) Λ Λ Λ
Transport Layer 3-43
rdt3.0 in action
Transport Layer 3-44rdt3.0 in action
Transport Layer 3-45Performance 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 = 0sender 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 = 0sender 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!
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-51GBN: 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-53Selective 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
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 passesduplicate 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