Как определить повторную передачу на стороне клиента или на стороне сервера от pcap

Я пытаюсь получить некоторые разъяснения по поводу того, что читаю здесь:

Как рассчитать потерю пакета из двоичного файла TCPDUMP

Первый ответ говорит, что порядковый номер будет одинаковым от клиента к серверу и от сервера к клиенту, ack будет одинаковым, и это скажет вам, какая сторона выполняет повторную передачу. Однако, когда я получаю вывод, такой как этот:

10:58:15.317823 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040385, ack 56380, win 32768, length 117
10:58:15.317841 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040385:3040470, ack 56380, win 32768, length 85
10:58:15.550090 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040470, ack 56380, win 32768, length 202
10:58:15.811131 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040470, ack 56380, win 32768, length 202
10:58:16.133386 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040470, ack 56380, win 32768, length 202

В этом примере первые 2 строки имеют разные порядковые номера и один и тот же ack, но это пакет от клиента к серверу, поэтому какая сторона выполняет здесь повторную передачу?

В последних 3 строках и порядковые номера, и подтверждения совпадают, так как узнать, какая сторона ретранслирует пакет? Обратите внимание, что в этом примере 1.2.3.4 является клиентом, а 5.6.7.8 - сервером.

1 ответ

Это повторные передачи от клиента к серверу. Вот что происходит:

  • Клиент отправляет 2 сегмента. Один с 117 байтами и один с 85 байтами (pkts 1 и 2)
  • Клиент ожидает подтверждения от сервера, который никогда не приходит
  • Примерно через 200 мс истекает таймер повторной передачи клиента, поэтому он использует повторное пакетирование и объединяет оба предыдущих сегмента в один сегмент по 202 байта (pkt 3)
  • Клиент сбрасывает свой таймер повторной передачи, срок действия которого истекает, поскольку ACK не получен, поэтому он повторяет повторную передачу (pkt 4)
  • Клиент увеличивает таймер, снова ждет, таймер истекает, и он снова передает (pkt 5)

Мы знаем, что это повторные передачи от клиента, потому что все пакеты от клиента к серверу. Мы знаем, что они ретранслируются, потому что порядковый номер один и тот же, то есть он отправляет одни и те же данные снова и снова.

Другие вопросы по тегам