Почему сервер не может получить MAC-адрес клиента, например, IP-адрес клиента? - PullRequest
13 голосов
/ 18 мая 2010

Из того, что я знаю, все MAC-адреса, через которые прошел пакет, находятся в пакете. Это связано с тем, что каждый пакет, который идет по определенному пути, также должен быть возвращен по аналогичному пути. Итак, если маршрутизатор сервера знает о mac-адресе клиента (все они), почему страница сервера (например, aspx) не может иметь эту информацию?

Пожалуйста, объясните. (не говорите мне, что я не прав).

Если я правильно понимаю, клиент отправляет пакет, содержащий его MAC-адрес. когда пакет проходит через прокси (например, клиентский маршрутизатор), адрес прокси также добавляется в пакет. и т. д.

Вот фрагмент из Википедии о слое линии данных TCP / IP:
http://en.wikipedia.org/wiki/TCP/IP_model#Data_Link_Layer

Уровень передачи данных используется для перемещения пакеты между интернет-уровнем интерфейсы двух разных хостов на та же ссылка. Процессы передача и прием пакетов на данная ссылка может контролироваться как в драйвер программного обеспечения устройства для сетевая карта, а также на прошивку или специализированные чипсеты. Эти воли выполнять функции передачи данных, такие как добавив заголовок пакета, чтобы подготовить его для передачи, то на самом деле передать кадр по физическому Средняя. Модель TCP / IP включает спецификации перевода методы сетевой адресации, используемые в Интернет-протокол для передачи данных адресация, такая как Media Access Контроль (MAC), однако все остальные аспекты ниже этого уровня неявно предполагается, что существует в Link Layer, но не явно определены.

Ответы [ 8 ]

21 голосов
/ 18 мая 2010

На самом деле MAC-адрес, сохраненный в пакете , изменяется при каждом переходе пакета.

MAC - это сокращение для Media Access Control, со ссылкой на медиа local . Хотя IP-адреса отправителя и получателя остаются неизменными в течение всего пути (и используются для принятия решений о маршрутизации на большие расстояния), MAC-адреса отправителя и получателя просто указывают следующий переход.

Из-за этого MAC-адрес, сохраняемый в пакетах, полученных вашим сервером, должен быть MAC-адресом вашей точки присутствия-маршрутизатора или оборудования вашего провайдера.

Возможно, вы захотите взглянуть на модель OSI Layer и инкапсуляцию .

2 голосов
/ 09 февраля 2011

В IPv6 один может фактически получить MAC-адрес компьютера из адреса IPv6, если он закодирован в 64 бита адреса хоста .

См. Также Как не показывать мой MAC-адрес при использовании IPv6? на Super User.

2 голосов
/ 18 мая 2010

У вас связь между стеком IP и физическим стеком в обратном порядке. MAC-адрес находится в той части, которая оборачивает IP-информацию, а не наоборот. Поэтому, когда я отправляю что-то со своего компьютера, скажем, на ваш, физический сегмент в моей локальной сети (в данном случае Ethernet) оборачивается вокруг содержимого IP и включает в себя мой MAC. Затем маршрутизатор извлекает информацию IP и передает ее вперед и вверх (в данном случае снова через Ethernet) на мой модем DSL, используя в процессе собственный MAC. Модем DSL разворачивает IP-компоненты и отправляет их по телефонной линии, используя любой протокол, который он использует (не знаю и не заботится об этом), чтобы ... ну, вы поняли идею. Каждый физический канал связывает и распаковывает информацию IP, используя любую дополнительную информацию, которую задействует базовый физический уровень для локальной передачи.

1 голос
/ 22 июля 2010

Это IP-адрес источника и назначения, которые остаются. Идея межсетевого взаимодействия в основном основана на доставке между сегментами. Промежуточные маршрутизаторы / хост понимают только MAC-адреса. Насколько мне известно, таблицы маршрутизации должны понимать адрес машины.

Если MAC-адреса могут оставаться на протяжении всего пути пакета; Это означает, что не нужно было придумывать адреса интернет-протокола. И весь интернет использовал бы только MAC-адреса: -)

Вы можете достичь того, чего хотите, только если сервер и клиент находятся в одной локальной сети (оба хоста подключены к некоторому носителю L1).

Сказав это, ваше приложение выглядит как веб-сервер, который говорит мне, что оно не должно быть в той же сети.

Тем не менее, если вам нужен MAC-адрес исходного хоста на принимающем хосте; думаете отправить его в качестве полезного груза?

Дополнительно:

Сети не обязательно должны быть однотипными во всем мире (а именно, Ethernet, Frame Relay и т. Д.). Сетевой уровень предоставляет нам гибкость маршрутизации без различия между нижележащими уровнями (Data Link Layer) или, я бы сказал, лежащей в основе технологии L1. Короче говоря, IP предоставит нам межсетевой интерфейс, а канальный уровень (где MAC-адреса входят в картину) позаботится о связи на микроуровне (то есть локальной сети). Это справедливая причина, по которой Mac и IP-адреса сосуществуют! : -)

1 голос
/ 18 мая 2010

Нет "роутера сервера". Пакеты могут достигать сервера от многих маршрутизаторов.

Нет "роутера клиента". Пакеты могут быть отправлены с клиента на многие маршрутизаторы.

Единственные устройства, которые могут видеть MAC-адрес, - это устройства в одной локальной сети, возможно, только те, которые находятся в одном и том же сегменте кабеля.

Кстати, сервер также не может получить IP-адрес клиента, если клиент находится на другой стороне прокси-сервера.

0 голосов
/ 18 мая 2010

Простая разница заключается в том, что IP-адреса являются сквозными адресами (конечно, в IP-пакете), тогда как MAC-адреса используются только переход за переходом. Кроме того, базовый протокол MAC может меняться при каждом переходе без ведома клиента, поэтому клиент может даже не понимать все адреса на своем IP-пакете.

0 голосов
/ 18 мая 2010

Вы думаете о прямой связи между локальной сетью сервера и локальной сетью клиента, а Интернет работает не совсем так. Между двумя локальными сетями может быть любое количество прыжков - и, между прочим, нет никаких ограничений на то, что любая локальная сеть использует что-то вроде MAC, поэтому «MAC-адреса» не помещаются в IP-пакеты. «MAC» имеет смысл только в локальной сети (фактически, только тот, чьи нижние уровни действительно используют что-то вроде MAC ;-), и обнаруживается / объявляется с помощью протоколов ARP и RARP (которые не маршрутизируются ; -).

0 голосов
/ 18 мая 2010

Вы не можете - если клиент не является локальным для вашего сервера. При условии, что вы можете попробовать выполнить арпинг и получить MAC-адрес клиента таким образом.

...