# Сетевые модели **OSI** и **TCP/IP** ### Что это? Компьютерные сети существуют ради одной цели - **передавать информацию**. Поэтому вполне логично, что сетевая модель описывает состояние информации в тот или иной момент времени. Простой пример того, как меняется состояние информации даже без вмешательства сетей - вы читаете этот текст, написанный понятными для человека буквами и в этот же момент он хранится на каком-то сервере в виде нулей и единиц. Одна и та же информация, но в разном состоянии. ![ASCIItoBytes](https://i.imgur.com/Xle5Ubi.png) --- ### С перспективы сетей В процессе путешествия с одного устройства на другое информация неизбежно проходит множество преображений. Стандартная классификация ***"уровней"*** передачи данных выглядит вот так: ![OSI](https://i.imgur.com/NlPxmMF.png) Нам из всех 7 уровней на самом деле будут интересны только 5, а в близком приближении и вовсе 4. Всё потому что вся работа с сетью происходит именно на этих уровнях. **А именно:** - **(#7) Уровень приложений** - **(#4) Транспортный уровень** - **(#3) Сетевой уровень** - **(#1|#2) Канальный и физический уровни** Если присмотреться поближе, то подобная схема напоминает нам уже другую модель, которая чаще используется на практике - **TCP/IP**. Картинка ниже показывает то, как это выглядит на практике: ![TCP/IP](https://i.imgur.com/b1k3Wrj.png) --- ### Путь информации **Давайте разберём, какой путь проходит информация, чтобы попасть из одного компьютера в другой:** 1. Сначала нужно, чтобы кто-то захотел передать или получить информацию. Этот базовый импульс даёт [API](https://habr.com/ru/post/464261/). Каждый раз, когда вы заходите куда-то через браузер или подключаетесь к серверу по ssh в вашей ОС выполняются функции, которые инициализируют сетевые подключения. Это и называется **уровень приложений**. На этом уровне вы взаимодействуете напрямую с нужным вам приложением. 2. Дальше начинается сетевая магия. Поскольку приложения на одном компьютере запускают одни и те же функции, чтобы отправить или принять данные - их нужно как-то различать. Для этого было введено новое понятие - **порт**. Можно сказать, что порт это **ID** приложения в сети, по которому удобно определять какого типа информацию приложение передаёт. Например если приложение работает на порту 8080 - скорее всего это приложение передаёт [http](https://www.w3schools.com/whatis/whatis_http.asp) траффик. На этом этапе мы берём пользовательские данные и кладём их в "вагон"(т.е. указываем порт), который обязательно имеет номер. Это **транспортный уровень**. 3. Итак, мы имеем кучу вагонов и даже знаем куда они направляются. Но мы не знаем как попасть в пункт назначения, какой выбрать маршрут. Для этого мы превращаем вагон в поезд, который может ездить по рельсам. А на каждой развилке ставим умный переключатель - **маршрутизатор**, или если так будет привычнее - **роутер**. Задача маршрутизатора до ужаса проста - найти самый быстрый маршрут до пункта назначения. Если переводить в абстракции - то он строит путь до нужного нам вокзала. Это **сетевой уровень**. И даже несмотря на его кажущуюся простоту это и есть основное место работы сетевиков. 4. И наконец, наш поезд уже прибыл на вокзал, но он ещё не знает на какую платформу ему нужно прийти. За это тоже будет отвечать умный переключатель, но в отличие от маршрутизатора ему не нужно строить никаких маршрутов, ведь он уже напрямую ведёт к пункту назначения. И в роли такого переключателя выступает **коммутатор** или по английски **switch**(буквально - переключатель). Теперь можете вновь вернуться к рисунку выше и попробовать понять, как информация передаётся от одного компьютера к другому. Цилиндр или окружность с перекрёстными стрелочками это стандартное изображение роутера при документации сетевых топологий.