# Сетевые модели **OSI** и **TCP/IP**
### Что это?
Компьютерные сети существуют ради одной цели - **передавать информацию**.
Поэтому вполне логично, что сетевая модель описывает состояние информации в тот или иной момент времени.
Простой пример того, как меняется состояние информации даже без вмешательства сетей - вы читаете этот текст, написанный понятными для человека буквами и в этот же момент он хранится на каком-то сервере в виде нулей и единиц. Одна и та же информация, но в разном состоянии.

---
### С перспективы сетей
В процессе путешествия с одного устройства на другое информация неизбежно проходит множество преображений. Стандартная классификация ***"уровней"*** передачи данных выглядит вот так:

Нам из всех 7 уровней на самом деле будут интересны только 5, а в близком приближении и вовсе 4. Всё потому что вся работа с сетью происходит именно на этих уровнях.
**А именно:**
- **(#7) Уровень приложений**
- **(#4) Транспортный уровень**
- **(#3) Сетевой уровень**
- **(#1|#2) Канальный и физический уровни**
Если присмотреться поближе, то подобная схема напоминает нам уже другую модель, которая чаще используется на практике - **TCP/IP**. Картинка ниже показывает то, как это выглядит на практике:

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