Сегодня мы приступим к изучению роутеров. Если вы прошли мой видеокурс с первого по 17-й урок, то уже изучили основы свитчей. Сейчас мы переходим к следующему устройству – роутеру. Как вы знаете из предыдущего видеурока, одна из тем курса CCNA так и называется – Cisco Switching & Routing.
В этой серии мы не станем изучать роутеры Cisco, а рассмотрим концепцию маршрутизации в целом. У нас будет три темы. Первая – это обзор того, что вы уже знаете о роутерах и разговор о том, как это можно применить совместно со знаниями, полученными вами в процессе изучения свитчей. Мы должны понять, в чем состоит совместная работа свитчей и роутеров.
![](https://habrastorage.org/r/w780q1/webt/jb/y8/dg/jby8dgnlbyixxtltjwi7gezkwsm.jpeg)
Далее мы рассмотрим, что представляет собой маршрутизация, что она означает и как работает, а затем перейдем к типам протоколов маршрутизации. Сегодня я использую топологию, которую вы уже видели на предыдущих уроках.
Мы рассматривали, как данные перемещаются по сети и как производится трехэтапное рукопожатие TCP. Первое сообщение, отправляемое по сети, представляет собой SYN-пакет. Давайте рассмотрим, как происходит трехэтапное рукопожатие, когда компьютер с IP-адресом 10.1.1.10 хочет связаться с сервером 30.1.1.10, то есть пытается установить FTP-соединение.
Для того, чтобы начать соединение, компьютер создает порт источника со случайным номером 25113. Если вы забыли, как это происходит, советую пересмотреть предыдущие видеоуроки, в которых рассматривался этот вопрос.
![](https://habrastorage.org/r/w780q1/webt/dh/cm/cp/dhcmcp806ovdnz5ezywa46pet4u.jpeg)
Далее он помещает во фрейм номер порта назначения, поскольку знает, что должен соединиться с портом 21, затем добавляет информацию третьего уровня OSI, то есть собственный IP-адрес и IP-адрес пункта назначения. Данные, обведенные пунктиром, не меняются, пока не достигнут конечной точки. Достигнув сервера, они также не меняются, но сервер добавляет к фрейму информацию второго уровня, то есть MAC-адрес. Это связано с тем, что свитчи воспринимают только информацию второго уровня OSI. В этом сценарии роутер представляет собой единственное сетевое устройство, которое рассматривает информацию 3-го уровня, естественно, компьютер тоже работает с этой информацией. Итак, свитч работает только с информацией 2-го уровня, а роутер – 3-го.
Свитч знает исходный MAC-адрес XXXX:XXXX:1111 и хочет узнать MAC-адрес сервера, к которому обращается компьютер. Он сравнивает исходный IP-адрес с адресом назначения, понимает, что эти устройства расположены в разных подсетях и принимает решение использовать шлюз для выхода в другую подсеть.
Мне часто задают вопрос, кто решает, каким должен быть IP-адрес шлюза. Во-первых, это решает сетевой администратор, который создает сеть и предоставляет IP-адрес каждому устройству. Как администратор, вы можете назначить роутеру любой адрес, находящийся в диапазоне разрешенных адресов вашей подсети Обычно это первый или последний допустимый адрес, но нет никаких строгих правил по поводу его назначения. В нашем случае администратор назначил адрес шлюза, или роутера, 10.1.1.1 и присвоил его порту F0/0.
Когда вы настраиваете сеть на компьютере со статическим IP-адресом 10.1.1.10, вы назначаете маску подсети 255.255.255.0 и шлюз по умолчанию 10.1.1.1. Если вы не используете статический адрес, значит, компьютер использует DHCP, который назначает динамический адрес. Независимо от того, какой IP-адрес использует компьютер, статический или динамический, для выхода в другую сеть должен иметься адрес шлюза.
Таким образом, компьютер 10.1.1.10 знает, что должен отослать фрейм роутеру 10.1.1.1. Эта передача происходит внутри локальной сети, где IP-адрес не имеет никакого значения, здесь важен только MAC-адрес. Предположим, что ранее компьютер никогда не связывался с роутером и не знает его MAC-адрес, поэтому он должен сначала послать ARP-запрос, которым спрашивает все устройства подсети: «эй, кто из вас имеет адрес 10.1.1.1? Пожалуйста, сообщите мне свой MAC-адрес!». Поскольку ARP – это широковещательное сообщение, оно поступает на все порты всех устройств, включая роутер.
Компьютер 10.1.1.12, получив ARP, думает: «нет, мой адрес не 10.1.1.1», и отбрасывает запрос, аналогично поступает компьютер 10.1.1.13. Роутер, получив запрос, понимает, что спрашивают именно его, и отсылает MAC-адрес порта F0/0 – а все порты имеют разный MAC-адрес — компьютеру 10.1.1.10. Теперь, зная адрес шлюза XXXX:AAAA, который в данном случае является адресом назначения, компьютер добавляет его в конец фрейма, адресованного серверу. Вместе с этим он устанавливает заголовок фрейма FCS/CRC, представляющий собой механизм проверки ошибок передачи.
![](https://habrastorage.org/r/w780q1/webt/px/uw/ht/pxuwhtqppalqe_l5chqlho39hiy.jpeg)
После этого фрейм компьютера 10.1.1.10 отправляется по проводам к роутеру 10.1.1.1. После получения фрейма роутер удаляет FCS/CRC, используя для проверки тот же алгоритм, что и компьютер. Данные представляют собой не что иное, как набор из нулей и единиц. Если данные повреждены, то есть 1 становится 0 или 0 становится единицей, или имеется утечка данных, которая часто возникает при использовании хаба, то устройство должно переслать фрейм еще раз.
Если проверка FCS/CRC прошла успешно, роутер смотрит на MAC-адреса источника и назначения и удаляет их, поскольку это информация 2-го уровня, и переходит к телу фрейма, в котором содержится информацию 3-го уровня. Из неё он узнает, что информация, которую содержит фрейм, предназначена для устройства с IP-адресом 30.1.1.10.
Роутер каким-то образом знает, где находится это устройство. Мы не обсуждали этот вопрос, когда рассматривали работу свитчей, поэтому рассмотрим его сейчас. Роутер имеет 4 порта, поэтому я добавил к нему еще несколько соединений. Итак, откуда роутер знает, что данные для устройства с IP-адресом 30.1.1.10 нужно отсылать через порт F0/1? Почему он не отсылает их через порт F0/3 или F0/2?
Дело в том, что роутер работает с таблицей маршрутизации. Каждый роутер имеет такую таблицу, позволяющую принять решение, через какой порт передавать конкретный фрейм.
![](https://habrastorage.org/r/w780q1/webt/o7/tp/f6/o7tpf6nkd5iniclvajhvvqzpw5u.jpeg)
В данном случае порт F0/0 настроен на IP-адрес 10.1.1.1 и это означает, что он подсоединен к сети 10.1.1.10/24. Аналогично порт F0/1 настроен на адрес 20.1.1.1, то есть подсоединен к сети 20.1.1.0/24. Роутер знает обе эти сети, потому что они напрямую подсоединены к его портам. Таким образом, информация о том, что трафик для сети 10.1.10/24 должен проходить через порт F0/0, а для сети 20.1.1.0/24 – через порт F0/1, известна по умолчанию. Откуда же роутер знает, через какие порты работать с остальными сетями?
Мы видим, что сеть 40.1.1.0/24 подсоединена к порту F0/2, сеть 50.1.1.0/24 – к порту F0/3, а сеть 30.1.1.0/24 связывает второй роутер с сервером. Второй роутер так же имеет таблицу маршрутизации, в которой сказано, что сеть 30. подсоединена к его порту, обозначим его 0/1, а с первым роутером он соединен через порт 0/0. Этот роутер знает, что его порт 0/0 соединен с сетью 20., а порт 0/1 соединен с сетью 30., и больше не знает ничего.
Аналогично первый роутер знает про сети 40. и 50., подсоединенные к портам 0/2 и 0/3, но ничего не знает о сети 30. Протокол маршрутизации предоставляет роутерам ту информацию, которой они не владеют по умолчанию. Механизм, по которому эти роутеры взаимодействуют друг с другом, является основой маршрутизации, при этом существует динамическая и статическая маршрутизация.
Статическая маршрутизация заключается в том, что первому роутеру дается информация: если нужно связаться с сетью 30.1.1.0/24, то нужно использовать порт F0/1. Однако когда второму роутеру поступает трафик с сервера, который предназначен для компьютера 10.1.1.10, он не знает, что с ним делать, потому что в его таблице маршрутизации имеются только сведения о сети 30. и 20. Поэтому данному роутеру тоже нужно прописать статическую маршрутизацию: если он получает трафик для сети 10., то должен отправить его через порт 0/0.
Проблема статической маршрутизации состоит в том, что я должен вручную настроить первый роутер на работу с сетью 30., а второй роутер – на работу с сетью 10. Это просто, если у меня всего 2 роутера, но когда у меня 10 маршрутизаторов, настройка статической маршрутизации отнимает кучу времени. В этом случае имеет смысл использовать динамическую маршрутизацию.
Итак, получив фрейм от компьютера, первый роутер смотрит в свою таблицу маршрутизации и принимает решение отправить его через порт F0/1. При этом он добавляет к фрейму MAC-адрес источника XXXX.BBBB и MAC-адрес назначения XXXX.СССС.
![](https://habrastorage.org/r/w780q1/webt/zf/ue/yg/zfueygka2ioa7csij5leupwh4pc.jpeg)
Получив этот фрейм, второй роутер «обрезает» MAC-адреса, относящиеся ко второму уровню OSI, и переходит к информации 3-го уровня. Он видит, что IP-адрес назначения 30.1.1.10 относится к той же сети, что порт 0/1 роутера, добавляет к фрейму MAC-адрес источника и MAC-адрес устройства назначения и отправляет фрейм серверу.
![](https://habrastorage.org/r/w780q1/webt/tw/4h/-o/tw4h-oouecat_yq4568dgisula4.jpeg)
Как я уже говорил, далее аналогичный процесс повторяется в обратном направлении, то есть осуществляется второй этап рукопожатия, при котором сервер отправляет обратно SYN ACK-сообщение. Перед этим он отбрасывает всю лишнюю информацию и оставляет только SYN-пакет.
![](https://habrastorage.org/r/w780q1/webt/ba/ki/my/bakimy_lojii5shhhtgw0tlj-9i.jpeg)
Получив этот пакет, второй роутер рассматривает полученную информацию, дополняет её и отправляет дальше.
Итак, на предыдущих уроках мы изучили, как работает свитч, а теперь узнали, как работают роутеры. Давайте ответим на вопрос, что представляет собой маршрутизация в глобальном смысле. Предположим, что вам встретился такой дорожный указатель, установленный на перекрестке с круговым движением. Вы видите, что первое ответвление ведет к базе Королевских воздушных сил Фейрфакс, второе к аэропорту, третье на юг. Если вы выберете четвертый выезд, то попадете в тупик, а через пятый можете проехать через центр города к замку Брэксби.
![](https://habrastorage.org/r/w780q1/webt/wv/ya/24/wvya24lrq4i_ddnmrflggy_uk08.jpeg)
В общем, маршрутизация – это то, что заставляет роутер принимать решения, куда направлять трафик. В данном случае вы, как водитель, должны принять решение, каким выездом с перекрестка нужно воспользоваться. В сетях роутерам приходится принимать решения, куда отсылать пакеты или фреймы. Вы должны понять, что маршрутизация позволяет создавать таблицы, на основе которых роутеры принимают эти решения.
Как я сказал, существует статическая и динамическая маршрутизация. Рассмотрим статическую маршрутизацию, для чего я нарисую 3 устройства, связанные друг с другом, причем первое и третье устройство связаны с сетями. Предположим, что одна сеть 10.1.1.0 хочет связаться с сетью 40.1.1.0, а между роутерами расположены сети 20.1.1.0 и 30.1.1.0.
![](https://habrastorage.org/r/w780q1/webt/gt/ua/t1/gtuat1qujcp3ck7s7gaftctvsco.jpeg)
В этом случае порты роутеров должны принадлежать к разным подсетям. Роутер 1 по умолчанию знает только о сети 10. и 20. и ничего не знает об остальных сетях. Роутер 2 знает только о сетях 20. и 30., потому что они к нему подсоединены, а роутер 3 знает только о сетях 30. и 40. Если сеть 10. хочет связаться с сетью 40., я должен рассказать роутеру 1 о сети 30. и о том, что если он хочет передать фрейм сети 40., то должен использовать интерфейс для сети 20. и отправить фрейм по этой же сети 20.
Второму роутеру я должен назначить 2 маршрута: если он хочет передать пакет из сети 40. в сеть 10., то должен использовать порт сети 20., а для передачи пакета из сети 10. сети 40. – порт сети 30. Аналогично я должен снабдить роутер 3 информацией о сетях 10. и 20.
Если у вас небольшие сети, то статическую маршрутизацию настроить очень легко. Однако чем больше разрастается сеть, тем больше возникает проблем со статической маршрутизацией. Представим, что вы создали новое соединение, которое напрямую связывает первый и третий роутеры. При этом протокол динамической маршрутизации автоматически обновит таблицу маршрутизации роутера 1, указывая следующее: «если вам нужно связаться с роутером 3, используйте прямой маршрут»!
![](https://habrastorage.org/r/w780q1/webt/jg/sp/cn/jgspcn_c5nlc_-e91rbyknbkode.jpeg)
Существует два типа протоколов маршрутизации: протокол внутреннего шлюза IGP и протокол внешнего шлюза EGP. Первый протокол работает с отдельной, автономной системой, известной как домен маршрутизации. Представьте, что у вас небольшая организация, в которой всего 5 роутеров. Если мы говорим только о связи между этими роутерами, то подразумеваем IGP, если же вы используете свою сеть для связи с интернетом, как это делают ISP-провайдеры, то используете EGP.
![](https://habrastorage.org/r/w780q1/webt/gg/ot/uc/ggotuchtprrj_lfnovx_p0fefz8.jpeg)
IGP использует 3 популярных протокола: RIP, OSPF и EIGRP. Учебная программа CCNA упоминает только о двух последних протоколах, потому что RIP устарел. Это самый простой из протоколов маршрутизации, который до сих пор используется в некоторых случаях, однако не обеспечивает необходимую сетевую безопасность. Это одна из причин, по которой Сisco исключила RIP из учебного курса. Однако я все равно расскажу вам о нем, потому что его изучение способствует пониманию основ маршрутизации.
![](https://habrastorage.org/r/w780q1/webt/-w/yd/00/-wyd00ggywretxv6t3drxrgal0i.jpeg)
Классификация протоколов EGP использует два протокола: BGP и собственно протокол EGP. При изучении курса CCNA мы будем рассматривать только BGP, OSPF и EIGRP. Рассказ о RIP можете считать бонусной информацией, которая будет отражена в одном из видеоуроков.
Существует еще 2 типа протоколов маршрутизации: дистанционно-векторные протоколы Distance Vector и протоколы маршрутизации состояния канала Link State.
![](https://habrastorage.org/r/w780q1/webt/md/x7/ff/mdx7ffe6zakej1nn1e3w_qwgama.jpeg)
Первый прокол рассматривает векторы расстояния и направления. Например, я могу установить соединение напрямую между роутером R1 и R4, а могу осуществить соединение по пути R1-R2-R3-R4. Если мы говорим о протоколах маршрутизации, использующих дистанционно-векторный метод, то в данном случае соединение всегда будет осуществляться по кратчайшему пути. При этом не имеет значения, что данное соединение будет иметь минимальную скорость. В нашем случае это 128 кбит/с, что намного медленнее, чем соединение по маршруту R1-R2-R3-R4, где скорость составляет 100 мбит/с.
Рассмотрим дистанционно-векторный протокол RIP. Я дорисую перед роутером R1 сеть 10., а за роутером R4 – сеть 40. Предположим, что в этих сетях находится много компьютеров. Если я хочу осуществить связь между сетью 10. R1 и сетью 40. R4, то назначу R1 статическую маршрутизацию типа: «если нужно соединиться с сетью 40., используйте прямую связь с роутером R4». При этом на всех 4-х роутерах я должен вручную настроить RIP. Тогда таблица маршрутизации R1 автоматически будет сообщать, что если сеть 10. хочет связаться с сетью 40., нужно использовать прямое соединение R1-R4. Даже если в обход получится быстрее, протокол Distance Vector все равно выберет кратчайший путь с наименьшим расстоянием передачи.
OSPF – это протокол маршрутизации состояния канала, который всегда смотрит на состояние участков сети. В данном случае он оценивает скорость каналов, и если видит, что скорость передачи трафика по каналу R1-R4 очень низкая, то выбирает путь с большей скоростью R1-R2-R3-R4, даже если его длина превышает самый короткий путь. Таким образом, если я настрою на всех роутерах протокол OSPF, при попытке соединения сети 40. с сетью 10., трафик будет оправлен по маршруту R1-R2-R3-R4. Итак, RIP это дистанционно-векторный протокол, а OSPF — протокол маршрутизации состояния канала.
Существует ещё один протокол – EIGRP, проприетарный протокол маршрутизации Cisco. Если говорить о сетевых устройствах других производителей, например, Juniper, то они не поддерживают EIGRP. Это отличный протокол маршрутизации, который намного эффективнее RIP и OSPF, но его можно использовать только в сетях, основанных на устройствах производства Cisco. Позже я расскажу подробнее, чем так хорош этот протокол. Пока что замечу, что EIGRP сочетает в себе черты дистанционно-векторных протоколов и протоколов маршрутизации состояния канала, представляя собой гибридный протокол.
На следующем видеоуроке мы вплотную подойдём к рассмотрению роутеров Cisco, я немного расскажу вам об операционной системе Cisco IOS, которая предназначена и для свитчей, и для роутеров. Надеюсь, на уроках 19 или 20-го дня мы приступим к подробному изучению протоколов маршрутизации, и я на примере небольших сетей я покажу, как настраивать роутеры Cisco.
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).
Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
В этой серии мы не станем изучать роутеры Cisco, а рассмотрим концепцию маршрутизации в целом. У нас будет три темы. Первая – это обзор того, что вы уже знаете о роутерах и разговор о том, как это можно применить совместно со знаниями, полученными вами в процессе изучения свитчей. Мы должны понять, в чем состоит совместная работа свитчей и роутеров.
![](https://habrastorage.org/webt/jb/y8/dg/jby8dgnlbyixxtltjwi7gezkwsm.jpeg)
Далее мы рассмотрим, что представляет собой маршрутизация, что она означает и как работает, а затем перейдем к типам протоколов маршрутизации. Сегодня я использую топологию, которую вы уже видели на предыдущих уроках.
Мы рассматривали, как данные перемещаются по сети и как производится трехэтапное рукопожатие TCP. Первое сообщение, отправляемое по сети, представляет собой SYN-пакет. Давайте рассмотрим, как происходит трехэтапное рукопожатие, когда компьютер с IP-адресом 10.1.1.10 хочет связаться с сервером 30.1.1.10, то есть пытается установить FTP-соединение.
Для того, чтобы начать соединение, компьютер создает порт источника со случайным номером 25113. Если вы забыли, как это происходит, советую пересмотреть предыдущие видеоуроки, в которых рассматривался этот вопрос.
![](https://habrastorage.org/webt/dh/cm/cp/dhcmcp806ovdnz5ezywa46pet4u.jpeg)
Далее он помещает во фрейм номер порта назначения, поскольку знает, что должен соединиться с портом 21, затем добавляет информацию третьего уровня OSI, то есть собственный IP-адрес и IP-адрес пункта назначения. Данные, обведенные пунктиром, не меняются, пока не достигнут конечной точки. Достигнув сервера, они также не меняются, но сервер добавляет к фрейму информацию второго уровня, то есть MAC-адрес. Это связано с тем, что свитчи воспринимают только информацию второго уровня OSI. В этом сценарии роутер представляет собой единственное сетевое устройство, которое рассматривает информацию 3-го уровня, естественно, компьютер тоже работает с этой информацией. Итак, свитч работает только с информацией 2-го уровня, а роутер – 3-го.
Свитч знает исходный MAC-адрес XXXX:XXXX:1111 и хочет узнать MAC-адрес сервера, к которому обращается компьютер. Он сравнивает исходный IP-адрес с адресом назначения, понимает, что эти устройства расположены в разных подсетях и принимает решение использовать шлюз для выхода в другую подсеть.
Мне часто задают вопрос, кто решает, каким должен быть IP-адрес шлюза. Во-первых, это решает сетевой администратор, который создает сеть и предоставляет IP-адрес каждому устройству. Как администратор, вы можете назначить роутеру любой адрес, находящийся в диапазоне разрешенных адресов вашей подсети Обычно это первый или последний допустимый адрес, но нет никаких строгих правил по поводу его назначения. В нашем случае администратор назначил адрес шлюза, или роутера, 10.1.1.1 и присвоил его порту F0/0.
Когда вы настраиваете сеть на компьютере со статическим IP-адресом 10.1.1.10, вы назначаете маску подсети 255.255.255.0 и шлюз по умолчанию 10.1.1.1. Если вы не используете статический адрес, значит, компьютер использует DHCP, который назначает динамический адрес. Независимо от того, какой IP-адрес использует компьютер, статический или динамический, для выхода в другую сеть должен иметься адрес шлюза.
Таким образом, компьютер 10.1.1.10 знает, что должен отослать фрейм роутеру 10.1.1.1. Эта передача происходит внутри локальной сети, где IP-адрес не имеет никакого значения, здесь важен только MAC-адрес. Предположим, что ранее компьютер никогда не связывался с роутером и не знает его MAC-адрес, поэтому он должен сначала послать ARP-запрос, которым спрашивает все устройства подсети: «эй, кто из вас имеет адрес 10.1.1.1? Пожалуйста, сообщите мне свой MAC-адрес!». Поскольку ARP – это широковещательное сообщение, оно поступает на все порты всех устройств, включая роутер.
Компьютер 10.1.1.12, получив ARP, думает: «нет, мой адрес не 10.1.1.1», и отбрасывает запрос, аналогично поступает компьютер 10.1.1.13. Роутер, получив запрос, понимает, что спрашивают именно его, и отсылает MAC-адрес порта F0/0 – а все порты имеют разный MAC-адрес — компьютеру 10.1.1.10. Теперь, зная адрес шлюза XXXX:AAAA, который в данном случае является адресом назначения, компьютер добавляет его в конец фрейма, адресованного серверу. Вместе с этим он устанавливает заголовок фрейма FCS/CRC, представляющий собой механизм проверки ошибок передачи.
![](https://habrastorage.org/webt/px/uw/ht/pxuwhtqppalqe_l5chqlho39hiy.jpeg)
После этого фрейм компьютера 10.1.1.10 отправляется по проводам к роутеру 10.1.1.1. После получения фрейма роутер удаляет FCS/CRC, используя для проверки тот же алгоритм, что и компьютер. Данные представляют собой не что иное, как набор из нулей и единиц. Если данные повреждены, то есть 1 становится 0 или 0 становится единицей, или имеется утечка данных, которая часто возникает при использовании хаба, то устройство должно переслать фрейм еще раз.
Если проверка FCS/CRC прошла успешно, роутер смотрит на MAC-адреса источника и назначения и удаляет их, поскольку это информация 2-го уровня, и переходит к телу фрейма, в котором содержится информацию 3-го уровня. Из неё он узнает, что информация, которую содержит фрейм, предназначена для устройства с IP-адресом 30.1.1.10.
Роутер каким-то образом знает, где находится это устройство. Мы не обсуждали этот вопрос, когда рассматривали работу свитчей, поэтому рассмотрим его сейчас. Роутер имеет 4 порта, поэтому я добавил к нему еще несколько соединений. Итак, откуда роутер знает, что данные для устройства с IP-адресом 30.1.1.10 нужно отсылать через порт F0/1? Почему он не отсылает их через порт F0/3 или F0/2?
Дело в том, что роутер работает с таблицей маршрутизации. Каждый роутер имеет такую таблицу, позволяющую принять решение, через какой порт передавать конкретный фрейм.
![](https://habrastorage.org/webt/o7/tp/f6/o7tpf6nkd5iniclvajhvvqzpw5u.jpeg)
В данном случае порт F0/0 настроен на IP-адрес 10.1.1.1 и это означает, что он подсоединен к сети 10.1.1.10/24. Аналогично порт F0/1 настроен на адрес 20.1.1.1, то есть подсоединен к сети 20.1.1.0/24. Роутер знает обе эти сети, потому что они напрямую подсоединены к его портам. Таким образом, информация о том, что трафик для сети 10.1.10/24 должен проходить через порт F0/0, а для сети 20.1.1.0/24 – через порт F0/1, известна по умолчанию. Откуда же роутер знает, через какие порты работать с остальными сетями?
Мы видим, что сеть 40.1.1.0/24 подсоединена к порту F0/2, сеть 50.1.1.0/24 – к порту F0/3, а сеть 30.1.1.0/24 связывает второй роутер с сервером. Второй роутер так же имеет таблицу маршрутизации, в которой сказано, что сеть 30. подсоединена к его порту, обозначим его 0/1, а с первым роутером он соединен через порт 0/0. Этот роутер знает, что его порт 0/0 соединен с сетью 20., а порт 0/1 соединен с сетью 30., и больше не знает ничего.
Аналогично первый роутер знает про сети 40. и 50., подсоединенные к портам 0/2 и 0/3, но ничего не знает о сети 30. Протокол маршрутизации предоставляет роутерам ту информацию, которой они не владеют по умолчанию. Механизм, по которому эти роутеры взаимодействуют друг с другом, является основой маршрутизации, при этом существует динамическая и статическая маршрутизация.
Статическая маршрутизация заключается в том, что первому роутеру дается информация: если нужно связаться с сетью 30.1.1.0/24, то нужно использовать порт F0/1. Однако когда второму роутеру поступает трафик с сервера, который предназначен для компьютера 10.1.1.10, он не знает, что с ним делать, потому что в его таблице маршрутизации имеются только сведения о сети 30. и 20. Поэтому данному роутеру тоже нужно прописать статическую маршрутизацию: если он получает трафик для сети 10., то должен отправить его через порт 0/0.
Проблема статической маршрутизации состоит в том, что я должен вручную настроить первый роутер на работу с сетью 30., а второй роутер – на работу с сетью 10. Это просто, если у меня всего 2 роутера, но когда у меня 10 маршрутизаторов, настройка статической маршрутизации отнимает кучу времени. В этом случае имеет смысл использовать динамическую маршрутизацию.
Итак, получив фрейм от компьютера, первый роутер смотрит в свою таблицу маршрутизации и принимает решение отправить его через порт F0/1. При этом он добавляет к фрейму MAC-адрес источника XXXX.BBBB и MAC-адрес назначения XXXX.СССС.
![](https://habrastorage.org/webt/zf/ue/yg/zfueygka2ioa7csij5leupwh4pc.jpeg)
Получив этот фрейм, второй роутер «обрезает» MAC-адреса, относящиеся ко второму уровню OSI, и переходит к информации 3-го уровня. Он видит, что IP-адрес назначения 30.1.1.10 относится к той же сети, что порт 0/1 роутера, добавляет к фрейму MAC-адрес источника и MAC-адрес устройства назначения и отправляет фрейм серверу.
![](https://habrastorage.org/webt/tw/4h/-o/tw4h-oouecat_yq4568dgisula4.jpeg)
Как я уже говорил, далее аналогичный процесс повторяется в обратном направлении, то есть осуществляется второй этап рукопожатия, при котором сервер отправляет обратно SYN ACK-сообщение. Перед этим он отбрасывает всю лишнюю информацию и оставляет только SYN-пакет.
![](https://habrastorage.org/webt/ba/ki/my/bakimy_lojii5shhhtgw0tlj-9i.jpeg)
Получив этот пакет, второй роутер рассматривает полученную информацию, дополняет её и отправляет дальше.
Итак, на предыдущих уроках мы изучили, как работает свитч, а теперь узнали, как работают роутеры. Давайте ответим на вопрос, что представляет собой маршрутизация в глобальном смысле. Предположим, что вам встретился такой дорожный указатель, установленный на перекрестке с круговым движением. Вы видите, что первое ответвление ведет к базе Королевских воздушных сил Фейрфакс, второе к аэропорту, третье на юг. Если вы выберете четвертый выезд, то попадете в тупик, а через пятый можете проехать через центр города к замку Брэксби.
![](https://habrastorage.org/webt/wv/ya/24/wvya24lrq4i_ddnmrflggy_uk08.jpeg)
В общем, маршрутизация – это то, что заставляет роутер принимать решения, куда направлять трафик. В данном случае вы, как водитель, должны принять решение, каким выездом с перекрестка нужно воспользоваться. В сетях роутерам приходится принимать решения, куда отсылать пакеты или фреймы. Вы должны понять, что маршрутизация позволяет создавать таблицы, на основе которых роутеры принимают эти решения.
Как я сказал, существует статическая и динамическая маршрутизация. Рассмотрим статическую маршрутизацию, для чего я нарисую 3 устройства, связанные друг с другом, причем первое и третье устройство связаны с сетями. Предположим, что одна сеть 10.1.1.0 хочет связаться с сетью 40.1.1.0, а между роутерами расположены сети 20.1.1.0 и 30.1.1.0.
![](https://habrastorage.org/webt/gt/ua/t1/gtuat1qujcp3ck7s7gaftctvsco.jpeg)
В этом случае порты роутеров должны принадлежать к разным подсетям. Роутер 1 по умолчанию знает только о сети 10. и 20. и ничего не знает об остальных сетях. Роутер 2 знает только о сетях 20. и 30., потому что они к нему подсоединены, а роутер 3 знает только о сетях 30. и 40. Если сеть 10. хочет связаться с сетью 40., я должен рассказать роутеру 1 о сети 30. и о том, что если он хочет передать фрейм сети 40., то должен использовать интерфейс для сети 20. и отправить фрейм по этой же сети 20.
Второму роутеру я должен назначить 2 маршрута: если он хочет передать пакет из сети 40. в сеть 10., то должен использовать порт сети 20., а для передачи пакета из сети 10. сети 40. – порт сети 30. Аналогично я должен снабдить роутер 3 информацией о сетях 10. и 20.
Если у вас небольшие сети, то статическую маршрутизацию настроить очень легко. Однако чем больше разрастается сеть, тем больше возникает проблем со статической маршрутизацией. Представим, что вы создали новое соединение, которое напрямую связывает первый и третий роутеры. При этом протокол динамической маршрутизации автоматически обновит таблицу маршрутизации роутера 1, указывая следующее: «если вам нужно связаться с роутером 3, используйте прямой маршрут»!
![](https://habrastorage.org/webt/jg/sp/cn/jgspcn_c5nlc_-e91rbyknbkode.jpeg)
Существует два типа протоколов маршрутизации: протокол внутреннего шлюза IGP и протокол внешнего шлюза EGP. Первый протокол работает с отдельной, автономной системой, известной как домен маршрутизации. Представьте, что у вас небольшая организация, в которой всего 5 роутеров. Если мы говорим только о связи между этими роутерами, то подразумеваем IGP, если же вы используете свою сеть для связи с интернетом, как это делают ISP-провайдеры, то используете EGP.
![](https://habrastorage.org/webt/gg/ot/uc/ggotuchtprrj_lfnovx_p0fefz8.jpeg)
IGP использует 3 популярных протокола: RIP, OSPF и EIGRP. Учебная программа CCNA упоминает только о двух последних протоколах, потому что RIP устарел. Это самый простой из протоколов маршрутизации, который до сих пор используется в некоторых случаях, однако не обеспечивает необходимую сетевую безопасность. Это одна из причин, по которой Сisco исключила RIP из учебного курса. Однако я все равно расскажу вам о нем, потому что его изучение способствует пониманию основ маршрутизации.
![](https://habrastorage.org/webt/-w/yd/00/-wyd00ggywretxv6t3drxrgal0i.jpeg)
Классификация протоколов EGP использует два протокола: BGP и собственно протокол EGP. При изучении курса CCNA мы будем рассматривать только BGP, OSPF и EIGRP. Рассказ о RIP можете считать бонусной информацией, которая будет отражена в одном из видеоуроков.
Существует еще 2 типа протоколов маршрутизации: дистанционно-векторные протоколы Distance Vector и протоколы маршрутизации состояния канала Link State.
![](https://habrastorage.org/webt/md/x7/ff/mdx7ffe6zakej1nn1e3w_qwgama.jpeg)
Первый прокол рассматривает векторы расстояния и направления. Например, я могу установить соединение напрямую между роутером R1 и R4, а могу осуществить соединение по пути R1-R2-R3-R4. Если мы говорим о протоколах маршрутизации, использующих дистанционно-векторный метод, то в данном случае соединение всегда будет осуществляться по кратчайшему пути. При этом не имеет значения, что данное соединение будет иметь минимальную скорость. В нашем случае это 128 кбит/с, что намного медленнее, чем соединение по маршруту R1-R2-R3-R4, где скорость составляет 100 мбит/с.
Рассмотрим дистанционно-векторный протокол RIP. Я дорисую перед роутером R1 сеть 10., а за роутером R4 – сеть 40. Предположим, что в этих сетях находится много компьютеров. Если я хочу осуществить связь между сетью 10. R1 и сетью 40. R4, то назначу R1 статическую маршрутизацию типа: «если нужно соединиться с сетью 40., используйте прямую связь с роутером R4». При этом на всех 4-х роутерах я должен вручную настроить RIP. Тогда таблица маршрутизации R1 автоматически будет сообщать, что если сеть 10. хочет связаться с сетью 40., нужно использовать прямое соединение R1-R4. Даже если в обход получится быстрее, протокол Distance Vector все равно выберет кратчайший путь с наименьшим расстоянием передачи.
OSPF – это протокол маршрутизации состояния канала, который всегда смотрит на состояние участков сети. В данном случае он оценивает скорость каналов, и если видит, что скорость передачи трафика по каналу R1-R4 очень низкая, то выбирает путь с большей скоростью R1-R2-R3-R4, даже если его длина превышает самый короткий путь. Таким образом, если я настрою на всех роутерах протокол OSPF, при попытке соединения сети 40. с сетью 10., трафик будет оправлен по маршруту R1-R2-R3-R4. Итак, RIP это дистанционно-векторный протокол, а OSPF — протокол маршрутизации состояния канала.
Существует ещё один протокол – EIGRP, проприетарный протокол маршрутизации Cisco. Если говорить о сетевых устройствах других производителей, например, Juniper, то они не поддерживают EIGRP. Это отличный протокол маршрутизации, который намного эффективнее RIP и OSPF, но его можно использовать только в сетях, основанных на устройствах производства Cisco. Позже я расскажу подробнее, чем так хорош этот протокол. Пока что замечу, что EIGRP сочетает в себе черты дистанционно-векторных протоколов и протоколов маршрутизации состояния канала, представляя собой гибридный протокол.
На следующем видеоуроке мы вплотную подойдём к рассмотрению роутеров Cisco, я немного расскажу вам об операционной системе Cisco IOS, которая предназначена и для свитчей, и для роутеров. Надеюсь, на уроках 19 или 20-го дня мы приступим к подробному изучению протоколов маршрутизации, и я на примере небольших сетей я покажу, как настраивать роутеры Cisco.
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).
Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?