Почему 2-й запрос ARP ждет, пока не исчезнут эхо-запросы?

421
SkyParrillo

Эта проблема была предложена мне одним из моих профессоров, потому что она возникла только после перехода с 100-мегабайтных карт на гигабитные сетевые карты. Второй запрос arp, исходящий от компьютера, который отправляет эхо-запрос (для отправки ответа), не отправляется до тех пор, пока не пройдут эхо-запросы.

Я решил провести домашнее тестирование с парой виртуальных машин и посмотреть, смогу ли я найти причину.

Пример захвата Wireshark

После очистки кэша arp на обеих машинах (arp -d) и проверки связи я получил те же результаты, что и мой профессор, но не могу понять, почему.

Я немного погуглил и нашел кого-то с похожей проблемой, использующей linux (я использую Windows 10), он что-то говорил о существовании устаревшей записи в таблице arp, а также о том, что называется задержкой при первом тестировании, но я так и не смог чтобы найти любую информацию об этих вещах для Windows.

Кто-нибудь знает, почему это может происходить? Или для чего нужен второй запрос arp, если он не находит первое устройство?

4
Да, это интересно. Ping-ответ был выполнен без arp, потому что источник находился в той же сети, и поэтому mac-адрес ответа был во входящем пакете. Затем, позже, существует одноадресная arp (а не традиционная широковещательная передача) - поэтому у устройства назначения уже была запись arp (извлеченная из ping) и похоже, что она проверяла ее. Возможно, записи arp помечаются так, чтобы быстрее устаревать при сборе с помощью этого метода. Paul 5 лет назад 0
Есть ли способ доказать, что это происходит? Или любой способ посмотреть, как долго запись устарела на окнах? Это то же самое на Linux, как Windows? SkyParrillo 5 лет назад 0
Я просто догадываюсь. Следуя ответу Appleoddity ниже, получатель заполняет свою таблицу arp. Но обратите внимание, что он специально запрашивает MAC-адрес, а не широковещательную рассылку, поэтому уровень 2 должен был удерживать Mac от пинга. Я не знаю внутреннюю работу стека Windows, чтобы быть уверенным, поэтому комментарий, а не ответ. Paul 5 лет назад 0

1 ответ на вопрос

2
Appleoddity

Похоже, это то, что Брюс Хартпенс называет «Return ARP». Как описано в этом отрывке из Руководства по пакетам для протоколов базовой сети.

Диалог, показанный на рисунке 4-12, иллюстрирует еще один важный аспект ARP - только хост, инициирующий диалог (генерирующий запрос ARP), поместит запись для хоста назначения в свою локальную таблицу ARP. То есть другие станции, слышащие обмен, даже если они получают запрос ARP, не будут добавлять эти станции в свои собственные таблицы ARP. Однако многие хосты (особенно маршрутизаторы) проявляют агрессию, когда дело доходит до заполнения их таблиц, и, услышав трафик ARP или участвуя в сообщениях ARP, впоследствии будут генерировать свои собственные запросы ARP для заполнения своих таблиц.

Короткий ответ. Хост назначения заполняет свою собственную таблицу ARP теперь, когда он знает о другом хосте.

Это все еще объясняет, почему в начале пинга до смены сетевых адаптеров раньше было два запроса arp? SkyParrillo 5 лет назад 0