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

Значение направления P tcpdump

Это виртуальная машина, работающая под управлением kvm / libvirt / qemu (10.202.7.128) пингует другую аппаратную систему (10.202.7.4) через мост гипервизора. Все работает нормально, но 'tcpdump -neli any icmp and host 10.202.7.128' показывает три записи на запрос:

14:42:39.921785 P 52:54:00:14:71:1b 
ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 2485, seq 1, length 64

Вторая запись идентична, за исключением P заменяется на "Out", третья запись идентична первой. Далее следуют три ответа с одного и того же MAC-адреса для 10.202.7.4 с той лишь разницей, что P, Out, P последовательность.

Почему на пинг три записи и что P в направлении значит? Я тщетно искал в Интернете, если не искал не то.

Обновить:

Основываясь на ответе Zoredache, я связал спецификацию интерфейса с тремя задействованными: vnet5 (сетевая карта гостевой виртуальной машины на гипервизоре), br0 (мост гипервизора) и eno1 (физический сетевой адаптер, идентифицированный как порт моста для моста) и получил один запрос / ответ для каждого пинга при тестировании каждого интерфейса, поэтому я (безумно) предполагаю, что это причина трех записей с использованием «любой». Я все еще озадачен P и последовательность P, Out, P.
Любое понимание?

Дальнейшее обновление (и я хочу поблагодарить Антона за его исследования, очень ценные.)

Провел тест снова с четырьмя спецификациями tcpdump, все '-neli <interface> icmp and host 10.202.7.128' с интерфейсами vnet5, br0, eno1 и "any". Отметил временные метки, чтобы определить, что"any"запись соответствует отдельным записям интерфейса.

"Любые" результаты (vnet5/10.202.7.128 является 52:54:00:a2:bd:48, 10.202.7.4 является b0:00:b4:02:93:6e)

00:06:57.775050   P 52:54:00:a2:bd:48 ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775074 Out 52:54:00:a2:bd:48 ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775050   P 52:54:00:a2:bd:48 ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775940   P b0:00:b4:02:93:6e ethertype IPv4 (0x0800), length 100: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64
00:06:57.775956 Out b0:00:b4:02:93:6e ethertype IPv4 (0x0800), length 100: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64
00:06:57.775940   P b0:00:b4:02:93:6e ethertype IPv4 (0x0800), length 100: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

vnet5 результаты

00:06:57.775050 52:54:00:a2:bd:48 > b0:00:b4:02:93:6e, ethertype IPv4 (0x0800), length 98: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775956 b0:00:b4:02:93:6e > 52:54:00:a2:bd:48, ethertype IPv4 (0x0800), length 98: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

br0 результаты

00:06:57.775050 52:54:00:a2:bd:48 > b0:00:b4:02:93:6e, ethertype IPv4 (0x0800), length 98: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775940 b0:00:b4:02:93:6e > 52:54:00:a2:bd:48, ethertype IPv4 (0x0800), length 98: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

eno1 результаты

00:06:57.775074 52:54:00:a2:bd:48 > b0:00:b4:02:93:6e, ethertype IPv4 (0x0800), length 98: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775940 b0:00:b4:02:93:6e > 52:54:00:a2:bd:48, ethertype IPv4 (0x0800), length 98: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

В 775050 метка времени соответствует vnet5 и br0, ожидаемый первый «прыжок» (vnet5 к br0). В 775074 соответствует eno1 что является ожидаемым вторым "прыжком" (br0 к eno1). У меня нет объяснения повторению второго 775050 запись, потому что это все еще запрос.

В 775940 отметка времени соответствует eno1 и br0, ожидаемый первый «прыжок» ответа (eno1 к br0). В 775956 отметка времени соответствует vnet5, ожидаемый второй "прыжок" ответа (br0 к vnet5). Опять же, у меня нет объяснения повторению второго 775940 запись, потому что это все еще ответ.

Заключительное примечание, оба "Out"записи относятся к br0 передача на интерфейс (eno1 при исходящем, vnet5 на входящем).

Если у кого-то есть объяснение повторения двух записей, ответьте.

Я заглянул в исходный код из tcpdump.

Значение поля типа пакета:

  • In - пакет адресован хосту
  • Out - исходящий пакет
  • B - трансляция
  • M - многоадресная передача
  • P - пакет адресован другому хосту

Обновить

Дублированные пакеты в tcpdump выход, вызванный -i any вариант.

Когда кадр Ethernet прошел через мост Linux, и вы используете -i any вариант tcpdump, вы увидите этот кадр несколько раз. Первый раз вы видите рамку на интерфейсе ввода (vnet5), второй раз на самом интерфейсе моста (br0) и третий раз на выходном интерфейсе (eno1). Просмотр транзитных кадров на интерфейсе моста - это побочный эффект реализации моста Ethernet в ядре Linux.

Кроме того, когда интерфейс моста имеет несколько портов (подчиненные интерфейсы), в некоторых случаях вы видите копии фреймов на каждом порту, когда фрейм Ethernet заправляется лавинной рассылкой. Это происходит с широковещательными, многоадресными и неизвестными одноадресными кадрами.

Большая часть вашего дублирования вызвана -i any вариант вы прошли.

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

Я не очень знаком с KVM, но я считаю, что если у вас есть 2 виртуальные машины, подключенные через интерфейс моста, у вас будет виртуальный интерфейс для каждой виртуальной машины и интерфейс моста.

В любом случае, если вы не хотите дублирования, ограничьте tcpdump одним интерфейсом, указав имя конкретного интерфейса для -i вариант. Хотя для некоторых проблем вам действительно могут понадобиться все интерфейсы, и в этом случае вам просто нужно понять, что вы увидите дублирование.