module14-tcp2V9

52
1 TCP - Part II

description

TCP

Transcript of module14-tcp2V9

  • 5/27/2018 module14-tcp2V9

    1/52

    1

    TCP - Part II

  • 5/27/2018 module14-tcp2V9

    2/522

    What is Flow/Congestion/Error Control ?

    Flow Control: Algorithms to prevent that the senderoverruns the receiver with information

    Error Control: Algorithms to recover or conceal the

    effects from packet losses

    Congestion Control:Algorithms to prevent that the sender

    overloads the network

    The goal of each of the control mechanisms are different.

    In TCP, the implementation of these algorithms is combined

  • 5/27/2018 module14-tcp2V9

    3/523

    Acknowledgements in TCP

    TCP receivers use acknowledgments (ACKs) to confirm thereceipt of data to the sender

    Acknowledgment can be added (piggybacked) to a data

    segment that carries data in the opposite direction

    ACK information is included in the the TCP header Acknowledgements are used for flow control, error control,

    and congestion control

    Data for B

    A BData for A ACK

    ACK

  • 5/27/2018 module14-tcp2V9

    4/524

    Sequence Numbers and Acknowledgments in TCP

    TCP uses sequence numbers to keeptrack of transmitted and acknowledged

    data

    Each transmitted byte of payload data is

    associated with a sequence number

    Sequence numbers count bytes and

    not segments

    Sequence number of first byte in payload

    is written in SeqNofield

    Sequence numbers wrap when they

    reach 232-1

    The sequence number of the first

    sequence number (Initial sequence

    number) is negotiated during connection

    setup

    Sequence number (SeqNo) (32 bits)

    Source Port Number Destination Port Number

    Acknowledgement number (AckNo)(32 bits)

    window sizeheader

    length 0 Flags

    TCP checksum urgent pointer

  • 5/27/2018 module14-tcp2V9

    5/525

    Sequence Numbers and Acknowledgments in TCP

    An acknowledgment is a confirmationof delivery of data

    When a TCP receiver wants toacknowledge data, it

    writes a sequence number in theAckNo field, and

    sets the ACK flag

    IMPORTANT: An acknowledgmentconfirms receipt for allunacknowledged data that has a

    smaller sequence number thangiven in the AckNo field

    Example: AckNo=5 confirms delivery for1,2,3,4 (but not 5).

    Sequence number (SeqNo) (32 bits)

    Source Port Number Destination Port Number

    Acknowledgement number (AckNo)(32 bits)

    window sizeheader

    length 0 Flags

    TCP checksum urgent pointer

  • 5/27/2018 module14-tcp2V9

    6/526

    Cumulative Acknowledgements

    TCP has cumulative acknowledgements:An acknowledgment confirms the receipt of all

    unacknowledged data with a smaller sequence number

    A

    B

  • 5/27/2018 module14-tcp2V9

    7/527

    Cumulative Acknowledgements

    With cumulative ACKs, the receiver can only acknowledge asegment if all previous segments have been received

    With cumulative ACKs, receiver cannot selectivelyacknowledge blocks of segments:e.g., ACK for S0-S3and S5-S7 (but not for S4)

    Note: The use of cumulative ACKs imposes constraints on the

    retransmission schemes:

    In case of an error, the sender may need to retransmit alldata that has not been acknowledged

  • 5/27/2018 module14-tcp2V9

    8/528

    Rules for sending Acknowledgments

    TCP has rules that influence the transmission ofacknowledgments

    Rule 1: Delayed Acknowledgments

    Goal:Avoid sending ACK segments that do not carry data

    Implementation:Delay the transmission of (some) ACKs

    Rule 2: Nagles rule

    Goal:Reduce transmission of small segments

    Implementation:A sender cannot send multiple segments

    with a 1-byte payload (i.e., it must wait for an ACK)

  • 5/27/2018 module14-tcp2V9

    9/529

    Observing Delayed Acknowledgements

    Remote terminal applications (e.g., Telnet) send characters

    to a server. The server interprets the character and sends

    the output at the server to the client.

    For each character typed, you see three packets:1. Client Server:Send typed character

    2. Server Client:Echo of character (or user output) and

    acknowledgement for first packet

    3. Client Server:Acknowledgement for second packet

  • 5/27/2018 module14-tcp2V9

    10/5210

    Observing Delayed Acknowledgements

    Argon Neon

    Telnet sessionfrom Argon

    to Neon

    This is the output of typing 3 (three) characters :

    Time 44.062449: Argon Neon: Push, SeqNo 0:1(1), AckNo 1

    Time 44.063317: Neon Argon: Push, SeqNo 1:2(1), AckNo 1

    Time 44.182705: Argon Neon: No Data, AckNo 2

    Time 48.946471: Argon Neon: Push, SeqNo1:2(1), AckNo 2

    Time 48.947326: Neon Argon: Push, SeqNo 2:3(1), AckNo 2Time 48.982786: Argon Neon: No Data, AckNo 3

    Time 55.116581: Argon Neon: Push, SeqNo2:3(1) AckNo 3

    Time 55.117497: Neon Argon: Push, SeqNo 3:4(1) AckNo 3

    Time 55.183694: Argon Neon: No Data, AckNo 4

  • 5/27/2018 module14-tcp2V9

    11/5211

    Why 3 segments per character?

    We would expect four segmentsper character:

    But we only see three segments

    per character:

    This is due to delayed

    acknowledgements

    character

    ACKofcharacter

    ACKofechoedcharacter

    echoofcharacter

    character

    ACKandechoofcharacte

    r

    ACKofechoedcharacter

  • 5/27/2018 module14-tcp2V9

    12/5212

    Delayed Acknowledgement

    TCP delays transmission of ACKs for up to 200ms

    Goal:Avoid to send ACK packets that do not carry data.

    The hope is that, within the delay, the receiver will have

    data ready to be sent to the receiver. Then, the ACK canbe piggybacked with a data segment

    In Example:

    Delayed ACK explains why the ACK of character and the echo of character

    are sent in the same segment

    The duration of delayed ACKs can be observed in the example when Argon

    sends ACKs

    Exceptions:

    ACK should be sent for every second full sized segment

    Delayed ACK is not used when packets arrive out of order

  • 5/27/2018 module14-tcp2V9

    13/5213

    Because of delayed ACKs, an ACK is often observed forevery other segment

    Delayed Acknowledgement

    A

    B

    Max. Delayfor an ACK

  • 5/27/2018 module14-tcp2V9

    14/5214

    Observing Nagles Rule

    argon.cs.virginia.edu

    3000

    miles

    tenet.cs.berkeley.edu

    Telnet sessionbetween argon.cs.virginia.edu

    and

    tenet.cs.berkeley.edu

    This is the output of typing 7 characters :

    Time 16.401963: Argon Tenet: Push, SeqNo 1:2(1), AckNo 2

    Time 16.481929: Tenet Argon: Push, SeqNo 2:3(1), AckNo 2

    Time 16.482154: Argon Tenet: Push, SeqNo 2:3(1), AckNo 3

    Time 16.559447: Tenet Argon: Push, SeqNo 3:4(1), AckNo 3

    Time 16.559684: Argon Tenet: Push, SeqNo 3:4(1), AckNo 4

    Time 16.640508: Tenet Argon: Push, SeqNo4:5(1) AckNo 4

    Time 16.640761: Argon Tenet: Push, SeqNo 4:8(4)AckNo 5

    Time 16.728402: Tenet Argon: Push, SeqNo5:9(4)AckNo 8

  • 5/27/2018 module14-tcp2V9

    15/52

    15

    Observing Nagles Rule

    Observation:Transmission ofsegments follows a different

    pattern, i.e., there are only two

    segments per character typed

    Delayed acknowledgment doesnot kick in at Argon

    The reason is that there is always

    data at Argon ready to sent when

    the ACK arrives

    Why is Argon not sending the data(typed character) as soon as it is

    available?

    char1

    ACKofchar1+echoofcha

    r1

    ACK+char2

    ACK+echoofchar2

    ACK+char3

    ACK+echoofcha

    r3

    ACK+char4-7

    ACK+echoofchar3

  • 5/27/2018 module14-tcp2V9

    16/52

    16

    Observing Nagles Rule

    Observations: Argon never has multiple unacknowledged segments outstanding There are fewer transmissions than there are characters.

    This is due to Nagles Rule:

    Each TCP connection can have only one small (1-byte) segment

    outstanding that has not been acknowledged

    Implementation:Send one byte and buffer all subsequent bytes untilacknowledgement is received.Then send all buffered bytes in a singlesegment. (Only enforced if byte is arriving from application one byte at

    a time)

    Goal of Nagles Rule:Reduce the amount of small segments.

    The algorithm can be disabled.

  • 5/27/2018 module14-tcp2V9

    17/52

    17

    Only one 1-byte segment can be in transmission (Here: Since

    no data is sent from B to A, we also see delayed ACKs)

    A

    B

    Nagles Rule

    Typed

    characters

    Delayed ACKDelayed ACK Delayed ACK

  • 5/27/2018 module14-tcp2V9

    18/52

    18

    TCP Flow Control

  • 5/27/2018 module14-tcp2V9

    19/52

    19

    TCP Flow Control

    TCP uses a version of the sliding window flow control,where

    Sending acknowledgements is separated from setting

    the window size at sender

    Acknowledgements do not automatically increase thewindow size

    During connection establishment, both ends of a TCPconnection set the initial size of the sliding window

  • 5/27/2018 module14-tcp2V9

    20/52

    20

    Window Management in TCP

    The receiver is returning two parameters to the sender

    The interpretation is:

    I am ready to receive new data with

    SeqNo= AckNo, AckNo+1, ., AckNo+Win-1

    Receiver can acknowledge data without opening the window

    Receiver can change the window size without acknowledging

    data

    AckNowindow size

    (win)

    32 bits 16 bits

  • 5/27/2018 module14-tcp2V9

    21/52

    21

    Sliding Window Flow Control

    1 2 3 4 5 6 7 8 9 10 11

    Advertised window

    sent but not

    acknowledged can be sent

    USABLE

    WINDOW

    sent and

    acknowledged

    can't sent

    Sliding Window Protocol is performed at the byte level:

    Here: Sender can transmit sequence numbers 6,7,8.

  • 5/27/2018 module14-tcp2V9

    22/52

    22

    Sliding Window: Window Closes

    1 2 3 4 5 6 7 8 9 10 11

    1 2 3 4 5 6 7 8 9 10 11

    Transmit Byte 6

    1 2 3 4 5 6 7 8 9 10 11

    AckNo = 5, Win = 4

    is received

    Transmission of a single byte (with SeqNo = 6) and acknowledgement isreceived (AckNo = 5, Win=4):

  • 5/27/2018 module14-tcp2V9

    23/52

    23

    Sliding Window: Window Opens

    1 2 3 4 5 6 7 8 9 10 11

    1 2 3 4 5 6 7 8 9 10 11

    AckNo = 5, Win = 6

    is received

    Acknowledgement is received that enlarges the window to the right(AckNo = 5, Win=6):

    A receiver opens a window when TCP buffer empties (meaning that datais delivered to the application).

  • 5/27/2018 module14-tcp2V9

    24/52

    24

    Sliding Window: Window Shrinks

    1 2 3 4 5 6 7 8 9 10 11

    1 2 3 4 5 6 7 8 9 10 11

    AckNo = 5, Win = 3

    is received

    Acknowledgement is received that reduces the window from the right(AckNo = 5, Win=3):

    Shrinking a window should not be used

  • 5/27/2018 module14-tcp2V9

    25/52

    25

    Sliding Window: Example

    3K

    2K SeqNo=0

    Receiver

    Buffer

    0 4KSender

    sends 2K

    of data

    2K

    AckNo=2048Win=20

    48

    Sender

    sends 2K

    of data 2K SeqNo=20484K

    AckNo=4096Win=0

    AckNo=4096Win=10

    24

    Sender

    blocked

  • 5/27/2018 module14-tcp2V9

    26/52

    26

    TCP Error Control

  • 5/27/2018 module14-tcp2V9

    27/52

    27

    Error Control in TCP

    TCP maintains a Retransmission Timer for eachconnection:

    The timer is started during a transmission. A timeoutcauses a retransmission

    TCP couples error control and congestion control(i.e., itassumes that errors are caused by congestion)

    Retransmission mechanism is part of congestion controlalgorithm

    Here:How to set the timeout value of the retransmissiontimer?

  • 5/27/2018 module14-tcp2V9

    28/52

    28

    TCP Retransmission Timer

    Retransmission Timer: The setting of the retransmission timer is crucial for

    efficiency

    Timeout value too small results in unnecessary

    retransmissions Timeout value too large long waiting time before a

    retransmission can be issued

    A problem is that the delays in the network are not fixed Therefore, the retransmission timers must be adaptive

  • 5/27/2018 module14-tcp2V9

    29/52

    29

    Round-Trip Time Measurements

    The retransmission mechanism of TCP is adaptive The retransmission timers are set based on round-trip time

    (RTT) measurements that TCP performs

    Segment1

    Segment4

    ACKforSegment1

    Segment2

    Segment3

    ACKforSegmen

    t2+3

    Segment5

    ACKforSegme

    nt4

    ACKforSegme

    nt5

    RTT#1

    RTT#2

    RTT#3

    The RTT is based on time difference

    between segment transmission and

    ACK

    But:

    TCP does not ACK each

    segment

    Each connection has only one

    timer

  • 5/27/2018 module14-tcp2V9

    30/52

    30

    Round-Trip Time Measurements

    Retransmission timer is set to a Retransmission Timeout(RTO) value.

    RTO is calculated based on the RTTmeasurements.

    The RTT measurements are smoothed by the following

    estimators srttand rttvar:srttn+1= a RTT + (1- a) srttn

    rttvarn+1=b( | RTT - srttn+1| ) + (1-b) rttvarn

    RTOn+1= srttn+1+ 4 rttvarn+1

    The gains are set toa=1/4 andb=1/8

    srtt0= 0 sec, rttvar0 = 3 sec, Also: RTO1= srtt1+ 2 rttvar1

  • 5/27/2018 module14-tcp2V9

    31/52

    31

    Karns Algorithm

    If an ACK for a retransmittedsegment is received, the sender

    cannot tell if the ACK belongs to

    the original or the

    retransmission.

    segment

    ACK

    retransmissionofsegment

    Timeout !

    RTT

    ?RTT

    ?

    Karns Algorithm:

    Dont updatesrtt on any segments that have been retransmitted.

    Each time when TCP retransmits, it sets:RTOn+1= max ( 2 RTOn, 64) (exponential backoff)

  • 5/27/2018 module14-tcp2V9

    32/52

    32

    Measuring TCP Retransmission Timers

    ellington.cs.virginia.edu satchmo.cs.virginia.edu

    ftp session

    from ellington

    to satchmo

    Transfer file from ellington to satchmo

    Unplug Ethernet cable in the middle of file transfer

  • 5/27/2018 module14-tcp2V9

    33/52

    33

    Exponential Backoff

    Scenario: File transferbetween two machines.Disconnect cable.

    The interval betweenretransmission attempts inseconds is:

    1.03, 3, 6, 12, 24, 48, 64,64, 64, 64, 64, 64, 64.

    Time between retrans-missions is doubled eachtime (Exponential Backoff

    Algorithm) Timer is not increasedbeyond 64 seconds

    TCP gives up after 13thattempt and 9 minutes.

    0

    100

    200

    300

    400

    500

    600

    Secon

    d

    0 2 4 6 8 10 12

    Transmission Attempts

  • 5/27/2018 module14-tcp2V9

    34/52

    34

    TCP Congestion Control

  • 5/27/2018 module14-tcp2V9

    35/52

    35

    TCP Congestion Control

    TCP has a mechanism for congestion control. Themechanism is implemented at the sender

    The window size at the sender is set as follows:

    Send Window = MIN (flow control window, congestion window)

    where

    flow control windowis advertised by the receiver

    congestion windowis adjusted based on feedback from the

    network

  • 5/27/2018 module14-tcp2V9

    36/52

    36

    TCP Congestion Control

    TCP congestion control is governed by two parameters: Congestion Window(cwnd)

    Slow-start threshhold Value(ssthresh)

    Initial value is 216-1

    Congestion control works in two modes:

    slow start (cwnd < ssthresh)

    congestion avoidance (cwnd ssthresh

  • 5/27/2018 module14-tcp2V9

    37/52

    37

    Slow Start

    Initial value: Set cwnd = 1 Note: Unit is a segment size. TCP actually is based on bytes andincrements by 1 MSS (maximum segment size)

    The receiver sends an acknowledgement (ACK) for each Segment

    Note: Generally, a TCP receiver sends an ACK for every other

    segment.

    Each time an ACK is received by the sender, the congestion window isincreased by 1 segment:

    cwnd = cwnd + 1

    If an ACK acknowledges two segments, cwnd is still increased

    by only 1 segment. Even if ACK acknowledges a segment that is smaller than MSS bytes

    long, cwnd is increased by 1.

    Does Slow Start increment slowly? Not really.In fact, the increase of cwnd is exponential

  • 5/27/2018 module14-tcp2V9

    38/52

    38

    Slow Start Example

    The congestionwindow size grows

    very rapidly

    For every ACK, we

    increase cwnd by1 irrespective of

    the number of

    segments ACKed

    TCP slows down the

    increase of cwnd

    when

    cwnd > ssthresh

    segment1

    ACKforsegment1

    cwnd = 1

    cwnd = 2 segment2

    segment3

    ACKforsegments2

    cwnd = 4 segment4

    segment5

    segment6

    ACKforsegments4

    cwnd = 7

    ACKforsegments3

    ACKforsegments5

    ACKforsegments6

  • 5/27/2018 module14-tcp2V9

    39/52

    39

    Congestion Avoidance

    Congestion avoidance phase is started if cwnd has reachedthe slow-start threshold value

    If cwnd ssthreshthen each time an ACK is received,

    increment cwnd as follows: cwnd = cwnd + 1/ cwnd

    So cwndis increased by one only if all cwndsegments havebeen acknowledged.

    Example of

  • 5/27/2018 module14-tcp2V9

    40/52

    40

    Example of

    Slow Start/Congestion Avoidance

    Assume that ssthresh = 8cwnd = 1

    cwnd = 2

    cwnd = 4

    cwnd = 8

    cwnd = 9

    cwnd = 10

    0

    2

    4

    6

    8

    1012

    14

    t=0

    t=2

    t=4

    t=6

    Roundtr ip t imes

    Cwn

    d(insegmen

    ts)

    ssthresh

  • 5/27/2018 module14-tcp2V9

    41/52

    41

    Responses to Congestion

    So, TCP assumes there is congestion if it detects a packetloss

    A TCP sender can detect lost packets via:

    Timeout of a retransmission timer

    Receipt of a duplicate ACK

    TCP interprets a Timeout as a binary congestion signal. When a timeout

    occurs, the sender performs:

    cwnd is reset to one:cwnd = 1

    ssthresh is set to half the current size of the congestion window:

    ssthressh = cwnd / 2

    and slow-start is entered

  • 5/27/2018 module14-tcp2V9

    42/52

    42

    Summary of TCP congestion control

    Initially:

    cwnd = 1;

    ssthresh =advertised window size;

    New Ack received:

    if (cwnd < ssthresh)

    /* Slow Start*/

    cwnd = cwnd + 1;

    else

    /* Congestion Avoidance */

    cwnd = cwnd + 1/cwnd;Timeout:

    /* Multiplicative decrease */

    ssthresh = cwnd/2;

    cwnd = 1;

  • 5/27/2018 module14-tcp2V9

    43/52

    43

    Slow Start / Congestion Avoidance

    A typical plot of cwnd for a TCP connection (MSS = 1500bytes) with TCP Tahoe:

  • 5/27/2018 module14-tcp2V9

    44/52

    44

    Flavors of TCP Congestion Control

    TCP Tahoe(1988, FreeBSD 4.3 Tahoe) Slow Start

    Congestion Avoidance

    Fast Retransmit

    TCP Reno(1990, FreeBSD 4.3 Reno)

    Fast Recovery

    New Reno(1996)

    SACK(1996)

    RED(Floyd and Jacobson 1993)

  • 5/27/2018 module14-tcp2V9

    45/52

    45

    Acknowledgments in TCP

    Receiver sends ACK to sender

    ACK is used for flow control, error

    control, and congestion control

    ACK number sent is the next

    sequence number expected

    Delayed ACK: TCP receiver normally

    delays transmission of an ACK (for

    about 200ms)

    ACKs are not delayed when packetsare received out of sequence

    Why?

    1K SeqNo=0

    AckNo=1024

    1K SeqNo=1024

    AckNo=2048

    SeqNo=2048

    SeqNo=3072

    AckNo=2048

    1K

    1K

    Lostsegment

  • 5/27/2018 module14-tcp2V9

    46/52

    46

    Acknowledgments in TCP

    Receiver sends ACK to sender

    ACK is used for flow control, error

    control, and congestion control

    ACK number sent is the next

    sequence number expected

    Delayed ACK: TCP receiver normally

    delays transmission of an ACK (for

    about 200ms)

    Why?

    ACKs are not delayed when packetsare received out of sequence

    Why?

    1K SeqNo=0

    AckNo=1024

    1K SeqNo=1024

    AckNo=2048

    SeqNo=3072

    AckNo=2048

    SeqNo=2048 1K1K

    Out-of-order arrivals

  • 5/27/2018 module14-tcp2V9

    47/52

    47

    Fast Retransmit

    If three or more duplicateACKs are received in a row,

    the TCP sender believes that

    a segment has been lost.

    Then TCP performs aretransmission of what seems

    to be the missing segment,

    without waiting for a timeout to

    happen.

    Enter slow start:

    ssthresh = cwnd/2

    cwnd = 1

    1K SeqNo=0

    AckNo=1024

    AckNo=1024

    1K SeqNo=1024

    SeqNo=20481K

    AckNo=1024

    SeqNo=30721K

    SeqNo=40961K

    1. duplicate

    2. duplicate

    AckNo=1024

    SeqNo=10241K

    SeqNo=51201K

    3. duplicate

  • 5/27/2018 module14-tcp2V9

    48/52

    48

    Fast Recovery

    Fast recovery avoids slow start after a

    fast retransmit

    Intuition:Duplicate ACKs indicatethat data is getting through

    After three duplicate ACKs set:

    Retransmit packet that ispresumed lost

    ssthresh = cwnd/2

    cwnd = cwnd+3

    (note the order of operations)

    Increment cwnd by one for each

    additional duplicate ACK

    When ACK arrives that acknowledgesnew data (here: AckNo=6148), set:

    cwnd=ssthresh

    enter congestion avoidance

    1K SeqNo=0

    AckNo=1024

    AckNo=1024

    1K SeqNo=1024

    SeqNo=20481K

    AckNo=1024

    SeqNo=30721K

    SeqNo=40961K

    1. duplicate

    2. duplicate

    AckNo=1024

    SeqNo=10241K

    SeqNo=51201K

    3. duplicate

    cwnd=12sshtresh=5

    cwnd=12sshtresh=5

    cwnd=12sshtresh=5

    cwnd=12sshtresh=5

    cwnd=15sshtresh=6

    AckNo=6148cwnd=6

    sshtresh=6

    ACK for new data

  • 5/27/2018 module14-tcp2V9

    49/52

    49

    TCP Reno

    Duplicate ACKs: Fast retransmit

    Fast recovery

    Fast Recovery avoids slow start

    Timeout:

    Retransmit

    Slow Start

    TCP Reno improves upon TCP Tahoe when a single packet

    is dropped in a round-trip time.

    TCP Tahoe and TCP Reno

  • 5/27/2018 module14-tcp2V9

    50/52

    50

    TCP Tahoe and TCP Reno(for single segment losses)

    Reno

    time

    cwnd

    time

    cwn

    d

    Taho

  • 5/27/2018 module14-tcp2V9

    51/52

    51

    TCP New Reno

    When multiple packets are dropped, Reno has problems Partial ACK:

    Occurs when multiple packets are lost

    A partial ACK acknowledges some, but not all packets that are

    outstanding at the start of a fast recovery, takes sender out of fast

    recoverySender has to wait until timeout occurs

    New Reno:

    Partial ACK does not take sender out of fast recovery

    Partial ACK causes retransmission of the segmentfollowing the acknowledged segment

    New Reno can deal with multiple lost segments without going to slow

    start

  • 5/27/2018 module14-tcp2V9

    52/52

    SACK

    SACK = Selective acknowledgment

    Issue: Reno and New Reno retransmit at most 1 lost packet per round triptime

    Selective acknowledgments:The receiver can acknowledge non-continuous blocks of data (SACK 0-1023, 1024-2047)

    Multiple blocks can be sent in a single segment.

    TCP SACK:

    Enters fast recovery upon 3 duplicate ACKs Sender keeps track of SACKs and infers if segments are lost. Senderretransmits the next segment from the list of segments that aredeemed lost.