Компьютер компьютера видит из недалека
Сразу предупреждаю тут сложно все =) Начну за здравие, а где дальше сами увидите)) Ну просто не получается у меня упростить без воздействия энтропии этот пост. А знания тут важные. Давайте сделаем так. Если Вам что-то непонятно напишите в комментариях и я напишу новый пост с учетом, ваших пожеланий или отвечу в комментах.
Нумс рискнем :)
Как только разработчики сетей и оборудования для них обнаружили, что компьютеры можно соединять проводами, они решили, что нужно их обязательно связать все и сразу. Чтобы одно устройство могло в один момент передавать сигнал на одно, а когда передумает на другое. (а не только между двумя любимыми). Чтобы устройства могли друг друга различить им решили дать имена, причем у каждого устройства должно быть оно уникальное (да да у любой микросхемы сети в мире свое). Такое имя назвали MAC - оно состоит из цифр и букв от A до F). За тем чтобы имена были уникальны следит специальная организация IEEE и с ней советуются все разработчики сетевого оборудования.
Кстати чтобы узнать ваш MAC наберите команду в консоли getmac (в окнах консоль вызывается заклинанием win+R << cmd ENTER) В нормальных ОС Ctrl+Alt+F1 (или Fn) в основном, если нужен MAC вашего друга сначала проpingуйте его, а затем наберите arp -a в оболочке).
Потихоньку двигаемся к истине и настает тот момент, когда пора-бы узнать о том, о чем говорят только шепотом. Как вы догадались мы приступаем к изучению канального уровня модели OSI.
Для начала разберем что такое канал.
Канал - это такая длинная штука с дырками на концах, если влезть в него с одной стороны, то обязательно вылезешь с другой и только там. То есть канал организует связь между двумя сетевыми устройствами (компьютерами).
Каналы делятся на физические и логические. Физический канал, это когда два компьютера соединены проводом. Все что отправляет один компьютер, по каналу такому может попасть только на второй компьютер, куда ведет этот провод. Однако в жизни не так все просто. Компьютеры объединяются множеством проводов (Ethernet), либо радиосигналами (wifi, 4G). Тут дело еще и осложняется тем, что данные передаются широковещательными потоками.Это значит что один компьютер их передают, а все остальные их могут получить, даже если они вовсе не для них предназначены. Чтобы справиться с этой несправедливостью разработчики придумали логические каналы.
Визуально логический канал можно представить также как и физический - провод между двумя устройствами. На самом деле компьютеры могут находиться на большом расстоянии, связанные десятками проводов (но в пределах своей сети - об этом далее). Или например вообще без проводов, как wi-fi точка доступа и планшет. Или сотовая вышка и телефон.
Приведу вот еще такой пример. Допустим вы проснулись утром рано и смотрите новости в VK. И тут вы замечаете что ваш друг/подруга не ответила вам на сообщение, хоть и в онлайне. Очень подозрительная ситуация, которая говорит, что нужно срочно прочитать его/ее переписки в ЛС за последние сутки. Обычный пользователь сразу подумает, что нужно как-то подобрать логин/пароль к странице подозрительной личности. Однако нет. Взламывать код на сервере - это тоже что ехать в магазин за конфетами верхом на корове стоя на голове: можно конечно, но сложно и так делают только дебилы (так как после нескольких неверных паролей ВК отправит СМС-ку тому, чью страницу вы хотите взламывать с кодом).
Если вы еще не догадались - нужно создать канал (в этом случае канал скорее виртуальный, нежели логический, мы его обсудим при изучении сетевого уровня) между двумя вашими устройствами (будь то компьютер или телефон). Затем можно будет посмотреть что происходит на рабочем столе, скачать куки, да и вообще любые нужные файлы и т.д. (Ну перед доступом конечно придется объяснить ОС'е принимающего устройства цель визита, но сегодня речь не об этом). Однако здесь кое-что я специально приукрасил. Объясню: Дело в том, что когда одно устройство отсылает один кадр (см. ниже) на другое устройство, то там его жизнь и заканчивается, из него просто извлекается пакет, а затем для этого пакета формируется новый кадр и передается дальше. То есть физически кадр не может выйти за пределы локальной сети. К тому же, даже если записать в кадре MAC-адрес устройства, которая где-то в другой сети, канальный уровень по-хорошему ее просто не найдет по этому физическому адресу.
Если следовать модели OSI, на канальном уровне мы можем открыть логический канал, только в пределах сети, в которой находимся. Однако никто не заставляет разработчиков (и тем более хакеров) следовать этой модели, и например, если раздобыть базу с MAC-адресами и доп. информацией о маршрутизации можно научить и протокол канального уровня вести себя необычным образом - хотя он станет не совсем канальным =))
Ну надеюсь стало понятнее. Логический канал связывает два устройства в сети, так же как если бы вы звонили кому-то на телефон. Правда телефон сразу звенит, а компьютер сперва ждет что-нибудь из этого канала, а потом думает, что с этим делать.
Как организуется логический канал.
Да очень просто. Придумывается протокол для организации канала, записывается на языке C, компилируется и либо им прошивают сетевую карту, либо так и запускают, как драйвер. (Написанием протоколов мы займемся после изучения всех уровней OSI).
Протокол позволяет компьютерам видеть данные не просто как бесконечная последовательность битов, а как логически отделенные друг от друга части этой последовательности, называемые кадрами. Он либо получая от компьютера данные создает такие кадры, когда что-то отсылает, либо если принимает, то определяет начало и конец в последовательности бит, и забирает этот кусок в качестве кадра, затем извлекает из него нужные данные.
Сами данные спускаясь вниз по уровням OSI оприходуются протоколами, у каждого уровня свой протокол, данные полученные с уровня выше протоколом не изменяются, а только дополняются информацией (заголовками) необходимыми для их передачи по линиям связи, потом на принимающем устройстве поднимаясь вверх по OSI эти заголовки отбрасываются, в той же последовательности в которой и добавлялись.
Так вот канальный уровень добавляет заголовки, чтобы сформировать кадр. Подписывает его начало и конец специальными последовательностями бит. Записывает туда свой адрес устройства (MAC), адрес устройства которое этот пакет должно получить, затем может добавит пакет полученный с сетевого уровня и контрольную сумму, которая служит для проверки правильности данных, на случай если сигнал при передачи подвергся помехам и некоторые биты были инвертированы. На самом деле туда добавляется куча другой информации, например WiFi еще добавляет адрес точки доступа, всякие информационные и управляющие данные.
Потом этот кадр (в котором сидит пакет) посылается в сеть. Например точка доступа WiFi рассылает его всем устройствам в радиусе своего действия - это и есть широковещательная передача. А устройства уже сами проверяют заголовок этого кадра, и если видят там в поле адреса получателя свой MAC - то они этот кадр забирают, извлекают из него пакет сетевого уровня и передают этот пакет на свой сетевой уровень.
Несколько сетей можно объединить с помощью коммутаторов (мостов),
эти устройства пересылают кадры из одной сети в другие. Когда приходит кадр в коммутатор, коммутатор зачитывает адрес куда должен быть передан этот кадр. И сперва просто рассылает этот кадр, по компьютерам сети, с которой он связывает первую. Затем если одни из компьютеров обнаруживает в заголовке адреса назначения свой MAC, то он забирает себе этот кадр и издает радостное мурлыканье (отсылает кадр подтверждения), который также проходит через коммутатор, коммутатор опять смотрит заголовок, и извлекает из него адреса, и добавляет их в специальную хеш-таблицу. Это он делает для того, чтобы если кадр с таким адресом придет снова, то он его уже не будет рассылать широковещательным сообщением, так как он знает на каком порту компьютер с нужным MAC - то он туда этот кадр и отправит, и никуда больше.
Вообще в серверных помещениях коммутаторы прикручиваются в специальные железные шкафы. Это обычно шкафы по-больше, а сами серверы сидят в шкафах по-меньше. Там в них втыкаются провода от устройств сети, а сами они находятся вертикально друг-над другом, поэтому сами коммутаторы можно соединить коротенькой витой парой. А остальные провода чтобы не не мешались в шкафу накручиваются на специальные вешалки (вешалки тоже прикручиваются в этом шкафу по необходимости), а вне шкафа витые пары закрепляются хомутиками. Сам коммутатор может разделять физическую сеть на несколько логических, с помощью тех же таблиц и специальных заголовков в кадре (стандарт 802.1Q). Поэтому провода в шкафах не только нумеруются, но и часто помечаются разными цветами - каждый цвет определяет логическую сеть).
Отправка кадра:
- Получить пакет с сетевого уровня.
- Добавить к пакету свой MAC-адрес, MAC - адрес устройства, с которым открывается канал, контрольную сумму и.т.п тем самым формируется кадр (иногда называют фреймом).
- Передать кадр на физический уровень (через модем, например).
Получение кадра: - Получить кадр с физического уровня.
- Достать из кадра пакет, отбросив все, что было добавлено на канальном уровне отправителем (если по контрольной сумме определяется что кадр поврежден - попробовать исправить или запросить повторно).
- Извлеченный из кадра пакет передается сетевому уровню.
Основное свойство канального уровня по модели OSI - то что он нужен для объединения компьютеров с помощью коммутаторов в локальные сети и данные (кадры) передаются между устройствами по их MAC-адресам. Если данные посылаются дальше - в Интернет, то за дело берется сетевой уровень и его устройств - маршрутизаторы.
С сетевым уровнем мы разберемся в следующем посте.
Продолжайте эту серию публикаций!
Хорошо. Спасибо)