TCP ACK generation [RFC 1122, RFC 2581 Event TCP Receiver action in-order segment arrival delayed ACK. Wait up to 500ms no gaps, for next segment. If no next segment, everything else already ACKed send ACK in-order segment arrival immediately send single no gaps, cumulative ACK one delayed ACK pending out-of-order segment arrival send duplicate ACK, indicating seg. ligher-than-expect seq of next expected byte gap detected arrival of segment that immediate AcK if segment starts partially or completely fills gap at lower end of gap 3: Transport Layer 3b-6
3: Transport Layer 3b-6 TCP ACK generation [RFC 1122, RFC 2581] Event in-order segment arrival, no gaps, everything else already ACKed in-order segment arrival, no gaps, one delayed ACK pending out-of-order segment arrival 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 send duplicate ACK, indicating seq. # of next expected byte immediate ACK if segment starts at lower end of gap
TCP: retransmission scenarios Host A Host B e s92 8b yte lata Seq=92, 8 bytes data 20 by ACK=100 ta OSs Se 92,8 data Seq=92, 8 bytes data CK fime fime lost AcK scenario premature timeout, emulative ACKs 3: Transport Layer 3b-7
3: Transport Layer 3b-7 TCP: retransmission scenarios Host A loss timeout time lost ACK scenario Host B X Host A Seq=92 timeout time premature timeout, cumulative ACKs Host B Seq=100 timeout
TCP Flow Control flow control receiver: explicitly sender won 't overrun informs sender o receiver's buffers by (dynamically changing) transmitting too much amount of free buffer too fast space oRcv啊 indow field in RcvBuffer size or tCP Receive Buffer TCP segment RcWWindow = amount of spare room in Buffer sender: keeps the amount of transmitted Rey Window unACKed data less than most recently received data from TCP application re room RcvW主ndow process in buffer RcvBuffer receiver buffering 3: Transport Layer 3b-8
3: Transport Layer 3b-8 TCP Flow Control receiver: explicitly informs sender of (dynamically changing) amount of free buffer space RcvWindow field in TCP segment sender: keeps the amount of transmitted, unACKed data less than most recently received RcvWindow sender won’t overrun receiver’s buffers by transmitting too much, too fast flow control receiver buffering RcvBuffer = size or TCP Receive Buffer RcvWindow = amount of spare room in Buffer
TCP Round Trip Time and Timeout Q: how to set TCP Q: how to estimate rtt? timeout value? O SampleRTT: measured time from 口 longer than Rtt segment transmission until ACK o note: RTT will vary receipt 口 too short: premature o ignore retransmISSions, timeout cumulatively ACKed segments 口Samp1 eRTT wil‖ I vary,Want o unnecessar estimated rTT"smoother retransmissions o use several recent o too long: slow reaction to segment loss measurements, not just current SampleRTT 3: Transport Layer 3b-9
3: Transport Layer 3b-9 TCP Round Trip Time and Timeout Q: how to set TCP timeout value? longer than RTT note: RTT will vary too short: premature timeout unnecessary retransmissions too long: slow reaction to segment loss Q: how to estimate RTT? SampleRTT: measured time from segment transmission until ACK receipt ignore retransmissions, cumulatively ACKed segments SampleRTT will vary, want estimated RTT “smoother” use several recent measurements, not just current SampleRTT
TCP Round Trip Time and Timeout EstimatedrTT =(1-x)*EstimatedRTT x*SampleRTT D Exponential weighted moving average o influence of given sample decreases exponentially fast typical value of×:O.1 Setting the timeout O EstimtedrTT plus "safety margin o large variation in EstimatedrTT - larger safety margin Timeout Estimatedrtt 4*Deviation Deviation =(1-x)*Deviation x* I SamplerTT-EstimatedRTT I 3: Transport Layer 3b-10
3: Transport Layer 3b-10 TCP Round Trip Time and Timeout EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT Exponential weighted moving average influence of given sample decreases exponentially fast typical value of x: 0.1 Setting the timeout EstimtedRTT plus “safety margin” large variation in EstimatedRTT -> larger safety margin Timeout = EstimatedRTT + 4*Deviation Deviation = (1-x)*Deviation + x*|SampleRTT-EstimatedRTT|