Сетевой уровень и IP. Часть 2
Все, что еще нужно знать о IP
Для начала нужно понять что думает о IP-адресе компьютер (он же может быть маршрутизатором). Он видит этот адрес как и все остальное в виде последовательности нулей и единиц. В IP версии 4 его длина - 32 бита (4 байта). То что мы привыкли писать его в десятичной системе с точками - это для удобства. Компьютеру на это наплевать. Чтобы отправить пакет с одного компьютера на другой мы добавляем в пакет свой и его адреса IP. Компьютер получая пакет берет проверяет адрес кому направляется пакет и если не ему, то ничего не делает. Иначе обрабатывает его для извлечения данных для транспортного уровня. В прошлом посте я рассказал как путешествует пакет по локальной сети. Однако, что если нам нужно передать его в другую сеть (короче говоря в Интернет). Для того, чтобы сеть решила, оставлять ли пакет в локальной сети или передавать в Интернет используются 2 вещи. 1. Маска подсети. 2. Шлюз по умолчанию (default gateway). Не знаю почему почти все статьи об этом написаны через чур заумно, но работает это элементарно. Маска для компьютера это такая же последовательность из 32-бит. Только вначале у нее одни 1, а на хвосте только одни 0. (Например может быть такая 1111111111111111111100000000 = 255.255.255.0 = /24). Сама эта маска никуда не передается. Она используется на компьютере или роутере что бы получить номер сети из ip (так как он может быть разной длины). В нашем примере первые 3-байта - это сеть. А последний - хосты. Когда мы настраивали ip в прошлом посте. Мы неявно указывали маску /24 то есть она подразумневалась по умолчанию. Для компьютера это означала что он при отправке пакетов, как и положено отправляет его с указанным адресом, у нас был 0.0.0.2, но при этом он маскирует часть адреса, с помощью маски. Таким образом он разделяет IP адрес на 2 части - номер сети и хосты. Где у маски 1 - эта часть относится к сети, а где 0 - это хосты. Таким образом компьютер знает, что в локальной сети могут быт хосты от 0.0.0.1 до 0.0.0.254 (адрес 0.0.0.255 тоже относится к локальной сети, однако он широковещательный - то есть пакеты содержащие его в заголовке получателя, разошлются всем хостам ЛВС). Так вот, если мы укажем адрес для отправки, который не попадает под маску (например 0.0.1.1), то компьютер поймет, что это адрес для другой сети и отправит его на шлюз по умолчанию. Не поверите но это тоже IP-адрес, обычно заданный в интерфейсе коммутатора (связанный с одной из его сетевых карт). Таким образом куда этот пакет передавать дальше будет разбираться роутер. Настройка шлюза по умолчанию выполняется вторым параметром команды ip (ip address/mask gateway):
ip 0.0.0.1/24 0.0.0.8
тут мы предполагаем, что шлюз у нас роутер с ip 0.0.0.8 хотя никто не мешает задать в этом качестве какой нибудь ip другого компьютера - пусть ловит все что не для локальной сети предназначено и например сохраняет себе. У роутеров эта маска может и того быть совершенно разная по количеству 1 и 0 в 32 битах, это позволяет создавать иерархическую маршрутизацию. Более того роутер может даже отправить пакеты с одинаковым IP но разными масками на разные линии.
Маршрутизаторы призваны передавать пакеты между сетями. Ему достаточно определить только сеть, куда направляется пакет, а номер хоста уже будет использоваться для определения получателя уже когда пакет окажется в нужной сети.
Таким образом маршрутизатор смотрит на IP - адрес в пакете и применяет к нему маску. Затем ищет соответствие полученному адресу сети и отправляет пакет на нужную линию. Например, если адрес 162.63.45.201, и маска 255.255.0.0 - маршрутизатор закинет этот пакет в сеть, 162.63.0.0, а там например, другой маршрутизатор с маской 255.255.255.0, он этот адрес перекинет на конечную сеть 162.63.45.0 и там уже данный пакет отправится на хост с номером 201. Для примера создадим 2 локальные сети и соединим их маршрутизатором в GNS3. Как я упоминал выше номера сетей выдаются специальной службой, которая следит, чтобы они не совпадали. Однако нам не обязательно просить себе такой номер. Для локальных сетей можно использовать, например 192.168.*.*. Возьмем этот номер и создадим две сети (пока не связанные) 192.168.0.* и 192.168.1.*. Добавим на рабочую область 2 хаба (хотя можно и коммутатора) и подключим к ним по несколько компьютеров. Таким образом создав две разные локальные сети.
Затем в программу эмулятор нужно добавить образ роутера. Их можно скачать с официальных сайтов роутеров. Например Cisco. Добавляется они через меню достаточно просто. Можно поискать на хабре инструкции по настройки в зависимости от производителя маршрутизатора. После добавления его также нужно перетащить на рабочую область.
Наведем курсор мыши на наш маршрутизатор и вызовем его контекстное меню. Там перейдем на вкладку Slots. Тут мы типо вставляем всякие сетевые карты из тех, которые у нас есть в свободные разъемы маршрутизатора. Вставим в slot 1 микросхему PA-4E - это у нас 4 обычных Ethernet разъема. Поскольку мы собрались связать 2 хаба нам этого вполне хватит.
И соединим наш роутер с хабами. Я например линии Ethernet 1 и Ethernet 2 от роутера воткнул в разъемы 8 хабов. По сути не имеет значения. Так как наше оборудование выбрано так, что подходит. Хабы это вообще как тройники у розетки. То есть MAC-адреса есть только у Ethernet - выходов роутера и наших компьютеров (короче там где есть сетевые карты).
Не забудьте нажать зеленую стрелку на приборной панели сверху, чтобы включить все устройства.
Теперь настроим собственно маршрутизатор. Дважды кликнув по нему откроется консоль PuTTY. Приступим к настройке.
R1# configure terminal
R1(config)# int e1/0
R1(config-if)# ip address 192.168.0.1 255.255.255.0
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# int e1/1
R1(config-if)# ip address 192.168.1.1 255.255.255.0
R1(config-if)# no shutdown
R1(config-if)# exit
^Z (Ctrl+Z) - для выхода из настройки конфигурации
Чтобы убедиться что все работает пропингуем сетевые интерфейсы на самом роутере.
Теперь пропингуем еще не настроенный компьютер во второй сети (которая 192.168.1.*)
Как видно запросы к шлюзу (gateway) приходят. А дальше так как хост с таким адресом не настроен, сам хост нам не отвечает. Зато отвечает сам маршрутизатор. На его то IP и сетевуху через шлюз по умолчанию все доходит.
Для красоты я подписал настройки для каждого компьютера (маска везде 255.255.255.0)
Именно так их и следует настроить :)
Теперь мы можем пинговать хосты из одной сети через роутер в другой. Правда при первых отправках пакетов маршрутизатор немного отупляется (можете посмотреть в Wireshark), он там также сверяет по протоколу ARP аппаратные и сетевые адреса своих сетевых карт и хостов и записывает в таблицы. Зато затем он благополучно переправляет пакеты из одних сетей в другие.
Таким же макаром можно подключать роутеры между собой, в том числе и иерархически и создавать большие интерсети.