# TCP 4/15/2017.

## Presentation on theme: "TCP 4/15/2017."— Presentation transcript:

TCP 4/15/2017

TCP Adaptive Retransmission Algorithm - Original
Theory Estimate RTT Multiply by 2 to allow for variations Practice Use exponential moving average (A = 0.1 to 0.2) Estimate = (A) * measurement + (1- A) * estimate Problem Did not handle variations well Ambiguity for retransmitted packets Was ACK in response to first, second, etc transmission? 4/15/2017

TCP Adaptive Retransmission Algorithm – Karn-Partridge
Exclude retransmitted packets from RTT estimate For each retransmission Double RTT estimate Exponential backoff from congestion Problem Still did not handle variations well Did not solve network congestion problems as well as desired 4/15/2017

TCP Adaptive Retransmission Algorithm – Jacobson
Estimate variance of RTT Calculate mean interpacket RTT deviation to approximate variance Use second exponential moving average Deviation = (B) * |RTT_Estimate – Measurement| + (1–B) * deviation B = 0.25, A = for RTT_estimate Use variance estimate as component of RTT estimate Next_RTT = RTT_Estimate + 4 * Deviation Protects against high jitter Notes Algorithm is only as good as the granularity of the clock Accurate timeout mechanism is important for congestion control 4/15/2017

TCP Connection Establishment
3-Way Handshake Sequence Numbers J,K Message Types Synchronize (SYN) Acknowledge (ACK) Passive Open Server listens for connection from client Active Open Client initiates connection to server Client Server Time flows down listen Synchronize (SYN) J acknowledge (ACK) J+1 SYN K, ACK K+1 4/15/2017

TCP Connection Termination
Message Types Finished (FIN) Acknowledge (ACK) Active Close Sends no more data Passive close Accepts no more data Client Server Time flows down Finished (FIN) J ACK J+1 FIN K ACK K+1 4/15/2017

TCP Connection Management (cont)
TCP server lifecycle TCP client lifecycle 4/15/2017

TCP State Descriptions

TCP State Transition Diagram
Passive open Close/FIN ACK SYN/SYN + ACK Active open/SYN Close Timeout FIN + ACK/ACK SYN + ACK/ACK Send/SYN FIN/ACK Close/ACK CLOSED LISTEN SYN_RCVD SYN_SENT ESTABLISHED FIN_WAIT_1 FIN_WAIT_2 CLOSING TIME_WAIT CLOSE_WAIT LAST_ACK CLOSED 4/15/2017

TCP State Transition Diagram
Questions State transitions Describe the path taken by a server under normal conditions Describe the path taken by a client under normal conditions Describe the path taken assuming the client closes the connection first TIME_WAIT state What purpose does this state serve Prove that at least one side of a connection enters this state Explain how both sides might enter this state 4/15/2017

TCP State Transition Diagram
Active open/SYN Active open/SYN CLOSED Passive open Passive open Close Close LISTEN SYN_RCVD SYN_SENT SYN/SYN + ACK SYN/SYN + ACK Send/SYN Send/SYN ACK ACK SYN/SYN + ACK SYN/SYN + ACK SYN + ACK/ACK SYN + ACK/ACK ESTABLISHED TCP A TCP B 1. CLOSED LISTEN 2. SYN-SENT > <SEQ=100><CTL=SYN> > SYN-RECEIVED 3. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED 4. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> > ESTABLISHED 5. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED 4/15/2017

TCP State Transition Diagram
Active open/SYN CLOSED Passive open Close Close LISTEN SYN_RCVD SYN_SENT SYN/SYN + ACK Send/SYN ACK SYN/SYN + ACK SYN + ACK/ACK Close/FIN Close/FIN Close/FIN Close/FIN Close/FIN ESTABLISHED FIN/ACK FIN/ACK FIN/ACK FIN/ACK FIN_WAIT_1 FIN_WAIT_2 CLOSING TIME_WAIT CLOSE_WAIT LAST_ACK ACK ACK FIN + ACK/ACK Close/FIN Close/FIN FIN + ACK/ACK ACK ACK FIN/ACK ACK ACK FIN/ACK Timeout Timeout Timeout Timeout CLOSED 4/15/2017

TCP Sliding Window Protocol
Sequence numbers Indices into byte stream ACK sequence number Actually next byte expected as opposed to last byte received Advertised window Enables dynamic receive window size Receive buffers Data ready for delivery to application until requested Out-of-order data out to maximum buffer capacity Sender buffers Unacknowledged data Unsent data out to maximum buffer capacity 4/15/2017

TCP Sliding Window Protocol – Sender Side
LastByteAcked <= LastByteSent LastByteSent <= LastByteWritten Buffer bytes between LastByteAcked and LastByteWritten Maximum buffer size Advertised window First unacknowledged byte Last byte sent Data available, but outside window 4/15/2017

TCP Sliding Window Protocol – Receiver Side
LastByteRead < NextByteExpected NextByteExpected <= LastByteRcvd + 1 Buffer bytes between NextByteRead and LastByteRcvd Maximum buffer size Advertised window Buffered, out-of-order data Next byte to be read by application Next byte expected (ACK value) 4/15/2017

TCP ACK generation - 1 Maximum buffer size Available buffer size Next byte to be read by application Next byte expected (ACK value) 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. 4/15/2017

TCP ACK generation - 2 Maximum buffer size Available buffer size Next byte to be read by application Next byte expected (ACK value) Arrival of in-order segment with expected seq #. One other segment has ACK pending Immediately send single cumulative ACK, ACKing both in-order segments 4/15/2017

TCP ACK generation - 3 Maximum buffer size Available buffer size Next byte to be read by application Next byte expected (ACK value) Arrival of out-of-order segment higher-than-expect seq. # Gap detected Immediately send duplicate ACK, indicating seq. # of next expected byte 4/15/2017

TCP ACK generation - 4 Maximum buffer size Available buffer size Next byte to be read by application Next byte expected (ACK value) Arrival of segment that partially or completely fills gap Immediate send ACK, provided that segment starts at lower end of gap 4/15/2017

TCP ACK generation [RFC 1122, RFC 2581]
Event at Receiver Arrival of in-order segment with expected seq #. All data up to expected seq # already ACKed expected seq #. One other segment has ACK pending Arrival of out-of-order segment higher-than-expect seq. # . Gap detected Arrival of segment that partially or completely fills gap TCP Receiver action Delayed ACK. Wait up to 500ms for next segment. If no next segment, send ACK Immediately send single cumulative ACK, ACKing both in-order segments Immediately send duplicate ACK, indicating seq. # of next expected byte Immediate send ACK, provided that segment starts at lower end of gap 4/15/2017

Fast Retransmit If sender receives 3 ACKs for the same data, it supposes that segment after ACKed data was lost: fast retransmit: resend segment before timer expires Why 3? What’s the problem with time-out? time-out period often relatively long Detect lost segments via duplicate ACKs. Sender often sends many segments back-to-back If segment is lost, there will likely be many duplicate ACKs. 4/15/2017

Fast retransmit algorithm:
event: ACK received, with ACK field value of y if (y > SendBase) { SendBase = y if (there are currently not-yet-acknowledged segments) start timer } else { increment count of dup ACKs received for y if (count of dup ACKs received for y = 3) { resend segment with sequence number y a duplicate ACK for already ACKed segment fast retransmit 4/15/2017

A 4th situation? Receiver side Maximum buffer size
Available buffer size What if? Buffered, out-of-order data Next byte to be read by application Next byte expected (ACK value) 4/15/2017

TCP Flow Control Sender Receiver Maximum buffer size Sliding window
First unacknowledged byte Data available, but outside window Last byte sent Receiver Maximum buffer size Avoid? Available buffer size Buffered, out-of-order data Next byte to be read by application 4/15/2017 Next byte expected (ACK value)

Flow Control vs. Congestion Control
Preventing senders from overrunning the capacity of the receivers Congestion control Preventing too much data from being injected into the network, causing switches or links to become overloaded TCP provides both flow control based on advertised window congestion control discussed later in class 4/15/2017

TCP Flow Control Receiving side Sending side
Receive buffer size = MaxRcvBuffer LastByteRcvd - LastByteRead < = MaxRcvBuffer AdvertisedWindow = MaxRcvBuffer - (NextByteExpected NextByteRead) Shrinks as data arrives and Grows as the application consumes data Sending side Send buffer size = MaxSendBuffer LastByteSent - LastByteAcked < = AdvertisedWindow EffectiveWindow = AdvertisedWindow - (LastByteSent LastByteAcked) EffectiveWindow > 0 to send data LastByteWritten - LastByteAcked < = MaxSendBuffer block sender if (LastByteWritten - LastByteAcked) + y > MaxSenderBuffer 4/15/2017

TCP Flow Control Problem: Slow receiver application Solution
Advertised window goes to 0 Sender cannot send more data Non-data packets used to update window Receiver may not spontaneously generate update or update may be lost Solution Sender periodically sends 1-byte segment, ignoring advertised window of 0 Eventually window opens Sender learns of opening from next ACK of 1-byte segment 4/15/2017

TCP Flow Control Problem: Application delivers tiny pieces of data to TCP Example: telnet in character mode Each piece sent as a segment, returned as ACK Very inefficient Solution Delay transmission to accumulate more data Nagle’s algorithm Send first piece of data Accumulate data until first piece ACK’d Send accumulated data and restart accumulation Not ideal for some traffic (e.g. mouse motion) 4/15/2017

TCP Flow Control Problem: Slow application reads data in tiny pieces
Receiver advertises tiny window Sender fills tiny window Known as silly window syndrome Solution Advertise window opening only when MSS or 1/2 of buffer is available Sender delays sending until window is MSS or 1/2 of receiver’s buffer (estimated) 4/15/2017

TCP Bit Allocation Limitations
Sequence numbers vs. packet lifetime Assumed that IP packets live less than 60 seconds Can we send 232 bytes in 60 seconds? Less than an STS-12 line Advertised window vs. delay-bandwidth Only 16 bits for advertised window Cross-country RTT = 100 ms Adequate for only 5.24 Mbps! 4/15/2017

TCP Sequence Numbers – 32-bit
Bandwidth Speed Time until wrap around T1 1.5 Mbps 6.4 hours Ethernet 10 Mbps 57 minutes T3 45 Mbps 13 minutes FDDI 100 Mbps 6 minutes STS-3 155 Mbps 4 minutes STS-12 622 Mbps 55 seconds STS-24 1.2 Gbps 28 seconds 4/15/2017