1

У меня есть две машины Windows 2012 R2 (122 и 115), размещенные на одном хосте VMWare У нас на уровне приложений между этими двумя машинами пульс, время от времени будет происходить повторная передача tcp. Основываясь на журнале wireshark, похоже, что повторная передача происходит за 12-45 миллисекунд, а повторная передача может происходить либо в 122, либо в 115. Например, один из последних журналов (этот журнал записывается на компьютере 122) выглядит так:

  1. В 10:30: 42.654764 115 отправляет 122: PSH+ACK Seq = 28457 Ack = 26914 Win = 524032 Len = 59
  2. В 10:30: 42.668642 122 отправляет 115: ACK Seq = 26914 Ack = 28516 Win = 524800 Len = 0
  3. В 10:30: 42.668764 115 отправляет 122: [Tcp Retransmission] PSH+ACK Seq = 28457 Ack = 26914 Win = 524032 Len = 59
  4. В 10:30: 42,668787 122 отправляет 115: ACK Seq = 26914 Ack = 28516 Win = 524800 Len = 0 SLE = 28457 SRE = 28516

Таким образом, похоже, что 115 считает, что 122 истекло по истечении 34 миллисекунд (даже если 122 действительно отвечает немного раньше), а затем пытается повторить передачу. Я попытался найти этот тайм-аут повторной передачи в реестре, но безрезультатно. (Я искал что-то вроде InitialRtt) Мои вопросы:

  1. 34 миллисекунды - это стандартная практика?
  2. Может ли VMWare иметь какое-либо отношение к этому?
  3. Любая причина, почему 122 медленно в ACK? (Программное обеспечение на обоих концах написано нами, но мы не думаем, что мы когда-либо пытаемся изменить это значение, я могу ошибаться, поскольку лично я не писал код).

1 ответ1

0

Для установленных TCP-соединений тайм-ауты повторной передачи будут рассчитываться динамически в зависимости от RTT соединения между клиентом и сервером. По сути, TCP будет пытаться определить, сколько времени он должен ожидать, чтобы ожидать ACK для пакета, который он отправил. Если этот таймер истекает, он запустит повторную передачу.

Таким образом, основываясь на вашем примере, мы можем предположить, что 122 получает пакет из 115. 122 отправляет ACK для этого пакета, но фактически никогда не достигает 115. 115 считает, что его исходный пакет никогда не был получен 122, поэтому повторно передает его после истечения таймера повторной передачи. 122 принимает эту повторную передачу и отправляет другой ACK.

Надеюсь, это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .