@megamage
Люблю грозу в начале мая!

Как разобраться с тем, что такое TCP/IP?

Добрый день
Уже в который раз пытаюсь понять, как работает TCP/IP и никак не доходит.
Как я понял, есть четыре уровня:
  1. Прикладной
  2. Транспортный
  3. Сетевой
  4. Канальный


Я пересмотрел тучу видео, но не могу понять, как напрямую эта модель работает.
Начнем по порядку:

1) Прикладной
Тут выбирается протокол передачи данных. Ок, допустим HTTP или HTTPs. И у него есть API
Есть такой плагин JSON Server. Там база данных на json. Но если я допустим захочу использовать вместо JSON Server - OpenServer, смолу ли я это сделать? Можно ли подключаться к базе SQL по REST API или вообще как это?
Еще не понятно как работают сами REST API в этой системе, но об этом во 2 пункте.

2) Транспортный
От слова транспорт, то есть данные транспортируются, но ведь это происходит еще не на этом уровне? Там же дальше еще 2 уровня?
И тут мы снова выбираем протокол передачи данных как в первом пункте. Мы же передаем по http уже или как?

Дальше идет сетевой и как я понял он передает по проводам данные, так а что тогда делает транспортный??? С канальным аналогичный вопрос...

Сколько ищу, пытаюсь вникнуть, но вопросы всё равно остаются. Хотелось бы просто раз и навсегда разобраться в этом и чтобы не возникало никаких глупых вопросов.

Если вы поможете разобраться мне в этом, опишете по человеческому, простым понятным языком, то я думаю, что вы поможете многим десяткам начинающим разработчикам. Это должен знать каждый веб разработчик.

Искренне благодарю тех, кто не останется равнодушен к этому вопросу.)
  • Вопрос задан
  • 3573 просмотра
Решения вопроса 3
Jump
@Jump
Системный администратор со стажем.
Прикладной это уровень приложений. Используется удобный протокол для обмена данными по сети. Этих протоколов огромное количество. RDP, HTTP, FTP, и прочие.
Они описывают как будет происходить обмен данными, но не имеют отношение к доставке данных. Доставляет данные транспортный протокол.
Пример протокола прикладного уровня в обычной жизни - посылка, телеграмма, письмо. Вот это протоколы прикладного уровня.
JSON, REST API, и SQL к этому никакого отношения не имеют. Это не сетевые протоколы
JSON, REST API это протоколы обмена данными, а SQL это язык написания запросов к базам данных.

Транспортный -это уровень транспортировки.
Его задача доставить пакет по адресу, решить все задачи с этим связанные.
Пример из обычной жизни - почта или транспортная компания. Она принимает посылки, и обеспечивает их доставку по назначению. Заметьте - в реальности она их не возит, только обеспечивает доставку.

Сетевой - это уровень определения маршрута. Определяет путь доставки.
Если брать пример из реальной жизни это логистический отдел почты или транспортной компании, который решает когда какую посылку, каким маршрутом удобнее отправить.

Канальный уровень - это уровень работы с физической доставкой.
Пример из реальной жизни - отдел который упаковывает, посылки и грузит их поезд, самолет, автомобиль, следит за повреждением упаковки груза и общается с перевозчиком.

Физический
уровень - физическая передача данных.
Например передача по оптике, или по медному проводу.
Пример из реальной жизни - водитель везущий товар.

В итоге вы для общения с удаленным собеседником выбираете протокол общения - письмо(прикладной уровень)
Отдаете его на почту (транспортный уровень), почтовое отделение отдает его в отдел сортировки и логистики(сетевой уровень), из отдела логистики оно с экспедитором (канальный уровень) отправляется к перевозчику, который его и везет(физический уровень)
И все в обратном порядке в месте получения.
Ответ написан
elser
@elser
IT-шник :)
Физика (контроллер): короче, вообще всё в сети - это просто поток обезличенных бит. мне приходят импульсы и я в соответствии с ними делаю на проводках пиу-пиу )

Канал (драйвер): ок, дело твоё, но я то знаю что это пиу-пиу делается на другом конце провода другой железкой. Чем она отличается от меня? правильно - мак адресом, по этому я беру эту цепочку бит, откусываю от неё начальные и понимаю что в них записано от какой железки пришло и какой надо отправить. если отправить мне, передаю сетевому уровню - дальше сам пусть разбирается

Сетевой уровень (операционка): О, давай, ага, мне то пофиг через какие железки оно прошло, мне главное откуда оно вообще было отправлено и куда. Если мне, ок, отдам транспорту, пусть разбирается, а нет, то маршрутизирую в ту сетку в которую оно летит, как его подписать, что бы следующий маршрутизатор или камп его принял (если это роутер конечно)

Транспорт (фаервол): о, это мне, че там за софтина у меня на этом порту висит? на - это тебе ) А ты софтина че, отправить кому то хочешь? ок, зафигарю ка я его через вот этот порт (не тот порт который интерфейс, а который номер)

прикладной (прога): ага, ща мы чекнем заголовки на предмет авторизации, сессии там проверим, провалидируем всё, а соответствует ли это правилам которые я использую для кодирования инфы.
Ответ написан
Vamp
@Vamp
Как я понял, есть четыре уровня:
1. Прикладной
2. Транспортный
3. Сетевой
4. Канальный

В действительности уровней чуть больше. Точное их количество зависит рассматриваемой сетевой модели, но в самой популярной ныне модели их всего 7.

Есть такой плагин JSON Server. Там база данных на json. Но если я допустим захочу использовать вместо JSON Server - OpenServer, смолу ли я это сделать?

Упомянутый вами JSON Server работает на основе протокола HTTP. То есть на 7 (прикладном) уровне. Вы вполне можете вместо JSON Server взять OpenServer, так как он тоже работает на этом же уровне, только вам придётся написать скрипты, которые будут принимать и обрабатывать JSON запросы так же как это делает JSON Server. Вот после этого и можно будет свободно переключаться между JSON Server и OpenServer, так как между ними появится совместимость не только на уровне HTTP, но и ещё на уровне API.

Можно ли подключаться к базе SQL по REST API или вообще как это?

Нет. Как правило, у каждой базы свой собственный протокол. Попытка отправить HTTP запрос MySQL серверу закончится ошибкой, так как протоколы разные, хоть и находятся на одном (прикладном) уровне.

Чтобы понять как работают и для чего нужны протоколы более низких уровней, вам необходимо превратиться в админа, так как взаимодействовать с этими протоколами как программист вы не можете. Все они работают не на уровне прикладных программ (OpenServer, Apache, node.js, MySQL), а на уровне операционной системы и оборудования (сетевая карта, роутер).

Попробую объяснить на пальцах уровни протоколов, начиная с самого базового.

1. Физический. Протоколы этого уровня определяют как кодировать биты электрическими/световыми сигналами в медном/оптическом кабеле. Грубо говоря, определяют какое напряжение подать в провод, чтобы устройство на другом конце провода поняло, что мы отправляем 0 или 1.

2. Канальный уровень. Протоколы этого уровня позволяют общаться с несколькими устройствами, связанными локальной сетью. Здесь работает MAC-адрес, о котором вы наверняка уже слышали, - уникальный идентификатор, зашитый производителем в чип сетевой карточки. По MAC адресам сетевые устройства понимают на каких проводах какие компьютеры сидят и передают электрические сигналы по нужному проводу в зависимости от MAC.

3. Сетевой уровень. Практически то же самое, что и канальный, только вместо физических адресов (МАС) используются виртуальные (IP), что позволяет общаться компьютерам из разных локальных сетей. Ваш домашний компьютер находится в локальной сети вашего интернет провайдера, а сервера гугла находятся в своей локальной сети, но гуглом вы можете пользоваться только благодаря IP. Вы никак не сможете узнать MAC адреса серверов гугл, впрочем как и гугл - MAC вашего компьютера.

4. Транспортный уровень. Здесь находятся протоколы UDP и TCP, которые позволяют указать номер порта - то есть какому приложению на удалённой стороне предназначены данные. У протокола TCP есть ещё дополнительные поля вроде порядкового номера пакета, что позволяет организовать доставку данных в том порядке, в котором отправитель их послал. Именно это имеют ввиду, когда пишут что TCP - протокол гарантированной доставки сообщений.

5 и 6 уровни (сеансовый и представления) расписывать не буду, так как с ними вам вряд ли придётся столкнуться когда-либо.

7. Прикладной уровень. С этим уровнем вы, как программист, работаете плотнее всего. Это HTTP, TLS, почта (SMTP, POP, IMAP), файловые протоколы (FTP), IP-телефония (SIP, RTP) и куча других.

От слова транспорт, то есть данные транспортируются, но ведь это происходит еще не на этом уровне? Там же дальше еще 2 уровня?

С этой точки зрения только уровни с 1 по 3 можно назвать транспортными, от слова "транспорт" со смыслом "перемещение данных с одного компьютера на другой". Транспортный же уровень (который под номером 4), на самом деле не имеет ничего связанного с перемещением данных. Как по мне, данный уровень надо было назвать иначе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
@nrgian
Серия статей "Сети для самых маленьких" на Хабре.
Ответ написан
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Прочитать учебник Таненбаума "Компьютерные сети".
Ответ написан
Zoominger
@Zoominger
Сись админ
Тут выбирается протокол передачи данных. Ок, допустим HTTP или HTTPs. И у него есть API
Есть такой плагин JSON Server. Там база данных на json. Но если я допустим захочу использовать вместо JSON Server - OpenServer, смолу ли я это сделать? Можно ли подключаться к базе SQL по REST API или вообще как это?

Нихрена себе вас понесло, у меня аж глаза на лоб полезли.

Дальше идет сетевой и как я понял он передает по проводам данные, так а что тогда делает транспортный???

Сетевой маршрутизирует, непосредственно биты передаёт физический. Транспортный управляет потоком, управляет передачей, перепосылает потерянные пакеты, например.

Вы по какому источнику изучали? Видяшки сразу в мусор, читайте книги. Могу сказать, какие. В двух словах тту объяснить трудно.
Ответ написан
@HEKOT
Embedded
Теория без практики мертва. Для практики возьмите WireShark, изолированную сетку и играйте.

Если программируете, для понимания попробуйте написать простенькое приложение, использующее TCP, а потом, с помощью WireShark поиграть с данными, посмотреть, как всё работает. Можно для общего развития начать с UDP -- он более понятен.

Я после прочтения книжек имел какое-то представление, но вот когда по работе пришлось написать DHCP/BOOTP и TFTP серверы, всё стало вполне понятно. Потом ещё на SLIP/TCP программировал.
Очень полезно оказалось.
Ответ написан
xozzslip
@xozzslip
Чекни мой канал о кодинге https://bit.ly/2LNBAL8
мне многое стало понятно после курса https://lagunita.stanford.edu/courses/Engineering/...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы