Как маршрутизатор изменяет заголовки проходящих пакетов
Теперь, когда мы знаем как осуществляется адресация, группируются адреса, мы можем изучить процесс маршрутизации.
Маршрутизация (routing) - процесс передачи пакетов.Правила маршрутизации конечных устройств (хостов)
Конечные устройства, при передаче пакетов, полагаются на следующую логику:
- Если IP адрес получателя находится в той же самой подсети (т.е. относится к тому же номеру сети и принадлежит тому же диапазону) что и IP адрес отправителя, то устройство отправляет пакет напрямую получателю.
- Если IP адрес получателя находится в другой подсети (т.е. относится к другому номеру сети, а значит принадлежит другому диапазону), то устройство отправляет пакет на шлюз по умолчанию (default gateway). Чаще всего это интерфейс маршрутизатора (router).
Как видно из "гифки" (Рисунок 4.5), пакет, предназначенный для ПК2, отправляется напрямую (в этом случае коммутатор не рассматривается, это устройство второго уровня модели OSI и никакое отношение к пакетам не имеет), потому что находится в одной сети с ПК1 (1.0.0.0/8), следовательно красный пакет ПК1 отправит по первому правилу. А пакет, предназначенный для ПК4, ПК1 отправит по второму правилу, т.к. ПК4 находится в другой подсети.
Маршрутизация Router (маршрутизатор)
Освежим некоторые моменты
Маршрутизатор (Router) - сетевое устройство, соединяющее части сети для передачи IP-пакетов. Основная функция роутеров - маршрутизация.- Все IP адреса в одной группе не должны быть разделены маршрутизатором (router).
- Все IP адреса разделенные маршрутизатором должны быть в разных группах.
Из правил группировки адресов мы можем заключить, что на каждом интерфейсе у маршрутизатора должны быть разные IP адреса, принадлежащее разным номерам сетей (и разные MAC адреса!!).
Прежде чем разобрать большой пример, укажем несколько важных моментов:
- на протяжении всего пути IP пакет не меняется (очень важно!);
- при переходе пакета из одной подсети в другую, меняется фрейм, он является транспортом для переноса пакета внутри одного сегмента сети (очень важно!);
- номера сетей, подключенные к маршрутизатору напрямую, по умолчанию появляются в таблице маршрутизации (очень важно!);
- так же маршруты бывают либо статические,человек сам прописывает их, либо динамические, появившиеся при помощи протоколов маршрутизации (очень важно!).
Следует пояснить некоторые элементы рисунка 4.6. Я старался максимально поиграть с адресацией и выбрал не стандартные номера сетей. Рядом с маршрутизаторами прописан последний октет IP адреса и номер интерфейса, например, 1.20.20.46 - адрес интерфейса fa0/1, на маршрутизаторе R1. Так же на рисунке не показаны MAC адреса, будем вместо них писать имена устройств, а в случае с роутерами, еще и портов. Теперь пошагово разберем путь пакета от компьютера Андрея к веб-серверу.
Шаг 1.
Компьютер Андрея (PC1) формирует пакет с адресом отправителя 10.20.20.110 и адресом получателя 200.20.20.70 (Рисунок 4.7). На протяжении всего пути этот пакет меняться не будет.Рисунок 4.7 Пакет от ПК Андрея к Веб-серверу
На этом же шаге ПК Андрея принимает решение куда пакет смаршрутизировать (передать). Согласно логике описанной выше, пакет будет смаршрутизирован на шлюз по умолчанию (ip адрес получателя принадлежит другому номеру сети). В данном примере шлюзом по умолчанию для ПК Андрея является ip адрес интерфейса fa0/0 (10.20.20.1) принадлежащий R1. Чтобы передать пакет на R1, ПК Андрея будет создавать фрейм указывая свой MAC адрес в качестве отправителя и MAC адрес R1 в качестве получателя. Как и было сказано выше канальный уровень является транспортом для передачи пакета внутри одной подсети (сегмента сети). Вместо MAC адресов используем названия конечных устройств, как было оговорено выше (Рисунок 4.8).
Рисунок 4.8 Фрейм от ПК Андрея к R1
Шаг 2.
R1 принимает фрейм, обрабатывает его, т.к. видит свой MAC адрес. Первым делом происходит проверка целостности фрейма (проверяется контрольная сумма - FCS), это часть процесса деинкапсуляции (так же убирается заголовок канального уровня), после которого остается пакет. Из всего пакета маршрутизатору нужен только IP адрес получателя, по нему он ищет маршрут в свое таблице маршрутизации. Рассмотрим таблицу маршрутизации R1.Таблица 4.4 Таблица маршрутизации R1
Номер сети/префикс | Исходящий интерфейс | IP адрес следующего маршрутизатора |
---|---|---|
10.20.20.0/24 | Fa0/0 | N/A |
1.20.20.44/30 | Fa0/1 | N/A |
130.21.21.24/29 | Fa0/1 | 1.20.20.45 |
200.20.20.64/27 | Fa0/1 | 1.20.20.45 |
Рисунок 4.9 Фрейм от R1 к R2
Шаг 3.
R2 принимает фрейм, обрабатывает его, т.к. видит свой MAC адрес. Далее аналогично шагу 2 происходит деинкапсуляция, после которой остается пакет. R2 ищет маршрут соответствующий адресу получателя пакета, рассмотрим его таблицу маршрутизации.Таблица 4.6 Таблица маршрутизации R3
Номер сети/префикс | Исходящий интерфейс | IP адрес следующего маршрутизатора |
---|---|---|
1.20.20.44/30 | Fa0/3 | N/A |
130.21.21.24/29 | Fa0/1 | N/A |
10.20.20.0/24 | Fa0/3 | 1.20.20.46 |
200.20.20.64/27 | Fa0/1 | 130.21.21.25 |
Рисунок 4.10 Фрейм от R2 к R3
Шаг 4.
R3 принимает фрейм и обрабатывает его. Далее аналогично шагам 2 и 3 происходит деинкапсуляция, после которой остается пакет. R3 ищет маршрут соответствующий адресу получателя пакета, рассмотрим его таблицу маршрутизации.Таблица 4.5 Таблица маршрутизации R2
Номер сети/префикс | Исходящий интерфейс | IP адрес следующего маршрутизатора |
---|---|---|
200.20.20.64/27 | Fa0/0 | N/A |
130.21.21.24/29 | Fa0/2 | N/A |
10.20.20.0/24 | Fa0/2 | 130.21.21.28 |
1.20.20.44/30 | Fa0/2 | 130.21.21.28 |
Рисунок 4.11 Передача данных от ПК1 к ПК2 Рисунок 4.12 Передача данных от ПК2 к ПК1
Итоги примера
Подведя итог можно сказать, что маршрутизация работает при помощи двух главных правил:
- Процесс маршрутизации передает пакеты (L3 пакеты или единицы данных сетевого уровня), основываясь на адресе получателя этого пакета.
- Процесс маршрутизации использует канальный уровень, чтобы инкапсулировать пакеты в фреймы и передать их по физической среде.
Из этих правил и применения их на примере можно сделать заключение - пакет не меняется при движении от отправителя к получателю, но фрейм, который перевозит этот пакет, постоянно изменяется при переходе из одного сегмента сети в другой.
Наш Спонсор
Наш Спонсор
Если вы нашли в тексте ошибку, выделите текст и нажмите Ctrl + Enter.
Спасибо, за проявленный интерес к этому проекту.
Вы нашли ошибку здесь:
А надо так: Это поле заполнять не обязательно, но приветствуется :).
Данная статья будет полезна как новичкам в IT сфере, так и неопытным системным администраторам/ сетевым инженерам. Здесь затрагиваются понятия и принцип работы технологии NAT, ее значение в наше время, виды и создание с конфигурированием в программе-симуляторе Cisco Packet Tracer.
Введение
Интернет - всемирная система, состоящая из объединенных компьютерных сетей на базе протокола TCP/IP.
Сейчас интернет - это не просто сеть, а целая информационная вселенная, подчиняющаяся техническим, социальным и государственным законам в различных ее частях. В современном мире люди не обходятся без доступа во всемирную паутину. Интернет открывает множество возможностей получения информации из любой точки мира.
На данный момент в интернете больше всего распространены IP адреса версии - IPv4. Это позволяет создать 4.3 млрд. IP-адресов. Однако этого, казалось бы, большого количества критично не хватает. Чтобы решить эту проблему - был создан механизм преобразования сетевых адресов - NAT.
С задачей объединения устройств в единую сеть помогают различные компании, занимающиеся разработкой и внедрением сетевого оборудования.На сей момент на рынке сетевого оборудования доминируют компании Cisco Systems и Huawei. В данной статье будем вести работу с оборудованием Cisco.
Cisco Systems разработала собственную специальную межсетевую ОС для работы с оборудованием под названием IOS (Internet Operating System). IOS - многозадачная операционная система, выполняющая функции сетевой организации, маршрутизации, коммутации и передачи данных. ОС IOS представляет собой сложную операционную систему реального времени, состоящую из нескольких подсистем и имеющую множество возможных параметров конфигурирования.
В операционной системе IOS представлен специфичный интерфейс командой строки CLI (Command Line Interface). В этом интерфейсе возможно использовать некоторое количество команд. Количество зависит от выбранного режима и от уровня привилегий пользователя (пользовательский, привилегированный, глобальной конфигурации и специфической конфигурации).
Нехватка IP адресов. Технология NAT
В 80х годах ХХ века заложили основу IPv4, позволяющую создавать
4.3 млрд. адресов, но никто не предполагал, что этот запас так быстро иссякнет. С каждым годом появлялось все больше и больше пользователей и с 25 ноября 2019г. в России и в Европе официально закончились IP адреса. Лимит исчерпан.
Для решения этой проблемы было придумано несколько способов:
Первый способ заключается в усилении контроля за IP адресами.
Пусть существует некоторый сайт N с IPv4 xxx.xxx.xxx.xxx, и его хост решил прекратить его поддержание данного сайта. Сайт заброшен, а IP продолжает числиться как занятый и таких случаев может быть очень много. То бишь необходимо провести "инвентаризацию" IP адресов и изъять неиспользуемые/заброшенные.
Второй способ - в массовом использовании системы IPv6.
Протокол IPv6 разработан как преемник протокола IPv4. Основные преимущества IPv6 над IPv4 заключаются в увеличенном адресном пространстве (IPv4 имел 32 бита, что равнялось 2 32 адресам, а IPv6 имел 128 бит, что равнялось 2 128 адресам), 6 версия протокола стала безопаснее (т.к. в v4 не предусматривались многие аспекты безопасности, ибо расчет был на сторонние ПО, а в v6 появились контрольные суммы и шифрование пакетов), однако это далеко не все преимущества IPv6 над IPv4.
Проблема, казалось бы, решена, однако перейти с протокола IPv4 на IPv6 вызывает трудности, потому что эти протоколы несовместимы. И изюминкой причины тяжелого перехода на 6 версию протокола является денежная стоимость. Многие кампании не готовы вложить достаточное кол-во средств для перехода, хоть и стоит отметить, что процесс перехода с 4 на 6 версию постепенно идет.
И третий способ - использование технологии трансляции сетевых адресов - NAT.
Cогласно документу RFC 1918, IANA зарезервировала 3 блока адресов для частных IP (серых) (рис 1), остальные же IP адреса носят название публичных адресов (белых).
рис.1
Network Address Translation - это механизм в сетях TCP/IP, позволяющий изменять IP адрес в заголовке пакета, проходящего через устройство маршрутизации трафика.
Принимая пакет от локального компьютера, маршрутизатор смотрит на IP-адрес назначения. Если это локальный адрес, то пакет пересылается другому локальному компьютеру. Если нет, то пакет надо переслать наружу в интернет.
Маршрутизатор подменяет обратный IP-адрес пакета на свой внешний (видимый из интернета) IP-адрес и меняет номер порта (чтобы различать ответные пакеты, адресованные разным локальным компьютерам). Комбинацию, нужную для обратной подстановки, маршрутизатор сохраняет у себя во временной таблице. Через некоторое время после того, как клиент и сервер закончат обмениваться пакетами, маршрутизатор сотрет у себя в таблице запись об n-ом порте за сроком давности.
Основная функция NAT - сохранение публичных адресов, однако дополнительной функцией является конфиденциальность сети, путем скрытия внутренних IPv4 адресов от внешней.
Существует множество типов технологии NAT, однако основными принято считать: Статический NAT (Static Network Address Translation), Динамический NAT (Dynamic Network Address Translation) и Перегруженный NAT (Network Address Translation Overload).
рис 2
Статический NAT используется чаще всего в корпоративных сетях, когда необходимо, чтобы какой-либо IP адрес всегда был доступен из глобальной сети. Зачастую статическим IP наделяют сервера и помещают их в DМZ (рис 2).
Подготовка компьютерной сети
Логическая схема топологии сети будет выглядеть как показано на изображении (рис 3)
рис 4
Отнесем PC - станции во VLAN 2, а сервер во VLAN 3. Для этого нужно настроить коммутатор S0 (рис 4). Для того, чтобы определить PC пользователей в отдельный VLAN, необходимо создать VLAN 2 и в 3 запихнуть сам сервер (удобства ради еще и обзовем VLAN'ы именами) (показано синим на рис 4), определить область портов коммутатора, которые будут входить во VLAN 2,3 и прописать соответствующие команды (показано красным на рис 4). Следующая задача – определить один порт типа trunk, для взаимодействия с маршрутизатором (показано зеленым рис 4). Таким образом, коммутатор выступает в роли "посредника" между оконечными устройствами и маршрутизатором.
рис 5
Теперь нужно настроить непосредственно маршрутизатор. Технология sub-interface позволяет объединять несколько виртуальных интерфейсов в один и подключить их к физическому интерфейсу (на маршрутизаторе выбран физический интерфейс fa0/0). Необходимо дать для каждого VLAN'а свой под-интерфейс (показано красным на рис 5) и выдать им IP адрес (показано зеленым на рис 5).
Таким образом, в будущем мы будем NAT'ить трафик.
Дальше я бы посоветовал бы настроить протокол динамической выдачи IP адреса - DHCP, ибо прописывать каждому PC свой адрес - то еще "удовольствие".
Дадим серверу статичный IP 192.168.3.2, а остальных оставим для динамического распределения адресов.
После настройки DHCP, нужно прописать на каждом саб-интерфейсе в R0 команду "ip helper-address 192.168.3.2", тем самым указывая, куда стоит обращаться для получения IP адреса.
После данной команды, устройства получат запрашиваемые IP адреса.
рис 6
Пингуем с рандомного ПК сам сервер (1 пинг) и шлюзы маршрутизатора (2- 3 пинг) (рис 6).
Дальше для удобства будем эмулировать подключение к провайдеру, путем создания в программе-симуляторе РС провайдера, сервера Serv2 с IP 213.234.60.2 (эмулирующий остальную сеть интернет) и роутера R3.
Настройка NAT
Ну и наконец-то мы дошли до самой настройки NAT.
Для внедрения NAT нужно определиться какие порты будут внешними(outside), а какие внутренними(inside).
рис 7
Статичный NAT сопоставляет внутренний и внешний адреса один к одному, поэтому настроим Serv2 таким образом, чтобы любой компьютер мог подключиться к серверу, а сервер к компьютеру - нет. Для этого необходимо прописать следующие команды (рис 7):
По итогу, любой компьютер, находящийся во 2 VLAN'е может пинговать сервер провайдера, а обратно - нет (рис 8). Аналогично проделываем для Serv1, находящимся во VLAN 3.
рис 8 рис 9
А теперь, на финал, внедрим NAT Overload на R0.
Для этого создадим ACL и пропишем там сети, которые должны "натиться" (показано синим на рис 9) и, показав что нужно "натить", активируем лист (показано красным на рис 9).
Таким образом, реализовав статическую и динамическую (типа PAT) настройку NAT, мы смогли защитить небольшую сеть от подключения извне.
Таблица маршрутизации (routing table) – включает список номеров IP-сетей и подсетей, а также инструкции относительно того, как маршрутизатор должен пересылать пакеты, чтобы доставить их в ту или иную есть либо подсеть.
Алгоритм работы маршрутизатора:
Маршрутизатор следующего перехода (next-hop router) – это просто следующий маршрутизатор, который должен получить пакет, чтобы последний был доставлен правильно. Исходящий интерфейс (outgoing interface) – интерфейс данного маршрутизатора, на который должен быть отправлен пакет.
Новый фрейм, созданный маршрутизатором – не тот, что был создан хостом. В новом фрейме будут указаны иные адреса отправителя и получателя (в качестве адреса отправителя MAC-адрес интерфейса маршрутизатора через который будет послан паке, а в качестве адреса получателя MAC-адрес следующего маршрутизатора или хоста). Однако IP-пакет во фрейме остается прежним.
Поскольку IP-пакет должен пройти через сеть и при этом не измениться, говорят что маршрутизаторы осуществляют сквозную пересылку пакетов.
Если в поле «маршрутизатор следующего перехода» таблицы маршрутизации роутера не определен IP-адрес следующего маршрутизатора, следовательно маршрутизатор должен переслать пакет непосредственно хосту адресату (который находится в той подсети к которой имеет прямой доступ маршрутизатор) через соответствующий интерфейс.
Этапы маршрутизации:
1. Отправка данных маршрутизатору R1 (отправка фрейма Ethernet по MAC-адресу маршрутизатора);
2. Пересылка данных следующему по пути маршрутизатору R2 (используя фрейм);
3. Непосредственная отправка маршрутизатором R2 (если он конечный) данных компьютеру адресату по локальной сети или отправка следующему по пути маршрутизатору.
Маршрутизаторы используют таблицу маршрутизации, чтобы выяснить, куда пересылать пакеты. Если маршрутизатор получает пакет и не обнаруживает соответствующей записи в своей таблице маршрутизации, он отказывается от пакета. Для того чтобы маршрутизация осуществлялась должным образом, маршрутизаторы в объединенной сети должны иметь маршруты ко всем IP-сетям и IP-подсетям объединенной сети.
Маршрутизаторы сначала узнаю о непосредственно связанных с ними маршрутах. Если интерфейс маршрутизатора работает и имеет сконфигурированный IP-адрес, маршрутизатор может добавить маршрут для связанной с ним подсети в таблицу маршрутизации.
Непосредственно связанная подсеть (directly connected subnet) – это подсеть, которая связана непосредственно с маршрутизатором, без посредствующих маршрутизаторов. Маршрутизаторы всегда добавляют маршруты для непосредственно связанных с ними подсетей и сетей, если их интерфейс сконфигурирован и работает.
Конфигурирование маршрутизатора (configuring a router) – означает, что инженер подключается к маршрутизатору и вводит в него нужную информацию (назначает IP-адреса интерфейсам, определяет какие подсети или сети присоединены к этим интерфейсам и т.д.).
Сетевые инженеры могут также могут также статически конфигурировать маршрут, сообщая маршрутизатору сведения для записи, которую он должен добавить в свою таблицу маршрутизации.
Статический маршрут (static route) – маршрут, который представляет собой конфигурацию маршрутизатора, указывающую ему добавлять специфическую запись в таблицу маршрутизации.
Назначение IP -адреса может производиться администратором вручную или с помощью DHCP -сервера. Вручную назначаются адреса сетевым принтерам , серверам и интерфейсам маршрутизаторов. Варианты назначения адреса вручную могут иметь незначительные различия в зависимости от используемой в компьютере операционной системы. Обычно в главном меню компьютера необходимо последовательно выбрать следующие опции:
"Пуск", "Настройка", "Панель управления", "Сетевые подключения", "Подключение по локальной сети".
Во всплывшем окне ( рис. 8.1а) выбрать "Свойства". В следующем окне выбрать "Протокол Интернета (TCP/IP)" ( рис. 8.1б), затем "Свойства"
После этого необходимо назначить IP - адрес , маску подсети и основной шлюз по умолчанию ( рис. 8.2).
Рис. 8.2. Назначение IP-адреса администратором вручную
Протоколами автоматического назначения IP-адреса устройств (хостов – host ) являются Reverse Address Resolution Protocol ( RARP ), протокол начальной загрузки ( BOOTstrap Protocol – BOOTP ) и протокол динамического конфигурирования узлов Dynamic Host Configuration Protocol ( DHCP ). В настоящее время главным образом используется протокол DHCP , который позволяет узлу динамически без участия администратора получать IP - адрес . Нужно только определить диапазон IP -адресов на DHCP -сервере.
Для запроса IP -адреса узел посылает в локальную сеть ( рис. 8.3) запрос с широковещательным IP -адресом назначения – 255.255.255.255 и МАС-адресом – FF:FF:FF:FF:FF:FF. В качестве МАС-адреса источника в запросе указывается адрес запрашивающего узла 01:AA:11:AA:11:AA. Такой запрос поступает на все устройства сети, в том числе на сервер DHCP . Все устройства отбрасывают пакет с запросом, за исключением сервера, который опознает запрос .
При получении запроса DHCP - сервер формирует ответ с широковещательным адресом назначения, в ответе указывается выделяемый в аренду узлу IP - адрес . В заголовке ответа в качестве МАС-адреса назначения указывается адрес запрашивающего узла (01:AA:11:AA:11:AA). Поэтому все устройства отбрасывают пакет с ответом, за исключением узла, пославшего запрос . Кроме выделяемого в аренду IP -адреса в ответе DHCP -сервера содержится адрес основного шлюза по умолчанию и другая информация . На рис. 8.3 основной шлюз имеет IP - адрес 192.168.1.1 и MAC-адрес 01:EE:55:ЕЕ:55:EE. Важным свойством DHCP является способность выделять IP - адрес в аренду динамически, т. е. сервер может изымать неиспользуемый адрес , а затем восстанавливать пользователю адрес , который использовался ранее.
8.2. Передача данных в сетях с маршрутизаторами
Процесс передачи данных рассмотрен на примере сети ( рис. 8.4) от узла Host X до узла Host Y через маршрутизаторы A, B, C. Маршрутизаторы соединены между собой через порты Fast Ethernet , номера которых также приведены на рисунке. Интерфейсы Fast Ethernet характеризуются физическими МАС-адресами и логическими IP -адресами. Адреса узлов и интерфейсов маршрутизаторов, задействованных в процессе передачи, приведены в таблице 8.1. Сетевая маска во всех сетях задана одинаковой и равной 255.255.255.0.
В соответствии с полученным МАС-адресом 0001AAAA1111 формируется кадр , который по физической среде передается в маршрутизатор Router_A:
В маршрутизаторе Router_A из кадра извлекается (декапсулируется) пакет данных. Производится логическое умножение IP -адреса назначения на маску и определяется сеть назначения. Затем происходит обращение к таблице маршрутизации , в соответствии с которой определяется адрес входного порта следующего маршрутизатора Router_В ( адрес следующего перехода) и выходной интерфейс маршрутизатора Router_A. При этом формируется новый пакет, который продвигается к выходному Fast Ethernet порту F0/2 маршрутизатора Router_A. В новом пакете изменяются некоторые поля заголовка, но IP -адреса источника и узла назначения остаются неизменными:
Затем пакет инкапсулируется в новый кадр , в качестве МАС-адреса узла источника будет использоваться физический адрес выходного интерфейса F0/2 – 0002AAAA2222. МАС- адрес узла назначения определяется с помощью ARP -протокола, как было описано выше. МАС-адресом узла назначения будет физический адрес входного интерфейса маршрутизатора Router_В – 0001BBBB1111.
Новый кадр передается на входной порт маршрутизатора Router_В:
Приняв кадр , маршрутизатор Router_В извлекает из него пакет данных и с применением маски и таблицы маршрутизации определяет выходной интерфейс . Пакет инкапсулируется в новый кадр , который передается с новыми МАС-адресами источника и назначения в маршрутизатор Router_С:
В маршрутизаторе Router_С, так же как в Router_А и Router_В, формируются новый пакет и кадр . Поскольку адресат назначения находится в сети, непосредственно присоединенной к интерфейсу F0/2 маршрутизатора Router_С, кадр передается узлу назначения Host Y:
При передаче данных через соединения " точка-точка " (см. например, схемы рис. 6.5) заголовок кадра может быть существенно упрощен, т. к. интерфейсы непосредственно связаны между собой, поэтому отпадает необходимость задания МАС-адресов узла источника и узла назначения. Примером может служить протокол Point-to-Point.
На пути кадра к устройству назначения его заголовок и трейлер изменяются при прохождении через каждое устройство 3-го уровня составной сети, например через маршрутизатор . Это происходит вследствие того, что в кадре используется локальная адресация 2-го уровня, а пакеты адресуются с применением логического адреса 3-го уровня и в пакете задается конечный адрес узла назначения. Таким образом, при передаче данных через составную сеть IP-адреса узла назначения и узла источника остаются неизменными, МАС-адреса назначения и источника меняются при прохождении каждого маршрутизатора.
Всякий раз при формировании кадра вычисляется контрольная сумма, которая записывается в поле FCS трейлера кадра. При приеме кадра на каждом входном интерфейсе всех устройств на пути к адресату назначения вновь вычисляется контрольная сумма , которая сравнивается с принятой в трейлере. Правильность принятых данных проверяется с использованием циклического кода CRC . Если расчетный результат и контрольная сумма не совпадают, то кадр отбрасывается. При положительном результате сравнения из кадра извлекается пакет, который проверяется, предназначен ли пакет сетям, прямо присоединенным к данному маршрутизатору, или его надо передать другому устройству составной сети .
Если пакет необходимо маршрутизировать, IP - адрес сети назначения сравнивается с таблицей маршрутизации . При нахождении соответствующей записи в таблице пакет будет переслан на интерфейс , определенный в строке таблицы маршрутизации . Когда пакет коммутируется на выходной интерфейс , формируется новый кадр с новым заголовком и новым значением CRC в трейлере. Кадр затем передается в новый домен на пути к адресату назначения.
Побыстрее, увы, не получилось :(. Но наконец 2 часть готова, публикую. Также, анонс того, что планируется дальше - в планах перейти к служебным аспектам работы интернета, таким как получение адресов, распознавание имен, NAT и т.п. Еще дальше - прокси, VPN, TOR и так далее (но еще посмотрим).
В предыдущей части мы рассмотрели возможности количественного роста компьютерных сетей и возникающие при этом проблемы. И пришли к выводу, что, чтобы уйти от этих проблем, необходим качественный скачок.
Он делается за счет ввода адреса более высокого, 3 уровня, ip-адреса. Об этом мы и поговорим в данной статье.
Чтобы не углубляться в историю развития вопроса, пропустим промежуточные шаги развития концепции (такие как классовые сети, например) и опишем сразу схему, к которой в итоге все пришло.
Ниже будет рассматриваться понятие инкапсуляции.
Почтальон, который заберет письмо, прочитает эту инструкцию и отнесет письмо на почту. Там сортировщик возьмет письмо из коробки, откроет внешний конверт, прочитает адрес. Определит, куда его надо дальше нести, положит в новый конверт, на котором снова напишет краткие инструкции — из коробки А в коробку Б. И так далее.
Если же бы мы писали весь адрес на одном конверте, то мало того, что почтальонам приходилось бы вчитываться, чтобы определить инструкции конкретно для себя (и тратить на это время). Так еще и сортировщикам каждый раз приходилось бы не просто менять конверт с короткой инструкцией для почтальона, а заново переписывать всю полную цепочку, что также отнимало бы много времени.
Итак, каждому пользователю сети, помимо позывного, присваивается (процедуру присвоения адреса пока опустим) еще искусственный адрес, состоящий из двух частей — собственно, ip-адрес и маска подсети. А также вводится понятие маршрутизации.
Зачем это нужно?
Адрес (IP-адрес, адрес 3 уровня модели OSI) — это уникальный идентификатор пользователя сети (как устройства, т.е. компьютера). Фактически, когда мы в прошлой статье описывали ARP (процесс выяснения позывного, который будет использоваться для перестукивания), в качестве описания соседа-анархиста в реальных сетях выступает именно ip-адрес. То есть компьютеры не запрашивают — кто здесь Celeron с 2 гигабайтами оперативной памяти, а спрашивают — кто здесь с адресом 1.1.1.1? Ответь, какой у тебя позывной/MAC? (откуда компьютеры узнают, какой именно ip им нужен — обсудим позже).
Маска подсети — определяет, какая часть из этого идентификатора определяет не только конкретного пользователя, но и его расположение в глобальной сети.
Таблица маршрутизации — содержит соответствие между адресом (или целой группой адресов, подсетью) получателя и промежуточной точкой (т.е. ее адресом), через которую этот получатель доступен.
Тут важно упомянуть, что любой пользователь сети (компьютер) может иметь несколько адресов. Причем логический адрес (IP) в общем случае присваивается определенному физическому интерфейсу-трубе. И, хотя самой распространенной ситуацией является та, когда одной трубе соответствует один адрес — также можно настраивать и несколько адресов на один интерфейс.
Рассмотрим это на примере.
Допустим, заключенные договорились, раздали всем адреса и прочие сетевые настройки, и выбрали себе маршрутизатор (о нем ниже).
Пусть у нашего заключенного адрес 1.2.3.4 и маска подсети 255.255.255.0. Что это значит?
Это значит, что 1.2.3 определяют его адрес сети, а .4 — уже его адрес в этой сети (подробнее про расчет масок подсетей можно почитать здесь). И значит все пользователи с адресами 1.2.3.0-255 — находятся с ним в одной подсети.
Далее, раз ответ положительный, то он действует ровно по тому же алгоритму, который был описан в предыдущих статьях, то есть рассылает широковещательный запрос, чтобы узнать MAC-позывной получателя, и так далее. Только вместо описания (рыжий колченогий анархист), которое мы ранее приводили в качестве примера, выступают просто ip-адреса, которые, по сути, уникальным образом характеризуют получателя. Поскольку одинаковые ip адреса в одном широковещательном домене (на одном коммутаторе) — признак ошибки! Работать сеть так не будет или будет через раз :). Данный случай нам, на самом деле, не особенно интересен, ведь он был рассмотрен ранее.
Интереснее, что происходит в обратной ситуации, когда адрес (допустим, 5.6.7.8) лежит вне сети отправителя.
В таком случае отправитель сразу (без всяких широковещательных рассылок) обращается к своей таблице маршрутизации.
Рассмотрим самый простой случай: в ней только один маршрут — по умолчанию, который как бы говорит: все, что не знаешь, куда послать (не относится к твоей сети и нет конкретного правила-маршрута, соответствующего данному получателю) — шли сюда. И в качестве адреса, осуществляющего пересылку, указывается адрес маршрутизатора.
Что же такое маршрутизатор? Это, условно говоря, еще один заключенный, который имеет интерфейсы-трубы (и адреса) в разных подсетях и осуществляет передачу из одной подсети — в другую. Пусть его MAC-позывной такой и будет - Маршрутизатор.
Таким образом, наш отправитель видит, что адрес не из его сети, смотрит в таблицу маршрутизации и видит, что для пересылки в другие сети ему надо отправлять пакеты получателю с адресом 1.2.3.1.
А вот тут начинается интересное. Дальше отправитель смотрит в свою arp-таблицу, где, как вы помните, у него записаны соответствия описаний-ip-адресов и MAC-позывных. Допустим, у него есть уже соответствие для адреса 1.2.3.1 (если нет, пойдет ARP, описанный в предыдущих статьях).
Тогда он формирует пакет следующим образом.
Упаковывает (инкапсулирует) данные, добавляет к ним заголовок 3 уровня.
В заголовке 3 уровня (т.е. где описания-адреса) пишет: отправитель - 1.2.3.4, получатель - 5.6.7.8
Полученный пакет упаковывает еще раз, добавляя к ним заголовки 2 уровня.
В них пишет: отправитель - Редиска (т.е. собственный позывной). Получатель - Маршрутизатор (т.е. MAC-позывной маршрутизатора из своей ARP-таблицы, не конечного получателя!).
Что происходит далее?
То есть он тоже лезет в свою таблицу маршрутизации, и смотрит, попадает ли этот адрес в одну из подключенных к нему сетей, или есть ли у него маршрут до подсети, содержащей этот адрес.
Допустим, он находит у себя маршрут, который говорит, что подсеть 5.6.7.0/24 (эта запись обозначает адреса 5.6.7.0-255 и аналогична маске 255.255.255.0) находится на узле 8.9.0.1.
После этого маршрутизатор снова запаковывает пакет, добавляя к нему новые заголовки 2 уровня (заголовки 3 уровня остаются без изменений!).
В итоге в заголовках вторго уровня получается следующее. Отправитель — Маршрутизатор (он сам). Получатель — Маршрутизатор2 (позывной маршрутизатора с адресом 8.9.0.1, который Маршрутизатор получает из своей ARP-таблицы или путем ARP-запроса).
Далее повторяется схема описанная выше — коммутатор принимает, смотрит заголовки 2 уровня, передает в нужный порт . Тут, в принципе, надо сказать, что два маршрутизатора могут быть соединены и напрямую (труба идет от одного к другому без промежуточных камер), и коммутатор будет не нужен. Просто второй маршрутизатор сразу начнет распаковывать данные, без дополнительной передачи. Маршрутизатор2 принимает пакет в соответствии с заголовками 2 уровня (т.е. что получатель он) — распаковывает, смотрит на заголовок 3 уровня. И видит, что пакет предназначен не ему лично, но должен быть передан дальше.
Допустим, наша искомая сеть 5.6.7.0/24 — подключена к Маршрутизатору2 напрямую. Тогда он определяет MAC получателя по ARP-таблице, пакует данные заголовком 2 уровня, где отправитель — он сам, а получатель — уже позывной реального получателя (Сосиска), и передает.
Пользователь 5.6.7.8 (он же Сосиска), получив пакет, видит заголовок 2 уровня и понимает, что это ему. Распаковывает, видит свой ip-адрес и еще раз убеждается, что это ему. И начинает читать данные.
Обратная отправка будет идти полностью аналогично вышеописанному, за тем исключением, что таблицы маршрутизации будут просматриваться уже в обратном направлении — и не исключено, что обратно пакет пойдет совсем по другому пути (это называется асимметричная маршрутизация).
Данная схема может показаться еще более сложной, чем описанная в предыдущей статье схема с таблицами коммутации. Однако, по сути она содержит в себе циклически повторяющиеся элементы, и за счет этого теоретически может масштабироваться практически бесконечно (увеличивается лишь время доставки пакета).
Широковещательные рассылки, которые так нагружают сеть, присутствуют лишь в рамках одной подсети, потому не являются проблемой даже при значительном росте сети (разве что вы сделаете подсеть 1.0.0.0/8 и попытаетесь подключить всех пользователей в нее напрямую, не разбивая на подсети).
Также важным является следующий аспект (опущенный для простоты в примере выше). Что маршрут может быть не только по умолчанию или вести напрямую на один адрес, но указывать на целые подсети.
То есть, выше мы рассматривали подсеть 1.2.3.0/24. Однако к одному маршрутизатору (номер 1) могут быть подключены, например, подсети 1.2.0.0/24, 1.2.1.0/24, 1.2.2.0/24 ….1.2.255.0/24. И тогда на соседнем маршрутизаторе маршрут, указывающий, какие сети доступны через маршрутизатор 1, будет нужен всего один — 1.2.0.0/16 (а не 256 маршрутов), поскольку эта подсеть включает в себя все вышенаписанные. То есть благодаря подсетям можно осуществлять суммирование маршрутов.
Таким образом, применение подсетей и маршрутизации также позволяет оптимизировать размер адресных таблиц, исключая необходимость хранения всех адресов всех получателей.
На этом описанном выше принципе работы маршрутизации по сути и строится вся работа сети Интернет. К нему добавляются лишь протоколы резервирования, протоколы рассылки карты сетей (т.е. чтобы не вручную прописывать все маршруты, особенно при их изменениях, а чтобы это происходило автоматически) и так далее.
Подробнее об отдельных аспектах этого (например, как компьютер получает ip-адрес, или как он понимает, как попасть на ваш любимый сайт (мы ведь не вводим адреса), а также о вопросах безопасности, возникающих в связи с добавлением 3 уровня, мы поговорим в следующей статье.
Здесь же обратим внимание лишь еще на один момент. Как нетрудно заметить из описания маршрутизации выше, получатель не знает MAC-адрес отправителя. Это общее правило. Это, во-первых, позволяет использовать одинаковые MAC-и для сетевого оборудования, при условии, что оно используется в различных подсетях.
А во-вторых, что для нас более важно, это обеспечивает один из важных аспектов сетевой безопасности, на основе которого уже развиваются остальные.
В отличие от ip-адреса, который является абсолютно искусственным конструктом и может быть любым — MAC-адрес является физической характеристикой оборудования. То есть современное оборудование в большинстве случаев позволяет подменять его. Но если это не было сделано, то, зная MAC (зафиксировав на коммутаторе факт обращения с одного порта на другой отправителя с определенным MAC-ом) и получив доступ к оборудованию (компьютеру) и сверив MAC-адрес — можно (хоть и шатко) пришить это оборудование к делу.
Но, как мы написали выше — получатель (или любой промежуточный маршрутизатор, кроме первого) не знает вашего MAC-а, в отличие от IP. И, следовательно, чтобы его выяснить (для привязки вашего компьютера к делу), он должен проследить ваш IP до первого маршрутизатора (который даст MAC-адрес из своей ARP-таблицы) и точки физического подключения к сети (коммутатора) (он даст порт).
И даже если это будет сделано, для получения информации будет необходимо, чтобы размер лога (журнала) подключений на первом маршрутизаторе и коммутаторе был достаточен (данные не успели перезаписаться), чтобы выяснить порт и MAC. Только при соблюдении этих условий можно будет зафиксировать физический адрес вашего оборудования, для последующей сверки с изъятым. Или же чтобы использовать эту информацию, например, чтобы посмотреть, кто подключался в это время к сети, по камерам.
С этой стороны добавление маршрутизации уже выигрывает у коммутации, где получатель (или промежуточное устройство - коммутатор) всегда знает, кто ему (или через него) шлет информацию, и даже не требуется для получения этой информации выполнять дополнительные телодвижения.
Тут важно заметить, что, разумеется, одной этой особенности маршрутизации абсолютно недостаточно для того, чтобы считать себя анонимным и защищенным в сети Интернет. ЭТО НЕ ТАК! Но именно дальнейшее развитие принципа инкапсуляции, позволяющего скрывать MAC-адрес от промежуточных устройств, позволяет таким средствами как TOR или VPN обеспечивать анонимность активистам. Но о них мы поговорим отдельно.
Также отметим, что мы, разумеется, рассмотрели далеко не все аспекты коммутации. Пропущены виртуальные частные сети (VLAN), различие между портами доступа и транковыми (на коммутаторах), технологии DTP и еще очень многое. По большому счету, это сделано сознательно — основной целью было обозначить какие-то общие моменты функционирования компьютерных сетей, понимая которые можно оценивать, в первую очередь, именно прикладные аспекты использования сети Интернет как средства связи с точки зрения обеспечения безопасности и анонимности. А также, при желании, использовать этот базис для уже более углубленного и подробного изучения функционирования компьютерных сетей.
Свои статьи я публикую также на сайте,
и Телеграмм-канале - если кому то вдруг будет удобнее подписаться там :-).
Читайте также: