
Итак, у меня возникли проблемы с пониманием того, как пакеты передаются от одной машины к другой. Ниже я привел пример, когда Компьютер 1 пытается подключиться к Компьютеру 2.
Computer 1
IP: 192.168.1.11
Subnet: 255.255.255.0
Default Gateway: 192.168.1.1
MAC: 00:00:00:00:00:aa
Router 1
IP: 192.168.1.1
Subnet: 255.255.255.0
MAC: 00:00:00:00:00:bb
Router 2
IP: 192.168.2.1
Subnet: 255.255.255.0
MAC: 00:00:00:00:00:cc
Computer 2
IP: 192.168.2.1
Subnet: 255.255.255.0
Default Gateway: 192.168.2.12
MAC: 00:00:00:00:00:dd
Если я подключился с компьютера 1 на компьютер 2 и проследил поток пакета, я полагаю, что адрес источника, с которого информация уходит с маршрутизатора 2, будет 192.168.1.2, а MAC-адрес источника будет 00:00:00:00:00:cc. Насколько я понимаю, пункт назначения остается прежним, но источник будет обновляться по мере прохождения по своему пути. Это правильно или я что-то упускаю?
решение1
Уф. Это немного сложно, учитывая ваш сценарий.
Во-первых, маршрутизатор 2 не должен использовать общий интерфейс с маршрутизатором 1, который также находится на их клиентских интерфейсах.
В вашем примере все 4 устройства совместно используют один и тот же сегмент локальной сети, который, кстати, находится в немаршрутизируемом (изменение: через «Интернет») диапазоне IP-адресов для семейства 192.168.xy.
Лучше было бы представить это следующим образом:
Computer 1
IP: 192.168.1.100
Subnet: 255.255.255.0
Default Gateway: 192.168.1.1
MAC: 03:00:00:00:00:11
Router 1
IP: 192.168.1.1
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:22
IP: 192.168.12.1
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:33
Router 2
IP: 192.168.12.2
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:44
IP: 192.168.2.1
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:55
Computer 2
IP: 192.168.2.200
Subnet: 255.255.255.0
Default Gateway: 192.168.2.1
MAC: 03:00:00:00:00:66
Не обращайте внимания на то, что MAC начинается с шестнадцатеричного символа 03, это просто для корректности для сетевых снобов. [ПРАВКА] Мне пришлось изменить его на 0x03, чтобы он был и локально назначенным, и глобально уникальным.
Итак, вот что здесь происходит: кабель от компьютера 1 подключен к маршрутизатору 1. Они оба используют сеть 192.168.1.x. Кабель от маршрутизатора 1 к маршрутизатору 2. Они используют сеть 192.168.12.x. Кабель от маршрутизатора 2 к компьютеру 2. Они используют сеть 192.168.2.x.
В вашем первоначальном описании все 4 устройства должны были быть подключены к одному и тому же коммутатору, чтобы он вообще работал... и в таком случае компьютер 1 напрямую подключался бы к компьютеру 2. Примечание: для вас, сетевых волшебников, я знаю, что вы можете использовать статическую маршрутизацию, чтобы заставить работать исходную конфигурацию сети, но это не то, о чем спрашивает этот пользователь...
Теперь перейдем к вашему конкретному вопросу.
Вы правы наполовину. MAC-адрес, который видит Компьютер 2, принадлежит Маршрутизатору 2. В моем примере это будет MAC 03:00:00:00:00:55. Однако IP-адрес, который он видит, принадлежит Компьютеру 1. Вот как Компьютер 2 может ответить Компьютеру 1. IP-адреса, теоретически, «универсально уникальны».
Принцип работы сетей, учитывая ваш уровень знаний, заключается в том, что адреса уровня 2 (канал передачи данных / MAC-уровень - в среде Ethernet/IPv4) изменяются НА КАЖДЫЙ ПРОХОД. КАЖДЫЙ ПРОХОД определяется как «прохождение любого устройства обработки уровня 3». Маршрутизаторы и компьютеры почти всегда обрабатывают уровень 3. Коммутаторы могут обрабатывать уровень 3, но они, как правило, оставляют его в покое.
Итак, когда сообщение передается от компьютера 1 к компьютеру 2, поток выглядит следующим образом:
AT HOP 1 — между компьютером 1 и маршрутизатором 1
SourceIP: 192.168.1.100 (Computer 1)
SourceMAC: 03:00:00:00:00:11 (Computer 1)
DestIP: 192.168.2.200 (Computer 2)
DestMAC: 03:00:00:00:00:22 (Router 1 - Interface facing Computer 1)
AT HOP 2 - Между маршрутизаторами
SourceIP: 192.168.1.100 (Computer 1)
SourceMAC: 03:00:00:00:00:33 (Router 1 - Interface facing Router 2)
DestIP: 192.168.2.200 (Computer 2)
DestMAC: 03:00:00:00:00:44 (Router 2 - Interface facing Router 1)
AT HOP 3 — между маршрутизатором 2 и компьютером 2
SourceIP: 192.168.1.100 (Computer 1)
SourceMAC: 03:00:00:00:00:55 (Router 2 - Interface facing Computer 2)
DestIP: 192.168.2.200 (Computer 2)
DestMAC: 03:00:00:00:00:66 (Computer 2)
Итак, вы видите, адреса уровня IP-адресов (уровень 3) остаются неизменными на протяжении всего сеанса связи, но адреса уровня канала передачи данных (уровень 2) изменяются каждый раз, когда в процесс вовлекается другое устройство, обрабатывающее адрес уровня 3.
Надеюсь, это поможет. Если все еще непонятно, смело пишите, и я постараюсь объяснить, что именно вызывает у вас затруднения.
решение2
Ваш пример некорректен. (Я видел, как вы его отредактировали, но он все равно некорректен.)
В вашем примере маршрутизаторы 1 и 2 находятся в одной подсети (т. е. у них одинаковая маска подсети). Поэтому компьютер 1 НЕ будет ничего отправлять из шлюза по умолчанию, он просто выбросит пакет из сетевой карты и будет ожидать, что коммутатор или среда передаст его компьютеру 2.
Теперь, если вы измените Маршрутизатор 2 и Компьютер 2 на это:
Router 2
IP: 192.168.2.2
и
Computer 2
IP: 192.168.2.12
[редактирование по нику, выделенному жирным шрифтом] тогда Маршрутизатор 2 и Компьютер 2 будут включены (их собственная отдельная подсеть, НЕТ:)отдельные подсети, и пример начнет приобретать больше смысла.
Однако, поскольку вы не предоставили диаграмму, я предполагаю, что вы хотите, чтобы трафик двигался следующим образом:
Компьютер 1 <-> Маршрутизатор 1 <-> Маршрутизатор 2 <-> Компьютер 2
Маршрутизатор 1 и маршрутизатор 2 не могут находиться в одной подсети, чтобы это работало. Фактически между ними будет третья сеть, в которой они будут обмениваться трафиком. (Также немного странно, что маршрут по умолчанию ссылается на частную сеть, обычно это означает «Интернет», но это, безусловно, возможно.)
Вот что, как я предполагаю, вы пытаетесь сделать. Прошу прощения за грубость картинки:
MAC-адреса не распространяются за пределы маршрутизаторов. Компьютер 1 хочет отправить пакет на Компьютер 2. Компьютер 2 не находится в той же подсети, поэтому компьютер 1 отправляет его на шлюз по умолчанию.
В результате получается кадр, отправленный с MAC-адреса компьютера 1 на MAC-адрес маршрутизатора 1.
Маршрутизаторы пересылают пакеты, а пересылка означает копирование из другого интерфейса. Таким образом, маршрутизатор 1 увидит, что пункт назначения пакета, который он получил от компьютера 1, предназначен для компьютера 2. (Ему пришлось бы запрограммировать статический маршрут или использовать протокол типа RIP/OSPF, чтобы знать это в такой ситуации.)
Итак, IP-пакет теперь имеет исходный MAC-адрес второй сетевой карты маршрутизатора 1 и целевой MAC-адрес первой сетевой карты маршрутизатора 2. И так далее, пока он не попадет на компьютер 2.
решение3
Вы правы наполовину в том, что MAC-адрес меняется с каждым переходом, но IP-адреса соединения не меняются, если только не используется встроенная технология NAT/PAT или прокси-сервер приложения.
Обратите внимание, я считаю, что адрес для computer2 должен быть примерно 192.168.2.12, а не 1.12. это будет означать, что ваш пакет вообще не проходит через router2. Я считаю, что вы ищете что-то вроде:
Computer 1
IP: 192.168.1.11
Subnet: 255.255.255.0
Default Gateway: 192.168.1.1
MAC: 00:00:00:00:00:aa
Router 1
LAN IP: 192.168.1.1
Subnet: 255.255.255.0
MAC: 00:00:00:00:00:bb
WAN IP: 192.168.3.1
Subnet: 255.255.255.0
MAC: 00:00:00:00:00:b1
Router 2
LAN IP: 192.168.2.2
Subnet: 255.255.255.0
MAC: 00:00:00:00:00:cc
WAN IP: 192.168.3.2
Subnet: 255.255.255.0
MAC: 00:00:00:00:00:c1
Computer 2
IP: 192.168.2.12
Subnet: 255.255.255.0
Default Gateway: 192.168.2.2
MAC: 00:00:00:00:00:dd
Итак, у нас есть три сети: локальная сеть компьютера 1 находится в (.1.X), сеть между двумя маршрутизаторами (.3.X) и локальная сеть, в которой находится компьютер 2 (.2.X).
MAC-адреса предназначены для адресации кадров, поэтому они привязаны к реализации каждой локальной сети. Вы можете использовать MAC-адрес ::aa для отправки кадров по сети, к которой подключены Computer1 и Router1, но если вы попытаетесь отправить кадр на ::dd в этой локальной сети, он не достигнет своего назначения. Поэтому MAC-адрес хорош только в сети, в которой есть устройство с этим MAC-адресом.
Однако IP-адрес передается между сетями, поэтому он остается неизменным. Пакет повторно инкапсулируется в новый кадр каждый раз, когда проходит через маршрутизатор, но сам IP-пакет остается неизменным. Это важно, потому что если Computer2 в вашем сценарии получил пакет с 192.168.1.1 с MAC ::cc, он не сможет определить, что пакет пришел не с маршрутизатора, и когда computer2 ответит, router2 не будет знать, кому он отвечает.
Итак, пакет, который получает computer2, имеет исходный IP-адрес 192.168.1.11, но MAC-адрес ::cc.
NAT/PAT немного запутывает ситуацию, поскольку для принятия решений об источнике/назначении требуется больше информации, поэтому помните, что сценарий с реальными домашними маршрутизаторами немного более завершен.
решение4
ОЙ. У маршрутизатора не будет только одного IP. Предлагаю «Сетевой первый шаг» Венделла Одома.
Вы пишете: «Насколько я понимаю, пункт назначения остается прежним, но источник будет обновляться по мере прохождения маршрута».
Непонятно, о чем вы говорите. Вы не написали много, а то немногое, что вы написали, было двусмысленным. Если вы не можете писать ясно, то вы не поймете ясно.
Не говорите просто "источник" "адрес назначения". Говорите конкретно, если вы имеете в виду IP-адрес источника или MAC-адрес источника или IP-адрес назначения или MAC-адрес назначения.
Исходный и конечный IP-адреса останутся прежними. (Если только не было NAT или чего-то очень необычного, а у вас этого нет)
MAC-адреса (источник и получатель) могут меняться. Маршрутизаторы переписывают MAC-адреса. Хотя ваши маршрутизаторы на самом деле не настроены правильно. Посмотрите на картинку ultra, как маршрутизатор имеет несколько сетевых карт, каждая из которых имеет свой собственный IP в своей собственной подсети.