Ситуация: сервер A получает сетевой трафик, отправленный с сервера B на сервер C. Серверы B и C отправляют через дампы MySQL. Довольно небольшой трафик. По какой-то причине интерфейс на сервере A измеряет этот трафик. Он ничего не делает с этим, он просто видит это.
Когда я запускаю tcpdump, я вижу, что источником и целью пакетов mysql являются сервер B и сервер C. Никогда не сервер A.
12: 52: 44.482026 IP $ IP_server_B.3306> $ IP_server_A.38662: Флаги [.], Seq 15905879: 15911671, ack 8910, win 62, options [nop, nop, TS val 237711415 ecr 331318504], длина 5792
Я дважды проверил сценарий, который отправляет дамп, IP сервера A в нем нигде нет. Я проверил, есть ли конфликты IP - нет. Интерфейсы на всех трех машинах имеют разные MAC-адреса (просто хотел все исключить). Я могу воспроизвести поведение на этих машинах 10 раз из 10.
Все 3 машины являются виртуальными установками CentOS 6 x64. Серверы A и B находятся в одной подсети, сервер C находится в совершенно другом центре обработки данных и сети. Примечание. Серверы A и B находятся в одной подсети, но не работают на одном физическом гипервизоре.
Итак ... вопрос: как, черт возьми, сервер A видит этот трафик?
Если серверы A и B подключены к простому концентратору, а не к более интеллектуальному коммутатору, весь трафик будет транслироваться на все подключенные машины. Затем машины должны решить, предназначен ли этот трафик, который они получают, для них или они должны просто игнорировать его. Tcpdump по умолчанию переводит ваш интерфейс в неразборчивый режим, что означает, что он не игнорирует никакой трафик, даже тот, который ему не адресован. Вот почему с Tcpdump вы можете видеть весь трафик на вашем хабе.