Flow Control
Flow Control
■ Simplicity
■ Overhead
■ Scaling
■ Fairness
■ Stability
■ Open loop
◆ Source describes its desired flow rate
◆ Network admits call
◆ Source sends at this rate
■ Closed loop
◆ Source monitors available service rate
✦ Explicit or implicit
■ Usually an envelope
◆ Constrains worst case behavior
■ Three uses
◆ Basis for traffic contract
◆ Input to regulator
◆ Input to policer
Descriptor requirements
■ Representativity
◆ adequately describes flow, so that network does not reserve
too little or too much resource
■ Verifiability
◆ verify that descriptor holds
■ Preservability
◆ Doesn’t change inside the network
■ Usability
◆ Easy to describe and use for admission control
Examples
■ Peak rate
■ Average rate
■ Linear bounded arrival process
Peak rate
■ Open loop
◆ describe traffic
◆ network admits/reserves resources
◆ regulation/policing
■ Closed loop
◆ can’t describe traffic or network doesn’t support reservation
◆ monitor available bandwidth
✦ perhaps allocated using GPS-emulation
◆ adapt to it
◆ if not done properly either
✦ too much loss
✦ unnecessary delay
Taxonomy
■ First generation
◆ ignores network state
◆ only match receiver
■ Second generation
◆ responsive to state
◆ three choices
✦ State measurement
• explicit or implicit
✦ Control
■ Explicit
◆ Network tells source its current rate
◆ Better control
◆ More overhead
■ Implicit
◆ Endpoint figures out rate by looking at network
◆ Less overhead
■ Ideally, want overhead of implicit with effectiveness of explicit
Flow control window
■ Hop-by-hop
◆ first generation flow control at each link
✦ next server = sink
◆ easy to implement
■ End-to-end
◆ sender matches all the servers on its path
■ Plusses for hop-by-hop
◆ simpler
◆ distributes overflow
◆ better control
■ Plusses for end-to-end
◆ cheaper
On-off
■ Send a packet
■ Wait for ack before sending next packet
Static window
■ Stop and wait can send at most one pkt per RTT
■ Here, we allow multiple packets per RTT (= transmission
window)
What should window size be?
■ Intuition
◆ every packet has a bit in header
◆ intermediate routers set bit if queue has built up => source
window is too large
◆ sink copies bit to ack
◆ if bits set, source reduces window size
◆ in steady state, oscillate around optimal size
DECbit
■ Implicit
■ Dynamic window
■ End-to-end
■ Window starts at 1
■ Increases exponentially for a while, then linearly
■ Exponentially => doubles every RTT
■ Linearly => increases by 1 every RTT
■ During exponential phase, every ack results in window increase
by 1
■ During linear phase, window increases by 1 when # acks =
window size
■ Exponential phase is called slow start
■ Linear phase is called congestion avoidance
More TCP details
■ Expected throughput =
transmission_window_size/propagation_delay
■ Numerator: known
■ Denominator: measure smallest RTT
■ Also know actual throughput
■ Difference = how much to reduce/increase rate
■ Algorithm
◆ send a special packet
◆ on ack, compute expected and actual throughput
◆ (expected - actual)* RTT packets in bottleneck buffer
◆ adjust sending rate if this is too large
■ Works better than TCP Reno
NETBLT