3

Если я пинг 192.168.0.X из моей домашней сети, то он попытается найти в моей сети этот адрес, а не внешний IP WAN. Однако я могу пропинговать 74.125.224.163, и он пингует google.com.

Я могу настроить свою внутреннюю сеть на 74.125.224.X, а затем, если я попытаюсь пропинговать, он снова будет выглядеть только в моей сети, но я представляю (я не пытался изменить его), что я все еще мог бы общаться с сервером Google с тем же IP-адресом.

На каком уровне это разделено? Как пакеты узнают, что адрес IP-адреса должен выходить в WAN вместо LAN?

3 ответа3

11

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

Когда пакет отправляется с вашего компьютера ...

  1. Сначала ОС проверяет, назначен ли адрес назначения какому-либо сетевому интерфейсу на вашем компьютере. Если да, ОС потребляет его сама - пакет не отправляется за пределы вашего компьютера.

  2. В противном случае он ищет в таблице маршрутизации все маршруты, соответствующие адресу назначения. Их может быть несколько - ОС выбирает тот, у которого самый длинный совпадающий префикс.

  3. Если нет маршрута, который соответствовал бы адресу назначения, пакет отбрасывался.

Например, если ваш собственный адрес был 192.168.1.1 ...

  • таблица маршрутизации вашего компьютера может выглядеть так:

    • 10.11.12.0/24 доступен напрямую через интерфейс ppp0
    • 192.168.1.0/24 может быть достигнут напрямую через интерфейс eth0
    • 10.42.0.0/16 можно добраться, пройдя через 10.11.12.50
    • 0.0.0.0/0 можно получить, пройдя через 192.168.1.254

    Число после / указывает, сколько бит сравнивать; см. обозначение CIDR. Например, если это /16 , то первые 16 битов обоих адресов (начиная с крайнего левого бита) должны быть равны. Если это /0 , ничего не сравнивается, поэтому маршрут будет соответствовать любому адресу - это "маршрут по умолчанию".

    Реальные таблицы маршрутизации также имеют метрики - например, если вы подключили ноутбук к локальной сети через Ethernet и WiFi, то у него было бы два идентичных маршрута к одной и той же сети, но у маршрута Ethernet была бы более низкая метрика, поскольку он быстрее, чем WiFi , Я упустил метрики здесь для простоты.

  • если вы пингуете 192.168.1.5 , ОС будет:

    1. искать маршруты до 192.168.1.5
    2. найти маршруты 192.168.1.0/24 и 0.0.0.0/0
    3. выберите маршрут 192.168.1.0/24 , так как он имеет более длинный префикс (24> 0)
    4. увидеть, что маршрут указывает на интерфейс eth0
    5. отправить пакет по кабелю eth0

    Пакет будет проходить через Ethernet (или WiFi, или ...) напрямую к конечному компьютеру.

  • если вы 74.125.224.163 , ОС будет:

    1. искать маршруты к 74.125.224.163
    2. найти маршрут 0.0.0.0/0
    3. увидеть, что у маршрута есть шлюз 192.168.1.254
    4. ищите маршруты к 192.168.1.254 которые также доступны напрямую (без прохождения второго шлюза)
    5. найти маршрут 192.168.1.0/24
    6. увидеть, что маршрут указывает на интерфейс eth0
    7. отправить пакет по кабелю eth0

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

(Таким образом, если бы вы имели ту же сеть, что и Google, вы больше не могли бы связаться с Google, так как сначала всегда выбирался маршрут к вашей собственной сети.)

2

Нет, ваш компьютер не будет сначала пытаться найти этот адрес в домашней сети. Посмотрим на таблицу маршрутизации.

Эта таблица содержит правила для следующих вещей

  1. Соответствует ли IP явно IP-адресу (добавляется с помощью маршрута добавить -net). Затем отправьте его через этот интерфейс
  2. Принадлежит ли IP указанному диапазону сети, а затем отправьте его через определенный интерфейс.
  3. Если все не удается, отправьте его на шлюз по умолчанию через указанный интерфейс.

Здесь нет таблицы «внутренняя» или «внешняя» сеть.

Однако типичные установки с одним коммутатором NICm и маршрутизатором обычно заполняют эти таблицы следующим образом:

  1. Если это для меня (диапазон localhost 127.x или собственный IP), то отправьте его «out» через устройство обратной связи.
  2. Если это для локальной сети (которую он знает, поскольку вы настроили сетевой адаптер с IP-адресом и маской сети), то отправьте его через локальную сеть Ethernet.
  3. Если он не совпадает, отправьте его на шлюз по умолчанию (он же ваш маршрутизатор в локальной сети).

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

Это может сильно походить на ваш вопрос, но не пакет, который знает, как путешествовать. Это локальный компьютер, использующий таблицы локальной маршрутизации, который решает, что делать с пакетом.


Теперь, если вы установите свою внутреннюю сеть на 74.125.224.X и попытаться пропинговать (с обновленными таблицами маршрутизации) сетевой стек распознает, что вы пытаетесь пропинговать свой собственный IP. Вы получите ответ на пинг со своего компьютера. Так как вы не Google вы можете забыть вокруг прибегая к помощи ответов через поисковую систему. Он никогда не достигнет настоящих компьютеров Google.

Общение с ними было бы невозможным, поскольку пакеты для них никогда не покидали бы ваш компьютер. Вместо этого они будут направлены обратно через петлю.

Если вы отключите обратную связь или явно скажете компьютеру перенаправить эти пакеты к маршрутизатору по умолчанию и Интернету, вы не получите ответа. Все остальные компьютеры все еще пересылают свои пакеты на реальный компьютер в Google, а не в вашу сеть.

1

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

Если вы измените свой IP-адрес так, чтобы сервер Google находился в той же подсети, что и ваш компьютер, как определено маской подсети, вы не сможете общаться с этим сервером Google.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .