Назад | Перейти на главную страницу

Wireshark показывает «TCP Dup Ack» в SACK после каждого обычного ACK.

У меня есть TCP-сеанс, захваченный с помощью зеркалирования порта коммутатора и tcpdump. При просмотре (в Wireshark) я вижу один и тот же шаблон всякий раз, когда отправляю сообщение; вот отрывок из исходящих пакетов (я не фиксирую входящие ... пока):

[PSH, ACK] Seq=34477 Ack=46645 Len=51 # sending first message
[ACK] Seq=34528 Ack=46714 Len=0 # acknowledge response (not shown)
[ACK] Seq=34528 Ack=46714 Len=0 SLE=46645 SRE=46714 # TCP Dup Ack!

[PSH, ACK] Seq=34528 Ack=46714 Len=51 # sending second message
[ACK] Seq=34579 Ack=46783 Len=0 # acknowledge response (not shown)
[ACK] Seq=34579 Ack=46783 Len=0 SLE=46714 SRE=46783 # TCP Dup Ack!

Вопрос в том, почему я получаю эти пакеты "dup ack", которые на самом деле являются пакетами TCP Selective Acknowledgment (SACK), которые кажутся полностью избыточными с обычными пакетами ACK, которые им предшествуют?

Я постоянно вижу вышеуказанный образец для этого потока TCP. Машина работает под управлением RHEL7. Когда я запускаю tcpdump на обычном интерфейсе (а не на зеркале), я не вижу повторяющихся подтверждений.

Хост получает дублирующиеся пакеты в вашем сценарии - одна копия поступает из исходного источника, другая - на зеркальный порт. Он отвечает на оба, и затем вы видите оба ответа на зеркальном порту.
Интерфейс не имеет значения, пока пакет обрабатывается ядром, только параметры, которые заботятся приложением, - это IP и порт.