Что такое кэш соседей
Чтобы отправить пакет устройству в той же сети, компьютеру нужен его физический адрес. Для IPv4 соответствие между IP и MAC хранится в таблице ARP, а для IPv6 используется аналогичный механизм обнаружения соседей. Windows держит обе таблицы в одном кэше, и Get-NetNeighbor выводит его целиком.
Команду используют, чтобы увидеть, с какими устройствами компьютер разговаривал недавно, и чтобы проверить, нет ли странностей: два IP-адреса с одним MAC, пропавший шлюз, дубликаты. Кэш не равен списку всех устройств сети: в него попадают лишь те, с кем был обмен.
Классический вариант для cmd описан на странице про таблицу ARP. Здесь показан PowerShell-вариант с фильтрами.
Столбцы вывода
Основные поля выглядят так.
| Поле | Значение |
|---|---|
| ifIndex | Номер интерфейса, к которому относится запись |
| IPAddress | Адрес соседа |
| LinkLayerAddress | MAC-адрес соседа |
| State | Состояние записи |
| InterfaceAlias | Имя подключения |
В выводе будут записи и для IPv6, и для служебных адресов группового вещания: адреса, начинающиеся на 224 и 239, а также ff02 и подобные. Они обычно помечены как Permanent и не относятся к реальным устройствам. Чтобы отсеять лишнее, укажите параметр -AddressFamily IPv4.
Что означают состояния
Состояние записи показывает, насколько можно ей доверять.
- Reachable: недавно получено подтверждение, что сосед отвечает;
- Stale: запись давно не проверялась, адрес может быть уже недоступен, но он пока хранится;
- Delay и Probe: система проверяет, жив ли сосед;
- Incomplete: запрос отправлен, ответа ещё нет;
- Unreachable: ответа не было, сосед считается недоступным;
- Permanent: запись постоянная, обычно служебная или добавленная вручную.
Статус Stale не признак проблемы. Это нормальное состояние для устройств, с которыми давно не общались. А вот много записей Incomplete или Unreachable для шлюза означает, что до роутера не достучаться.
Практические запросы
Вот несколько команд, которые решают типовые задачи:
- Get-NetNeighbor -AddressFamily IPv4 оставляет только IPv4-соседей;
- Get-NetNeighbor -State Reachable показывает только отвечающие устройства;
- Get-NetNeighbor -IPAddress 192.168.1.1 находит запись конкретного адреса, подставьте адрес своего роутера;
- Get-NetNeighbor | Where-Object { $_.State -ne "Permanent" } отсеивает служебные записи.
Чтобы заполнить кэш перед просмотром, сначала обратитесь к устройствам: например, пингуйте нужный адрес или всю подсеть. Пока обмена не было, записи в таблице просто нет.
Как искать ошибки в сети и добавление и удаление записей
Одинаковый MAC-адрес у нескольких разных IP может быть нормален: маршрутизатор отвечает за всю подсеть и часто занимает несколько адресов. Но если два соседа из локальной сети делят один MAC без видимой причины, стоит разобраться, какое устройство отвечает.
Конфликт IP-адресов проявляется тем, что соединение работает с перебоями, а запись для одного адреса периодически меняет MAC. Проверьте, нет ли двух устройств с одинаковым статическим адресом, и вынесите статические адреса за пределы пула DHCP. Подробнее о резервировании адресов читайте на странице про DHCP-резервирование.
Если вас интересует, кто подключён к вашей сети, помните: кэш показывает не всех. Полный список надёжнее смотреть в интерфейсе роутера.
Записи можно добавлять и удалять вручную командами New-NetNeighbor и Remove-NetNeighbor, но для этого нужны права администратора и понимание последствий. Статическая запись закрепляет MAC за адресом, пока её не удалят, и если устройство потом заменят, связь пропадёт.
Для обычной диагностики достаточно просмотра. Если кэш содержит устаревшие данные, часто хватает дождаться их истечения или очистить таблицу командой Remove-NetNeighbor с подходящими параметрами либо командой netsh interface ip delete arpcache. Выполняйте очистку осознанно: связь с соседями ненадолго замедлится, пока записи не восстановятся.
Пример: проверить доступность шлюза и ограничения и границы применения
Чтобы убедиться, что компьютер видит роутер на канальном уровне, найдите адрес шлюза в выводе Get-NetIPConfiguration, а затем выполните Get-NetNeighbor -IPAddress с этим адресом. Если запись есть и состояние Reachable или Stale с корректным MAC, связь до роутера в порядке. Если записи нет или состояние Incomplete, компьютер не получает ответов от роутера.
Следующий шаг в такой ситуации — проверка кабеля, питания роутера и Wi-Fi. Если соединение раньше работало, а сейчас пропало, перезапуск роутера часто возвращает всё на место. В остальных случаях обратитесь к провайдеру.
Сверьте MAC роутера с наклейкой на его корпусе: так вы убедитесь, что отвечает именно ваше устройство, а не чужое.
Кэш соседей описывает только текущий сегмент сети. Устройства за роутером, в других подсетях и в интернете здесь не появятся: компьютер видит лишь MAC роутера, а не MAC удалённого сервера. Поэтому по этой таблице нельзя судить о доступности внешних адресов.
Кроме того, некоторые устройства используют случайные MAC-адреса для Wi-Fi, и они могут меняться от сети к сети. Если вы сопоставляете записи с известными устройствами, учитывайте эту особенность и сверяйтесь со списком клиентов в интерфейсе роутера.
Для знакомства со всей сетью используйте не кэш, а специальные средства сканирования своей подсети, но только в своей сети и с ведома её владельца.
При диагностике записывайте адрес, MAC и состояние шлюза до и после проблемы. Сравнение двух снимков показывает, изменилось ли что-то на канальном уровне. Если MAC шлюза изменился без вашего ведома, проверьте, не появился ли в сети второй роутер или не включена ли на другом устройстве раздача адресов. Конфликты такого рода часто возникают после подключения чужого или старого роутера к домашней сети.
Если вы работаете в сети с несколькими подсетями или виртуальными интерфейсами, не удивляйтесь записям для неизвестных адресов: гипервизоры и контейнерные среды создают собственные сети. Ориентируйтесь на поле InterfaceAlias, чтобы отделить реальную домашнюю сеть от внутренних сетей, созданных программами на этом же компьютере.