April 2, 2014 Anthony D. Joseph http://inst.eecs.berkeley.edu/~cs162 CS162 Operating Systems and Systems Programming Lecture 17 TCP, Flow Control, Reliability.

Slides:



Advertisements
Similar presentations
Introduction 1 Lecture 13 Transport Layer (Transmission Control Protocol) slides are modified from J. Kurose & K. Ross University of Nevada – Reno Computer.
Advertisements

End2End Design – The Internet Architecture David E. Culler CS162 – Operating Systems and Systems Programming Lecture 32.
Transport Layer 3-1 Fast Retransmit r time-out period often relatively long: m long delay before resending lost packet r detect lost segments via duplicate.
Transport Layer 3-1 Transport Layer r To learn about transport layer protocols in the Internet: m TCP: connection-oriented protocol m Reliability protocol.
CSE 461: Sliding Windows & ARQ. Next Topic  We begin on the Transport layer  Focus  How do we send information reliably?  Topics  The Transport layer.
Lecture 7 Transport Protocols: UDP, TCP
TCP. Learning objectives Reliable Transport in TCP TCP flow and Congestion Control.
3-1 Transport services and protocols r provide logical communication between app processes running on different hosts r transport protocols run in end.
Transport Layer TCP and UDP IS250 Spring 2010
What Can IP Do? Deliver datagrams to hosts – The IP address in a datagram header identify a host IP treats a computer as an endpoint of communication Best.
Process-to-Process Delivery:
IP and Errors IP Best Effort Datagrams can be: –Lost –Delayed –Duplicated –Delivered out of order –Corrupted.
TCOM 509 – Internet Protocols (TCP/IP) Lecture 04_b Transport Protocols - TCP Instructor: Dr. Li-Chuan Chen Date: 09/22/2003 Based in part upon slides.
TCP : Transmission Control Protocol Computer Network System Sirak Kaewjamnong.
TCP1 Transmission Control Protocol (TCP). TCP2 Outline Transmission Control Protocol.
1 Introduction to Computer Networks University of ilam Dr. Mozafar Bag-Mohammadi Transport Layer.
Lec 17. 4/2/14 Anthony D. Joseph CS162 ©UCB Spring 2014 CS162 S ECTION 8.
Transport Protocols.
CS162 Operating Systems and Systems Programming Lecture 15 Reliability, Transport Protocols March 16, 2011 Ion Stoica
CS162 Operating Systems and Systems Programming Lecture 17 TCP, Flow Control, Reliability April 3, 2013 Anthony D. Joseph
TCP Flow Control – an illustration of distributed system thinking David E. Culler CS162 – Operating Systems and Systems Programming
CSE/EE 461 Sliding Windows and ARQ. 2 Last Time We finished up the Network layer –Internetworks (IP) –Routing (DV/RIP, LS/OSPF) It was all about routing:
EE 122: Transport Protocols Kevin Lai October 16, 2002.
McGraw-Hill Chapter 23 Process-to-Process Delivery: UDP, TCP Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
1 End-to-End Protocols UDP TCP –Connection Establishment/Termination –Sliding Window Revisited –Flow Control –Congestion Control –Adaptive Timeout.
TCP/IP1 Address Resolution Protocol Internet uses IP address to recognize a computer. But IP address needs to be translated to physical address (NIC).
CS162 Operating Systems and Systems Programming Lecture 11 Reliability, Transport Protocols October 5, 2011 Anthony D. Joseph and Ion Stoica
Advanced Computer Networks
The Transport Layer Implementation Services Functions Protocols
Chapter 9: Transport Layer
09-Transport Layer: TCP Transport Layer.
DMET 602: Networks and Media Lab
Lecture (2).
Chapter 3 outline 3.1 Transport-layer services
Instructor Materials Chapter 9: Transport Layer
Introduction to Networks
Transport Control Protocol
5. End-to-end protocols (part 1)
TCP.
06- Transport Layer Transport Layer.
PART 5 Transport Layer Computer Networks.
TCP.
Introduction of Transport Protocols
Chapter 5 TCP Sliding Window
ECE 4450:427/527 - Computer Networks Spring 2017
Transport Layer Unit 5.
Transport Layer Our goals:
Anthony D. Joseph and Ion Stoica
Process-to-Process Delivery:
Transport Layer Our goals:
Anthony D. Joseph and John Canny
Transport Control Protocol
October 31, 2012 Ion Stoica CS162 Operating Systems and Systems Programming Lecture 18 TCP’s Flow Control, Transactions.
TCP Sliding Windows, Flow Control, and Congestion Control
Ilam University Dr. Mozafar Bag-Mohammadi
The Transport Layer De/Multiplexing, Reliability
The University of Adelaide, School of Computer Science
The Transport Layer Reliability
Introduction to Computer Networks
Introduction to Computer Networks
Anthony D. Joseph and Ion Stoica
Chapter 5 TCP Sliding Window
Introduction to Computer Networks
Transport Protocols: TCP Segments, Flow control and Connection Setup
Process-to-Process Delivery: UDP, TCP
TCP flow and congestion control
TCP Sliding Windows, Flow Control, and Congestion Control
Computer Networks Protocols
November 26th, 2018 Prof. Ion Stoica
TCP Sliding Windows, Flow Control, and Congestion Control
Presentation transcript:

April 2, 2014 Anthony D. Joseph http://inst.eecs.berkeley.edu/~cs162 CS162 Operating Systems and Systems Programming Lecture 17 TCP, Flow Control, Reliability April 2, 2014 Anthony D. Joseph http://inst.eecs.berkeley.edu/~cs162

Review: Internet Protocol (IP) Application Present. Session Transport Network Internet Protocol: Internet’s network layer Service it provides: “Best-Effort” Packet Delivery Tries it’s “best” to deliver packet to its destination Packets may be lost Packets may be corrupted Packets may be delivered out of order Datalink Physical source destination IP network

Review: Transport Layer (4) Application Review: Transport Layer (4) Present. Session Transport Service: Provide end-to-end communication between processes Demultiplexing of communication between hosts Possible other services: Reliability in the presence of errors Timing properties Rate adaption (flow-control, congestion control) Interface: send message to specific process at given destination; local process receives messages sent to it Protocol: port numbers, perhaps implement reliability, flow control, packetization of large messages, framing Examples: TCP and UDP Network Datalink Physical

Review: Internet Transport Protocols Application Review: Internet Transport Protocols Present. Session Transport Datagram service (UDP) No-frills extension of “best-effort” IP Multiplexing/Demultiplexing among processes Reliable, in-order delivery (TCP) Connection set-up & tear-down Discarding corrupted packets (segments) Retransmission of lost packets (segments) Flow control Congestion control Services not available Delay and/or bandwidth guarantees Sessions that survive change-of-IP-address Network Datalink Physical

Application Layer (7 - not 5!) Present. Session Transport Service: any service provided to the end user Interface: depends on the application Protocol: depends on the application Examples: Skype, SMTP (email), HTTP (Web), Halo, BitTorrent … What happened to layers 5 & 6? “Session” and “Presentation” layers Part of OSI architecture, but not Internet architecture Their functionality is provided by application layer Network Datalink Physical

Application Layer (5) Application Layer Transport Layer Data Application Layer Transport Layer Transport Layer Trans. Hdr. Data Trans. Hdr. Data Network Layer Network Layer Net. Hdr. Trans. Hdr. Data Net. Hdr. Trans. Hdr. Data Datalink Layer Datalink Layer Frame Hdr. Net. Hdr. Trans. Hdr. Data Frame Hdr. Net. Hdr. Trans. Hdr. Data Physical Layer Physical Layer 101010100110101110 101010100110101110

Five Layers Summary Lower three layers implemented everywhere Top two layers implemented only at hosts Logically, layers interacts with peer’s corresponding layer Application Transport Transport Network Network Network Datalink Datalink Datalink Physical Physical Physical Host A Router Host B

Physical Communication Communication goes down to physical network Then from network peer to peer Then up to relevant layer Application Transport Transport Network Network Network Datalink Datalink Datalink Physical Physical Physical Host A Router Host B

The Internet Hourglass SMTP HTTP DNS NTP Applications TCP UDP Transport Waist IP Data Link Ethernet SONET 802.11 Physical Copper Fiber Radio The Hourglass Model There is just one network-layer protocol, IP The “narrow waist” facilitates interoperability

Implications of Hourglass Single Internet-layer module (IP): Allows arbitrary networks to interoperate Any network technology that supports IP can exchange packets Allows applications to function on all networks Applications that can run on IP can use any network Supports simultaneous innovations above and below IP But changing IP itself, i.e., IPv6 is very complicated and slow

Drawbacks of Layering Layering can hurt performance E.g., hiding details about what is really going on Headers start to get really big Sometimes header bytes >> actual content Layer N may duplicate layer N-1 functionality E.g., error recovery to retransmit lost data Layers may need same information E.g., timestamps, maximum transmission unit size

Goals for Today Socket API TCP Open connection (3-way handshake) Reliable transfer Tear-down connection Flow control

Socket API Socket API: Network programming interface Application Transport TCP UDP Network IP

BSD Socket API Created at UC Berkeley (1980s) Most popular network API Ported to various OSes, various languages Windows Winsock, BSD, OS X, Linux, Solaris, … Socket modules in Java, Python, Perl, … Similar to Unix file I/O API In the form of file descriptor (sort of handle). Can share same read()/write()/close() system calls

TCP: Transport Control Protocol Reliable, in-order, and at most once delivery Stream oriented: messages can be of arbitrary length Provides multiplexing/demultiplexing to IP Provides congestion and flow control Application examples: file transfer, chat

TCP Service Open connection: 3-way handshaking Reliable byte stream transfer from (IPa, TCP_Port1) to (IPb, TCP_Port2) Indication if connection fails: Reset Close (tear-down) connection

Open Connection: 3-Way Handshaking Goal: agree on a set of parameters, i.e., the start sequence number for each side Starting sequence number: sequence of first byte in stream Starting sequence numbers are random

Open Connection: 3-Way Handshaking Server waits for new connection calling listen() Sender call connect() passing socket which contains server’s IP address and port number OS sends a special packet (SYN) containing a proposal for first sequence number, x Client (initiator) Server Active Open connect() listen() SYN, SeqNum = x Passive Open time

Open Connection: 3-Way Handshaking If it has enough resources, server calls accept() to accept connection, and sends back a SYN ACK packet containing Client’s sequence number incremented by one, (x + 1) Why is this needed? A sequence number proposal, y, for first byte server will send Client (initiator) Server Active Open listen() connect() SYN, SeqNum = x Passive Open accept() SYN and ACK, SeqNum = y and Ack = x + 1 time ACK, Ack = y + 1 allocate buffer space

3-Way Handshaking (cont’d) Three-way handshake adds 1 RTT delay Why? Congestion control: SYN (40 byte) acts as cheap probe Protects against delayed packets from other connection (would confuse receiver)

General’s Paradox General’s paradox: Constraints of problem: Two generals, on separate mountains Can only communicate via messengers Messengers can be captured Problem: need to coordinate attack If they attack at different times, they all die If they attack at same time, they win Named after Custer, who died at Little Big Horn because he arrived a couple of days too early Can messages over an unreliable network be used to guarantee two entities do something simultaneously? Remarkably, “no”, even if all messages get through No way to be sure last message gets through! 11 am ok? Yes, 11 works So, 11 it is? Yeah, but what if you Don’t get this ack?

Close Connection Goal: both sides agree to close the connection 4-way connection tear down Host 1 Host 2 close FIN FIN ACK data close FIN FIN ACK timeout closed closed Can retransmit FIN ACK if it is lost

2min Break

Reliable Transfer Retransmit missing packets Do this efficiently Numbering of packets and ACKs Do this efficiently Keep transmitting whenever possible Detect missing packets and retransmit quickly Two schemes Stop & Wait Sliding Window (Go-back-n and Selective Repeat)

Detecting Packet Loss? Timeouts Missing ACKs NACK: Negative ACK Sender timeouts on not receiving ACK Missing ACKs Receiver ACKs each packet Sender detects a missing packet when seeing a gap in the sequence of ACKs Need to be careful! Packets and ACKs might be reordered NACK: Negative ACK Receiver sends a NACK specifying a packet it is missing

Stop & Wait w/o Errors Send; wait for ack; repeat RTT: Round Trip Time (RTT): time it takes a packet to travel from sender to receiver and back One-way latency (d): one way delay from sender and receiver Sender Receiver 1 RTT d RTT = 2*d (if latency is symmetric) ACK 1 2 RTT ACK 2 3 Time

Stop & Wait w/o Errors How many packets can you send? 1 packet / RTT Throughput: number of bits delivered to receiver per sec Sender Receiver 1 RTT ACK 1 2 RTT ACK 2 3 Time

Stop & Wait w/o Errors Say, RTT = 100ms 1 packet = 1500 bytes Throughput = 1500*8bits/0.1s = 120 Kbps Sender Receiver 1 RTT ACK 1 2 RTT ACK 2 3 Time

Stop & Wait w/o Errors Can be highly inefficient for high capacity links Throughput doesn’t depend on the network capacity  even if capacity is 1Gbps, we can only send 120 Kbps! Sender Receiver 1 RTT ACK 1 2 RTT ACK 2 3 Time

Stop & Wait with Errors If a loss wait for a retransmission timeout and retransmit How do you pick the timeout? Sender Receiver 1 timeout RTT ACK 1 1 Time

Sliding Window window = set of adjacent sequence numbers The size of the set is the window size Assume window size is n Let A be the last ACK’d packet of sender without gap; then window of sender = {A+1, A+2, …, A+n} Sender can send packets in its window Let B be the last received packet without gap by receiver, then window of receiver = {B+1,…, B+n} Receiver can accept out of sequence, if in window

Sliding Window w/o Errors Throughput = W*packet_size/RTT Unacked packets in sender’s window Out-o-seq packets in receiver’s window Window size (W) = 3 packets 1 {1} 2 {1, 2} {} 3 {1, 2, 3} {} 4 {2, 3, 4} {} 5 {3, 4, 5} . 6 {4, 5, 6} . Time Sender Receiver

Example: Sliding Window w/o Errors Assume Link capacity, C = 1Gbps Latency between end-hosts, RTT = 80ms packet_length = 1000 bytes What is the window size W to match link’s capacity, C? Solution We want Throughput = C Throughput = W*packet_size/RTT C = W*packet_size/RTT W = C*RTT/packet_size = 109bps*80*10-3s/(8000b) = 104 packets Window size ~ Bandwidth (Capacity), delay (RTT/2)

Sliding Window with Errors Two approaches Go-Back-n (GBN) Selective Repeat (SR) In the absence of errors they behave identically Transmit up to n unacknowledged packets If timeout for ACK(k), retransmit k, k+1, … Typically uses NACKs instead of ACKs Recall, NACK specifies first in-sequence packet missed by receiver

GBN Example with Errors Out-o-seq packets in receiver’s window Window size (W) = 3 packets 1 2 3 4 5 {} 4 is missing Timeout Packet 4 6 {5} {5,6} NACK 4 NACK 4 4 5 6 {} Why doesn’t sender retransmit packet 4 here? Assume packet 4 lost! Sender Receiver

Selective Repeat (SR) Sender: transmit up to n unacknowledged packets Assume packet k is lost Receiver: indicate packet k is missing (use ACKs) Sender: retransmit packet k

SR Example with Errors Window size (W) = 3 packets {1} 1 {1, 2} 2 Unacked packets in sender’s window Window size (W) = 3 packets {1} 1 {1, 2} 2 {1, 2, 3} 3 {2, 3, 4} 4 {3, 4, 5} 5 6 {4, 5, 6} ACK 5 {4,5,6} 4 ACK 6 Time {7} 7 Sender Receiver

Summary TCP: Reliable Byte Stream Reliable transmission Open connection (3-way handshaking) Close connection: no perfect solution; no way for two parties to agree in the presence of arbitrary message losses (General’s Paradox) Reliable transmission S&W not efficient for links with large capacity (bandwidth) delay product Sliding window more efficient but more complex

2min Break

Flow Control Recall: Flow control ensures a fast sender does not overwhelm a slow receiver Example: Producer-consumer with bounded buffer (Lecture 5) A buffer between producer and consumer Producer puts items into buffer as long as buffer not full Consumer consumes items from buffer buffer Produ-cer Con-sumer

TCP Flow Control TCP: sliding window protocol at byte (not packet) level Go-back-N: TCP Tahoe, Reno, New Reno Selective Repeat (SR): TCP Sack Receiver tells sender how many more bytes it can receive without overflowing its buffer (i.e., AdvertisedWindow) The ACK contains sequence number N of next byte the receiver expects, i.e., receiver has received all bytes in sequence up to and including N-1

TCP Flow Control OS (TCP/IP) OS (TCP/IP) Sending Process Receiving Process OS (TCP/IP) OS (TCP/IP) TCP/IP implemented by OS (Kernel) Cannot do context switching on sending/receiving every packet At 1Gbps, it takes 12 usec to send an 1500 bytes, and 0.8usec to send an 100 byte packet Need buffers to match … sending app with sending TCP receiving TCP with receiving app

TCP Flow Control Three pairs of producer-consumer’s Sending Process Receiving Process TCP layer 1 3 TCP layer OS IP layer IP layer 2 Three pairs of producer-consumer’s sending process  sending TCP Sending TCP  receiving TCP receiving TCP  receiving process

TCP Flow Control Example assumptions: Sending Process Receiving Process TCP layer TCP layer 300 bytes OS IP layer IP layer Example assumptions: Maximum IP packet size = 100 bytes Size of the receiving buffer (MaxRcvBuf) = 300 bytes Recall, ack indicates the next expected byte in-sequence, not the last received byte Use circular buffers

Circular Buffer Assume A buffer of size N A stream of bytes, where bytes have increasing sequence numbers Think of stream as an unbounded array of bytes and of sequence number as indexes in this array Buffer stores at most N consecutive bytes from the stream Byte k stored at position (k mod N) + 1 in the buffer buffered data sequence # 27 28 29 30 31 32 33 34 35 36 H E L L O W O R L (35 mod 10) + 1 = 6 (28 mod 10) + 1 = 9 Circular buffer (N = 10) L O R W E E 1 2 3 4 5 6 7 8 9 10 start end

TCP Flow Control LastByteWritten: last byte written by sending process Receiving Process LastByteWritten(0) LastByteRead(0) LastByteAcked(0) LastByteSent(0) LastByteRcvd(0) NextByteExpected(1) LastByteWritten: last byte written by sending process LastByteSent: last byte sent by sender to receiver LastByteAcked: last ack received by sender from receiver LastByteRcvd: last byte received by receiver from sender NextByteExpected: last in-sequence byte expected by receiver LastByteRead: last byte read by the receiving process

TCP Flow Control LastByteAcked Sending Process LastByteWritten LastByteSent Receiving Process LastByteRead MaxSendBuffer MaxRcvBuffer NextByteExpected LastByteRcvd AdvertisedWindow: number of bytes TCP receiver can receive SenderWindow: number of bytes TCP sender can send AdvertisedWindow = MaxRcvBuffer – (LastByteRcvd – LastByteRead) SenderWindow = AdvertisedWindow – (LastByteSent – LastByteAcked)

TCP Flow Control Still true if receiver missed data…. LastByteAcked Sending Process LastByteWritten LastByteSent Receiving Process LastByteRead MaxSendBuffer MaxRcvBuffer NextByteExpected LastByteRcvd Still true if receiver missed data…. WriteWindow: number of bytes sending process can write AdvertisedWindow = MaxRcvBuffer – (LastByteRcvd – LastByteRead) WriteWindow = MaxSendBuffer – (LastByteWritten – LastByteAcked)

TCP Flow Control Sending app sends 350 bytes Recall: Sending Process Receiving Process LastByteWritten(350) LastByteRead(0) 1, 350 LastByteAcked(0) LastByteSent(0) LastByteRcvd(0) NextByteExpected(1) Sending app sends 350 bytes Recall: We assume IP only accepts packets no larger than 100 bytes MaxRcvBuf = 300 bytes, so initial Advertised Window = 300 byets

TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(0) 1, 350 1, 100 101, 350 1, 100 LastByteSent(100) NextByteExpected(101) LastByteRcvd(100) LastByteAcked(0) Data[1,100] {[1,100]} Sender sends first packet (i.e., first 100 bytes) and receiver gets the packet time

Receiver sends ack for 1st packet TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(0) 1, 100 1, 350 101, 350 1, 100 LastByteSent(100) NextByteExpected(101) LastByteRcvd(100) LastByteAcked(0) Data[1,100] {[1,100]} Ack=101, AdvWin = 200 Receiver sends ack for 1st packet AdvWin = MaxRcvBuffer – (LastByteRcvd – LastByteRead) = 300 – (100 – 0) = 200

TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(0) 1, 100 101, 200 101, 350 201, 350 1, 100 101, 200 LastByteSent(200) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(0) Data[1,100] {[1,100]} Data[101,200] {[1,200]} Ack=101, AdvWin = 200 Sender sends 2nd packet (i.e., next 100 bytes) and receiver gets the packet

TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(0) 1, 200 101, 350 201, 350 1, 200 LastByteSent(200) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(0) Data[1,100] {[1,100]} Data[101,200] {[1,200]} Ack=101, AdvWin = 200 Sender sends 2nd packet (i.e., next 100 bytes) and receiver gets the packet

Receiving TCP delivers first 100 bytes to receiving process TCP Flow Control Sending Process Receiving Process 1, 100 LastByteWritten(350) LastByteRead(100) 1, 200 101, 350 201, 350 101, 200 LastByteSent(200) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(0) Data[1,100] {[1,100]} Data[101,200] {[1,200]} Ack=101, AdvWin = 200 Receiving TCP delivers first 100 bytes to receiving process

Receiver sends ack for 2nd packet TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 1, 200 101, 350 201, 350 101, 200 LastByteSent(200) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(0) Data[1,100] {[1,100]} Data[101,200] {[1,200]} Ack=101, AdvWin = 200 Ack=201, AdvWin = 200 Receiver sends ack for 2nd packet AdvWin = MaxRcvBuffer – (LastByteRcvd – LastByteRead) = 300 – (200 – 100) = 200

Sender sends 3rd packet (i.e., next 100 bytes) and the packet is lost TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 1, 200 101, 350 201, 300 201, 350 301, 350 101, 200 LastByteSent(300) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(0) Data[1,100] {[1,100]} Data[101,200] {[1,200]} {[1,300]} Data[201,300] Sender sends 3rd packet (i.e., next 100 bytes) and the packet is lost

SndWin = AdvWin – (LastByteSent – LastByteAcked) TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 1,300 101, 350 201, 350 301, 350 101, 200 LastByteSent(300) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(0) Data[1,100] {[1,100]} Data[101,200] {[1,200]} {[1,300]} Data[201,300] Sender stops sending as window full SndWin = AdvWin – (LastByteSent – LastByteAcked) = 300 – (300 – 0) = 0

TCP Flow Control Sender gets ack for 1st packet AdWin = 200 {[1,100]} Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 1,300 101, 350 201, 350 301, 350 101, 200 LastByteSent(300) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(0) Data[1,100] {[1,100]} Data[101,200] {[1,200]} Ack=101, AdvWin = 200 {[1,300]} Data[201,300] Sender gets ack for 1st packet AdWin = 200

TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 101,300 101, 350 201, 350 301, 350 101, 200 LastByteSent(300) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(100) Data[1,100] {[1,100]} Data[101,200] {[1,200]} Ack=101, AdvWin = 200 {101, 300} {[1,300]} Data[201,300] Ack for 1st packet (ack indicates next byte expected by receiver) Receiver no longer needs first 100 bytes

SndWin = AdvWin – (LastByteSent – LastByteAcked) TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 101,300 101, 350 201, 350 301, 350 101, 200 LastByteSent(300) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(100) Data[1,100] {[1,100]} Data[101,200] {[1,200]} Ack=101, AdvWin = 200 {101, 300} {[1,300]} Data[201,300] Sender still cannot send as window full SndWin = AdvWin – (LastByteSent – LastByteAcked) = 200 – (300 – 100) = 0

TCP Flow Control Sender gets ack for 2nd packet AdvWin = 200 bytes Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 101,300 101, 350 201, 350 301, 350 101, 200 LastByteSent(300) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(100) Data[1,100] {[1,100]} Data[101,200] {[1,200]} {[101,200]} {101, 300} {[1,300]} Data[201,300] Ack=201, AdvWin = 200 {201, 300} Sender gets ack for 2nd packet AdvWin = 200 bytes

SndWin = AdvWin – (LastByteSent – LastByteAcked) = 100 TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 201,300 101, 350 201, 350 301, 350 101, 200 LastByteSent(300) NextByteExpected(201) LastByteRcvd(200) LastByteAcked(200) Data[1,100] {[1,100]} Data[101,200] {[1,200]} {[101,200]} {101, 300} {[1,300]} Data[201,300] Ack=201, AdvWin = 200 {201, 300} Sender can now send new data! SndWin = AdvWin – (LastByteSent – LastByteAcked) = 100

TCP Flow Control {[1,100]} Data[1,100] {[1,200]} Data[101,200] Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 201,300 101, 350 201, 350 301,350 301, 350 101, 200 301, 350 LastByteSent(350) NextByteExpected(201) LastByteRcvd(350) LastByteAcked(200) Data[1,100] {[1,100]} Data[101,200] {[1,200]} {[101,200]} {101, 300} {[1,300]} Data[201,300] Data[301,350] {[201,350]} {[101,200],[301,350]}

TCP Flow Control {[1,100]} Data[1,100] {[1,200]} Data[101,200] Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 101, 350 201,300 201, 350 301,350 301, 350 101, 200 301, 350 LastByteSent(350) NextByteExpected(201) LastByteRcvd(350) LastByteAcked(200) Data[1,100] {[1,100]} Data[101,200] {[1,200]} {[101,200]} {101, 300} {[1,300]} Data[201,300] Data[301,350] {[201,350]} {[101,200],[301,350]} Ack=201, AdvWin = 50 {201, 350}

TCP Flow Control Ack still specifies 201 (first byte out of sequence) Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 201,300 101, 350 201, 350 301,350 301, 350 101, 200 301, 350 LastByteSent(350) NextByteExpected(201) LastByteRcvd(350) LastByteAcked(200) Data[301,350] {[201,350]} {[101,200],[301,350]} Ack=201, AdvWin = 50 {201, 350} Ack still specifies 201 (first byte out of sequence) AdvWin = 50, so can sender re-send 3rd packet?

TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 101, 350 201,300 201, 350 301,350 301, 350 101, 200 201, 300 301, 350 LastByteSent(350) NextByteExpected(351) LastByteAcked(200) LastByteRcvd(350) Data[301,350] {[201,350]} {[101,200],[301,350]} Ack=201, AdvWin = 50 {201, 350} Data[201,300] {[201,350]} {[101,350]} Yes! Sender can re-send 3rd packet since it’s in existing window – won’t cause receiver window to grow

TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 201,300 101, 350 201, 350 301,350 301, 350 101, 350 LastByteSent(350) NextByteExpected(351) LastByteAcked(200) LastByteRcvd(350) Data[301,350] {[201,350]} {[101,200],[301,350]} Ack=201, AdvWin = 50 {201, 350} Data[201,300] {[201,350]} {[101,350]} Yes! Sender can re-send 3rd packet since it’s in existing window – won’t cause receiver window to grow

TCP Flow Control Sender gets 3rd packet and sends Ack for 351 Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 201,300 301,350 101, 350 LastByteSent(350) NextByteExpected(351) LastByteAcked(200) LastByteRcvd(350) Data[301,350] {[201,350]} {[101,200],[301,350]} Ack=201, AdvWin = 50 {201, 350} Data[201,300] {[201,350]} {[101,350]} Ack=351, AdvWin = 50 {} Sender gets 3rd packet and sends Ack for 351 AdvWin = 50

Sender DONE with sending all bytes! TCP Flow Control Sending Process Receiving Process LastByteWritten(350) LastByteRead(100) 101, 350 LastByteSent(350) NextByteExpected(351) LastByteAcked(350) LastByteRcvd(350) Data[301,350] {[201,350]} {[101,200],[301,350]} Ack=201, AdvWin = 50 {201, 350} Data[201,300] {[201,350]} {[101,350]} Ack=351, AdvWin = 50 {} Sender DONE with sending all bytes!

Discussion Why not have a huge buffer at the receiver (memory is cheap!)? Sending window (SndWnd) also depends on network congestion Congestion control: ensure that a fast sender doesn’t overwhelm a router in the network (discussed in detail in EE122) In practice there is another set of buffers in the protocol stack, at the link layer (i.e., Network Interface Card)

Summary: Reliability & Flow Control Flow control: three pairs of producer consumers Sending process  sending TCP Sending TCP  receiving TCP Receiving TCP  receiving process AdvertisedWindow: tells sender how much new data the receiver can buffer SenderWindow: specifies how many more bytes the sending application can send to the sending OS Depends on AdvertisedWindow and on data sent since sender received AdvertisedWindow

Summary: Networking (Internet Layering) Any distributed protocol (e.g., HTTP, Skype, p2p, KV protocol in your project) ApplicationLayer Data Send segments to another process running on same or different node Transport Layer Data Trans. Hdr. Send packets to another node possibly located in a different network Network Layer Data Net. Hdr. Trans. Hdr. Send frames to other node directly connected to same physical network Datalink Layer Data Frame Hdr. Net. Hdr. Trans. Hdr. Send bits to other node directly connected to same physical network Physical Layer 101010100110101110