670 likes | 814 Views
Eifel Detection Algorithm*. Presented by : Maitreya Natu CISC 856, Fall 2004 natu@cis.udel.edu. *Reiner Ludwig, M. Meyer, Ericsson Research, April 2003, Request for Comments: 3522. What is Eifel algorithm?. Enhancement to TCP’s error recovery scheme
E N D
Eifel Detection Algorithm* Presented by : Maitreya Natu CISC 856, Fall 2004 natu@cis.udel.edu *Reiner Ludwig, M. Meyer, Ericsson Research, April 2003, Request for Comments: 3522
What is Eifel algorithm? • Enhancement to TCP’s error recovery scheme • Eliminates retransmission ambiguity, there by solving problems caused by spurious timeouts and spurious retransmits • Can improve end-to-end performance by several tens of percent • Makes TCP truly wireless compatible
Timeout based retransmission ssthresh = 16 cwnd = 8 ssthresh = 8/2 = 4 cwnd = 1 Timeout Slow start cwnd = 2 . . . cwnd = 4 cwnd = 16 … Congestion avoidance … cwnd = 17
Fast retransmit ssthresh = 16 A1 cwnd = 8 D1 … D8 A1 A1 3 Dup-ACKs A1 D1 Swnd= 4+3=7 ssthresh = 8/2 = 4 cwnd = 4 Fast retransmit & fast recovery A9 Di cwnd = 4 Dj … Congestion avoidance Ai+1 Aj+1 cwnd = 5
Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 Timeout
Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 Slow start
Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 Slow start
Q1 When does a spurious timeout occur? Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 Slow start Spurious timeout & spurious retransmission
Q1 When does a spurious timeout occur? When RTT suddenly increases, to the extent that it exceeds the retransmission time out value that had been determined a prior Q2 What can cause RTT to increase suddenly? Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 Slow start
Q1 When does a spurious timeout occur? When RTT suddenly increases, to the extent that it exceeds the retransmission time out value that had been determined a prior Q2 What can cause RTT to increase suddenly? Route changes Rapid increase in congestion Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 Slow start
Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 Slow start
Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 D2 cwnd = 2 D3 Slow start
Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 A3 A4 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 D2 cwnd = 2 D3 Slow start
Q3 How does it affect TCP performance Sender unnecessarily reduces the load Sender if forced into a go-back-N retransmission mode Can lead to real packet losses due to congestion caused by aggressive sender behavior Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 A3 A4 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 D2 cwnd = 2 D3 cwnd = 4 Slow start
Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 3 Dup-ACKs
Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 Fast retransmit & fast recovery
Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 A9 Fast retransmit & fast recovery
Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 A9 Fast retransmit & fast recovery Spurious fast retransmit
Q1 When does a spurious fast retransmit occur? Occur due to reordering of packets beyond the DUP-ACK threshold Frequency of occurrence depends on path properties E.g.: due to load-balancing on a routers inter-connected via multiple links Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 A9 Fast retransmit & fast recovery Spurious fast retransmit
Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 A9 Fast retransmit & fast recovery
Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 A9 Fast retransmit & fast recovery cwnd = 4 … … Congestion avoidance cwnd = 5
Q2 How does it affect TCP performance Causes the sender to unnecessarily reduce its load Causes the sender to unnecessarily retransmit Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 A9 Fast retransmit & fast recovery cwnd = 4 … … Congestion avoidance cwnd = 5
Problem Sender’s inability to distinguish an ACK for original transmission from that of retransmission Spurious Timeout ssthresh = 16 D1 cwnd = 8 D8 A2 ssthresh = 8/2 = 4 D1 Timeout cwnd = 1 Slow start Spurious timeout & spurious retransmission
Problem Sender’s inability to distinguish an ACK for original transmission from that of retransmission Spurious fast retransmit ssthresh = 16 A1 D1 cwnd = 8 D8 … A1 A1 A1 ssthresh = 4 3 Dup-ACKs D1 cwnd = 4 swnd = 7 A9 Fast retransmit & fast recovery Spurious fast retransmit
Problem & Solution • Problem • Retransmission ambiguity • Sender’s inability to distinguish an ACK for original transmission from the ACK for retransmission • Solution • Eliminate retransmission ambiguity • Use extra information in the ACKs to distinguish an ACK for original transmission from an ACK for retransmission
Review of TCP timestamp option[RFC 1323] Time at receiver Time at sender 100 100 200 200, 100 300 300, 200 301 301, 200 400 Timestamp of the most recent data segment that advanced the window is echoed (here 301) 400, 301 4.4BSD increments the timestamp clock once every 500ms and this timestamp clock is reset to 0 on a reboot - TCP/IP ILLUS v1, p349
Eliminating retransmission ambiguity A, 500, xxx 500 100 D4, 100, 500 … D11, 100, 500 Time-out 400 ts_first_rexmit = 400 D4, 400, 500
Eliminating retransmission ambiguity A, 500, xxx 500 100 D4, 100, 500 … D11, 100, 500 Time-out 501 A5, 501, 100 400 ts_first_rexmit = 400 D4, 400, 500
Eliminating retransmission ambiguity A, 500, xxx 500 100 D4, 100, 500 … D11, 100, 500 Time-out 501 A5, 501, 100 400 ts_first_rexmit = 400 D4, 400, 500 (100 < 400) spurious retransmission
Sender’s Response without Eifel cwnd=16 ssthresh=32 D1 … D16 Time-out D1 cwnd=1 ssthresh=8
Sender’s Response without Eifel cwnd=16 ssthresh=32 D1 … D16 Time-out A2 D1 cwnd=1 ssthresh=8
Sender’s Response without Eifel cwnd=16 ssthresh=32 D1 … D16 Time-out A2 D1 cwnd=1 ssthresh=8 D2 cwnd=2 ssthresh=8 D3
Sender’s Response with Eifel cwnd=16 ssthresh=32 100 D1, 100, 500 … D16, 100, 500 Time-out ts_first_rexmit = 400, cwnd = 16, ssthresh=32 400 D1, 400, 500 cwnd=1 ssthresh=8
Sender’s Response with Eifel cwnd=16 ssthresh=32 100 D1, 100, 500 … D16, 100, 500 Time-out ts_first_rexmit = 400, cwnd = 16, ssthresh=32 501 A2, 501, 100 400 D1, 400, 500 cwnd=1 ssthresh=8 401
Sender’s Response with Eifel cwnd=16 ssthresh=32 100 D1, 100, 500 … D16, 100, 500 Time-out ts_first_rexmit = 400, cwnd = 16, ssthresh=32 501 A2, 501, 100 400 D1, 400, 500 cwnd=1 ssthresh=8 (100 < 400) spurious retransmission detected 401 Restore cwnd = 16, ssthresh=32
Sender’s Response with Eifel cwnd=16 ssthresh=32 100 D1, 100, 500 … D16, 100, 500 Time-out ts_first_rexmit = 400, cwnd = 16, ssthresh=32 501 A2, 501, 100 400 D1, 400, 500 cwnd=1 ssthresh=8 (100 < 400) spurious retransmission detected 401 cwnd=16 ssthresh=32 D17, 401, 500 Restore cwnd = 16, ssthresh=32
Sender’s Response without Eifel A1 D1 cwnd=16, ssthresh=32 D2 A1 … D16 A1 A1 3 Dup-ACKs
Sender’s Response without Eifel A1 D1 cwnd=16, ssthresh=32 D2 A1 … D16 A1 A1 3 Dup-ACKs cwnd=8, ssthresh=8 swnd=11 D1
Sender’s Response without Eifel A1 D1 cwnd=16, ssthresh=32 D2 A1 … D16 A1 A1 A5 3 Dup-ACKs cwnd=8, ssthresh=8 swnd=11 D1 cwnd=8, ssthresh=8
Sender’s Response with Eifel A1, 500, 100 cwnd=16, ssthresh=32 D1, 100, 500 D2, 100, 500 … A1, 501, 100 D16, 100, 500 A1, 501, 100 A1, 501, 100 3 Dup-ACKs
Sender’s Response with Eifel A1, 500, 100 cwnd=16, ssthresh=32 D1, 100, 500 D2, 100, 500 … A1, 501, 100 D16, 100, 500 A1, 501, 100 A1, 501, 100 3 Dup-ACKs ts_first_rexmit = 400, cwnd=16,ssthresh=32 cwnd=11,ssthresh=8 D1, 400, 500
Sender’s Response with Eifel A1, 500, 100 cwnd=16, ssthresh=32 D1, 100, 500 D2, 100, 500 … A1, 501, 100 D16, 100, 500 A1, 501, 100 A1, 501, 100 A5, 501, 100 3 Dup-ACKs ts_first_rexmit = 400, cwnd=16,ssthresh=32 cwnd=11,ssthresh=8 D1, 400, 500 100 < 400, Spurious ReXmit, Restore
Sender’s Response with Eifel A1, 500, 100 cwnd=16, ssthresh=32 D1, 100, 500 D2, 100, 500 … A1, 501, 100 D16, 100, 500 A1, 501, 100 A1, 501, 100 A5, 501, 100 3 Dup-ACKs ts_first_rexmit = 400, cwnd=16,ssthresh=32 cwnd=11,ssthresh=8 D1, 400, 500 100 < 400, Spurious ReXmit, Restore cwnd=16,ssthresh=32 D17, 401, 501 … D20, 401, 501
Summary • Spurious time-out • Without Eifel: ssthresh = cwnd/2, cwnd = 1 • Enter slow start • With Eifel: Restore old cwnd and ssthresh • Restore previous state • Spurious fast retransmit • Without Eifel: ssthresh = cwnd = cwnd/2 • Enter congestion avoidance • With Eifel: Restore old cwnd and ssthresh • Restore previous state • Thus Eifel prevents unnecessary reduction in load, and spurious retransmissions
Some more details • On detecting a spurious retransmission • If a single retransmission done • ssthresh = old ssthresh; cwnd = old cwnd • If 2 retransmissions done • ssthresh = cwnd/2; cwnd = cwnd/2 • If > 2 retransmissions done • ssthresh = cwnd/2; cwnd = 1 • The more spurious retransmissions have occured, the more conservative the sender gets • In either case, sender resumes transmission with the next unsent PDU
Thus, the Eifel algorithm.. • Enhancement to TCP’s error recovery scheme • Eliminates retransmission ambiguity, there by solving problems caused by spurious timeouts and spurious retransmits • Can improve end-to-end performance by several tens of percent • Makes TCP truly wireless compatible
Other detection strategies • DSACK based detection • Forward-RTO
DSACK based detection D1 … D16 Time-out A2 D1 ACK for D1 A16,A1 DSACK for D1, D1 spuriously retransmitted, Resume previous state RFC 3708, Using TCP Duplicate Selective Acknowledgement (DSACKs) and Stream Control Transmission Protocol (SCTP) Duplicate Transmission Sequence Numbers (TSNs) to Detect Spurious Retransmissions
DSACK based detection D1 cwnd=16, ssthresh=32 … D16 Time-out D1 cwnd=1, ssthresh=8 Internet Draft: The Eifel Detection Algorithm for TCP <draft-ietf-tsvwg-tcp-eifel-alg-03.txt>, RFC 2883: DSACK
DSACK based detection D1 cwnd=16, ssthresh=32 … D16 Time-out A2 D1 cwnd=1, ssthresh=8 cwnd=2, ssthresh=8 Internet Draft: The Eifel Detection Algorithm for TCP <draft-ietf-tsvwg-tcp-eifel-alg-03.txt>, RFC 2883: DSACK