2014-11-06 8 views
0

Я создал udp-сокет под Linux для обнаружения другой системы в сети. После создания сокета udp и назначения src IP, src Port, dst port (я знаю правильное значение) и dst IP (широковещательная передача), приложение отправляет UDP-пакет на другой конец. Идея состоит в том, чтобы другой компьютер отправил обратно UDP-пакет, чтобы мой компьютер выводил IP-адрес назначения. Другой конец отвечает сообщением ARP, которое содержит его IP-порт, а также порт IP &.Возможно, что UDP-сокет получит сообщение ARP

Хотя, сокет, который я использую, является дейтаграммой моего приложения, объявляет, что другой конец обнаружен и может получить свой IP-адрес. Похоже, что сокет udp, который я использую, получил сообщение ARP, отправленное другим концом, что выглядит сбивающим с толку.

Пожалуйста, у кого-нибудь есть объяснение, что происходит.

спасибо.

+0

Откуда вы знаете, что другой конец отвечает ARP? Почему вы думаете, что это ARP? – rodrigo

+0

Привет Родриго, я включил более подробно ниже. – user2410592

ответ

4

ARP не является протоколом на основе протокола UDP и, следовательно, не может быть захвачен с помощью UDP-сокета. Посмотрите на OSI layer, и вы найдете ARP на уровне 2..3 (link..network), в то время как UDP находится на транспортном уровне (уровень 4). Без ARP UDP не может работать даже в локальной сети.

Если вы отправляете UDP-пакет из своего сокета, он будет искать в кэше ARP системы, чтобы узнать аппаратный адрес (MAC), связанный с целевым IP-адресом (по крайней мере, если целевой IP находится внутри одного и того же локального сети). Если нет действительной записи в кэше, он выполнит запрос ARP. Этот ARP-запрос «принадлежит» ядру, и он не связан с вашим сокетом, даже если отправка в вашем сокете вызвала поиск ARP. Когда ядро ​​(а не ваш сокет) получает ответ ARP, он будет знать MAC-адрес цели и, таким образом, может инкапсулировать ваш IP-пакет (UDP на основе IP) в кадр для локальной (физической) сети (с локальным и целевым MAC-адресом включая) и отправить его через сетевую карту.

+0

На самом деле, вот почему я смущен. Я знаю, что не имеет смысла, что необработанное сообщение Ethernet, такое как ARP, захватывается интерфейсом высокого уровня, таким как udp socket. Однако я не могу найти другое объяснение того, как мой компьютер узнает IP-адрес другого конца моего приложения. – user2410592

+0

@ user2410592 Почему вы думаете, что ваш UDP-сокет захватывает кадр ARP? – nos

+0

@ user2410592: Я добавил более подробную информацию, и я надеюсь, что теперь должно быть яснее, как сокеты UDP и ARP-пакеты связаны друг с другом. –