Практичная схема, из которой вырос интернет
Стек TCP/IP появился раньше, чем модель OSI была окончательно оформлена, и создавался не как теория, а как набор работающих протоколов для объединения разнородных сетей. Отсюда и название: в него вошли два самых известных протокола, IP и TCP. Описывающая их модель проще и ближе к реальности, чем академическая семиуровневая схема.
В большинстве описаний выделяют четыре уровня. Иногда встречается вариант с пятью, когда канальный уровень делят на физический и собственно канальный, но суть остаётся той же.
Уровни и протоколы, которые на них живут
Нижний уровень называют канальным или уровнем доступа к сети. Он отвечает за передачу в пределах одного физического сегмента: Ethernet, Wi-Fi, PPP. Выше расположен межсетевой уровень, где работает IP вместе с вспомогательными протоколами вроде ICMP: его задача состоит в адресации и доставке между сетями по принципу «как получится», без гарантий.
Транспортный уровень предлагает два основных сервиса. TCP устанавливает соединение, нумерует байты и повторяет потерянное; UDP просто отправляет дейтаграммы, оставляя контроль приложению. Верхний, прикладной уровень объединяет всё, что в OSI разложено на пятый, шестой и седьмой: HTTP, DNS, SMTP, SSH и другие протоколы, которые общаются напрямую с программами.
Чем это отличается от OSI
Главное различие состоит в подходе. OSI сначала описывала уровни, а потом под них писали протоколы; TCP/IP шёл в обратном порядке, сначала протоколы, затем их описание. Поэтому в TCP/IP нет отдельных сеансового и представительского слоёв: функции, которые OSI закладывает туда, приложения реализуют сами или через библиотеки вроде TLS.
Соответствие примерно такое. Канальный уровень TCP/IP охватывает физический и канальный OSI, межсетевой соответствует сетевому, транспортный совпадает с транспортным, а прикладной поглощает три верхних. Соответствие условное, и попытки провести идеально ровные линии обычно упираются в исключения.
Как это проявляется в реальной работе
Сетевые инструменты видят стек по слоям. Анализатор пакетов показывает вложенность: Ethernet-кадр, внутри него IP-пакет, в нём TCP-сегмент, а в нём запрос HTTP или ответ DNS. Настройки операционной системы тоже распределены по уровням: адрес и шлюз относятся к межсетевому слою, а номера портов и тайм-ауты соединений к транспортному.
Когда специалисты обсуждают, где именно возникла проблема, они чаще ссылаются на номера уровней OSI, а описывая реализацию, говорят словами TCP/IP. Обе схемы сосуществуют, и переход между ними привычен.
Что стоит уточнить
Иногда кажется, что TCP/IP означает пару из двух протоколов. Фактически это целое семейство: IP, ICMP, TCP, UDP, ARP и множество прикладных протоколов сверху. Ещё одно распространённое упрощение: «TCP надёжен, UDP ненадёжен». Точнее сказать, что UDP не берёт на себя доставку и порядок, и приложение, например для звонков или игр, может сознательно предпочесть скорость. Подробности есть на страницах про TCP и UDP.
Принцип сквозного соединения
Одна из идей, заложенных в стек с самого начала, называется принципом сквозной связи: сеть внутри должна оставаться простой и просто переносить пакеты, а сложную логику надёжности, шифрования и проверки правильности лучше держать на конечных устройствах. Именно поэтому маршрутизаторы почти ничего не знают о приложениях, а новые сервисы можно запускать, не спрашивая разрешения у владельцев магистральных каналов.
Эта простота имеет и оборотную сторону. Поскольку IP сам не подтверждает доставку и не скрывает содержимое, механизмы защиты добавляют сверху: TLS для шифрования, TCP для повторных отправок, DNSSEC для проверки записей. Каждая такая надстройка живёт на своём уровне и заменяется независимо от остальных, что помогает стеку развиваться десятилетиями.
Чтобы увидеть модель в действии, выполните на своём компьютере три простых проверки. Сначала отправьте ping на адрес шлюза: успех означает, что канальный и межсетевой уровни работают. Затем пингуйте внешний числовой адрес: если ответы идут, маршрутизация до интернета исправна. Наконец, откройте сайт по имени: если он не открывается, а числовой адрес отвечал, разбирайтесь с DNS на прикладном уровне.
Такая последовательность быстро сужает круг поиска и хорошо показывает, что каждый уровень решает свою задачу и зависит от нижележащих.