ICNDv3 #4 — Взаимодействие.
Все взаимодействие в сетях можно начать рассматривать с простой модели, когда взаимодействуют 2 узла. Они могут взаимодействовать кучей разных способов, но в любом случае, должен быть какой-то протокол, в котором описана последовательность действий.
Раньше, каждая фирма производитель, что сетевого оборудования, что ОС пилили свои проприетарные протоколы. Эти реализации сетевых стеков были несовместимы друг с другом. Например, у Novell был свой стек IPX/SPX, который широко использовался в корпоративных сетях. У Microsoft же был свой стек на основе NetBIOS (Network Basic Input/Output System). Apple же сделала Apple Talk. Это вызывало кучу проблем, т.к. все внутренее взаимодействие между файловыми серверами, компьютерами и другими клиентами внутри сети шло по своему протоколу. Таким образом, чтобы перейти на решение другого вендора нужно было поменять весь софт, потому что он был привязан к определенному протоколу.
Все это дело решили стандартизировать в середине 90ых. TCP (Transmission Control Protocol) протокол использовался в американской оборонке, и по факту, был предназначен для корпоративной сети. Для связи же с внешним миром, использовался IP (Internet Protocol). В итоге, пришли к универсальному сетевому стеку TCP/IP.
Модель TCP/IP

Изначально была взята нейтральная модель, которая не принадлежала никакой фирме TCP/IP. Чуть позже, ее немного уточнили и расписали подробнее, получилась модель OSI.
Модель OSI

Основная фишка, которая была заложена на этапе проектирования, это уровневая модель. Если просто делать сетевые протоколы, каждый из которых решает конкретную задачу, то в короткие сроки, таких протоколов будет сотни и все превратится в бардак.
Протокол IP
Есть протокол IP, он описывает формат IP-пакета. Это блок данных, у которого есть заголовок (от какого адреса едем к какому и немного информации) + сами данные. Этот блок умеет ехать по сети через роутеры, каждый из которых читает заголовок и передает пакет данных исходя из собственного мнения, как сделать так, чтобы пакет приблизился к цели.
Все что делает протокол IP — описывает перемещения пакета из точки А в точку Б. У него нет описания, как поделить блок на части, чтобы он влез в свой IP-пакет. У него нет описания специфики работы поверх витой пары или поверх wifi и так далее.
Протокол TCP
Есть протокол TCP, транспортный протокол, который работает поверх протокола IP. Вот он уже может гарантировать доставку, он разделяет блок данных на части, частями их отправяет и по каждому ведет отчетность, доставлена ли эта часть или нет. Если нет, то отправляет повторно. Если скорость стабильная и ошибок нет, то он может эти части отправлять большими пачками, чтобы было быстрее. Если много ошибок/недоставок, то он адаптируется и отправляет их меньшими пачками. Но он не умеет маршрутизироваться, в отличии от IP.
Пример перемещения
Представьте себе IP-пакет как письмо, на котором есть адрес отправителя и получателя. Вы его передали на почту, и дальше оно уже отдается почтальону, который может поменять много типов транспорта: ехать на велосипеде, потом пересеть на машину, потом в другую страну вообще самолетом. На каждом этапе берут это письмо, читают заголовок и корректируют, куда его дальше передать.
Тоже самое и с электронным письмом. С ноутбука оно передалось по wifi на домашний роутер, дальше по меди оно передалось на роутер провайдера, дальше по оптике к главному офису и тд.