TCP: OverviewTCP segment structureTCP seq. #’s and ACKsTCP Round Trip Time and TimeoutExample RTT estimation:Slide 6Slide 7TCP reliable data transferTCP sender events:TCP sender (simplified)TCP: retransmission scenariosTCP retransmission scenarios (more)TCP ACK generationFast RetransmitTCP Flow ControlTCP Flow control: how it worksTCP Connection ManagementTCP Connection Management (cont.)Slide 19TCP Connection Management (cont)Principles of Congestion ControlCauses/costs of congestion: scenario 1Causes/costs of congestion: scenario 2Slide 24Causes/costs of congestion: scenario 3Slide 26Approaches towards congestion controlTCP Congestion ControlTCP AIMDTCP Slow StartTCP Slow Start (more)RefinementRefinement (more)Summary: TCP Congestion ControlTCP FairnessWhy is TCP fair?Fairness (more)Delay modelingFixed congestion window (1)Fixed congestion window (2)TCP Delay Modeling: Slow Start (1)TCP Delay Modeling: Slow Start (2)TCP Delay Modeling (3)TCP Delay Modeling (4)Transport Layer 3-1TCP: Overviewfull duplex data:bi-directional data flow in same connectionMSS: maximum segment sizeconnection-oriented: handshaking (exchange of control msgs) init’s sender, receiver state before data exchangeflow controlled:sender will not overwhelm receiverpoint-to-point:one sender, one receiver reliable, in-order byte steam:no “message boundaries”pipelined:TCP congestion and flow control set window sizesend & receive bufferss o c k e td o o rT C Ps e n d b u f f e rT C Pr e c e i v e b u f f e rs o c k e td o o rs e g m e n ta p p l i c a t i o nw r i t e s d a t aa p p l i c a t i o nr e a d s d a t aTransport Layer 3-2TCP segment structuresource port #dest port #32 bitsapplicationdata (variable length)sequence numberacknowledgement numberReceive windowUrg data pnterchecksumFSRPAUheadlennotusedOptions (variable length)URG: urgent data (generally not used)ACK: ACK #validPSH: push data now(generally not used)RST, SYN, FIN:connection estab(setup, teardowncommands)# bytes rcvr willingto acceptcountingby bytes of data(not segments!)Internetchecksum(as in UDP)Transport Layer 3-3TCP seq. #’s and ACKsSeq. #’s:byte stream “number” of first byte in segment’s dataACKs:seq # of next byte expected from other sidecumulative ACKQ: how receiver handles out-of-order segmentsA: TCP spec doesn’t say, - up to implementorHost AHost BSeq=42, ACK=79, data = ‘C’Seq=79, ACK=43, data = ‘C’Seq=43, ACK=80Usertypes‘C’host ACKsreceipt of echoed‘C’host ACKsreceipt of‘C’, echoesback ‘C’timesimple telnet scenarioTransport Layer 3-4TCP Round Trip Time and TimeoutQ: how to set TCP timeout value?longer than RTTbut RTT variestoo short: premature timeoutunnecessary retransmissionstoo long: slow reaction to segment lossQ: how to estimate RTT?SampleRTT: measured time from segment transmission until ACK receiptignore retransmissionsSampleRTT will vary, want estimated RTT “smoother”average several recent measurements, not just current SampleRTTTransport Layer 3-5Example RTT estimation:Transport Layer 3-6TCP Round Trip Time and TimeoutEstimatedRTT = (1- )*EstimatedRTT + *SampleRTTExponential weighted moving averageinfluence of past sample decreases exponentially fasttypical value: = 0.125Transport Layer 3-7TCP Round Trip Time and TimeoutSetting the timeoutEstimtedRTT plus “safety margin”large variation in EstimatedRTT -> larger safety marginfirst estimate of how much SampleRTT deviates from EstimatedRTT: TimeoutInterval = EstimatedRTT + 4*DevRTTDevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT|(typically, = 0.25) Then set timeout interval:Transport Layer 3-8TCP reliable data transferTCP creates rdt service on top of IP’s unreliable servicePipelined segmentsCumulative acksTCP uses single retransmission timerRetransmissions are triggered by:timeout eventsduplicate acksInitially consider simplified TCP sender: ignore duplicate acksignore flow control, congestion controlTransport Layer 3-9TCP sender events:data rcvd from app:Create segment with seq #seq # is byte-stream number of first data byte in segmentstart timer if not already running (think of timer as for oldest unacked segment)expiration interval: TimeOutInterval timeout:retransmit segment that caused timeoutrestart timer Ack rcvd:If acknowledges previously unacked segmentsupdate what is known to be ackedstart timer if there are outstanding segmentsTransport Layer 3-10TCP sender(simplified) NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) { switch(event) event: data received from application above create TCP segment with sequence number NextSeqNum if (timer currently not running) start timer pass segment to IP NextSeqNum = NextSeqNum + length(data) event: timer timeout retransmit not-yet-acknowledged segment with smallest sequence number start timer event: ACK received, with ACK field value of y if (y > SendBase) { SendBase = y if (there are currently not-yet-acknowledged segments) start timer } } /* end of loop forever */ Comment:• SendBase-1: last cumulatively ack’ed byteExample:• SendBase-1 = 71;y= 73, so the rcvrwants 73+ ;y > SendBase, sothat new data is ackedTransport Layer 3-11TCP: retransmission scenariosHost ASeq=100, 20 bytes dataACK=100timepremature timeoutHost BSeq=92, 8 bytes dataACK=120Seq=92, 8 bytes dataSeq=92 timeoutACK=120Host ASeq=92, 8 bytes dataACK=100losstimeoutlost ACK scenarioHost BXSeq=92, 8 bytes dataACK=100timeSeq=92 timeoutSendBase= 100SendBase= 120SendBase= 120Sendbase= 100Transport Layer 3-12TCP retransmission scenarios (more)Host ASeq=92, 8 bytes dataACK=100losstimeoutCumulative ACK scenarioHost BXSeq=100, 20 bytes dataACK=120timeSendBase= 120Transport Layer 3-13TCP ACK generationEvent at ReceiverArrival of in-order segment withexpected seq #. All data up toexpected seq # already ACKedArrival of in-order segment withexpected seq #. One other segment has ACK pendingArrival of out-of-order segmenthigher-than-expect seq. # .Gap detectedArrival of segment that partially or completely fills gapTCP Receiver actionDelayed ACK. Wait up to 500msfor next segment. If no next
View Full Document