Trying to understand IP packet flow
So I'm having trouble understanding how packets travel from one machine to another. Below I've put in an example of Computer 1 trying to connect to Computer 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: см. Насколько я понимаю, пункт назначения остается прежним, но источник будет обновляться по мере прохождения своего пути. Это правильно или мне их что-то не хватает?
5 ответов
Уф. Это немного сложно, учитывая ваш сценарий.
Прежде всего, маршрутизатор 2 не должен совместно использовать интерфейс с маршрутизатором 1, который также находится на их клиентских интерфейсах.
В вашем примере все 4 устройства совместно используют один и тот же сегмент ЛВС, который, кроме того, находится в не маршрутизируемом (edit: через "Интернет") диапазоне 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) изменяют PER HOP. PER HOP определяется как "проходящий через любое устройство обработки уровня 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.
Надеюсь, это поможет. Если это все еще сбивает с толку, не стесняйтесь возвращать сообщения, и я постараюсь объяснить конкретное подмножество, которое вы считаете сложным.
Ваш пример ошибочен. (Я видел, как вы редактировали его, он все еще несовершенен.)
В вашем примере маршрутизаторы 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-адрес источника второго NIC маршрутизатора 1 и MAC-адрес назначения первого NIC маршрутизатора 2. И так до тех пор, пока он не дойдет до компьютера 2.
Вы наполовину правы в том, что 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
таким образом, у нас есть три сети: локальная сеть computer1 находится в (.1.X), сеть между двумя маршрутизаторами (.3.X) и локальная сеть, в которой computer2 включен (.2.X).
MAC-адреса предназначены для адресации кадров, поэтому они привязаны к реализации каждой локальной сети. вы можете использовать mac address::aa для отправки фреймов по сети, к которым подключены Computer1 и Router1, но если вы попытались отправить фрейм в::dd в этой локальной сети, он не достигнет своего места назначения. Таким образом, MAC-адрес хорош только в сети, в которой есть устройство с этим MAC.
Однако IP-адрес предназначен для передачи между сетями, поэтому он остается постоянным. пакет повторно инкапсулируется в новый кадр каждый раз, когда он пересекает маршрутизатор, но сам IP-пакет остается неизменным. это важно, потому что если бы Computer2 в вашем сценарии получил пакет от 192.168.1.1 с MAC::cc, он не мог бы сказать, что он не пришел от маршрутизатора, и когда ответит computer2, router2 не будет знать кто это отвечает.
Итак, пакет, который принимает компьютер2, имеет исходный IP-адрес 192.168.1.11, но MAC-адрес:: cc.
NAT/PAT makes this a little more confusing, in that more info is needed to make source/destination decisions, so remember, a scenario with real home routers is a little more completed.
Предполагая, что маршрутизаторы не выполняют NAT (преобразование сетевых адресов. Адреса источника и назначения будут оставаться одинаковыми в каждой точке сети. Если бы у вас был только один маршрутизатор между двумя хостами, MAC-адреса остались бы прежними. Я хотел бы ожидайте того же поведения в этом случае.
arp
Программа покажет вам, какой MAC-адрес ожидается. На каждом компьютере запустите команду arp -an
(или в Windows arp -a
, Это отобразит все известные локальные устройства и их mac-адрес. Трафик для удаленных устройств будет направляться на mac-адрес шлюза.
Если маршрут между двумя маршрутизаторами проходит через Интернет, то маршрутизаторами будет NAT, адресом источника на каждом компьютере будет IP-адрес Интернета противоположного маршрутизатора и MAC-адрес локального маршрутизатора. В этом случае вы не сможете открыть соединение между компьютерами по указанным адресам. Вам нужно будет подключиться к Интернет-IP-адресу маршрутизатора на другом конце, и ему нужно будет знать NAT адрес нужного компьютера.
Если у вас установлено соединение (ssh работает хорошо), вы можете использовать netstat -nat
команда (или в Windows netstat
команда), чтобы перечислить все соединения. Вы можете отфильтровать или отсканировать список, чтобы найти адрес подключения. В Linux использую ssh
, команда who am i
отобразит удаленный адрес, с которого вы соединились.
УЧ. Маршрутизатор не будет иметь только один IP. Я предлагаю "первый шаг в сети" Уэнделла Одома.
Вы пишете: "Насколько я понимаю, пункт назначения остается прежним, но источник будет обновляться по мере прохождения своего пути".
Непонятно, о чем ты говоришь. Вы мало что написали, а то, что вы написали, было неоднозначным. Если вы не можете писать ясно, тогда вы не будете понимать ясно.
Не просто говорите "источник" "место назначения". Скажите конкретно, если вы имеете в виду IP-адрес источника или MAC-адрес источника или IP-адрес назначения или MAC-адрес назначения.
IP-адрес источника и адресата останется прежним. (если не было NAT или чего-то очень необычного, и у вас его нет)
MAC-адреса (источник и адрес) могут меняться. Маршрутизаторы переписывают MAC-адреса. Хотя ваши маршрутизаторы на самом деле не настроены правильно. См. Рис. Ultra, в котором показано, как маршрутизатор имеет несколько сетевых адаптеров, каждый из которых имеет собственный IP-адрес в своей подсети.