Уравнения окна перегрузки TCP при медленном запуске

Взяв управляемый состоянием код из здесь:

# Initialization
cwnd = MSS  # congestion window in bytes
ssthresh= swin # in bytes

# Ack arrival
if tcp.ack > snd.una :  # new ack, no congestion
  if  cwnd < ssthresh :
    # slow-start : increase quickly cwnd
    # double cwnd  every rtt
    cwnd = cwnd + MSS
  else:
    # congestion avoidance : increase slowly cwnd
    # increase cwnd by one mss every rtt
    cwnd = cwnd+ mss*(mss/cwnd)
else: # duplicate or old ack
  if tcp.ack==snd.una:    # duplicate acknowledgement
    dupacks++
    if dupacks==3:
      retransmitsegment(snd.una)
      ssthresh=max(cwnd/2,2*MSS)
      cwnd=ssthresh
  else:    # ack for old segment, ignored
    dupacks=0

Expiration of the retransmission timer:
 send(snd.una)     # retransmit first lost segment
 sshtresh=max(cwnd/2,2*MSS)
 cwnd=MSS

Есть несколько вещей, которых я не понимаю.

  1. Как "экспоненциально" удваивается cwnd с "cwnd = cwnd + MSS". Мне трудно понять, почему это экспоненциальный наклон, когда это просто линейное приращение.

  2. Я также не понимаю математику "cwnd = cwnd + mss * (mss / cwnd)". Предполагается, что cwnd увеличивается линейно, как эта формула достигает этого результата, когда это больше похоже на квадратную прогрессию (mss ^ 2 / cwnd).

Меня немного смущает, как эти вычисления выполняют описанные задачи. Может ли кто-нибудь объяснить, как они это делают?

Спасибо


person Yannick    schedule 27.02.2017    source источник


Ответы (1)


вы правы, если вы выполните формулу только один cwnd = cwnd + MSS это не экспоненциально

Но ключевой момент: сколько раз вы выполняете код? Ответ: «при каждом приходе подтверждения».

Итак, сначала cwnd = 1 (MSS)

В следующий раз, когда вы выполните код, вы получили 1 ACK (соответствует первому MSS), поэтому теперь cwnd = 1+ 1 = 2 (MSS) Итак, на этом шаге вы отправляете 2 MSS, поэтому вы получите 2 ACK

Итак, в следующий раз, когда вы выполните код дважды cwnd = 2 + 1 = 3 cwnd = 3 +1 = 4 Итак, на шаге 2 cwnd = 4 вы отправите 4 MSS, поэтому вы получите 4 ACKS и в следующий раз будет выполнено 4 раза

Вот почему это экспоненциально. Надеюсь, это будет полезно.

Дом

person dominique rossignol    schedule 09.10.2019