Vous êtes sur la page 1sur 24

TCP Timers

Chia-tai Tsai


The 7 Timers for each Connection

Connection-Establishment Timer

Establish a new connection. If a response isnt received within 75 seconds, the connection establishment is aborted.

Retransmission Timer

Based on Round-Trip Time (RTT). TCP sends data. When this timer expires, TCP retransmit the data.

Introduction cont.

Delay ACK Timer

Need not be acknowledged immediately. TCP waits up to 200 ms. Piggybacking

Persist Timer

Based on RTT Triggered when a null window is advertised If timer expires, sender issues a probe (between 5 and 60 s, never gives up)

Introduction cont.

Keepalive Timer

socket option SO_KEEPALIVE. Tests if the other end is still up and running Expires after 2 hours

FIN_WAIT_2 Timer

FIN_WAIT_1 -> FIN_WAIT_2 Avoid a connection in the FIN_WAIT_2 state forever.

Introduction cont.

2MSL Timer (TIME_WAIT Timer)

MSL (Maximum Segment Life) 30s to 4 min Triggered when connection (client) enters TIME_WAIT state During 2MSL, the socket pair cannot be reused. (packets arriving during this state are discarded)

Timer Function

Fast timer

Triggered every 200 ms Delay ACK Timer Triggered every 500 ms

Slow timer

Implements of the 7 TCP timers

tcp_canceltimers Function

tcp_timer.c Triggered when enters TIME_WAIT state. All 4 timers counters are set to 0.

tcp_fasttime Function

tcp_timer.c Delay ACK Timer If TF_DELACK flag is set, it is cleared and TF_ACKNOW flag is set instead.

tcp_slowtime Function

tcp_timer.c Handle the other 6 Timers

Connection establishmentretransmission persistkeepaliveFIN_WAIT_22MSL

Check each timer counter in all TCPCB Check if TCPCB has been deleted

tcp_slowtime Function cont.

Count idle time

Keepalive FIN_WAIT_2

Increment RTT counter Increment RFC 1323 timestamp value


tcp_timers Function

tcp_timer.c Called by TCPs PRU_SLOWTIMO request

tcp_timers Function cont.

Case TCPT_2MSL (FIN_WAIT_2 and 2MSL Timers)

2MSL Timers

tcp_timers Function cont.

FIN_WAIT_2 timer

tcp_timers Function cont.

Case TCPT_PERSIST (Persist Timer)

Force window probe segment Time line of persist time

tcp_timers Function cont.

Case TCPT_KEEP (Connection Establishment and Keepalive Timers)

Connection establishment timer and retransmission timer after SYN is sent

tcp_timers Function cont.

Keepalive timer

Expired after 2 hours of idle time Drop connection who no response Send a keepalive probe Reset keepalive timer

Retransmission Timer Calculations

delta ntick srtt srtt srtt g delta

rtt var rtt var delta rtt var RTO srtt 4 rtt var

Retransmission Timer Calculations

member t_srtt Units ticks x 8 Initial value #sec 0 Description
Smoothed RTT estimator : srtt x 8

t_rxtcur t_rttmin t_rxtshift

ticks x 4
ticks ticks null

12 2 0

6 1

Smoothed mean deviation estimator : rttvar x 4

Current retransmission timeout: RTO Min. value for retransmissions timeout Index into tcp_backoff[] array (exponential backoff)

tcp_setpersist Function

tcp_output.c Check retransmission timer not enabled Calculate RTO

RTO srtt 2 rtt var t _ srtt t _ rtt var 2 8 4 t _ srtt t _ rtt var 4 2

tcp_setpersist Function cont.

Exponential backoff array

{1, 2, 4, 8, 16, 32, 64, 64, 64, 64, 64, 64, 64}

tcp_xmit_timer Function

tcp_input.c rtt is the RTT measurement to be applied

Timestamp option (tcp_now) RTT counter (t_rtt)

tcp_xmit_timer Function cont.

Update smoothed estimators and RTO

srtt srtt g delta 8 srtt 8 srtt delta t _ srtt t _ srtt delta rtt var rtt var h delta rtt var t _ rtt var t _ rtt var delta RTO srtt 4 rtt var t _ srtt RTO t _ rtt var 8 t _ rtt var 4

Retransmission Timeout (tcp_timers Function cont.)


Retransmission Timeout cont.

Source introduction

Increment shift count (t_rxtshift) Calculate new RTO Ask IP to find a new route Clear estimators Force retransmission of oldest unacknowledged data