Сеть начинает капризничать: то компьютер видит интернет, то теряет его, файловые папки открываются через раз, а Windows периодически выбрасывает уведомление об обнаружении адреса, уже используемого другим устройством. Это классический почерк конфликта адресов - ситуации, когда два устройства в одной сети получили один и тот же числовой адрес. Сеть не умеет доставлять данные по дублирующемуся адресу однозначно, поэтому пакеты мечутся между двумя претендентами, а связь рвётся самым непредсказуемым образом. Разобраться помогают встроенные средства Windows, и для этого не нужно ничего, кроме командной строки и понимания, как устроена адресация.
Каждое устройство в локальной сети имеет два идентификатора: числовой сетевой адрес, который можно менять, и неизменный аппаратный адрес, зашитый производителем в само оборудование. Сетевой адрес обязан быть уникальным в пределах одной подсети. Когда он дублируется, начинается борьба двух устройств за один адрес, и победитель меняется случайным образом, отчего связь и плавает. Задача диагностики - найти оба устройства-нарушителя по их аппаратным адресам и развести их по разным сетевым адресам.
Подтверждение факта конфликта по системным признакам
Первый шаг - убедиться, что дело именно в конфликте, а не в другой неисправности. Самый явный признак - всплывающее уведомление системы о том, что обнаружен конфликт адресов с другим устройством в сети. Но уведомление появляется не всегда. Косвенно конфликт выдаёт собственная конфигурация: команда показывает текущий адрес, и стоит свериться, не повторяется ли он:
ipconfig /all
Если в выводе адрес относится к служебному диапазону, начинающемуся на 169.254, это тоже косвенный знак: машина не смогла удержать нормальный адрес и откатилась к автоматическому. Полную картину системных событий о конфликте даёт журнал, но проще всего сначала проверить связь: при конфликте пинг до собственного шлюза идёт с перебоями, то проходит, то нет, что само по себе указывает на борьбу за адрес где-то рядом.
Чтение таблицы соответствия адресов для поиска дубликатов
Главный инструмент поиска конфликта - таблица соответствия числовых и аппаратных адресов, которую ведёт каждый компьютер. Она показывает, какому числовому адресу какое физическое устройство отвечает в локальной сети. Вывод таблицы делается командой:
arp -a
В таблице каждая строка связывает числовой адрес с аппаратным адресом устройства вида набора из шести пар символов. Конфликт выдаёт себя так: один и тот же числовой адрес внезапно начинает отзываться разными аппаратными адресами в разные моменты, либо два разных компьютера в сети показывают разные аппаратные адреса для адреса, который должен быть уникальным. Чтобы поймать смену, таблицу смотрят несколько раз подряд с паузой и сравнивают аппаратный адрес напротив подозрительного числового. Его скачок между двумя значениями - прямая улика конфликта. Очистить таблицу и заставить её собраться заново помогает команда сброса от имени администратора:
arp -d *
После сброса повторный просмотр покажет свежесобранную таблицу, в которой проще заметить, какое именно физическое устройство сейчас занимает спорный адрес.
Опрос всей подсети для построения карты занятых адресов
Чтобы найти оба конфликтующих устройства, полезно опросить всю подсеть разом и посмотреть, кто отвечает. Короткий перебор адресов командой ping наполняет таблицу соответствия данными обо всех живых устройствах. В оболочке PowerShell это делается циклом по диапазону адресов:
1..254 | ForEach-Object { Test-Connection -ComputerName "192.168.1.$_" -Count 1 -ErrorAction SilentlyContinue }
Цикл проходит все адреса подсети от первого до последнего, отправляя по одному пакету на каждый. После такого прогона таблица соответствия заполнится всеми отозвавшимися устройствами, и её снова смотрят командой arp. Теперь видно полную карту: какой числовой адрес каким физическим устройством занят. Два разных аппаратных адреса напротив одного числового - это и есть пара виновников. По аппаратному адресу часто можно определить производителя сетевой карты, потому что первая половина адреса закреплена за конкретной фирмой, что сужает поиск физического устройства в помещении.
Принудительное обновление собственного адреса для выхода из конфликта
Когда конфликт подтверждён и компьютер сам оказался одним из претендентов, быстрое решение - заставить его отказаться от спорного адреса и запросить новый у сервиса автоматической раздачи. Делается это парой команд от имени администратора:
ipconfig /release
ipconfig /renew
Первая команда отпускает текущий адрес, вторая запрашивает новый. Если в сети работает исправная служба автоматической раздачи адресов, она выдаст свободный, и конфликт для этой машины исчезнет. Этот способ хорош, когда виноват сам компьютер, но бесполезен, если оба претендента имеют адреса, прописанные вручную. Тогда автоматический запрос ничего не даст, потому что машина продолжит держать заданный руками статический адрес, и развести устройства придётся ручной правкой настроек хотя бы одного из них.
Назначение уникального статического адреса вручную
Если конфликтуют устройства с ручными статическими адресами, лекарство одно: сменить адрес у одного из них на заведомо свободный. Сначала по карте подсети находят незанятый адрес, потом назначают его командой оболочки с привязкой к интерфейсу:
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.50 -PrefixLength 24 -DefaultGateway 192.168.1.1
Здесь задаётся новый уникальный адрес, длина префикса 24 соответствует обычной домашней маске на 254 устройства, и указывается шлюз. Перед назначением стоит убедиться, что выбранный адрес действительно свободен, пингом по нему: молчание в ответ подтверждает, что адрес никем не занят. Чтобы вовсе избежать ручных конфликтов в будущем, в настройках службы автоматической раздачи адресов на роутере резервируют диапазон под статические адреса и не выдают его автоматически. Тогда устройства с ручными адресами и устройства с автоматическими перестают пересекаться, и конфликты прекращаются как класс.
Анализ системного журнала для точной фиксации конфликта
Когда нужно доказать факт конфликта и узнать его точное время, на помощь приходит системный журнал событий. Windows записывает туда сообщение каждый раз, когда обнаруживает дубликат адреса. Найти такие записи помогает фильтрованный запрос к журналу в оболочке PowerShell:
Get-WinEvent -FilterHashtable @{LogName='System'; ID=4198,4199} -MaxEvents 20
Идентификаторы событий 4198 и 4199 относятся как раз к конфликтам и проблемам адресации. В выводе видно время каждого события и его описание, где часто указан аппаратный адрес устройства, перехватившего адрес. Это превращает смутное иногда пропадает сеть в точную хронику с датами и временем срабатываний. Сопоставив эти отметки с жалобами пользователей, легко понять, как часто возникает конфликт и в какие моменты. Если событий много и они идут плотно, проблема острая и требует немедленного вмешательства, а редкие одиночные записи указывают на временного гостя сети, который подключается изредка и забирает занятый адрес.
Проверка двойного назначения через служебную команду netsh
Оболочка управления сетью netsh умеет показывать подробности настройки адресов, недоступные обычному ipconfig. Полный вывод конфигурации протокола по всем интерфейсам делается командой:
netsh interface ip show config
В выводе по каждому интерфейсу видно, получен ли адрес автоматически или задан вручную, а также все вспомогательные параметры. Это сразу отвечает на главный вопрос диагностики: конфликтует ли машина из-за ручного статического адреса или из-за сбоя автоматической раздачи. Если адрес помечен как заданный вручную, а должен браться автоматически, найден источник проблемы. Вернуть интерфейс к автоматическому получению адреса, сняв ручную настройку, помогает команда:
netsh interface ip set address name="Ethernet" source=dhcp
После этой команды интерфейс перестаёт держать жёстко заданный адрес и запрашивает его у сети заново. Часто именно случайно оставшийся ручной адрес, прописанный когда-то для теста и забытый, годами всплывает конфликтом при каждом подключении нового устройства, занявшего тот же адрес из диапазона раздачи.
Определение производителя устройства по аппаратному адресу
Найдя в таблице соответствия два аппаратных адреса, борющихся за один числовой, остаётся опознать сами устройства физически. Здесь выручает структура аппаратного адреса. Первая его половина, три первых пары символов, закреплена за конкретным производителем оборудования и называется идентификатором изготовителя. По ней можно понять, чьё это устройство, ещё до того как его нашли в помещении. Посмотреть аппаратные адреса собственных интерфейсов помогает команда:
getmac /v
Расширенный вывод показывает аппаратный адрес каждого интерфейса вместе с его описанием. Сопоставив идентификатор изготовителя из проблемного аппаратного адреса с известными производителями, сужают круг: одно устройство может оказаться сетевой картой ноутбука одной марки, другое - встроенным адаптером моноблока другой. Это сильно ускоряет физический поиск, особенно в большом помещении с десятками устройств. Когда производитель известен, дальше дело техники: обходят устройства этой марки и сверяют их аппаратные адреса с искомым, пока не найдут совпадение. Найденное устройство либо переводят на автоматическое получение адреса, либо назначают ему свободный статический, и конфликт исчезает у самого источника, а не маскируется сменой адреса на третьей машине.
Профилактика повторных конфликтов и выводы
Разовое устранение конфликта не гарантирует, что он не вернётся. Корень проблемы обычно в одном из двух: либо кто-то вручную задал устройству адрес из диапазона автоматической раздачи, либо в сети работают два сервиса раздачи адресов одновременно, не знающие друг о друге. Второй случай особенно коварен: например, к сети случайно подключили второй роутер с включённой раздачей адресов, и два сервиса начинают выдавать пересекающиеся адреса. Поиск лишнего раздатчика ведут по той же карте подсети, отслеживая, с какого аппаратного адреса приходят настройки.
Грамотная профилактика строится на разделении зон ответственности. Автоматическая раздача обслуживает один заданный диапазон, статические адреса берутся строго за его пределами, а второй раздатчик в сети недопустим. Соблюдение этих трёх правил убирает почву для конфликтов навсегда.
Отдельно стоит держать в голове сценарий с временным гостем. Иногда конфликт создаёт устройство, которое появляется в сети редко: телефон знакомого, рабочий ноутбук, подключаемый раз в неделю, тестовая машина. Оно приносит с собой жёстко заданный адрес, занятый постоянным устройством, и на время своего присутствия рушит связь, а потом исчезает, унося улики. Поймать такого гостя помогает только журнал событий с отметками времени и регулярный снимок таблицы соответствия адресов. Когда известно, в какие моменты возникает конфликт, остаётся подкараулить нарушителя в этот промежуток и опознать его по аппаратному адресу. Встроенные средства Windows позволяют пройти весь путь от обнаружения до устранения: уведомление и плавающий пинг подтверждают конфликт, таблица соответствия адресов и опрос подсети находят виновников по аппаратным адресам, а смена адреса вручную или запросом нового разводит устройства. Конфликт адресов из пугающей и непонятной беды превращается в задачу, решаемую за несколько команд, стоит лишь понять простую истину: в одной подсети каждый числовой адрес должен принадлежать ровно одному устройству, и вся диагностика сводится к поиску того, кто это правило нарушил.