* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Chapter 3 Lecture Slides
Asynchronous Transfer Mode wikipedia , lookup
Wake-on-LAN wikipedia , lookup
Serial digital interface wikipedia , lookup
Cracking of wireless networks wikipedia , lookup
Recursive InterNetwork Architecture (RINA) wikipedia , lookup
Internet protocol suite wikipedia , lookup
Deep packet inspection wikipedia , lookup
ECE/CS 372 – introduction to computer networks Lecture 5 Announcements:  Assign 1 is due today Credit for lecture slides to Professor Bechir Hamdaoui Adapted from Jim Kurose & Keith Ross (original copyright) Chapter 3, slide: 1 Chapter 3: Transport Layer Our goals:  understand principles behind transport layer services: reliable data transfer  flow control  congestion control   learn about transport layer protocols in the Internet: UDP: connectionless transport  TCP: connectionoriented transport  TCP congestion control  Chapter 3, slide: 2 Transport services and protocols  provide logical communication between app processes running on different hosts  transport protocols run in end systems  send side: breaks app messages into segments, passes to network layer  rcv 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 Chapter 3, slide: 3 What transport service does an app need? Data loss/reliability  some apps (e.g., audio) can tolerate some loss  other apps (e.g., file transfer, telnet) require 100% reliable data transfer Timing  some apps (e.g., Internet telephony, interactive games) require low delay to be “effective” Bandwidth  some apps (e.g., multimedia) require minimum amount of bandwidth to be “effective”  other apps (“elastic apps”) make use of whatever bandwidth they get Security  Privacy, authentication, integrity Chapter 3, slide: 4 Transport service requirements of common apps Application file transfer e-mail Web documents real-time audio/video Data loss Bandwidth Time Sensitive no loss no loss no loss loss-tolerant elastic elastic elastic audio: 5kbps-1Mbps video:10kbps-5Mbps same as above few kbps up elastic no no no yes, 100’s msec (telephone, video conf.) stored audio/video interactive games instant messaging loss-tolerant loss-tolerant no loss yes, few secs yes, 100’s msec yes and no Chapter 3, slide: 5 Internet transport-layer protocols  TCP: reliable, in-order delivery    congestion control flow control connection setup  UDP: unreliable, unordered delivery  extension of “besteffort” IP application transport network data link physical network data link physical network data link physical network data link physicalnetwork network data link physical data link physical network data link physical application transport network data link physical Chapter 3, slide: 6 What services do Internet transport protocols provide? TCP service:  connection-oriented: setup     required between client and server processes reliable transport between sending and receiving process flow control: sender won’t overwhelm receiver congestion control: throttle sender when network overloaded does not provide: timing, minimum bandwidth guarantees UDP service:  unreliable data transfer between sending and receiving process  does not provide: connection setup, reliability, flow control, congestion control, timing, or bandwidth guarantee Q: why bother? Why is there a UDP? Chapter 3, slide: 7 UDP: User Datagram Protocol [RFC 768]  “best effort” service, UDP segments may be:  lost  delivered out of order to app  connectionless:  no handshaking between UDP sender, receiver  each UDP segment handled independently of others Why is there a UDP?  less delay: no connection establishment (which can add delay)  simple: no connection state at sender, receiver  less traffic: small segment header  no congestion control: UDP can blast away as fast as desired Chapter 3, slide: 8 Transport vs. network layer  network layer: logical communication between hosts  transport layer: logical communication between processes Household case:  12 kids (East coast house) sending letters to 12 kids (West coast house)  Ann is responsible for the house at East coast  Bill is responsible for the house at West coast  Postal service is responsible for between houses Household analogy:  kids = processes/apps  letters = messages  houses = hosts  home address = IP address  kid names = port numbers  Ann and Bill = transport protocol  postal service = networklayer protocol Chapter 3, slide: 9 Chapter 3 outline  Principles of reliable data transfer  Connection-oriented  Principles of congestion control  TCP congestion control transport: TCP Chapter 3, slide: 10 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) Chapter 3, slide: 11 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) Chapter 3, slide: 12 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) Chapter 3, slide: 13 Reliable data transfer: getting started rdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper layer send side udt_send(): called by rdt, to transfer packet over unreliable channel to receiver deliver_data(): called by rdt to deliver data to upper receive side rdt_rcv(): called when packet arrives on rcv-side of channel Chapter 3, slide: 14 Reliable data transfer: getting started We will:  incrementally develop sender, receiver sides of reliable data transfer protocol (rdt)  consider only unidirectional data transfer  use finite state machines (FSM) to specify sender, receiver event causing state transition actions taken on state transition state: when in this “state” next state uniquely determined by next event state 1 event actions state 2 Chapter 3, slide: 15 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 rdt_send(data) packet = make_pkt(data) udt_send(packet) sender Wait for call from below rdt_rcv(packet) extract (packet,data) deliver_data(data) receiver Chapter 3, slide: 16 rdt2.0: channel with bit errors  underlying channel may flip bits in packet  Receiver can detect bit errors (e.g., use error detection)  But still no packet loss  questions: (1) how does sender know there is an error, and (2) what does it do when there is an error:  acknowledgements: • positive ack (ACK): receiver tells sender that pkt received OK • negative ack (NAK): receiver tells sender that pkt had erros  retransmission: sender retransmits pkt on receipt of NAK  new mechanisms in rdt2.0 (beyond rdt1.0):    error detection receiver feedback: control msgs (ACK,NAK) rcvr->sender assume ACK/NAK are error free Chapter 3, slide: 17 rdt2.0: operation with no errors rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && isACK(rcvpkt) L sender receiver rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Chapter 3, slide: 19 rdt2.0: error scenario rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && isACK(rcvpkt) L sender receiver rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Chapter 3, slide: 20 rdt2.0 has a fatal flaw! What happens if ACK/NAK is corrupted? That is, sender receives garbled ACK/NAK  sender doesn’t know what happened at receiver!  can’t sender just retransmit?   Sure: sender retransmits current pkt if ACK/NAK garbled Any problem with this ?? Problem: duplicate Receiver doesn’t know whether received pkt is a retransmit or a new pkt Handling duplicates:  sender adds sequence number to each pkt  receiver discards (doesn’t deliver up) duplicate pkt stop and wait Sender sends one packet, then waits for receiver response Chapter 3, slide: 21 rdt2.1: sender, handles garbled ACK/NAKs rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || Wait for Wait for isNAK(rcvpkt) ) ACK or call 0 from udt_send(sndpkt) NAK 0 above rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) udt_send(sndpkt) L Wait for ACK or NAK 1 Wait for call 1 from above rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Chapter 3, slide: 22 rdt2.1: receiver, handles garbled ACK/NAKs rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Chapter 3, slide: 23 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 0 or 1 seq. # Receiver:  must check if received packet is duplicate  state indicates whether 0 or 1 is expected pkt seq #  note: receiver can not know if its last ACK/NAK received OK at sender Chapter 3, slide: 24 rdt2.2: a NAK-free protocol  do we really need NAKs??  instead of NAK, receiver sends ACK for last pkt received OK  receiver must explicitly include seq # of pkt being ACKed  duplicate ACK at sender results in same action as NAK: retransmit current pkt  rdt2.2: same functionality as rdt2.1, using ACKs only Chapter 3, slide: 25 rdt3.0: channels with errors and loss New assumption: packet may be lost: underlying channel can also lose packets (data or ACKs)  checksum, seq. #, ACKs, retransmissions will be of help, but not enough  What else is needed? Approach: timeout policy:  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 seq # of pkt being ACKed  requires countdown timer Chapter 3, slide: 26 rdt3.0 in action (still stop-n-wait w/ (0,1) sn) Chapter 3, slide: 27 rdt3.0 in action (still stop-n-wait w/ (0,1) sn) Chapter 3, slide: 28 Performance of rdt3.0: stop-n-wait  rdt3.0 works, but performance stinks  example: R=1 Gbps, RTT=30 ms, L=1000Byte packet: sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R RTT first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R Ttransmit = L (packet length in bits) 8.103 b/pkt = R (transmission rate, bps) 109 b/sec = 8 microsec Chapter 3, slide: 29 Performance of rdt3.0: stop-n-wait  rdt3.0 works, but performance stinks  example: R=1 Gbps, RTT=30 ms, L=1000Byte packet: sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R first packet bit arrives last packet bit arrives, send ACK RTT ACK arrives, send next packet, t = RTT + L / R  U sender: utilization – fraction of time sender busy sending U sender = L/R RTT + L / R = .008 30.008 = 0.00027 microsec Chapter 3, slide: 30 onds Performance of rdt3.0: stop-n-wait  rdt3.0 works, but performance stinks  example: R=1 Gbps, RTT=30 ms, L=1000Byte packet: sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R RTT first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R   1KB pkt every 30 msec -> 33kB/sec thruput over 1 Gbps link network protocol limits use of physical resources! Chapter 3, slide: 31 Pipelining: increased utilization sender receiver first packet bit transmitted, t = 0 last bit transmitted, t = L / R first packet bit arrives last packet bit arrives, send ACK last bit of 2nd packet arrives, send ACK last bit of 3rd packet arrives, send ACK RTT ACK arrives, send next packet, t = RTT + L / R Increase utilization by a factor of 3! U sender = 3*L/R RTT + L / R = .024 30.008 = 0.0008 microsecon ds Question: What is the link utilization Usender Chapter 3, slide: 32 Pipelined protocols Pipelining: sender allows multiple, “in-flight”, yet-to-be-ACK’ed pkts  What about the range of sequence numbers then??  What about buffering at receiver?? Chapter 3, slide: 33 ECE/CS 372 – introduction to computer networks Lecture 6 Announcements:  Assignment 1 Solutions Posted Credit for lecture slides to Professor Bechir Hamdaoui Adapted from Jim Kurose & Keith Ross (original copyright) Chapter 3, slide: 34 So far: rdt3.0  Acknowledgment and retransmission  Reliable delivery  Sequence numbers  Duplication detection  Timeout and retransmit  Deal with packet losses  Stop-n-wait  one packet at a time  Problem: efficiency Chapter 3, slide: 35 Performance of rdt3.0: stop-n-wait  rdt3.0 works, but performance is terribad  example: R=1 Gbps, RTT=30 ms, L=1000Byte packet: sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R first packet bit arrives last packet bit arrives, send ACK RTT ACK arrives, send next packet, t = RTT + L / R  U sender: utilization – fraction of time sender busy sending U sender = L/R RTT + L / R = .008 30.008 = 0.00027 microsec Chapter 3, slide: 36 onds Performance of rdt3.0: stop-n-wait  rdt3.0 works, but performance stinks  example: R=1 Gbps, RTT=30 ms, L=1000Byte packet: sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R RTT first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R   1KB pkt every 30 msec -> 33kB/sec thruput over 1 Gbps link network protocol limits use of physical resources! Chapter 3, slide: 37 Pipelined protocols Pipelining: sender allows multiple, “in-flight”, yet-to-be-ACK’ed pkts  What about the range of sequence numbers then??  What about buffering at receiver??  Two generic forms of pipelined protocols: go-Back-N and selective repeat Chapter 3, slide: 38 Go-Back-N Sender side  ‘N’ (or W) packets can be sent w/o being ACK’ed  Fills “sliding window”  Single timer: oldest non-ACK’ed packet  At timeout(n), retransmit packet n and all successive packets in window Receiver side  Cumulative ACK  Discard out-of-order packets, no buffering Chapter 3, slide: 39 Selective Repeat Sender side  ‘N’ (or W) packets can be sent w/o being ACK’ed,  Fills “sliding window”  ‘N’ (or W) timers: every packet in window  At timeout(n), retransmit packet n  ACK for bottom of window? Advance window to the next unACK’ed packet Receiver side  Selective ACK  ACK and Buffer out-of-order segments (if in window)  Discard out-of-order packets (if ahead of window)  ACK and Discard out-of-order packets (if behind window)  In-order packet? ACK and deliver, then deliver all sequential buffered packets and advance window! Chapter 3, slide: 40 Selective repeat in action GBN? GBN? GBN? Chapter 3, slide: 41 GBN/SR comparison Go-Back-N Selective Repeat  Sliding window  Sliding window     W packets in the pipe Cumulative ACK Single timer (oldest unACK’ed packet) Discard out-of-order packets Retransmit all successive packets at timeout     W packets in the pipe Selective ACK One timer for each packet Buffer out-of-order packets (within window) Retransmit only lost or delayed packet at timeout Chapter 3, slide: 42 Selective repeat: dilemma Example:  Seq #’s: 0, 1, 2, 3  Window Size = 3  Receiver sees no difference in two scenarios! Even though,  (a) is a retransmitted packet  (b) is a new packet  in (a), receiver incorrectly passes old data as new Q: What relationship between sequence # size and window size to avoid duplication problem?? Chapter 3, slide: 43 Duplication problem: illustration  Let’s assume window size W = 2 for illustration  Consider a scenario where: Only ACK 1 is lost  Next, assume the Sequence Number (SN) space n = W = 2 That is, SN pattern is 0,1,0,1,0,1,… Chapter 3, slide: 44 Duplication problem: illustration Scenario: n=W=2; only ACK 1 is lost Receiver thinks of retransmission of 2nd Packet (Pkt1, SN=1) as a 4th/new Pkt (Pkt3,SN=1)  Duplication detection problem! Chapter 3, slide: 45 Duplication problem: illustration Recap:  When window size (W) = Sequence Number space (n),  there is a duplication problem  receiver can’t tell a new transmission from a retransmission of a lost packet  Let’s now see what happens if we increase n by 1: Now n=3 and SN pattern is: 0,1,2,0,1,2,0…  Let’s revisit the scenario again Chapter 3, slide: 46 Duplication problem: illustration Scenario: n=3;W=2; ACK 1 is lost Receiver still thinks of retransmission of 2nd Packet (Pkt1,SN=1) as a new Pkt (Pkt3,SN=1)  Increasing n by 1 didn’t solve the duplication detection problem this time!! Chapter 3, slide: 47 Duplication problem: illustration Recap:  Increasing SN space n from 2 to 3 didn’t solve the duplication problem yet!  Let’s now see what happens if we again increase n by 1: Now n=4 and SN pattern is: 0,1,2,3,0,1,2,3,0…  Let’s revisit the scenario with n=4 and see Chapter 3, slide: 48 Duplication problem: illustration Scenario: n=4;W=2; ACK 1 is lost Receiver now drops this retransmission of 2nd Packet (Pkt1, SN=1) since its SN falls outside the window  Duplication detection problem is now solved when n=2W=4 Chapter 3, slide: 49 Duplication problem: illustration Recap:  Increasing SN space n from 2 to 4 did solve the duplication problem  That is, when SN space = twice window size (n = 2W) the duplication problem was solved  Hence, in this case: when W ≤ n/2, the problem is solved  Can we generalize? Yes, W ≤ n/2 must hold in order to avoid duplication problem Chapter 3, slide: 50 Sequence Number space n & window size W relationship: general case seqNbr space n-1  Sender:  Suppose ½ n < W < n  W segments with SN in [0, W-1] are sent, but their ACKs are not received yet 0 1 W-1 w pkts already sent, but ACKs not received yet = sender’s sliding window Sequence Number space n & window size W relationship: general case  Receiver: Now assume:    seqNbr expected by receiver receiver received all W segments (SN in [0,W-1]) n-1 0 1 receiver sent all W ACKs, one for each received segment receiver slides its window: Sliding window (SN of expected segments) from: W to x = 2W-n-1 x=2W-n-1 W Hint: (n-1-W+1) + (x-0+1)=W  x=2W–n-1 Chapter 3, slide: 52 Sequence Number space n & window size W relationship: general case  Consider worst case scenario: all W ACKs are lost  Sender will re-transmit all the first W SN expected by receiver n-1 segments; i.e., with SN in [0,W-1] SN overlap 0  But receiver is expecting segments with SN in [W,n-1] U [0,2W-n-1]  Retransmissions with SN falling within [0,2W-n-1] will then be interpreted by receiver as new transmissions ( dup problem) To avoid dup problem, we must then have: 2W-n-1 ≤ -1  W ≤ ½ n x=2W-n-1 W SN retransmitted by sender ECE/CS 372 – introduction to computer networks Lecture 7 Announcements:  Assignment 2 and Lab 2 are posted Credit for lecture slides to Professor Bechir Hamdaoui Adapted from Jim Kurose & Keith Ross (original copyright) Chapter 3, slide: 54 Chapter 3 outline  Principles of reliable data transfer  Connection-oriented  Principles of congestion control  TCP congestion control transport: TCP Chapter 3, slide: 55 TCP Round Trip Time (RTT) and Timeout Why need to estimate RTT?  “timeout” and “retransmit” needed to address packet loss  need to know when to timeout and retransmit Ideal world:  exact RTT is needed Real world:  RTTs change over time:   Some intuition  What happens if too short?  Premature timeout  Unnecessary retransmissions  What happens if too long?  Slow reaction to segment loss packets may take different paths network load changes over time  RTTs can only be estimated Chapter 3, slide: 56 TCP Round Trip Time (RTT) and Timeout Technique: Exponential Weighted Moving Average (EWMA) EstimatedRTT(current) = (1-)*EstimatedRTT(previous) + *SampleRTT(recent) 0 <  < 1; typical value:  = 0.125  SampleRTT:  measured time from segment transmission until ACK receipt  current value of RTT  Ignore retransmission  EstimatedRTT:  estimated based on past & present; smoother than SampleRTT  to be used to set timeout period Chapter 3, slide: 57 TCP Round Trip Time (RTT) and Timeout Technique: Exponential Weighted Moving Average (EWMA) EstimatedRTT(current) = (1-)*EstimatedRTT(previous) + *SampleRTT(recent) 0 <  < 1; typical value:  = 0.125 Illustration: Assume: we received n RTT samples so far: Let’s order them as: n is the most recent one, n-1 is the 2nd most recent, etc. EstimatedRTT(n) = (1-)*EstimatedRTT(n-1) + *SampleRTT(n) (EstimatedRTT(n) : estimated RTT after receiving ACK of nth Packet.) Example: Supppse 3 ACKs returned with SampleRTT(1), SampleRTT(2), SampleRTT(3) Question: What would be EstimatedRTT after receiving the 3 ACKs ? Assume: EstimatedRTT(0) = 2 seconds (initial/default value) Chapter 3, slide: 58 TCP Round Trip Time (RTT) and Timeout Technique: Exponential Weighted Moving Average (EWMA) EstimatedRTT(current) = (1-)*EstimatedRTT(previous) + *SampleRTT(recent) 0 <  < 1; typical value:  = 0.125 What happens if  is too small (say very close 0):  A sudden, real change in network load does not get reflected in EstimatedRTT fast enough  May lead to under- or overestimation of RTT for a long time What happens if  is too large(say very close 1):  Transient fluctuations/changes in network load affects EstimatedRTT and makes it unstable when it should not  Also leads to under- or overestimation of RTT Chapter 3, slide: 59 Example RTT estimation: RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350 RTT (milliseconds) 300 250 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) SampleRTT Estimated RTT Chapter 3, slide: 60 TCP Round Trip Time (RTT) and Timeout Setting the timeout  timeout = EstimtedRTT, any problem with this???  add a “safety margin” to EstimtedRTT  large variation in EstimatedRTT -> larger safety margin  see how much SampleRTT deviates from EstimatedRTT: DevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT| (typically,  = 0.25) Then set timeout interval: TimeoutInterval = EstimatedRTT + 4*DevRTT Chapter 3, slide: 61 TCP: Overview  point-to-point:  one sender, one receiver  reliable, in-order byte stream:  no “message boundaries”  pipelined:  TCP congestion and flow control set window size  send & receive buffers socket door application writes data application reads data TCP send buffer TCP receive buffer RFCs: 793, 1122, 1323, 2018, 2581  full duplex data:  bi-directional data flow in same connection  MSS: maximum segment size  connection-oriented:  handshaking (exchange of control msgs) init’s sender, receiver state before data exchange  flow controlled:  sender will not socket door overwhelm receiver segment Chapter 3, slide: 62 TCP: a reliable data transfer  TCP creates rdt service on top of IP’s unreliable service  Pipelined segments  Cumulative acks  TCP uses single retransmission timer  Retransmissions are triggered by:   timeout events duplicate acks  Initially consider simplified TCP sender:   ignore duplicate acks ignore flow control, congestion control Chapter 3, slide: 63 TCP sender events: Data received from app:  Create segment with Seq #  Seq # is byte-stream number of first data byte in segment  start timer if not already running (think of timer as for “oldest unACK’ed segment”)  expiration interval: TimeOutInterval Timeout:  retransmit segment that caused timeout  restart timer Ack received:  If it acknowledges previously unACK’ed segments   update what is known to be ACK’ed start timer if there are outstanding segments Chapter 3, slide: 64 TCP Seq. #’s and ACKs Seq. #’s:  byte stream “number” of first byte in segment’s data ACKs:  Seq # of next byte expected from other side  cumulative ACK Host A User types ‘C’ Host B host ACKs receipt of ‘C’, echoes back ‘C’ host ACKs receipt of echoed ‘C’ simple telnet scenario time Chapter 3, slide: 65 TCP: retransmission scenarios Host A X loss Host B Seq=92 timeout Host B Seq=92 timeout timeout Host A time lost ACK scenario time premature timeout Chapter 3, slide: 66 TCP retransmission scenarios (more) timeout Host A Host B X loss time Cumulative ACK scenario Chapter 3, slide: 67 TCP ACK generation [RFC 1122, RFC 2581] Event at Receiver TCP Receiver action Arrival of in-order segment with expected seq #. All data up to expected seq # already ACKed Delayed ACK. Wait up to 500ms for next segment. If no next segment, send ACK Arrival of in-order segment with expected seq #. One other segment has ACK pending Immediately send single cumulative ACK, ACKing both in-order segments Arrival of out-of-order segment higher-than-expect seq. # . Gap detected Immediately send duplicate ACK, indicating seq. # of next expected byte Arrival of segment that partially or completely fills gap Immediate send ACK, provided that segment starts at lower end of gap Chapter 3, slide: 68 Fast Retransmit client  Suppose: Packet 0 gets lost   Q: When will retransmission of Packet 0 happen? Why does it happen at that time? A: typically at t1 ; we think it is lost when timer expires  Can we do better?? server Timer is set at t0 Think of what means to receive many duplicate ACKs:   it means Packet 0 is lost Why wait until timeout when we know packet 0 is lost? => Fast retransmit => better performance  Why several dupl. ACKs, not 1 or 2?   Think of what happens when pkt0 arrives after pkt1 (delayed, not lost) Think of what happens when pkt0 arrives after pkt1 & 2, etc. Timer expires at t1 Chapter 3, slide: 69 Fast Retransmit: recap  Receipt of duplicate ACKs indicate loss of segments   Sender often sends many segments back-toback If segment is lost, there will likely be many duplicate ACKs. This is how TCP works:  If sender receives 3 ACKs for the same data, it supposes that segment after ACK’ed data was lost:  Fast Retransmit:   resend segment before timer expires better performance Chapter 3, slide: 70 Review questions Problem:     Host A Host B TCP connection between A and B B received up to 248 bytes A sends back-to-back 2 segments to B with 40 and 60 bytes B ACKs every packet it receives Q1: What is Seq# in 1st and 2nd segments from A to B? Q2: Suppose: 1st segment gets to B first. What is ACK # in 1st ACK? Chapter 3, slide: 71 Review questions Problem:     Host A Host B TCP connection between A and B B received up to 248 bytes A sends back-to-back 2 segments to B with 40 and 60 bytes B ACKs every packet it receives Q1: What is Seq# in 1st and 2nd segments from A to B? Q2: Suppose: 1st segment gets to B first. What is ACK # in 1st ACK? Q3: Suppose: 2nd segment gets to B first. What is ACK # in 1st ACK? What is ACK # in 2nd ACK? Chapter 3, slide: 72 Review questions Problem:     Host A Host B TCP connection between A and B B received up to 248 bytes A sends back-to-back 2 segments to B with 40 and 60 bytes B ACKs every packet it receives Q1: What is Seq# in 1st and 2nd segments from A to B? Q2: Suppose: 1st segment gets to B first. What is ACK # in 1st ACK? Q3: Suppose: 2nd segment gets to B first. What is ACK # in 1st ACK? What is ACK # in 2nd ACK? Chapter 3, slide: 73 Review questions Problem:     TCP connection between A and B B received up to 248 bytes A sends back-to-back 2 segments to B with 12 and 20 bytes, respectively B ACKs every packet it receives Now suppose: - 2 segments get to B in order. - 1st ACK is lost - 2nd ACK arrives after timeout Question: Fill out all packet Seq #’s, and ACKs’ ACK #’s in the timing diagram. Chapter 3, slide: 74 ECE/CS 372 – introduction to computer networks Lecture 8 Announcements:  Assignment 2 due next Tuesday  Lab 2 due next Tuesday  Midterm exam: next Thursday Credit for lecture slides to Professor Bechir Hamdaoui Adapted from Jim Kurose & Keith Ross (original copyright) Chapter 3, slide: 75 Chapter 3 outline  Principles of reliable data transfer  Connection-oriented  Principles of congestion control  TCP congestion control transport: TCP Chapter 3, slide: 76 Principles of Congestion Control  Oct. ’86: LBL (Lawrence Berkeley Lab) to UC-Berkeley: drop from 32kbps to 40bps (400 yards, two IMP hops)  Congestion Collapse!  Cause: end systems are sending too much data too fast for network/routers to handle  Manifestations:   lost/dropped packets (buffer overflow at routers) long delays (queueing in router buffers)  a top-10 problem! Chapter 3, slide: 77 Approaches towards congestion control Two broad approaches toward congestion control: End-end congestion control:  no explicit feedback from network  congestion inferred from end-system observed loss, delay  approach taken by TCP Network-assisted congestion control:  routers provide feedback to end systems  single bit indicating congestion (DECbit, TCP/IP ECN)  explicit rate sender should send at  One restriction on sliding window: CongWin Chapter 3, slide: 78 TCP congestion control  Keep in mind:  Too slow: under-utilization => waste of network resources by not using them!  Too fast: over-utilization => waste of network resources by congesting them!  Challenge is then:  Not too slow, nor too fast!!  Approach:  Increase slowly the sending rates to probe for usable bandwidth  Decrease the sending rates when congestion is observed => Additive-increase, multiplicative decrease (AIMD) Chapter 3, slide: 79 TCP congestion control: AIMD Additive-increase, multiplicative decrease (AIMD) (also called “congestion avoidance”)   additive increase: increase CongWin by 1 MSS every RTT until loss detected (MSS = Max Segment Size) multiplicative decrease: cut CongWin in half after loss congestion window size congestion window 24 Kbytes 16 Kbytes Saw tooth behavior: probing for bandwidth 8 Kbytes time time Chapter 3, slide: 80 TCP Congestion Control: details  sender limits transmission: LastByteSent-LastByteAcked  CongWin  Roughly, rate = How does sender perceive congestion?  loss event  timeout or  3 duplicate ACKs  TCP sender reduces rate CongWin Bytes/sec RTT  CongWin is dynamic, function of perceived network congestion (CongWin) after loss event  AIMD increases window by 1 MSS every RTT Improvements:  AIMD, any problem??  Think of the start of connections  Solution: start a little faster, and then slow down =>“slow-start” Chapter 3, slide: 81 TCP Slow Start  When connection begins, TCP addresses this via CongWin = 1 MSS Slow-Start mechanism  Example: MSS = 500 Bytes  When connection begins, RTT = 200 msec increase rate  initial rate = 20 kbps exponentially fast  available bandwidth may be >> MSS/RTT  desirable to quickly ramp up to respectable rate  When loss of packet occurs (indicates congestion), then slow down Chapter 3, slide: 82 TCP Slow Start (more) How it is done Host A begins, increase rate exponentially until first loss event:   RTT  When connection Host B double CongWin every RTT done by incrementing CongWin for every ACK received  Summary: initial rate is slow but ramps up exponentially fast time Chapter 3, slide: 83 Refinement: TCP Tahoe Question: When should exponential increase (Slow-Start) switch to linear (AIMD)? Here is how it works:  Define a variable, called Threshold  Start “Slow-Start” (i.e., CongWin =1 and double CongWin every RTT)  At 1st loss event (timeout or 3 Dup ACKs),  Set Threshold = ½ current CongWin  Start “Slow-Start” (i.e., CongWin = 1 and double CongWin every RTT)  When CongWin =Threshold: Switch to AIMD (linear)  At any loss event (timeout or 3 Dup ACKs):  Set Threshold = 1/2 CongWin  Start “Slow-Start” (i.e. start over with CongWin = 1)  Chapter 3, slide: 84 Refinement: TCP Tahoe Question: When should exponential increase (Slow-Start) switch to linear (AIMD)? CongWin Chapter 3, slide: 85 More refinement: TCP Reno Loss event: Timeout vs. dup ACKs  3 dup ACKs: fast retransmit client server Timer is set at t0 Timer expires at t1 Chapter 3, slide: 86 More refinement: TCP Reno Loss event: Timeout vs. dup ACKs  3 dup ACKs: fast retransmit  Timeout: retransmit client server Timer is set at t0 Any difference (think congestion) ??  3 dup ACKs indicate network still capable of delivering some segments after a loss  Timeout indicates a “more” alarming congestion scenario Timer expires at t1 Chapter 3, slide: 87 More refinement: TCP Reno TCP Reno treats “3 dup ACKs” different from “timeout” How does TCP Reno work?  After 3 dup ACKs:   CongWin is cut in half congestion avoidance (window grows linearly)  But after timeout event:   CongWin instead set to 1 MSS; Slow-Start (window grows exponentially) Chapter 3, slide: 88 Summary: TCP Congestion Control  When CongWin is below Threshold, sender in slow-start phase, window grows exponentially.  When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly.  When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold.  When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS. Chapter 3, slide: 89 TCP Flow Control  receive side of TCP connection has a receive buffer: flow control sender won’t overflow receiver’s buffer by transmitting too much, too fast  speed-matching  app process may be slow at reading from buffer service: matching the send rate to the receiving app’s drain rate  One more restriction on sliding window: RcvWindow Chapter 3, slide: 90 TCP Flow control: how it works  Rcvr advertises spare room by including value of RcvWindow in segments  spare room in buffer = RcvWindow = RcvBuffer-[LastByteRcvd LastByteRead]  Sender limits unACKed data to RcvWindow  guarantees receive buffer doesn’t overflow Chapter 3, slide: 91 Average throughput of TCP Avg. throughout as a function of window size W and RTT?   Ignore Slow-Start Let W, the window size when loss occurs, be constant  When window is W, throughput is ?? throughput(high) = W/RTT  Just after loss, window drops to W/2, throughput is ?? throughput(low) = W/(2RTT).  Throughput then increases linearly from W/(2RTT) to W/RTT  Hence, average throughout = 0.75 W/RTT Chapter 3, slide: 92 TCP Fairness Fairness goal: if K TCP sessions share same bottleneck link of bandwidth R, each should have average rate of R/K TCP connection 1 TCP connection 2 bottleneck router capacity R Chapter 3, slide: 93 Fairness (more) Fairness and parallel TCP connections  nothing prevents app from opening parallel conections between 2 hosts.  Web browsers do this  Example: link of rate R supporting 9 connections;  9 TCPs belong to same host, each getting R/9  new app asks for 1 TCP, gets rate R/10  One host gets 9/10 of R and one gets 1/10 of R! Chapter 3, slide: 94 Question: is TCP fair? Again assume two competing sessions only, and consider AIMD:  Additive increase gives slope of 1, as throughout increases  Multiplicative decrease halves throughput proportionally, when congestion occurs TCP connection 1 TCP connection 2 bottleneck router capacity R Chapter 3, slide: 95 Question: is TCP fair? Again assume two competing sessions only, and consider AIMD:  Additive increase gives slope of 1, as throughout increases  Multiplicative decrease halves throughput proportionally, when congestion occurs Question:  How would (R1, R2) vary R equal bandwidth share when AIMD is used?  Does it converge to equal share? loss: decrease window by factor of 2 congestion avoidance: additive increase loss: decrease window by factor of 2 congestion avoidance: additive increase Connection 1 throughput R Chapter 3, slide: 96 Question? Again assume two competing sessions only:  Additive increase gives slope of 1, as throughout increases  Constant/equal decrease instead of multiplicative decrease!!! (Call this scheme: AIED) R equal bandwidth share Question:  How would (R1, R2) vary when AIED is used instead of AIMD?  Is it fair? Does it converge to equal share? (R1, R2) Connection 1 throughput R Chapter 3, slide: 97