Всем привет!
После прочтения такого материала как «PHP 7 Д. Котерова», или «byte Of Python», может возникнуть один очень интересный вопрос, и нет, он не будет связан с языком, о котором была книга, он будет взят как правило из первых глав книги, которые обычно посвящаются «устройству интернета», как правило такие книги сильно глубоко пользователя не погружают, и оставляют его на уровне прикладных данных, то есть не дальше чем протокол HTTP, и работа TCP/IP. Но как всем нам известно, есть очень «прожорливые» умы, которым одного только
Каждый из протоколов в идеале «ничего не знает» о том, какой протокол «стоит над ним»
совершено не хватит. Вариантов занять свою «прожорливость» уйма, и сегодня я расскажу об всех основных моментах компьютерных сетей, кратко.
Сначала то, к чему мы вернемся
Основные термины и понятия компьютерных сетей, грубо говоря, компьютерные сети, это обычные «сети», состоящие из конечных машины. Конечными машинами называться любые компьютеры в сети, которые хотят обмениваться данными.
Такие сети, как правило передают данные по физическим передатчикам, а именно(будут рассмотрены самые популярные/простые в понимании типы):
- Оптоволокно: наивысшая скорость передачи данных, за счет передачи данных с помощью светосигналов.
- Витая пара: более низкая скорость(зависит от типа), переда данных осуществляется с помощью электро сигналов, по пяти медным кабелям.
Тут сразу встает вопрос ребром, неужели все компьютеры просто связаны через кабеля друг с другом, ответ: и да, и нет. Как вы понимаете, если бы вы купили новый ноутбук, вам пришлось бы подключать ко всем компьютерам мира, но вы этого не делаете, заместо этого вы или просто вставляете в свой ноутбук, кабель, или подключаетесь по WI-FI, вот тут то наше «и да, и нет» проявляется, как видите в ручную вы все не делаете, но подключаясь к своему интернету дома, вы покупаете его у провайдера, соответственно, вы как бы «по кабелю» связываетесь с провайдером, который вас уже связывает с всем интернетом. Но, это все равно не отменяет вопрос, провайдер что, тоже связан со всеми ПК мира? Нет, все обстоит иначе, начнем с того что провайдеров много, бывают провайдеры которые покупают интернет у регионального провайдера(это провайдер, который работает на область, допустим Краснодар), такие провайдеры, называются местными(допустим транслируют интернет на какое то село, или маленький город), региональные провайдеры, в свою очередь берут интернет у провайдеров страны, а те в свою очередь, у провайдеров континента, получается как-то так:
Но, как вы сами понимаете, это еще не все, не можем же мы напрямую через кабеля быть связаны с провайдерами, а те с провайдерами на уровень выше, и так далее. Нет, это не так, на самом деле, между конечными системами, провайдерами, и прочими узлами, есть специальные комутаторы и километры кабелей, про комутаторы — а именно маршрутизаторы, маршрутизаторы, это специальные блоки, вычислительные машины, которые имеют несколько входов/выходов(может быть и тем и тем, такие входы/выходы называют интерфейсами), и имеют у себя на борту таблицы, в которой описано 1 адрес в сети следующего маршрутизатора или самой конечной системы, для отправки данных на конечную систему на которую сделан запрос, 2 километраж(это не точное определения, там считается специальными единицами), 3 маска под сети(это не все, но в этой статье не будут подробно раскрываться маршрутизаторы).
Теперь сеть выглядит так.
Компьютеры выделенные цветом, хотят связаться друг с другом, на пути у них, есть несколько маршрутизаторов, и других компьютеров. Появляется вопрос, как же маршрутизатор узнает где именно конечная система, есть ли там по адресу маршрутизатор вообще, и какой путь длиннее, а еще на какой маршрутизатор, дальше отправить данные. На вопрос, о том где конечная система, и на какой маршрутизатор дальше отправит данные, отвечает адресация в сети, а именно IP адреса, прим: 192.168.0.1, маршрутизатор принимая данные которые ему пришли от компьютера, или от другого маршрутизатора, смотрит на все 4 блока адреса(блоки разделены точкой), допустим изначальный путь 176.123.82.129 данные приходят на маршрутизатор 176.123.82.130, к нему подключены два маршрутизатора, 176.123.82.120, 176.123.82.125, и один компьютер 176.123.82.129, это маршрутизатор посмотрит на свою таблицу адресов, и отправит данные туда где они «быстрее дойдут» до конечной системы, то есть, он сам туда отправить данные за счет IP в данных, и своей таблицы. Длина пути вычисляется с помощью, таблицы с «километражом»(не точно, ибо есть своя единица исчисления). С маршрутизаторами все, на самом деле они имеют еще очень много неточностей, и функций, но раскрывать их здесь подробно, я не буду, ибо это займет довольно много времени.
Что-же мы получаем в итоге? У нас есть сети, из конечных систем, провайдеров, они связаны между собой кабелями, но через переходники «маршрутизаторы», которые выполняют роль главный маршрутизаторов данных.
Не большое уточнения, «данные» это пакет данных, содержащий биты информации, порядок обработки такого «пакета» на маршрутизаторе, примерно так — приходит пакет, как правило пакет, это лишь часть всех данных которые передала конечная система, так вот, маршрутизатор делает обработку, достает заголовки сетевого уровня сети(об этом позже) обратно запаковывает пакет, от отправляет его по принципу который был описан выше. Уточню, маршрутизаторы, есть и те которые дожидаются когда прибудут все данные с конечной системой, и которые сразу отправляют данные, сразу, не дожидаясь остальных, но когда приходят остальные, он отправляет их туда же, куда отправил первые(все эти вычисления делает сам маршрутизатор, за счет заголовков в каждом отдельном пакете), а заниматься дальнейшей обработкой, и склеиванием пакетов должна конечная система на которую пришли пакеты, при этом если пакет был потерян, или произошла ошибка, маршрутизатор обязан прервать соединения, и повторить попытку.
Пятиуровневая модель сети TCP/IP
Как вы понимаете, чтобы все выше описанное работало верно, должен быть некий стандарт, этим де-факто стандартом является стек протоколов TCP/IP + уровень OSI.
Для начала немного терминов.
Что такое протокол? Протокол, это некое правила общения между двумя системами, самый травильный и популярный пример, это взаимодействие двух человек, допустим вы подходите в человеку, что вы обычно ему говорите? «Здравствуйте», человек обработает это, и ответит «Здравствуйте», после этого, как прошло соглашения об общении, вы спрашиваете «сколько времени», человек обработает это и ответит к примеру «14:00», после этого общения закончится на слова «благодарю» и «до свидания». Вот такой тип общения, и есть протокол, а именно из примера выше, у нас был почти что браузера, и
Что такое порт? Как вообще общаться компьютеры, через сети? Компьютеры общаются, через специальные приложения, так вот, эти приложения работают, через специальные интерфейсы «сокеты», для того чтобы, верно обработать веб-серверу HTTP запрос допустим, надо чтобы веб сервер вызвал процесс HTTP находящийся по порту 80, по такому порту заработает
Что такое сокет? Один из самых частых вопросов новичков, сокет, это всего лишь интерфейс между протоколом прикладного уровня сети, и процессом компьютера, грубо говоря, есть два дома друг на против друга, в левом доме живет Иван, в правом Сергей, Иван захотел передать письмо Сергею, тогда Иван выходит из своего дома, через дверь(процесс на компьютере посылает пакет, через сокет, сокет в данном случае дверь), переходи через дорогу, тратуар(компьютерная сеть, маршрутизаторы), стучится в дверь, пожимает руку Сергею, и заходи через дверь к нему в дом(делает запрос «стучится», соглашается об работе «пожимает руку», и пакет приходит через сокет «дверь»).
Что такое процесс? Тут все просто, это «программа», которая работает на фоне, все время, допустим это HTTP обработчик.
Что такое соглашения упомянутое раньше? Это вовсе не обязательная процедура, соглашения двух процессов, об общении на таком порту, по такому IP, пример, браузер и веб сервер, начинают общение только после соглашения типа «трехсторонние рукопожатие», это когда вы вводите в адресной строке браузера адрес сайт, браузер сначала посылает запрос на сервер с вопросом «будем работать», сервер может ответить «да» или «нет», если да, то браузер посылает еще один запрос, и соединения начато, если нет, браузер пишет нам какую то ошибку, об запрете доступа. Замечу что не во всех компьютерных сетях, и протоколах обязательно какое либо «соглашения».
Вернемся к пятиуровневой модели сети, и так, пять уровней сети, это специальные уровни работы сети, которые позволяют легче вычислять на каком уровнен была обнаружена ошибка, это позволяет прикладному приложению, работать легче с данными из сети, и позволяет разработчикам, при надстройке своего протокола, не изучать высшую математику.
Приведу пример, используемый в книге «Компьютерные сети. Наглядно», с некоторой модификацией. Представим аэропорт, аэропорт по сути и есть сетевая модель, только в других реалиях, как работает аэропорт? Человек (будет выступать в роли пакета), заходит в здания, и подходит к кассе, на покупку билета, он покупает билет, и идет на регистрацию багажа, дойдя до регистрации багажа, регистрирует багаж, далее он идет на посадку на самолет, после чего самолет берет разгон на взлетной полосе, и уже потом летит(пакет «летит» по сети), после чего самолет приземляется, и происходит все описанное ранние, только в обратном порядке, а именно, самолет садиться на взлетной полосе, человек выходит из самолета, человек забирает багаж, и по желанию может подать жалобу на билет. А теперь представьте, если бы заместо каждой отдельной службы, была всего одна, которая занималась бы и посадкой на самолет, и продаже билетов, и так далее. Тут просто на ум в первую очередь приходят очереди, были бы огромные очереди. Все тоже самое происходит и с моделью сети.
Пример, у нас есть чат, одно приложения на нашем ПК, и другое на ПК нашего друга, мы отправляем сообщения, и происходит следующие, а именно, пакет собирается процессом клиентской(нашей) конечной машины, и через сокет отправляется на уровень модели под названием «транспортный», тот в свою очередь через протокол TCP составляет пакет(длинна данных, данные...), и отправляет пакет еще ниже на уровень, к сетевому уровню, который через протокол IP добавляет к пакету данные, об получателе пакета(все данные, кроме изначально передаваемых, называются заголовками, далее мы и будем их так называть)(эти данные генерирует, сам процесс), далее процесс отправляет пакет на канальный уровень, этот уровень отвечает за поиск и исправления ошибок, в сети, а так же маршрутизацию в локальной сети, к примеру WI-FI, канальный уровень в свою очередь отправляет на физический уровень, физический уровень, шифрует все данные, и отправляет их через интерфейс(порт в ПК, или через WI-Fi) туда, куда предусмотрел сетевой уровень, после этого на конечной машине получателя, идет обработка данных, а именно, физический уровень на получателе, расшифровывает данные, и передает их на канальный, тот тоже расшифровывает их(убирает свои заголовки, взяв все нужные данные), и отправляет данные на сетевой уровень, тот обрабатывает, верно ли взят адрес, все ли работает, забирает свои заголовки, и отдает данные на транспортный уровень, тот в свою очередь, окончательно все расшифровывает, и отдает данные нашему «чату».
Уточню, если наш процесс вдруг захочет взят только данные из сетевого уровня, то он не как не сможет проскочить первые два уровня, то есть ему надо будет расшифровать сначала физический уровень, отправить данные на канальный, и только после этого дойти до сетевого, перепрыгнуть уровни не возможно. Это важно! Оно понадобится для дальнейшего домашнего задания(ответ будет описан в конце).
Вот как выглядят уровни сети
Уточню, у новичков может возникнуть вопрос, что значат стрелки между уровнями сети? На самом деле, этих стрелок нет, на самом деле, правый столб уровней, работает с пакетом просто на том протоколе, на котором он был отправлен в левом столбе, он не как не общается с уровнем который отправил этот пакет, он работает лишь с пакетом, на том протоколе, на котором работал уровень левого столба.
А теперь подумайте о плюсах, к примеру главный плюс, это если допустим на канальном уровне произошла ошибка, нам будет не трудно это узнать, просто пропустив по сети специальный возвращаемый запрос. Еще плюс, если мы захотим надстроить свой протокол, нам не придется менять все уровни сети, мы просто сделаем протокол, который верно будет работать с текущем уровнем сети. Далее будет более подробно рассмотрен каждый уровень.
Но для начала вопрос — маршрутизаторы, работают ли они с уровнями сети? С какими именно? До каких доходят? Какие читают? (Ответ в конце).
Прикладной уровень, это вовсе не обязательный в использовании сети уровень, он в основном отвечает за форматирования данных которые приходят на транспортный уровень, на конечной системе приемнике, допустим пример это веб сервер и веб браузер, они на прямую работают с HTML разметкой, при разработке веба, решили что передавать на прямую верстку через транспортный уровень, не очень хорошо, и был создан протокол прикладного уровня HTTP, этот протокол специально создан для передачи HTML документов. Но как я упомянул ранее, прикладной уровень вовсе не обязателен, практически все чат программы, еще до популярности онлайн чатов, обменивались данными через транспортный уровень, без использования прикладного.
Транспортный уровень, этот уровень сети, отвечает за транспортировку данных по сети, то есть он принимает сами данные, их длину, и еще некоторые заголовки, и посылает все это на сетевой уровень, данный уровень, эталонно должен повторять отправку при сбое системы, и одним из самых популярных протоколов данного уровня, является TCP, за ним UPD.
Сетевой уровень, данный уровень отвечает за, адресацию пакета, на данном уровне сохраняется, IP адрес, маска под сети, есть еще некоторые заголовки, но мы их рассматривать не будем. Он отвечает за маршрутизацию пакета по сети.
Канальный уровень, данный уровень отвечает за маршрутизацию пакета в локальной сети, к примеру для определения на какой компьютер послать пакет, в сети WI-FI, а так же, этот уровень отвечает за обнаружения, исправления ошибок при передаче пакета.
Физический уровень, этот уровень на прямую работает с интерфейсами ПК, и занимается шифровкой данных, в разного типа частоты, подробно мы его рассматривать не будем.
Какие типы сетей бывают?
Типов сетей бывает много, начиная от прикладных, заканчивая низкоуровневыми. Я рассмотрю тут два самых популярных типа сетей, это «P2P», и «client server». Но для начала термины.
Что такое клиент? Клиент этот как правила конечная машина(или процесс конечной машины), который запрашивает данные у сервера.
Что такое сервер? Сервер, этот как правило конечная машина(или процесс конечной машины), который по запросу отдает запрашиваемые данные, или любой другой ответ, в общем сервером называется то, что обрабатывает запросы которые на него поступают, и отвечает на них.
P2P(расшифровка — «peer-to-peer»), это тип сетей когда в, в компьютерной сети, все конечные машины, могут быть и серверами, и клиентами, пример группа скайп, когда вы звоните кому-то, вы становитесь клиентом(ваш скайп), который запрашивает у сервера видео обмен(у скайпа того кому вы звоните), теперь вы отключились от звонка, и резко вам позвонил тот с кем вы только что говорили, теперь вы не клиент, а сервер(ваш скайп теперь не делает запросы, а отвечает на них), а скайп того кто позвонил, не сервер а клиент(не отвечает на запросы, а посылает их). Так то и работает P2P, когда все машины потенциально и клиенты, и сервера. Опять же, пример такой сети это — Скайп.
Клиент сервер, это тип сети, когда у нас строго на строго есть клиенты, и сервер/сервера. То есть вы всегда можете лишь посылать запросы, а сервер отвечать на них, так может работать чат, ваш клиент(процесс) посылает запросы, на проверку нету ли, новых сообщений в базе, если есть, сервер вернет их, если нет, вернет другой ответ, когда вы отправляете сообщения, то оно летит на сервер с запросом типа «сохрани в базу новое сообщения». То есть у нас есть группа клиентов, и сервер, если два клиента захотят связаться, все будет проходить через сервер, а клиенты только будут делать запросы на сервер, с просьбой «верни все новые сообщения», а сервер лишь будет отвечать. Пример такой сети, это самая прикладная на данный момент сеть, это веб. Все ваши действия в браузере, вроде ввода адреса в адресную строку, делают запрос на сервер, а сервер лишь отвечает. Ваш браузер не может стать сервером, а сервер не может стать браузером. (Браузер процесс клиента, сервер процесс сервера).
И лишь совсем чуть чуть, о безопасности в сетях.
Безопасность в компьютерных сетях, это сейчас одна из самых популярных тем, информационной безопасности, и коротенькой статьи не хватит чтобы объяснить даже самые основные аспекты. Тут я лишь расскажу о паре самых популярных уязвимостей, и атак на компьютерные сети.
Перехват пакетов, как говорилось раньше, конечные машины обмениваются данными, через пакеты, проходящие по сети. Как вы понимаете в реалиях нашего мира, есть очень много виртуальных структур, которые связаны с финансами к примеру, это могут быть и банки, и просто оплата книги в интернет магазине, не важно. Все ваши данные, в любом случае будут переданы другой конечной машине(серверу), и обработаны, так вот, суть данной уязвимости в том, что данные которые передаются к серверу, а именно пакеты, могут быть перехвачены.
Соответственно могут быть украдены пароли, или номера кредитных карт. Это могут быть что пакеты веб браузера, что пакеты какой либо P2P сети. Решить данную уязвимость, можно сделав между клиентами, и серверами обязательное соглашения о котором шла речь раньше
Что такое соглашения упомянутое раньше? Это вовсе не обязательная процедура, соглашения двух процессов, об общении на таком порту, по такому IP, пример, браузер и веб сервер, начинают общение только после соглашения типа «трехсторонние рукопожатие», это когда вы вводите в адресной строке браузера адрес сайт, браузер начала посылает запрос на сервер с вопросом «будем работать», сервер может ответить «да» или «нет», если да, то браузер посылает еще один запрос, и соединения начато, если нет, браузер пишет нам какую то ошибку, об запрете доступа. Замечу что не во всех компьютерных сетях, и протоколах обязательно какое либо «соглашения».
И в этом обязательном соглашении договариваться о работе по протоколу, который шифрует данные к примеру это HTTPS, а процесс его обработчика находиться по порту 443(это порт и для TCP). То есть договориться общаться по порту 443, это TCP с наработкой, которая работает с HTTPS. Что такое HTTPS? Это протокол, а именно HTTP который шифруется специальной утилитой «SSL, TSL», а главное что шифруется такой пакет и на клиенте, и на сервере, соответственно перехватив такой пакет, злоумышленик не сможет ничего расшифровать, и обнаружить пароли и прочие…
DDoS атака, это атака, которая в данный момент является одной из самых популярных в компьютерных сетях. Работает она так, на больше количество конечных систем, путем рекламы, спама, и прочих методов рекламы, устанавливается вредоносное программное обеспечение(процесс), которое не видно, и работает он как правило без каких либо действий пользователя, в фоновом режиме, в определенный чес «Ч», все компьютеры зараженные данным процессом, начинают посылать огромное количество запросов на определенный сервер, с целью выведения данного сервера, или маршрутизатора на пути к серверу, из строя. В запросе, как правило летит не много весовая(для обширности атаки), при этом максимально сложная информация для обработке сервером.
Атаки такого типа, выводят сервера из строя тем путем, что у сервера пропадает возможность отвечать на все более и более новые запросы, таким образом сервер падает, и стает не работа способным, так же, очень часты случаи что из строя выходи маршрутизатор на пути к серверу, ибо у них забивается буфер, и пропадает возможность дальше отправлять пакеты. Такие атаки как правило очень быстро исправляются, но, когда такие атаки происходят на какие то интернет биржи, или банки, что пользователи, что сами структуры, терпят убытки.
Защититься от такой атаки, можно анализируя количество запросов в секунду, от одного и того же IP. Минимальный при этом опасный размер атаки на данный момент это 100 тысяч запросов в секунду. Так же существует родитель DDoS атаки, а именно DoS, но на данный момент эта атака не так страшна, ибо мощность даже самых ушлых серверов, позволяет обработать столь не значительную нагрузку.
Заключения
В заключения я хочу сказать некоторые детали об этой статье.
- Не в коем случае не используйте эту статью как учебник по компьютерным сетям, ибо это всего лишь «перекус» для сознания новичка в веб программировании, перед специальным изучением компьютерных сетей, не более того.
- В этой статье показаны лишь основы основами, все граничащие с основами моменты, были упущены, так же были показы не все протоколы уровней сети.
- В этой статье, не рассказано о некоторых вещах, которые вы можете принять на основы, такие как буферизация маршрутизатора, или задержки передачи данных, или единицы измерения данных на разных уровнях, или подробна работа маршрутизатор, так далее и тому подобное… Они были упущены, ибо сложные, и могут запутать новичка.
Спасибо всем большое, за прочтение!
Автор: Железный человек