Amarao ([info]amarao_san) wrote,
@ 2008-09-25 23:49:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Компьютерные сети - простейшие основы принципов работы (часть 5)
Краткие итоги: три уровня модели: физический, канальный, сетевой. Физический - пищание, канальный - определение "кому" и проверка правильности. Оборудование: концнетраторы/повторители - первый уровень, мосты, коммутаторы - второй.

На этом мы заканчиваем с "нормальной" частью второго уровня. Перед началом самой замороченной "ненормальной" части второго уровня, посмотрим, что ещё интересного происходит в компьютерных сетях на втором уровне.

Прошлый урок закончился на вопросе, что произойдёт, если засунуть лампочку в рот соединить два порта одного и того же коммутатора.

Ответ - ничего хорошего. Как только прийдёт пакет на неизвестный MAC-адрес или броадкаст (а в виндовых сетях их мнооого), он будет разослан по всем портам. Пакет дойдёт до коммутатора и будет разослан по всем портам. Пакет дойдёт до коммутатора и будет разослан по всем портам.... (я могу повторить ещё раз 20, чтобы понятно стало что произойдёт, если всё ещё не понятно - поднесите микрофон мегафона к динамику мегафона - оно самое). Коммутатор почти мгновенно станет перегруженным. Если в цикл попадёт броадкаст (а он попадёт!) - перегруженными окажутся все остальные физические сегменты, которые соеденены вместе. Заметим, если у нас в сети несколько коммутаторов, то перегружена окажется вся сеть, так как ей придётся транслировать все броадкасты. Жуть.

Кстати, подобную гадость можно сделать и менее очевидным методом. Пусть у нас есть 10 коммутаторов. Соединим их в кольцо - 1 с 2, 2 с 3, ..., 9 с 10, 10 с 1. Получившееся колечко будет возбуждаться не чуть не хуже "самовозбужающегося коммутатора" (подобное кольцо иногда называют mantrain).

Что можно сделать в такой ситуации? Две вещи: оборвать руки тому, кто воткнул лишний провод, и оборвать провод. Сеть быстро угомонится.

Но... неужели "умная" железка внутри не может сама подумать, что тут что-то не так, и перестать так активно возбуждаться? Может. Если она достаточно умна. Тут проходит сложная грань между коммутаторами управляемыми и неуправляемыми. Неуправляемые коммутаторы реализованы на тупой микросхеме (заметили как мы невинно высшее достижение мысли человека, микросхему, реализующую сложнейшую вычислительную задачу на высочайшей скорости обозвали "тупой"?), так вот, коммутаторы, реализованные на такой микросхеме (или нескольих микросхемах подобного типа), являются неуправляемыми. Они действуют строго по заданному алгоритму и что-либо менять в своём поведении не позволяют. Управляемые коммутаторы позволяют, как понятно из названия, помыкать собой. Так как начинка управляемого коммутатора сложнее, чем неуправляемого, то он может больше "думать" о происходящем. Например, прекращать обработку броадкастов, если их больше 10% от пропускной способности. Это, не выход (броадкасты не просто так вещаются - они нужны для работы некоторых протоколов), но хотя бы всю сетку не положит мгновенно.

Есть более радикальный выход. Появляется такая вещь, как протокол второго уровня, который умеет находить подобные петли и "выключать" лишние соединения. Помимо этого он умеет их включать обратно, если перестаёт работать оставшееся соединение. Этот протокол называется STP (Spanking Toy Porn Spaning Tree Protocol) и в сетях домашнего уровня он не используется.

Полное описание STP скучно, но суть его в том, что в любой конфигурации соединений коммутаторов между собой, он обеспечивает не более одного маршрута из любой точки в любую.

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

Если же быть не столь серьёзным, то виртуальные сети - это средство искуственного деления существующих канальных сегментов на более мелкие канальные сегменты. Коммутатору объявляется, что порты 1, 2, 3 - это сеть номер один, а порты 4, 5, 6 - это сеть номер два. И кадры из сети номер один не проходят в сеть номер два.

Для чего это нужно? В реальной жизни - для разграничения широковещательных доменов (т.е. канального сегмента, состоящего из скольки-то физических, в пределах которого расходятся широковещательные пакеты). Кроме того, вилан - отличный метод спрятать одну сеть от другой. Например, сделать так, чтобы злоумышленники из состава директоров не могли обнаружить на работе сервер с порнухой. Так как канальные сегменты разделены, то нет возможности обратиться из одного сегмента в другой на канальном уровне (т.е. по MAC-адресу). Заметим, есть ещё непознанный третий уровень (который, по аналогии с схемой взаимодействия физический-канальный, должен таким-то образом связывать канальные сегменты), но о нём потом.

Как всегда в компьютерной области, всё начинается просто. Порты с 1 по 10 - в первой виртуальной сети (VLAN), порты с 11 по 16 во второй, с 16 по 24 - в третьей.

А если у нас больше одного коммутатора? Например, два. И между коммутаторами у нас есть только один шнурок. Как нам сделать так, чтобы можно было сконструировать вилан такого вида: порты 1-2 на первом коммутаторе и порты 11-12 на втором?

Для этого придумывается решение: добавлять номер вилана в фрейм. Для этого мы вводим два основных типа портов: порты, на которые приходят фреймы от пользователей, и порты, которые связывают коммутаторы между собой. При этом, каждый пришедший на "пользовательский" порт кадр получает метку с номером того вилана, на который назначен порт. А если кадр из такого порта выходит, метку с него "срезают". "коммутаторный" же порт метки не снимает и ставит, он передаёт "наверх" те кадры, у которых есть метки нужных номеров (задаются при конфигурировании). Ну и принимает, соответственно. При этом возникает особая проблема, если некое устройство должно присутствовать во всех vlan'ах. Стандартного решения этой проблемы просто не существует. Дилинки предлагают свою хрень в пределах одного коммутатора, циска изобретает проприентарную не-хрень под названием private VLAN (которая не хрень, но стоит дико дорого в результате).

Есть ещё одна интересная вещь на втором уровне. Агрегация портов. Предположим, у нас есть два коммутатора. И в каждом из них куча-куча пользователей. Которые хотят общаться не только друг с другом, но и с пользователями соседнего коммутатора. При этом скорость портов, соединяющих коммутаторы, явно не достаточна для обслуживания всех желающих. Что делать? Положить второй провод? Нельзя, будут бродкасты возбуждать.

Тут приходит другая идея: А почему бы нам не передавать данные по двум проводам, да, так, чтобы при коммутации, неизвестные/широковещательные пакеты по второму (из пары) проводов назад не уходили?

Это и называется link-aggregation. Как легко понять, 4 шнурка по 100Мб дают нам 400Мб. (Обычно в "пачку" можно соединить не больше 4 шнурков).

При этом, возникает проблема: по какому порту передавать заданный фрейм? Казалось бы - по любому (первому свободному). Однако, такое поведение (его, кстати, можно сделать в линухах) может сильно попортить кровь вышестоящим протоколам. Если мы будем отправлять "в первый свободный", последовательность "большой фрейм, маленький фрейм" приведёт к получатению в итоге "маленький фрейм, большой фрейм" (потому что по параллельным линиям маленький фрейм передастся быстрее, чем большой, и раньше него "убежит" в следующий шнурок). Для решения этой проблемы используются алгоритмы "хеширования" данных адреса отправителя/получателя для выбора порта (например, мы можем направлять все данные получателю, у которого чётный последний бит адреса в первый порт, нечётный во второй). Таким образом мы гарантируем сохранение порядка прохождения фреймов от адреса к адресу.

Однако, такая вещь ставит крест на "автоматике". Админ должен сесть и подумать, что именно использовать как хэш - адрес получателя или адрес отправителя (если ошибёшься, то никакого ускорения не будет).

Итог урока: он полностью бесполезен. Ни одна из этих технологий в домашней сети не используется. You've Been Pwned.



(Post a new comment)


(Anonymous)
2008-09-25 11:03 pm UTC (link)
>подобное кольцо иногда называют mantrain

Я сегодня на лекции преподу так ответил, а он почему-то обосрался.

(Reply to this) (Thread)


[info]amarao_san
2008-09-25 11:07 pm UTC (link)
Ты тролль, лжец, девстенник.

Я это написал 2 часа назад. Какой препод в час ночи?

(Reply to this) (Parent)(Thread)


(Anonymous)
2008-09-25 11:39 pm UTC (link)
Обыкновенный.
Не палите Владислава Анатольевича.

(Reply to this) (Parent)(Thread)


[info]amarao_san
2008-09-25 11:57 pm UTC (link)
у меня есть одна гипотеза, о том, чем можно заниматься с преподавателем в час ночи, упоминая при этом mantrain...

(Reply to this) (Parent)


[info]bruzh
2008-09-26 02:46 am UTC (link)
>Итог урока: он полностью бесполезен

а мне было очень интересно. Чувствую, моя очередь говорить искреннее "спасибо" ^_^

(Reply to this)


[info]thenexus6
2008-09-26 05:34 am UTC (link)
"При этом возникает особая проблема, если некое устройство должно присутствовать во всех vlan'ах. Стандартного решения этой проблемы просто не существует. Дилинки предлагают свою хрень в пределах одного коммутатора, циска изобретает проприентарную не-хрень под названием private VLAN (которая не хрень, но стоит дико дорого в результате)."

Я понимаю, что не хочется в этом посте выходить за рамки layer2, но что это за тезис? Пример стандартного решения проблемы называется "роутер", а присутствует он во всех нужных vlan'ах благодаря тем самым "коммутаторным" портам (trunk в терминологии cisco), по которым трафик передаётся тегированым.
Сидя на транке, устройству роутером работать необязательно, если требуется только присутствие во всех vlan'ах, а не связь их между собой.

Что до private VLAN, то эта технология немного о другом.

(Reply to this) (Thread)


[info]amarao_san
2008-09-26 08:32 am UTC (link)
Сколько интерфейсов (пусть, виртуальных) потребуется роутеру, чтобы присутствовать в 100 виланах? Основная проблема технологии - отсутствие штатного (т.е. описанного в 803.2Q) метода присутствовать на канальном уровне в нескольких виланах (такое присутствие будет разрушать идею вилана (как независимых канальных сегментов), с одной стороны, с другой стороны, не позволит, например, иметь один и тот же pppoe сервер для всех виланов - pppoe работает на втором уровне, и маршрутизация просто физически не будет выходом).

private vlan'ы это много больше, чем просто возможность присутствовать в нескольких виланах, но, в частности, они решают именно эту проблему.

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-26 09:23 am UTC (link)
ну завести на pppoe-стервере пару сотен виртуальных виланинтерфейсов не проблема.

(Reply to this) (Parent)(Thread)


[info]amarao_san
2008-09-26 10:07 am UTC (link)
И админить пару сотен интерфейсов? Удобно.

(Reply to this) (Parent)


[info]thenexus6
2008-09-26 11:07 am UTC (link)
Столько и понадобится. В чём проблема?
Чтобы не доводить идею vlan'ов до полного маразма (vlan per user) - придумали private vlan: общий (!) влан, в котором пользователи между собой общаться не могут.

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-27 09:21 am UTC (link)
у меня адсльщики так и подключаются
единствення проблема- полный список интерфейсов долго листается ;)

(Reply to this) (Parent)(Thread)


[info]amarao_san
2008-09-27 11:39 am UTC (link)
А почему не голое ppp?

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-27 11:55 am UTC (link)
голого ppp на адсл не бывает, бывает PPPoverATM, а его ДСЛАМ не умеет

(Reply to this) (Parent)(Thread)


[info]amarao_san
2008-09-27 12:18 pm UTC (link)
кстати, вопрос: почему не бывает? Все признаки "готовности к РРР" - канал точка-точка, контроль физического уровня.

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-27 01:21 pm UTC (link)
стандартом не предусмотрено.
а почему в стандарт не вставили - аллах его знает, наверно решили что АТМ - это именно то, что тигры любят больше всего, потому что поверх физики там _всегда_ АТМ, а эзернет/ппп/что-там-ещё всегда поверх него.

(Reply to this) (Parent)(Thread)


[info]amarao_san
2008-09-27 01:27 pm UTC (link)
ты говоришь ужасы. Это так?? Там ATM?

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-27 01:31 pm UTC (link)
VPI/VCI, которые в АДСЛ-модеме настраиваются - это АТМовская терминология

(Reply to this) (Parent)(Thread)


[info]amarao_san
2008-09-27 01:49 pm UTC (link)
ОК, признаю, что нихрена про это не знаю. Но учту на будущее. Т.е. в случае ppp на ADSL мы имеем дело с PPPoA?

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-27 01:56 pm UTC (link)
или с ним, или с PPPoE ;) второе чаще (чтоб был PPPoA, нужен либо ДСЛАМ с остальным миром по АТМ общающийся, а они и сами дорогие, а стоимость АТМ-овской инфраструктуры вообще ни в какие ворота не лезет, или чтоб ДСЛАМ умел конвертировать PPPoA в PPPoE, а таких мало, да и эти тоже дорогие)

(Reply to this) (Parent)(Thread)


[info]amarao_san
2008-09-27 02:15 pm UTC (link)
PPPoE подразумевает over Ethernet. А в каком месте (между ATM и PPP) находится ethernet?

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-27 03:33 pm UTC (link)
там PPP over Ethernet, а Ethernet over ATM (AAL5, RFC2864)

(Reply to this) (Parent)(Thread)


[info]morruth
2008-09-27 05:00 pm UTC (link)
или имеется в виду конвертация?

(Reply to this) (Parent)


[info]morruth
2008-09-27 01:37 pm UTC (link)
да, и не только там - в большинстве shdsl/shdsl.bis модемов та же картина

(Reply to this) (Parent)


[info]morruth
2008-09-27 01:23 pm UTC (link)
вру - ещё одна есть, когда ДСЛАМ с пппое концентратором не в одном шкафу, нужен навороченный свитч, чтобы все эти бесчисленные виланы пропускал.

(Reply to this) (Parent)


[info]sevaa
2008-09-26 06:05 pm UTC (link)
Тема PPPoE не раскрыта.

(Reply to this) (Thread)


[info]amarao_san
2008-09-26 06:42 pm UTC (link)
ppp будет следующим.

(Reply to this) (Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…