alibek писал(а):Этот уровень называется канальным. Чтобы проще было понять, это уровень физических соединений, когда два устройства, обменивающиеся информацией, имеют непосредственную связь друг с другом.
Я думаю, что «чтобы проще было понять» оказалось неудачным. Особенно фраза «уровень физических соединений». Почему два устройства, обменивающихся информацией?
С позиции человека, ничего не знающих об отнесении той или иной ситуации к соотв. уровням, спросим:
когда Алибек говорит, два устройства, он имеет в виду два компьютера? Или хабы и свитчи он тоже считает устройствами? Он говорит о связе Комп1—Хаб (одна пара) или Хаб—Комп2 (другая)? Или он говорит о паре Комп2—Комп1 (хаб есть, но он не берётся в расчёт).Почему ты написал «два устройства», тогда как Ethernet предоставляет CSMA/CD-среду, и устройства может быть не два? Когда ты написал «непосредственно», возникает вопрос: непосредственно — это исключительно одним пачкородом? А если два устройства связаны через репитер — это будет считаться непосредственной связью двух устройств? Или это будет считаться двумя непосредственными связями?
alibek писал(а):На этом уровне данные передаются во фреймах Ethernet, для адресации применяются MAC-адреса (аппаратные адреса).
Не рассмотрено, что Ethernet на уровне 2 — это только один из доступных вариантов, и есть другие, которые устроены совершенно не так. Тот же Token Ring.
Не расказано, что же такое фрейм. Особенно это пораждает путаницу, когда наряду с фреймом употребляют слова кадр, пакет. Это одно и то же?
Что касается MAC-адрес. Не сказано, зачем он вообще нужен. Потому что не сказано, что Ethernet на уровне 2 предоставляет пользователям не канал между двумя устройствами, а среду для многих устройств. И модель взаимодействия строится по правилу: один сказал, все остальные услышали, один из них воспринял. Общую для всех среду, иначе говоря. И вот тут то и приходит MAC-адрес, который определяет, кто из всех тех, кто имеет доступ к
общей среде кто услышал (принял) пакет, должен его воспринять. Даже сама аббревиатура MAC расшифровывается как Media Access Control — контроль доступа к среде.
alibek писал(а):MAC-адреса должны быть уникальны в пределах одного физического сегмента Ethernet — сегмента, в котором устройства связаны друг с другом непосредственно или через устройства первого или второго уровня (повторители, хабы, свитчи).
Вот здесь очень стоило бы сказать, а что будет, если будет два участника Ethernet-взаимодействия с одинаковыми MAC-адресами. Важно не только говорить, какие есть правила и ограничения, а ещё говорить, почему и зачем они введены, что будет, если их нарушить.
alibek писал(а):В заголовке каждого пакета данных (фрейма) присутствуют поля "MAC-адрес отправителя" и "MAC-адрес получателя", поэтому возможна доставка пакетов в разделяемой среде передачи данных (когда все устройства используют одну и ту же физическую среду передачи данных); любое устройство может определить, ему ли предназначен прибывшый пакет и кто его отправитель.
Вот тут уже появилась расшифровка слова «фрейм», появился термин «среда». Но почему-то не говорится об Ethernet-широковещании (а потом, когда придёт время поговорить об IP-широковещательных пакетах, нужно указать, что это разные вещи, хоть и с общей идеей), которые используется и в ARP, и в PPPoE.
alibek писал(а):Как правило, сеть Ethernet строится на хабах (концентраторах) или свитчах (коммутаторах).
Правда, но ведь это только Ethernet -10(0)(0)Base-T. Он наиболее популярен, но не единственный возможный из Ethernet-ов.
И неплохо бы объяснить, зачем вообще хабы и свитчи нужны: кто-то подумает, что можно сэкономить, и просто соединить все компьютеры «в параллель», скрутив жилы витой пары.
alibek писал(а):Хаб — это очень простое устройство, которое работает на первом уровне OSI.
Можно упомянуть, что в связи с выделенным, есть такое явление, как пассивные хабы, которые собирают на одних резисторах. Хорошая демонстрация того, что устройство 1-го уровня.
alibek писал(а):Если упрощенно, то свитч ведет учет MAC-адресов на каждом своем порту и в каждый момент времени знает, какой из подключенных MAC-адресов на каком порту находится; эта информация пополняется динамически, при поступлении пакета.
И тут возникает вопрос: а как считч узнаёт, на каком из его портов какой MAC висит? (Когда-то я тоже понять не могу). А что произойдёт, если мы переткнём кабель в другой порт после того, как свитч построил соответствие MAC→Порт?
alibek писал(а):Этот уровень обычно называют сетевым. В нашем частном случае к этому уровню относится IP.
На этом уровне определяется логическая адресация и определение пути передачи данных (маршрутизация).
Вот здесь человек, который очень плохо знает тему, если он привык задавать вопросы, спросит: а, собственно, зачем вообще было городить этот IP? Зачем было вводить какие-то IP-адреса, в то время как уже есть MAC-адрес, которые, к тому же, обеспечивают бОльшую уникальность. Почему бы не строить гигантскую сеть на базе протокола Ethernet и огромного числа свитчей?
То есть стоило бы рассказать, что IP предполагает, что под ним может быть любой другой канальный протокол. Или даже не совсем протокол (
IP посредством почтовых голубей).
Стоило бы рассказать, что IP есть и используется потому, что решает проблемы, свойственные канальному протоколу Ethernet: стройся интернет на Ethernet-е, коммутаторы должны были бы хранить нереалистично большие таблицы, чтобы определять, куда переслать пакет. Ну и что обучение коммутатора при таких объёмах трафика, какие имеются в современном интернете, было бы невозможным и привело бы как невозможности его нормального, по нынешним меркам, функционирования.
alibek писал(а):На этом уровне определяется логическая адресация и определение пути передачи данных (маршрутизация). Кроме того, на этом уровне также осуществляется трансляция логических адресов (третий уровень) в физические адреса (второй уровень).
Такая формулировка хорошо для того, кто и так это всё знает. Тому, кто не разбирается в теме, она мало что говорит.
Мне кажется, лучше подходить с той позиции, что раз IP строится поверх Ethernet, и тоже представляет среду для передачи данных, то есть устройство уровня три, которое по своей идее соответствует устройству-коммутатору уровня два: решить, на основе пакета, по определённому закону, куда дальше передать этот пакет. И указать, что с точки зрения уровня 2 маршрутизатор ничем не отличается от любого друго частника Ethernet-взаимодействия. И что Ethernet-среда маршрутизатором заканчивается, а, грубо-говоря, IP-среда — как-раз наоборот.
alibek писал(а):Раньше применялась классовая адресация, которая определяла пять классов сетей; класс определял, какие биты в адресе указывали на номер сети, а какие биты указывали на номер хоста (например класс C определяет сеть емкостью в 256 хостов, таких сетей в глобальном пространстве IPv4 может быть около двух миллионов).
Вот здесь ты заходишь с конца. Плохо разбирающийся в теме бы спросил:
а зачем вообще нужна классовая или бесклассовая адресация. А для чего вообще кому-то пришло в голову определять, какие биты в адресе указывают номер сети, а какие номер хоста? Да и вообще сам термин «номер сети» содержит в себе термин «сеть», значение которой ещё не раскрыто.
Я бы сказал так: сеть — это совокупность узлов, которые, если посмотреть с точки зрения подлежащего протокола (например Ethernet), имеют общую среду обмена данными. В соответствии с этим есть два правилами передачи пакета:
- Если пакет нужно передать узлу из этой же сети, он передаётся через нижележащий протокол непосредственно нужному сетевому устройству (которое принадлежит интересующему узлы).
- Если пакет нужно передать узлу из чужой сети, он передаётся через нижележащий протокол маршрутизатору.
Тут есть выделенный курсивом фрагмент, к нему задаётся вопрос: если в IP — абстрактные узлы IP-адресами, а в Ethernet — вполне конкретные сетевые устройства с MAC-адресами, и при том как бы там ни было, для передачи IP-пакета всегда используется Ethernet-передача, как же определить MAC-адрес, по которому нужно слать Ethernet-посылку, чтобы тот сетевой адаптер, который получит его, оказался принадлежащим тому узлу, который владеет IP-адресом?
И тут мы начинаем: поскольку IP всегда надстраивается над каким-то канальным протоколом, например над Ethernet-ом, и при каждой IP-передачи совершается передача с помощью нижележащего протокола, а адреса у IP-протокола и подлежащего протокола скорее всего совершенно разные, вводится специальный служебный протокол, который бы позволил перевести абстрактный IP-адрес, в конкретный физический (того вида, который используется в подлежащем протоколе).
Ну и по второму кругу: если узел из той же IP-сети, что и этот, он
достижим через нижележащий протокол (Ethernet), а его MAC-адрес из IP-адреса может быть получен через ARP. Поэтому IP-пакет пересылается «через» Ethernet-фрейм непосредственно по нужному MAC-адресу.
А если узел из другой IP-сети, он
не достижим через нижележащий протокол. И его MAC-адрес
нельзя получить, по той же причине: для выяснения MAC-адреса тоже используется нижележащий протокол, а он, как уже сказано, недостижим. Поэтому IP-пакет пересылается «через» Ethernet-фрейм, но не узлу, а маршрутизатор, который в отличие от целевого узла, достижим.
В этом месте уже не возникает вопрос, а зачем нужно выделять из IP-адреса индекс сети. Понятное дело, зачем: чтобы знать, которыми, двумя из вышеперечисленных способов, «расправиться» с пакетом.
alibek писал(а):Сейчас применяется бесклассовая адресация, в которой принадлежность к сети или хосту задается сетевой маской. Если преобразовать IP-адрес и сетевую маску в двоичные числа и расположить их в столбик, то установленные биты сетевой маски соответствуют номеру сети, а снятые биты сетевой маски соответствуют номеру хоста в сети.
По-моему логичнее было бы сказать, что два узла считаются принадлежащими одной и той же сети, если выполняется улосвие:
(ip1 & mask) == (ip2 & mask) (где & — операция побитового «и», а == означает равенство). А уж побитовое И пусть те, кто не знают, рассматривают через примеры с записями в столбик.
alibek писал(а):Для указания IP-адреса и маски обычно используют одну из двух форм записи: 10.0.0.1/255.0.0.0 (IP-адрес 10.0.0.1, маска 255.0.0.0) или 10.0.0.1/8 (IP-адрес 10.0.0.1, номера сети задаются в первых 8 битах адреса).
Стоило бы сказать, что последняя форма записи называется CIDR-нотацией.
alibek писал(а):Оба принципа адресации используются для того, чтобы определить, принадлежит ли получатель пакета к той же сети, что и отправитель, или нет. В последнем случае получатель недостижим для отправителя непосредственно и доставку пакета будет осуществлять маршрутизатор.
О, вот и то, о чём я говорил. Но почему-то оно оказалось в самом конце.
alibek писал(а):В принципе действия ARP нет ничего сложного — каждое сетевое устройство хранит в памяти ARP-таблицу соответствий IP-адреса MAC-адресу (какому IP-адресу какой MAC-адрес соответствует).
Вот здесь я бы осторожно использовал слово «устройство». Потому что у мало разбирающегося в теме может возникнуть мысль, что хабы и свитчи (они же тоже устройства) хранят ARP-таблицу. Или что сетевая плата хранить ARP-таблицу. А это неверно.
Стоит уточнить, что если какое-то устройство работает на уровнее 3, вернее работает, используя протокол IP, то та часть, которая обеспечивает работу IP, хранит кеш ARP-преобразований. Это ведь именно кеш, и для него свойственна та же проблема, что и для всех кешей: когда-нибудь некоторые данные в кеше становятся уже неактуальными, и нужно позаботиться о способе определить, когда некоторые данные из кеша должны быть обновлены или выброшены как устаревшие.
Стоит упомнять о ситуации, когда у узла остаётся IP, но у его сет. адаптера меняется MAC. При этом в чужих ARP-таблицах остаётся старый MAC, и узлы вдруг становятся недоступными. Стоит рассказать о придуманных для предотвращения этого «ARP announcement-ах».
______
Возможно я сделал много незначительных придирок, или вообще старался переделать чужую статью так, как если бы писал её сам. Но у меня цель: зацепиться за как можно больше число мест, где не разбирающиеся в теме могут всё истолковать (своим богатым воображением) всё совершенно по-своему.