![]() | ![]() | ![]() | |||||||||||
![]() |
|
||||||||||||
![]() | ![]() | ![]() | |||||||||||||||
![]() |
|
||||||||||||||||

Техническая поддержка
ONLINE
![]() | ![]() | ![]() | |||||||||||||||||
![]() |
|
||||||||||||||||||
02. Интерфейсный уровень и его представление (Монтаж)
ruticker 07.03.2025 7:25:26 Текст распознан YouScriptor с канала UNИX
распознано с видео на ютубе сервисом YouScriptor.com, читайте дальше по ссылке 02. Интерфейсный уровень и его представление (Монтаж)
Мне говорят, что я в эфире. Всем здравствуйте! Сейчас в себя. Вот это в дену у нас, традиционно для понедельника в этом семестре, встреча про сети в Linux, по-моему, да, про сети в Linux. Вот и, как и обещал, сейчас тут немножко неправильно. Как и обещал, мы с вами двинемся по стеку протоколов вверх на более высокий уровень, перейдём. Вот и, наконец-то, дойдём до чего-то относительно, чего со стороны этих ваших линуксом ручек для управления. Мы говорили на первой лекции о ситуации, когда мы уже разработали формат и способ использования носителя данных, и теперь нам нужно воткнуть этот носитель данных в компьютер. Ну, минимум в два, понятное дело, но может быть и в несколько. Это зависит от того, как устроена наша среда, да, и научить компьютер пользоваться этой средой. Передача данных очень хорошо описывает ситуацию. Да, нам нужно изобрести интерфейс между железкой и компьютером. Вот, как мы уже много раз говорили, уровень делится на верхнюю половину и нижнюю. Нижняя половина состоит в том, чтобы, собственно, научиться подключаться к среде передачи данных, научиться подключать к компьютеру. Вот, то есть опять решать задачу отделения информации от просто шума. Если мы её не решили на аппаратном уровне предварительно, опять придётся, значит, думать относительно того, как нам организовывать эту передачу. Например, если это пакет-фрейм, то у фрейма должны быть какие-то заголовки, какие-то контрольные суммы и так далее. Вот, ну и так далее. Короче говоря, если мы представляем себе, вот, воображаемый провод или несколько проводов, которые волшебный сигнал представляет собой нолики или единички, и это наша среда передачи данных, то на интерфейсном уровне этот воображаемый провод с сигналом оказывается разделён на кусочки — фреймы. Этот фрейм представляет собой одну пачку передаваемых данных, а между ними есть ещё какой-то промежуток, чтобы отличить один от другого. И у каждого фрейма есть некоторое количество метаинформации, описывающее, чего, собственно, это фрейм. И здесь мы, собственно, переходим ко второй верхней проблеме, а именно, как наше устройство, подключённое к единой среде передачи данных, этой средой использует на логическом уровне. Потому что если у нас, условно говоря, там пять проводов, и просто компьютеры по этим двум проводам пере... У нас тот же, например, о котором обычно говорят, да, то там проблем довольно много. Благо одна среда передачи данных позволяет использовать сразу несколько абонентов этой среды, и вообще непонятно, когда можно пользоваться этим изернетом компьютеру. Вот в какой момент можно вот сюда засовывать пакет, да, когда нельзя, нет ли каких-то приоритетов делать, если кто-то заб передачи данных и так далее. То есть выработать некоторую дисциплину использования. Вот и вторая проблема, которая может возникнуть, а может и не возникнуть, а насколько эта передача защищённая, вообще нет ли возможности на... Вот, вот, вот уже на уровне аппаратном и поверх него как-то взять и проэксперт. У нас есть среда передачи данных, но одна из задач, которая ложится на нас уже на этом уровне, это шифрование. Вот почему шифрование ложится на этом уровне, уровнем выше, потому что уже здесь нам нужно как-то регламентировать доступ. Да, вот в случае изрнета мы втыкали, не втыкаем, регламентируется путём ограничения физического доступа. В случае вай-фая мы должны как-то внутри вай-фая договариваться, кому можно к нему прийти, а кому нельзя. Такие дела. Вот, кстати сказать, уже здесь так или иначе иллюстрируется понятие инкапсуляции уровней. То есть уже между физическим и интерфейсным уровнями есть какое-то количество охеда, и понятно, что это за количество охеда. Это в первую очередь маркеры начала и конца фрейма, которые к контенту фрейма никакого отношения не имеют. Да, и они могут быть разные. Я попробую долить в Википедии до этого места. Вот, ну, избыточность при кодировании. Да, если мы решаем, что у нас там двойное кодирование или какие-то чётности или что-то такое, восстановление ошибок — всё это, разумеется, на аппаратном уровне работает. А к тому моменту, когда фрейм, то бишь кусочек данных, доезжает до нашего интерфейса, разумеется, всего этого мы не видим. Да, это вот та самая вот при... значит, зернённый фрейм. Вот он тут. Сейчас я покажу его, чтобы было видно на экране. Вот так его видно на экране. Обратите внимание, что вот он на уровне физическом. Да, значит, если я не упоминал, то надо это обязательно сказать: сетевики последовательности из 8 битов называют октета. Потому что когда дерев были маленькие, а компьютеры большие, а сети знатные, могли называть, например, последовательности из 5 битов или 7, а восьмой бит управляющий или чётность или коррекция ошибок и 5 битов ещё. Поэтому, когда человеку, специалистам в области телекоммуникации, говоришь "байт", он не понимает, о чём речь. Говори "октет". Очевидно, что это из 8 битов штука состоящая. Поэтому вот у нас на уровне аппаратном этот самый фрейм состоит из 1542 октетов максимум, но у него есть преамбула, состоящая из битов 01 или 1 1 1 и так 31 раз. Вот и в конце 4 байта. Да, воем. Во байтов. Вот дальше идёт, собственно, содержимое нашего фрейма — MAC адрес. MAC адрес — вот это вот всё, о чём мы ещё поговорим, да. А дальше идёт дырка, чтобы отличить один фрейм от другого. Между ними должна быть дырка. Дырка — это просто, поскольку там у нас в изернете есть некоторые несуществующие, это просто какое-то количество, значит, вот этих вот тиков, несущих, во время которой не происходит ничего, причём тоже как это заведомо известного размера. Вот, соответственно, когда наша аппаратная среда передачи данных передаёт вот это всё, включая дырку, а внутри интерфейс попадает только вот эта часть. Вот вам инкапсуляция, точнее декапсуляция, как она есть. Вот. О, я обещал рассказать, что они бывают разные. Вот они бывают разные. IPG — это не путать, IPB — это Intel A interpack. Вот они измеряются вообще не в битах, а в секундах, как видите. То есть там надо ещё для того, чтобы понять, сколько там битов было, ещё поделить на эти секунды. Потому что мы, опять, когда мы говорим, промы, падаем как раз на уровень аппаратный, где, в общем, набиты, в общем-то, главное колебания и количество этих колебаний в секунду. Да, битами они становятся только потом, когда их декодирует интерфейсный уровень. Во что такие дела. Мы с вами будем говорить, наверное, про изт по большей части. Вот это, кстати, большая ошибка. Но кажется, из таких простых протоколов интерфейсного уровня не выжил ни один, кроме изрнета. Дарне не простой, а те, которые выжили, типа что-то такого, они очень сложные. Там, ну, сам чёрт ногу сломит. Специалисты телекоммуникации не зря, значит, едят свой хлеб. Они хорошенько усложнили за это время ту область деятельности, за которую они, это, сами денежки на хлеб получают. Вот как правило, как правило, в таких традиционных лекциях по сетям в качестве примера принципиально иного протокола интерфейсного уровня приводится токен ринг, который кажется больше не существует вообще нигде. Идея состоит в том, что у нас передающие устройства объединены в такой кружок. Будем считать, что это такой вот видите кружок. Будем считать, что это такая железная дорога. По этой железной дороге ходит заголовочный пакет. Будем считать, что он паровоз. Когда мимо этого устройства проезжает паровоз, оно отцепляет вагоны и цепляет те вагоны, которые предназначены другим абонентам, исходящие от вот этих вот, значит, компьютеров. Паровоз едет дальше. Всё остальное время у вас нет права передачи. Он доезжает до следующего устройства, там опять отцепляет, прицепляет, и так вот он крутится. Вот поэтому это токен ринг. Да, ездит токен и за счёт дополнительного того погона. Дальше эта штука стала модифицировать, запускали несколько паровозов, запускали их с разным приоритетом, чтобы, значит, кого перво. Ну и так далее, и так далее. В общем, исторически она развивалась, развивалась и сдохла. Но тем не менее, да, вот вам, пожалуйста, на пальцах, на пальцах объяснённые правила организации интерфейсного уровня. Как раз на уровне топ. Да, на уровне использ. Вот в изернете, как вы понимаете, значит, что касается фреймов, когда мы инкапсулированная окончательно, упали в разделение пакетов, и мы смотрим ровно на них, таким образом, что нужно указывать при инкапсуляции передаваемых данных в фрейме. Ну, во-первых, то, что называется метаинформация: идентификатор отправителя, идентификатор получателя, ежели таких больше двух у нас в среде передачи данных, какие-то сведения о том, если это сложная среда передачи данных, как этому фрейму дальше по ней путе тоже бывает. Вот, ну и прочее, и прочее, там приоритеты, тип, всё, что нам взбредёт в голову рассказать про то, что мы передаём. Дальше идёт, собственно, то, что мы передаём, то, что при декодировании останется. Вот, да. Дальше нужно ещё какую-нибудь контрольную сумму. Ну, короче говоря, какие-то вещи, связанные с отработкой того, что у нас пакет всё-таки не побился. Вот и приехал. Может быть, эта задача решена на аппаратном уровне, а может быть и нет. Если на аппаратном там нужна контрольная сумма. Вот, а ещё вспоминаем, что топ в себе содержит также задачу по, допустим, авторизации и защите данных. Возможно, нам придётся ещё какие-то довески, связанные с шифрованием. Да, там номер в последовательности, если мы шифруем последовательным ключом. Ну и так далее. Ну, что-то такое, да, что-то по шифрованию, не имеющее отношения к полезной нагрузке. Да, вся идея разговора про состав фрейма, она про то, что у нас есть... Отстань, противная. У нас есть то, что мы передаём, и дополнительные данные, которые, в общем, нам на следующем уровне будут не нужны. Что же касается изернета, то я думаю, что у всех, у кого был курс по сетям, всё это хорошо помнят. Но давайте мы на пальцах по-быстренькому повторим. Тут в неправильном порядке. Давайте найдём. Давайте начнём с алгоритма. А, нет, тут в порядке, ни как это сначала, сначала. Нет, всё правильно. Короче, что касается изр, для начала, поскольку изт — это среда с несколькими абонентами и с одновременным использованием этой самой среды, при подключении нам обязательно в не получатель. Ну, потому что иначе мы этого не поймём. Поэтому придумана такая фигня под названием MAC Address. MAC Address — это Media Access Control, по-моему, да, Media Access Control. Mac, вот, которая по мысли создателей протокола изнет. MAC Address, если он предназначен для использования его в обычных сетях, у каждого сетевого устройства в мире уникальный. Вот, дави, я значит узнал, что он не обязан быть уникальным, если стоит первый бит не нулевой. Первый бит равен единице — то это признак не уникальности этого адреса. Но для чего они используются в жизни, не видал никогда не уникальные MAC адреса. Вот, а так вообще у каждого, у каждого изр устройства свой собственный MAC адрес. Вот, делается это так: мы, значит, раздаём три октета на номер вендора, ну, минус 2 бита вот этих самых, и три октета на идентификатор устройства. Прям вот, прям шито вот. И таким образом формируется MAC адрес. Там плюс ещё иногда включается, но включается в адресацию в понятие адресации номер VLAN, но мы пока ещё... Одно замечание о разделении аппаратного интерфейсного уровня. Мы привыкли считать вот так, кабелем вот таким, но в действительности рнет можно организовать по многим разным кабелям. Раньше были ещё всякие косильные кабели, совершенно другим принципом передачи информации. Вот такие вот, такие. Это не кабель, да, это знат, что это называется, назывался T-коннектор. Значит, как работал коаксиальный кабель? Ну, как он коаксиальный, значит, там должна быть стоячая волна, которая моделируется, я уже не помню, кажется, частотной модуляцией. Соответственно, вот вправо и влево — это соединитель вот этого общего провода, на котором стоит волна. А вот это вот сосочек — это ответвитель до устройства. Такой-то коннектор вставлял, и вот, вот главный недостаток такого рода аппаратной поддержки был в том, что стоило кому-то где-то что-то повредить в это, и весь этот сегмент перестал работать. И потом ты, я так как раз работал с темным администратором. Вот это вот у нас был такой большой-большой из конца в конец по двум этажам вот этот вот коаксиальный кабель шёл. И значит, и он перестаёт работать, интернет не работает. Ты идёшь, вот тут работает, а тут уже нет. А посредине находится комната, она заперта, там, видимо, кто-то что-то ответил, уехали на конференцию, забрали компьютер от вентили на какую конференцию в арау др. Ну, в общем, пока они оттуда вернутся, пока они дойдут до работы, короче, вот, умерло это дело. Теперь, значит, все наши провода выглядят примерно вот так. Но я думаю, что вы знаете, что и в этом случае очень много разных категорий кабелей бывает. Бывает витая пара, наче на четыре провода, бывает на две пары, бывает на четыре. Это что значит? Изт — это уже интерфейсный протокол. Нам всё равно, какой был провод, какие были соски, какие были, значит, способы передачи и так далее. Вот эти MAC адреса фактически видят фреймы, которые летают у нас. Портному сегменту видит все устройства, подключённые к этому сегменту. Я сейчас не говорю про там свечи, которые умеют всякие делать фильтрацию у себя в мозгах. Я говорю просто про вот такой упрощённый сегмент интернет-сети. И сама сетевая карта, интерфейс сетевой, умеет, видя, пробегая мимо фрейм, определять, он ему предназначен, этот фрейм или не ему. Если он предназначен ему, она засасывает его в буфер, напрягает софт, который будет этот обрабатывать уже уровнем выше. Вот, а если не ему, он просто его игнорирует аппаратно. Очень удобная штука. Значит, для того чтобы, когда у вас достаточно загруженный рнет сегмент, конкретные сетевые карточки не особо не парились на этот счёт. Вот, понятное дело, что так работает только в том случае, если мы заранее знаем все наши идентификаторы. А с какой статьи мы будем заранее знать все идентификаторы всех наших абонентов сети? Ну, в блокнотик записывать. Поэтому, понятное дело, что на уровне изт существуют всякие протоколы, точнее, там, между изр и следующим уровнем IP, всяких протокол выяснение того, а где какой мадрес, вот у кого какого абонента, какие MAC адреса, для того чтобы послать запрос, а какой там мадрес у кого. Или какой, вот, короче говоря, исследовательский запрос. Нужно ещё отдельно, отдельно понятие широковещательного адреса. Это как раз ситуация, когда нулевой бит равен единице. Вот в жизни, я своей, видел только пакеты, фреймы, у которых все биты равны единиц, не только нулевой. Вот, ну да, вот сокра как бы спустил меня с небес на землю, говорит, что речь идёт именно о том, что все абоненты последовательно соединены. Так что если хотя бы один провод перебить, вся эта последовательно соединение рассыпается. Да, ну так вот, широковещательный адрес будут принимать любые сетевые интерфейсы, независимо от того, тот у них MAC или не тот. Вот и, значит, на этом основании какая-то логика широковещательных протоколов, например, по выяснению адресного пространства будет происходить. Помимо этого сетевые интерфейсы могут работать в так называемом неразборчивом режиме. Вот, и неразборчивый режим — это такой способ работы сетевой карты, при которой она принимает все пакеты, независимо от того, ей они или не ей предназначены. По умолчанию этот режим выключен. Предполагается, что если вы включаете этот режим, то у вас внезапно очень сильно возрастает нагрузка на эту сетевую карту, потому что она внезапно начинает принимать вообще все пакеты, пробегая мимо неё. Посреди, в бытность, опять же, мою админом, когда компьютеры были существенно медленнее, мы таким образом вылавливали машинки, на которых были запущены сетевые сканеры. Потому что человек словил вирус, вирус немедленно запускает сканирование сети на предмет того, значит, нет ли у кого-нибудь чего-нибудь вкусненького. Вот, какие-нибудь пароли, какие-нибудь там реден, что-нибудь такое. Но для того чтобы сетевой сканер принимал все пакеты, устройство должно быть переведено в промис смот. И тут достаточно просто один раз там в день закидывать миллион пакетов по несуществующим MAC адресам, чтобы соответствующие абоненты, у которых включен промики смот, просто на этом миллионе дохли. Просто смотреть, что у них они больше не отзываются там в течение нескольких секунд. Таким образом, значит, выясняется, что сетевой сканер запущен. Вот сейчас кажется, это работает несколько хуже с учётом того, что всё работает слишком быстро, но тем не менее. Вот это Прими. Мы, кстати, с ним будем встречаться уже сегодня с неразборчивым режимом. По умолчанию выбирают только те фреймы, у которых адрес либо широковещательный, либо предназначены непосредственно для карточки. С этим теперь, значит, на пальцах же, опять-таки, уверен, я не могу распарсить этот вопрос человека с ником Мак 7 магаз. Я не знаю, что такое магаз. Поня, что, но что, если перевести это на русский, то вопрос следующий: что если взять, поменять MAC адрес, то у вас больше интернет не работает? Если поменять MAC адрес, у вас не работает интернет, потому что, скорее всего, тот человек, который вам IP выдавал, больше не будет принимать от вас нормально пакеты. Вот так. Нет, наверное, если машину перезапустить, да, то есть надо после этого перезагрузиться. Вот, получить ваш IP адрес заново. Иначе действительно, ну, это как раз на следующую, нет, на через одну лекцию, когда мы будем говорить о том, как вообще происходит дальнейшая эскалация, дальнейшая декапсуляция уже до протокола уровня IP. А мы пока что не выходим за уровень интерфейса. Значит, ещё одно бла-бла, которое тоже я абсолютно уверен, у нас было на лекциях, как вообще работает этот ваш... Потому что на самом деле вот этот вопрос, как у нас должен быть устроен протокол, который позволяет всем абонентам одновременно пользоваться одной и той же средой передачи данных, вопрос не праздный. Значит, первое, очевидно, мы должны уметь аппаратным образом, то есть по факту включения провода в наш интерфейс, определять, а если там вообще нормальная сеть, да, то есть что там должно быть? Это само несущая должна быть какая-то, да, вот эти мегабиты. Если е... Не, наверное, нет, несущей. Более того, если происходит какая-то жестокая лажа, и там мы несущую не можем определить, потому что она ужасно нестабильна, это тоже будет считаться, что несущей нет, что сеть в нестабильном состоянии, она не работоспособное. Поскольку мы просто втыкаем просто в любой комп, звёздой собираем их в наш концентратор, мы должны уметь определять тот факт, что в данный момент передаются данные. Этот момент происходит передача со скоростью почти что скорость света, не знаю, там скорость, скорость. Да, я имею в виду частоту, да, а вот присутствие, да, в данный момент происходит передача пакета по нашей среде передачи данных. То есть она занята. Когда среда занята, никто другой, кроме того, кто в данный момент передаёт, не имеет права передавать. Потому что если они будут это делать, это они устроят кашу, передать пакет по одному торту получится. В общем, бардак. Вот эти три штуки надо уметь ловить аппаратно. Что вообще несущая есть, что как это среда не занята и что пока вы передавали данные, никому другому в голову не пришло делать то же самое. А если пришло, то тоже нужно отлавливать. Это называется коллизия. Вот как это устроено. Ну, тут есть даже, даже вот ссылка на алгоритм CSMA/CD. Устроено это очень тупо. Окей, у нас есть вот эти три детектора: детектор работоспособности, детектор занятости и детектор коллизий. Дальше мы берём, посылаем пакет. Если такое случилось, что наш товарищ тоже запустил детектор этого самого детектора, как это, идущей передачи, и передачи не было, и послал пакет, и в этот же самый момент мы сделали то же самое, произошла коллизия. Мы детект коллизию, и оба, попавших в коллизию абонента, ну, все, точнее, их может быть больше одного, случайное время ждут, после чего пытаются повторно послать этот пакет. Поскольку они ждут случайное время, а случайное время зависит от много чего: от времени включения карточки, от MAC адреса и так далее. Предположительно, совпадение этих двух повторных передач очень низкое. Если при попытке повторной передачи мы опять словили коллизию, скорее всего, с кем-то другим, потому что, ну, вероятность того, что совпадёт, очень низкая. То, скорее всего, мы имеем дело с перегруженной средой, и произойдёт ещё одна случайная задержка в два раза больше предыдущей, точнее, в диапазоне от 2 до 4, так до тех пор, пока не свалится в таймаут. После таймаута все говорим: "Всё, сеть не работает. Извините, идите, пожалуйста, вот, не работает сеть". Как следствие, классический Ethernet уже на уровне интерфейса не даёт гарантированного времени доставки. Вот как-то няет обычно только двоих абонентов. Вы что-то путаете, дорогой. Сокращен, это витая пара соединяет обычно двух абонентов. Провод на аппаратном уровне, на уровне изернета, абоненты объединяются в звезду. Там их много, вот, да, разные уровни. Значит, ну так вот, возвращаясь к нашим баранам, нету гарантированного времени доставки. Вот есть вероятность, что нормально загруженной сети у вас будут постоянные повторные ожидания. ВС, как следствие, нет гарантированной пропускной способности. То есть она есть, но знаете, как она достигается? Это есть такой термин как раз технологиях. Предположим, вы хотите передавать мегабит в секунду, сделайте гигабитную сеть, дебит, луч сильно загрузит. И третье прямое следствие из такого вот из этого алгоритма CSMA/CD: если ваша сеть находится в состоянии идущей передачи, примерно 1/3 времени она уже не работоспособна. Ну, чисто статистически, там производительность начинает падать в разы и разы разов. Правда, речь идёт о сети, в которой нету такой штуки под названием, который производит фильтрацию адресов. Речь идёт о классической звезде, когда все видят всех. Да, самый простой способ сделать эту штуку попроще, это в смысле не попроще, а жизнь людей, абонентов изернета полегче, это сделать умный центр этой звезды, который будет знать, на каком соске у него какие абоненты с какими MAC адресами и пропускать, не ретранслировать пакет, проходящий фрейм, проходящий через не всем, а только тому, чей MAC адрес у него записан в таблице адресов. Ну и, соответственно, широковещательный, разумеется, транслируется всем. Внезапно это очень сильно уменьшает нагрузку на общую среду. И вот это вот критерий: 1/3 времени находится в состоянии идущей передачи, он уже не работает. Ну, условно, очень грубо говоря, ваш сосок должен находиться 1/3 времени переда. Вот тогда она будет не работать. Вот примерно так. Это то, что я могу на пальцах рассказать про изрнет. Теперь, значит, давайте вернёмся к нашим линуксом. Это же, кстати, у нас тут новая машинка. Давайте мы её прям, прям вот, прямо вот всю заново про импортируем. Я надеюсь, это не очень долго будет. Ребята, обнова, обнова, обнова, да-да-да. Ух, я на из не помню, но это похоже на тот Л, который мы вам присылали. Вы нам присылали, мы вам. Смотрите, ничего так качается. Значит, что мы можем получить в этом нашем линуксе для работы с интерфейсным уровнем? Довольно много, потому что мы можем управлять всевозможными интерфейсами сетевыми. Напоминаю, что у нас есть три разных способа работать с виртуальными машинами. Первый способ — это запустить GUI VirtualBox, работать из него. Второй способ — это работать из командной строки с помощью команды VBoxManage. Да, с помощью команды VBoxManage. И третий способ — это мои чудовищные скрипты, которые делают всё за один раз, пишут, какие команды они выполняют, чтобы было видно, что происходит. Вот, поэтому, значит, я буду предпочту работать собственными скриптами, а вы подглядывайте, какой на самом деле в VBoxManage в этом случае запускается. Вот, на самом деле это будет просто, просто VBoxManage импорт. Вот, давай, давай, давай, жуй, проживал. Значит, наверное, всё-таки надо показать наи. Вот это вот надо показать, потому что, потому что иначе будет непонятно. Значит, смотрите, вот у нас есть VirBo, вот у нас есть группа Linux, которая входит, и вот у нас есть свеже пропор наша машинка. Если мы сейчас откроем её сетевые настройки, мы видим следующее: в каждой машине есть четыре интерфейса. Один из них подключён, так называемый сети, не помню, мы сегодня будем говорить об этом или через раз, не помню, врать не буду. Если успеем, поговорим сегодня, потому что это удобная штука. И этот интерфейс, он называется адаптер 1, а с точки зрения Linux машины, той виртуалке загружено, он называется E0. Мы не трогаем до поры до времени. И что такое над, мы пока тоже не смотрим. А вот все остальные интерфейсы находятся в состоянии существуют, но никуда не подключён. Вот то, что мы сегодня сделаем и будем делать в домашнем задании, это объединять две виртуальные машины в одну виртуальную сеть посредством подключения в локальную сеть вот этим вторым адаптером. Значит, делается это с точки зрения GUI чертовски просто. Вы просто говорите, что это Internal Network, что она называется как-нибудь, не знаю, у нас в примере кажется First. Пускай называется First. Вот, значит, обратите внимание, вот на этот крыжик, что с точки зрения тулбокса можно запретить, можно сказать: "Вот это устройство, это сетевая, не умеет, его нельзя включить". Нам это, конечно, будет сильно мешать. Тогда давайте должно быть включено. Вот сам факт того, что мы сказали, что адаптер 2 подключён к внутренней сети под названием, приводит к появлению такого абсолютно виртуального понятия, как внутренняя сеть под названием First. Если мы сейчас сделаем очередной клон, я неправильно сделал. Я сделал неправильно, надо было сделать сначала клон, возвращаем обратно. Я поступил так, как советовал не делать никому. Вот эту машину мы вообще не модифицируем, мы её клонируем и работаем только с её клонами. Мы это уже делали, и в домашке мы это уже делали, поскольку мы в домашке уже делали. Я запущу VBox Snap, который сам это сделает за нас. Итак, а я вспомнил, почему я это показал. Я это показал, потому что сейчас мы увидим, как это делается из командной строки. Вот, возьмём, склонируем эту машину, назовём первую машину СРВ, первый клон. И внимание, сразу передадим в качестве параметров название сети виртуальной, к которой он должен быть подключён. Напоминаю, с точки зрения Виту бокса, по крайней мере, пользователя Вир бок, сам факт того, что вы говорите, этот интерфейс подключён к сети виртуальной под названием такой, это приводит к появлению этой сети. Ну вот, нет, да, жух, давайте смотреть на командную строку. Кстати, её может быть раскрасить, было бы красиво. Понятное дело, что чем делать, нужно делать спш, когда вы делаете клон в GUI, так и происходит. Сначала происходит снапшот, уже делается клон. Вот, потом делается клон вот этой машины из вот этого, из вот этого снапшота, где она, вот она, из вот этого снапшота, который называется, тут в данном случае VBox Snap. Дальше переназначить консоль на другой порт, иначе они начнут конфликтовать при старте, не запустят. Вот, а дальше, вот смотрите, к 1 — это наш первый адаптер, который всегда подключён к нату, мы его не трогаем. А вот Nick 2 имеет тип innet, внутренняя сеть. А это внутренняя сеть называется First. Нет, ну и заодно сразу подсоединить к ней кабель. Если мы сейчас загрузим такую машину, мы увидим, что у неё E1 к чему-то там подключён. Вот, и можно с ними, как это, с этой сетью работать. Давайте это сделаем. Кстати, это я неправильно запустил, надо бы вот так сделать. Да, ну что ж, значит, та же самая история. VBox Connect — это на самом деле запуск машины и запуск саката. Сейчас я попробую, ну, как это, мы делали на прошлой лекции. Память. Вот сейчас я найду, как бы так сделать, чтобы она нам всё показала. Э, там две команды вызываю, и... ну, там, там сейчас. Да, а вот Старт VM. Вот, мы запустили Стар VM. Вот, и где-то там должно быть ещё... А, да, и вот Скат. Вот, вот, вот здесь просто. Просто если мы сейчас сделаем Принт, мы сделаем Принт, но его же затр консоль, мы не увидим его. Короче говоря, первая команда — это VBoxManage startvm машина там чего-то там, вот, а вторая команда socat с вот такими параметрами, которые были у нас на прошлой лекции, к тому порту, про который мы знаем, на каком порту у нас ждёт наша комкон. Ну вот, на этом я поясняю свои путанные рассказы о том, как работает этот скрипт, что там СРВ. Вот, пока он там загружается, сейчас я кнопочку нажму на него, создадим второй клон. Ну, ддосить мы его не будем, зачем нам его ддосить? Вот, создадим второй клон. Обратите внимание, что на автомате у него порт, по которому видна комконсоль, пробросить на 217, потому что 216 уже занят. Вот, ну и дальше, вот, всё более-менее. А, да, адаптер какой? А, вот он. Также тогда их можно... Это, собственно, и означает, что эти две машины включены в одну сеть. То есть смотрите, сейчас, если у нас тут есть GUI VirtualBox, мы сейчас увидим, что получилось. Вот, это наш СРВ, он уже работает, и вот его сеть. А вот это наш Сен, он ещё не работает, и вот его сеть. Вот эти два интерфейса у этих двух виртуалок в одной сети. Мы отлично можем сейчас... Они отлично друг друга увидят. Сеть устроена не так, она как раз у каждого своя, там всё немножко по-другому, но об этом мы будем говорить, когда придёт время. Так, нет, а Сен так пока тут загружается. Мы давайте посмотрим, что происходит на СРВ. Нам понадобится ещё утилита, которая называется `ip`. Она, естественно, стоит у нас в машине. Это вот такой вот швейцарский нож для работы вообще с большим спектром всякого сетевого настроек. Фактически, такой большой-большой, большое окно в соответствующие системные вызовы. `ip` мы не будем пока погружаться в историю, и вот нам показывают пять интерфейсов. Один из них — это `lo`, это виртуальный интерфейс, который путём посылки фреймов, в который вы из него же этот фрейм и получаете. И вот, значит, четыре интерфейса: `eth0`, `eth1` и так далее. `eth0` — это вот тот самый, который управляющий, мы его не трогаем. Ну что значит управляющий? Я его таким придумал, да, мы им будем пользоваться, возможно, даже сегодня, но пока что вот. А вот `eth1` — это тот самый интерфейс, который, по предположению, подключён к сети. И такая же точная история на машинке Сен. Давайте мы этот интерфейс приведём в боевое состояние, он сейчас опущен. Так, на состояние несётся. Вот это смена, для того если мы не хотим пользоваться сетевым интерфейсом, то и ядро бы вообще не обращало внимания на то, что там что-то происходит, и эта аппаратура была бы не задействована. Вот, давайте его поднимем. Значит, `ip link set dev eth1 up` на этой машинке и то же самое на СРВ. Он переходит в состояние `UP`. Ну вот, `L` — это состояние, означает, что наш сетевой интерфейс готов передавать данные. Обратите внимание, что у него есть MAC адрес. Если мы всё сделали правильно, эти MAC адреса разные. Можно apl говорить сокращать. `D0:27:8E:F8:DE`, а здесь `D0:46:81`. А вот vendor ID у них одинаковый, понятное дело, потому что это VirtualBox. Вот, предположительно, мы сейчас сделали две ру тонки, которые находятся в одной сети. Э, понятное дело, что если мы сейчас эти интерфейсы просто настроим, приписав им свои IP адреса, попингуем друг друга, мы всё увидим. Но у нас разговор про интерфейсный уровень, мы ничего про IP адреса пока не знаем. Как бы нам попинговать друг друга? Так, это не так просто, как кажется, потому что мы помним, что в случае стека протоколов TCP/IP уровень интерфейсный не предназначен для коммуникации между программами, он только для подключения. Вот, какие-нибудь сети типа... или у Microsoft — это DNS, такой забыл. Ну, короче, в конце прошлого века начали разрабатывать так называемые локальные сети. Вообще слово "локальная сеть" пошло именно оттуда. Это такие сетевые протоколы, которые дальше, чем одна среда передачи данных, просто не ходят. И уже прямо поверх неё стали делать всякие решения, там, сетевые файловые системы и так далее. Вот там бы мы бы увидели какие-то утилиты для того, чтобы прямо по MAC адресу попинговать товарища. В случае, когда мы имеем дело с TCP, MAC адрес, то есть идентификатор устройства в среде передачи данных — это только идентификатор устройства в среде передачи данных и не более того. Поэтому соко инструментов как бы нету, но мы всё-таки попробуем что-нибудь сделать. Да, значит, третья утилита, которая нас будет сопровождать всю нашу историю разговора, это утилита `tcpdump`. Пускай вас не смущает слово TCP в ней, потому что да, она предназначена в том числе для заглядывания в TCP потоки, но главное, как бы её свойство — она в принципе висит на соответствующем интерфейсе и выковыривает оттуда весь трафик, который визн, в том числе уровня TCP, уровня IP и даже уровня Ethernet тоже можно. Вот, поэтому мы сейчас на одном из этих интерфейсов напишем `tcpdump -xxe`. Значит, что такое `-xxe`? `-x` — заглядывать в Ethernet Frame, `-xx` — не декапсуляция. Ну, где у нас там Ethernet Frame? О, давайте смотреть, из каких битов он состоит. Значит, шесть битов, в смысле шесть октетов Destination, шесть октетов Source, необязательное поле, необязательное поле с этим самым номером VLAN, тип пакета старый или новый, дальше какое-то содержимое и дальше контрольная сумма. Вот контрольная сумма, кстати, обычно тоже не включается, мы её не трогаем. Короче говоря, мы должны сейчас сформировать Ethernet Frame и запихать его в Ethernet интерфейс. Это не так просто сделать, но нам придёт на помощь ещё одна утилита, которая называется `socat`. Её тут нету, а зря. Утилита `socat` — это способ передавать данные по сети самыми всевозможными путями с большим количеством дополнительных опций, модификаций этих способов передачи. Короче говоря, нет никаких больших проблем взять и превратить, значит, засунуть прямо в интерфейс некую... А, прямо текст не получится, мы же хотим, чтобы там был MAC адрес отправителя, MAC адрес получателя. Вот это всё текст MAC адреса. Да, поэтому мы сделаем так: смотрите, это вот что? Это MAC адрес отправителя, MAC адрес получателя. И ещё вот это `0x8102` — это тип, два октета. А вот это... Полот. Дальше мы возьмём и превратим это из текста, каждые две цифры превратим в один байтик с помощью простейшей утилиты, которая как правило ставится вместе с редактором. У нас же тут запу по умолчанию включает неразборчивый режим. Вот, мы сейчас пори собственно там изобразим. Ну, сейчас мы `xxd` увидим. Вот, значит, что там? `xxd -r`. Реверс. Ну, `xxd` вообще предназначен для превращения бинарных данных в ри, но можно и в обратную сторону. Вот сейчас на выходе `xxd` получится как раз последовательность байтов вот с такими значениями. Ну а дальше, собственно, `socat` со стандартного ввода на что? На интерфейс. Я правильно помню? Правильно помню интерфейс `eth1`. Брек, смотрим. О, вот он фрейм. Причём, как видите, он длиннее, чем то, что мы послали. Почему? Потому что минимальный размер фрейма такой. Сейчас мы это увидим. 42. Минимальный 42. Я думаю, что люди именно этим руководствовались, когда думали, какой должен быть минимальный размер фрейма. Хотя не знаю. Вот, значит, если кто не знает, что такое 42, погуглите. Я не смеюсь, погуглите 42. Книжка, насколько я знаю, это собственно наследие того, что называется "Пауэр Фикшн". Точнее, не фикшн, а нон-фикшн. Короче, в пятидесятые годы существовали так называемые толстые журналы фантастические, там надо было каждый месяц писать по кусочку романа автору. И многие классические фантасты, они вот на этой школе, когда тебе нужно каждый месяц, пря вот 200 кб кода выдавать, да, они как бы рук то себя набили. Вот оттуда большинство старой волны фантастики, они именно там растут. Так что эта книжка, я думаю, такая вот прям... Да, ладно. Значит, да, смотрите. А вот наш лот. Вот эти два байта, лота, хай, которые вот они, вот они, вот они. Вот наш лот приехал. Вот, как правильно сказал кто-то здесь присутствующих, этот фрейм долетел до нашего интерфейса, потому что TCP по умолчанию запущен в режиме, он принимает все пакеты. Если мы сейчас скажем вот так вот, мину, кажется, то вот мы отослали фрейм, но ничего не увидели. Почему? Потому что адрес получателя должен быть какой адрес получателя у нас в фрейме? Где? В начале. Давайте поменяем. Тадам! Заработало. По факту того, что мы поставили правильный адрес получателя. Вот, мы ещё могли вместо него поставить `FF`, конечно, он тоже бы приехал. `1:2:3:4:5:6` тоже приехал, потому что это широковещательный адрес. Вот такие дела. Давайте ваши вопросы. Я бы тут начал немножко говорить про Wi-Fi, но не закончил, потому что на самом деле Wi-Fi довольно бездонная штука. Вот это ER протокол интерфейсного уровня, который называется `802.11`. Вот, соответственно, поскольку носителем является мировой эфир... Для Wi-Fi, а да, значит, для начала давайте посмотрим, какие бывают протоколы интерфейсного уровня. Вот, например, вы думали, я смеялся, когда я говорил про протокол "Э" через почтового голубя? Вот, пожалуйста, RFC есть 1149. А я, кажется, на него ходил, и вы, кажется, уже полили, что она первоапрельская, но тем не менее, такой RFC есть. А есть ещё следующий RFC, который, это самое, Господи, "Of Service" через почтовых голубей. Там их взвешивают, этих голубей, при прилёте. Вот, тоже шутка шутками, но это ещё раз показывает независимость уровней, что в принципе, значит, протокол интерфейсного уровня может быть достаточно любой. Вот, правда, правда, правда. Вот, значит, да, так вот, значит, Wi-Fi с Wi-Fi такая история, что... Да, значит, как вообще... Ну, то есть вот с этим надо разбираться. Я, пожалуй, не буду тратить своё время, чтобы на пальцах попытаться вам объяснить то, что в принципе надо бы довольно аккуратно изучать. К тому же, кажется, у вас это было гораздо более объёмном варианте. Как устроен Wi-Fi? Что такое, какая там модуляция используется? Что такое ортогональный несущий и так далее? Мне кажется, у нас про модуляции не было настроя. Ну, идея стоит в том, что один и тот же эфир может на самом деле передавать сразу много данных, если несущая частота, несущая частота не совпадает. Вот тогда вот... Ну да, да, ну в общем, идея в этом FDM. Вот, давайте посмотрим, что FDM, какая-то модуляция, FSK, чего-то там. Да, ну, спасибо, дорогой. Это не вам, это Википедия, это такой бесплатный менеджер-заказчик. Спасибо, точно. Ну, короче, там какая-то математика, которую больше мы пытаемся напихать между вот этими поднесущими, и тем сложнее, тем качественнее должно быть оборудование. Поэтому бесконечности это нельзя увеличивать. Вот, хотя современные Wi-Fi бывают довольно быстрые. Протоколы этих протоколов — чёртову прорву. Вот аналогичных Wi-Fi, да, вот реально чёртова прорва. Вот, вон 30 Гигабит сейчас находится в разработке. Значит, это к вопросу о Bot. Да, Wi-Fi как BOM имеет свои хитрости, связанные с тем, как мы будем кодировать, как мы будем совмещать несущую и так далее, точнее, поднесущую. А теперь относительно Тоха. Помните, там был такой пункт про шифрование? И, собственно, про это речь я и говорил, что Wi-Fi он должен решать. Значит, первым делом мы должны, во-первых, вставить прямо внутрь протокола, не более чем интерфейсного, идентификатор устройства, потому что в случае провода мы знаем, во что мы втыкаемся, но нам всё равно, мы воткнули и воткнули. А в случае Wi-Fi мы должны уметь выбирать, к какой Wi-Fi точке подключаться. Всё это должно быть частью протокола. Какого протокола? А ничего выше интерфейса у нас пока нет, так что это часть интерфейсного уровня, этот самый SSID. Вот, сначала мы его выбрали, потом мы посылаем запрос на него, потом мы получаем ответ. Где-то в этом месте мы должны ещё пароль сказать. После этого должно произойти шифрование. Вот это всё оказывается частью интерфейсного уровня. Да, вот уровня просто. Вот наша карточка это делать должна уметь. Такие дела. Выбор, идентификация, авторизация — за, за тоже проб. Чтоб пере... Они вообще-то маленькие. Более того, эти фреймы вообще-то порождены сетевым трафиком, и, например, в них там поначалу лежит Сина шный одинаковый, которого отличаются только там биты. Взять и даже очень хорошим паролем защищённый такой трафик из, допустим, тысячи подключений и проиндексировать и найти этот ключ как нефиг делать. Поэтому помимо того, что у нас, значит, происходит шифрование этого трафика, эти самые ключи ещё постоянно пересоздаются. Кусочек нашего трафика, потом раз, новый ключ, новый ключ и пошли шифровать новым ключом. И это очень часто происходит, скажем так, с такой частотой, чтобы нельзя было накопить нужную статистическую информацию для индексирования этих ключей по там узнаваемо трафику. Да, потому что мы передаем внутри, внутри нашего фрейма лежит IP, внутри IP лежит TCP, и у этих всех штук есть фиксированные поля, значения которых мы можем предсказать. Поэтому вот тут есть такая... Как это? Вся ваша компьютерная техника, я об этом, павно, говорил на лекциях по архитектуре ВМ, подчинена одному главному закону: мы сначала решаем задачу актуальными на сегодня аппаратными средствами, а потом ещё 50 лет, значит, это всё становится legacy. Мы это обзываем снаружи какими-то костылями, пока придёт принципиально новая. Так и здесь эта задача была решена, потом перережет защиты предыдущие были уязвимы. Вот у меня до сих пор на моих ноутбуках везде стоит, что там Aircrack, который умеет смотреть все Wi-Fi каналы по всем фам каналам, ловит пакетики, вдруг там кто-то плохо защитился. Вот и тогда можно получить пароль, вот халяву подсоединиться к Wi-Fi. Вот, ну как это? Это только в случае, если не используется современный протокол шифрования, конечно. Ну ладно, не пойдём. Не пойдём в русскую Википедию смотреть на страшный Google Translate. Вот в действительности, почему я вообще про это вспомнил? Мы имеем это типичное вот такое сращивание протоколов совершенно различного уровня, потому что для того чтобы у вас заработал интерфейсный уровень протокола, в смысле Wi-Fi в частности, шифрования WPA, у вас должен быть на прикладном уровне специальный демон, который эти ключи перегоняет. Если у вас его нету, у вас не получится нормально Wi-Fi соединение подключить. Вот эти люди говорят о независимости уровня, а сами, как это, специальные программки запускают, которые, значит, без которых Wi-Fi не работает. Факт остаётся фактом. Вот, вот этот случай, вот это место мы с вами пока что пропустим. Это просто команды, которые нужны для того, чтобы колона запустить Wi-Fi в Linux. Вот, ровно так. Буквально значит, это вот так выглядит блок параметров. Только понятно, нам нужно вот это преобразовать в... Так, теперь мы это запихиваем в... К TL. Вот теперь мы это всё куда-то там, где в Нептун. Вот это мы, значит, попробовали вообще всё сделать руками с этой... Во, теперь здесь всё сделаем руками. Теперь за нас даже никто устройство TAP не создаст, его надо прямо реально самому загрузить. Вообще этот пример я на самом деле придумал ровно ради этой первой строчки, чтобы было понятно, как это последовательно. Мы прямо говорим: `ip`, это тот самый `2`, что там... `mod tab name t0`, вот он. Теперь мы ему делаем... Теперь мы можем на нём запускать. Вот, и если я всё сделал правильно, сейчас произойдёт следующее: мы откроем этот самый туннель, мы ему скажем, что хотим ровно топ ноль, а не кого-то ещё. Помните? Да, там вот этот топ 0 присутствует в качестве параметров им интерфейса. Сделаем `ek`, передадим блок параметров, передадим `kal`, всё должно заработать. Если я не ошибся... Я не ошибся! Вот этот фрейм. Обратите внимание, вот он такой прям, вот прям как есть. Вот уже вообще всё руками. Правда, вот для того чтобы руками работало, пришлось немножко изврат. Последнее, что я хочу на эту тему показать, и кажется, у нас заканчивается время. У нас заканчивается время, у нас заканчивается время. Вот, всё-таки хочется, значит, есть ещё 5 минут. Хочется забежать вперёд, хочется показать, что это не просто какие-то волшебные непонятные туннели, что это настоящие интерфейсы. Да, попингу я этого не пробовал дома, не успел. Так что это будет как бы эксперимент, но мне кажется, эксперимент стоит того. Значит, запускаем... О, я обещал наступить на эти грабли. Я сказал "Б", да, а вот теперь работает. Вот, значит, здесь что написано? Здесь написано `минус А`. Давайте мы ещё раз так скажем: если я всё правильно понимаю, сейчас создастся два НТА интерфейса, между которыми `socat` будет просто перекидывать потоки. Давайте проверим. Э, а это тот, который мы загрузили в прошлый раз. Мы его забыли выгрузить. Осталось настроить на них сетку, и они будут друг друга видеть. Ну что, `ip` там... Они оба... А, уже да, потому что нам `socat` так сделал. Тап, дыбы, быб. Можно там и не пинг, можно с одной стороны сделать этот самый не `cat`, а с другой стороны... Значит, ну, короче, вот. А, кстати, давайте сделаем `ctr B`, нет, `cat -l`, сейчас... Минус... Минус `help`. Адрес тут есть? А, нету, нету. Мы не можем выбирать, на каком... А, почему мы не можем выбирать, на каком IP адресе мы слушаемся? Или вот минус `S`? Нам нужен... Да, не, не хохочет. А, минус `L` ещё? Не хочет. А, прямо тут 10.111. Yes, сейчас вот он. А, он не смотрит на него. Не знаю, не получится, наверное. Можно... Ну, короче, это уже будет извращение. Ну, ладно, видимо, пинга достаточно. Нун, что в другом интерфейсе, правильно? Да, через `socat` пошёл. Вы да? Ну, я честно не понял, как это сделать. Ладно, забейте, не получилось. Ну, короче, вы мне верите, что они там связались. Мы можем попробовать напрямую что-нибудь туда заслать тем же `socat`. О, я не закрыл туннель. Вон он. Почему я туннель закрыл? Ой, и правда закрыл. Спасибо, сокращени. А как я так сумел? А где? А где? Правда закрыл? Да что ж ты будешь делать? Наверное, нам пора заканчивать. Ну, сейчас посмотрим, вдруг получится. Во, вот туннель, дубль два. Да-да. Да, спасибо. Я уже понял. Не, не хочет. Ну, теперь назначить надо на один из них на сеть, а не... Непонятно. Ладно, давайте вот что. Давайте я попробую дома подготовить этот пример, потому что он мне нравится. Но как это накидку чего-то я не додумался про это. Давайте лучше про домашку поговорим, на этом закончим. Будем считать, что не успели. Значит, э, на самом деле ничего, кроме того, что мы уже сегодня делали, делать не надо. Надо взять две машинки, надо их объединить в одну локальную сеть. Вот, надо на одной запустить `pimp`, а на другой, значит, причём сдам с ключиком минус `p`, значит, то есть и трижды попробовать. Попробовать прослав фрейм один раз на собственный `madres`, и он должен прийти. Другой раз на какую-то левый MAC адрес, он должен не прийти, потому что `promiscuous mode` не включён. Третий раз на широковещательный адрес. А тут не так... Ну, может, я ещё допишу в задание, чтобы был четвёртый раз на широковещательный адрес. Вот главное, что адрес отправителя может не совпадать с адресом отправителя, и всё равно фрейм вам придёт. Это так, к слову. Всё это оформляется в репорт. Вот, а ещё, наверное, я бы вас попросил подр меня, чтобы я запустил публикатор, потому что у этого домашнего задания есть проверя. Потому что я хотел это сделать на прошлой неделе, но не сделал, и было бы неплохо вам всем видеть, что ваши домашние дошли до проверяю. Вот вопросы? Сиди, человек, всё, ему уже хватило. Сочувствую. Мне тоже уже хватило. Ну, хорошо, давайте. А ваши другие более сложные вопросы? Хорошо. Всем спасибо, спасибо всем участникам нашего ютубчика. Значит, в следующий раз у нас что? В следующий раз мы продолжаем топтаться на сетевом уровне, на интерфейсном уровне. Вот, потому что я обещал, я обещал рассказать про Ланы. Вот этим мы будем заниматься в следующий раз. Всё, тогда всем спасибо и до встречи через неделю.
Залогинтесь, что бы оставить свой комментарий