usepoint
menu

Модель TCP/IP: основа сетевого взаимодействия

Модель TCP/IP лежит в основе всего сетевого взаимодействия, от офисного Wi Fi до глобальных сервисов. Будет полезно понимать ее логику, чтобы быстрее ориентироваться в инцидентах и не теряться в технических деталях. Разберем "на пальцах" самое важное из этой модели

Модель TCP/IP

Содержание

Зачем нам ещё одна модель, если уже есть OSI

В предыдущем разделе мы познакомились с моделью OSI - теоретической "лесенкой" из 7 уровней, которая помогает объяснять, как устроена сеть.

Но интернет строили не "по учебнику OSI".

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

Так появилась группа протоколов, вокруг которой и вырос интернет.
Эту группу называют стек протоколов TCP/IP.

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

Модель OSI - красивая теоретическая схема "как можно разложить сеть на уровни".

Стек TCP/IP - то, как реально работает интернет.

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

Слои TCP/IP и соответствие уровням OSI

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

Пример из жизни:

  • На верхнем уровне человек пишет письмо.
  • Чуть ниже он кладёт его в конверт и пишет адрес.
  • Ещё ниже - почтовая служба сортирует мешки с письмами по городам.
  • Ещё ниже - кто-то физически возит эти мешки на машинах и поездах.

Все эти шаги можно представить как слои:

  • слой "содержание письма" (что именно мы хотим сказать);
  • слой "адреса на конверте";
  • слой "сортировка и маршруты между городами";
  • слой "физическая доставка (машины, поезда)".

В TCP/IP то же самое, только для компьютерных данных.

Какие слои есть в TCP/IP

В модели TCP/IP выделяют 4 слоя:

  1. Канальный (Network Access)
  2. Межсетевой слой (Internet)
  3. Транспортный слой (Transport)
  4. Прикладной слой (Application)

Их можно мысленно сравнить с OSI:

  • Канальный ≈ физический + канальный уровни OSI.
  • Межсетевой слой ≈ сетевой уровень OSI.
  • Транспортный слой ≈ транспортный уровень OSI.
  • Прикладной слой ≈ три верхних уровня OSI, слепленные вместе.

Разберём каждый слой по-отдельности.

Канальный (Network Access)

Вопрос, который решает этот слой:

Как конкретное устройство (компьютер, сервер, телефон) физически подключено к сети и как передать данные внутри одной локальной сети?

Здесь появляются несколько важных терминов:

  • Локальная сеть - группа устройств, соединённых между собой "на месте": офис, квартира, одна стойка в дата-центре. Обычно у них общий сетевой оборудование (роутер, коммутатор).
  • Сетевой адаптер (сетевая карта) - железка (или встроенная часть железки) в компьютере, которая умеет отправлять и принимать данные по сети: по кабелю (Ethernet) или по воздуху (Wi-Fi).
  • MAC-адрес - уникальный номер сетевого адаптера.
    Похоже на "паспорт" именно этой сетевой карты:
    • записывается как 00:1A:2B:3C:4D:5E;
    • нужен, чтобы отличать устройства в одной локальной сети.
  • Фрейм / кадр (frame) - блок данных, который передаётся на уровне локальной сети.
    Внутри кадра есть:
    • MAC-адрес отправителя,
    • MAC-адрес получателя,
    • служебные поля (проверка ошибок),
    • полезная нагрузка (кусочек пакета более верхнего уровня).
  • Коммутатор (switch) - сетевое устройство, у которого много сетевых разъёмов (портов), и к каждому порту можно подключить кабель от компьютера или другого устройства.
    • Физический порт - это реальное гнездо в устройстве, куда втыкается кабель.
    • Задача коммутатора - получать кадры и пересылать их в нужный порт, чтобы они дошли до нужного устройства.

Как это работает:

  1. Компьютер формирует кадр: "от MAC “A” к MAC “B”, вот данные".
  2. Посылает кадр в сеть (по кабелю или по Wi-Fi).
  3. Коммутатор получает кадр, смотрит:
    • "кому он адресован? какому MAC-адресу?"
  4. Внутри коммутатора есть таблица: "какой MAC сидит за каким физическим портом".
  5. Коммутатор отправляет кадр только через нужный порт, а не всем подряд.

На этом уровне нас ещё не интересуют IP-адреса, маршруты между городами и странами. Задача канального слоя - довести кадр до ближайшей точки маршрута: от компьютера до коммутатора, от коммутатора до маршрутизатора и т.п.

Примеры технологий:

  1. Ethernet - стандарт проводных сетей, который определяет как выглядит кадр (где в нём MAC-адреса, где данные, где контрольная сумма) и как устройства "делят" общий кабель, чтобы не мешать друг другу.
  2. Wi-Fi (семейство стандартов IEEE 802.11) - то же самое, но по радио: как подключаться к точке доступа, как кодировать сигнал, чтобы он был устойчив к помехам, как шифровать трафик (WPA2, WPA3).
  3. ARP (Address Resolution Protocol) - вспомогательный протокол, который связывает IP-адрес и MAC-адрес внутри одной локальной сети. Простыми словами: 
    • "Кто в этой сети владеет IP-адресом 192.168.1.10?"
    • "Я, мой MAC - 00:11:22:33:44:55".

Межсетевой слой (Internet)

Вопрос, который решает этот слой - как доставить данные из одной сети в другую, например, из офисной сети в сеть дата-центра в другой стране?

Здесь нужно новое понятие:

  • IP-адрес - логический адрес узла (компьютера/сервера) в мире TCP/IP.
    Записывается обычно как 203.0.113.42 (IPv4, в следующих статьях расскажем об этом подробней).
    IP-адрес нужен, чтобы:
    • отличать сети друг от друга;
    • понять, через какие промежуточные сети нужно пройти, чтобы попасть к адресу назначения.
  • IP-пакет - блок данных сетевого уровня.В нём есть:
    • IP-адрес отправителя,
    • IP-адрес получателя,
    • служебная информация,
    • "внутри" - данные транспортного уровня (например, кусок TCP-потока).
  • Маршрутизатор / роутер (router) - сетевое устройство, которое:
    • принимает IP-пакеты,
    • смотрит на IP-адрес назначения,
    • по своей таблице маршрутов решает, на какой "следующий шаг" (следующий маршрутизатор или локальную сеть) отправить пакет.

То есть на сетевом слое мы уже не думаем про MAC-адрес конкретной сетевой карты. Мы думаем: "пакет должен попасть в сеть, где есть IP-адрес такой-то. Через кого его отправить дальше?"

В сравнении с почтой:

  • канальный слой - как донести письмо от квартиры до ближайшего отделения;
  • межсетевой слой - как по всей системе почтовых отделений и сортировочных центров довезти письмо до города и отделения получателя.

Транспортный слой (Transport)

Вопрос, который решает этот слой - как доставить данные не просто на нужный компьютер, а в нужную программу (сервис, приложение) на нём
и с какими гарантиями (надёжно/быстро)?

Новые понятия:

  • Приложение - программа, которая делает полезную работу для пользователя или другого сервиса.
    Примеры приложений:
    • веб-сервер,
    • почтовый сервер,
    • сервер базы данных.
  • Порт (port) - числовой идентификатор приложения внутри одного IP-адреса. Если IP - "адрес дома", то порт - "номер квартиры".
    Примеры:
    • порт 80 - по традиции веб-сервер (HTTP),
    • порт 443 - HTTPS,
    • порт 25 - почтовый сервер (SMTP),
    • порт 5432 - сервер PostgreSQL.
  • TCP (Transmission Control Protocol) - протокол транспортного уровня, который:
    • устанавливает соединение между двумя парами "IP + порт";
    • обеспечивает надёжную доставку: следит, чтобы все куски данных дошли, переотправляет потерянные, собирает всё в правильном порядке.
  • UDP (User Datagram Protocol) - другой протокол транспортного уровня:
    • не устанавливает постоянного соединения;
    • отправляет отдельные "датаграммы" (пакеты) без подтверждений;
    • не гарантирует, что все дойдут и в нужном порядке;
    • зато проще и быстрее.

На транспортном уровне появляется понятие:

  • Сокет (socket) - пара из IP-адреса и порта. Например: 203.0.113.10:443 - это конкретный веб-сервер на конкретном компьютере.

Сравнение с почтой:

  • межсетевой слой говорит: "письмо надо доставить в дом по адресу Москва, ул. Такая-то, дом 5";
  • транспортный слой добавляет: "и в квартиру 25, а не в 26".

Прикладной слой (Application)

Вопрос этого слоя - о чём вообще данные? Что за смысл в этих байтах?

Здесь мы наконец говорим о конкретной бизнес-логике:

  • веб-страницы и API,
  • почтовые письма,
  • файлы, которые скачивает пользователь,
  • команды для удалённого управления сервером.

Новые понятия:

  • HTTP (HyperText Transfer Protocol) - протокол прикладного уровня:
    • определяет, как браузер и веб-сервер обмениваются запросами и ответами;
    • как записывается URL, заголовки, тело запроса, коды статусов (200, 404, 500 и т.д.).
  • DNS (Domain Name System) - система доменных имён:
    • переводит удобные для человека имена (example.com) в IP-адреса.
  • SMTP, IMAP, POP3 - протоколы почты:

    • SMTP - отправка писем от клиента к серверу и между серверами;
    • IMAP/POP3 - получение писем с сервера на почтовый клиент.
  • SSH - протокол защищённого удалённого доступа к серверу (чтобы админ мог подключиться, ввести команды и управлять системой).

Прикладной слой:

  • не думает о маршрутизаторах и MAC-адресах;
  • воспринимает сеть как "канал, по которому можно передать запрос и получить ответ";
  • реализует правила предметной области (бизнес-логики).

Маршрутизация пакетов в интернете

Как проходит путь от браузера до сайта (по слоям TCP/IP)

Теперь соберём это всё в одну историю: как данные проходят через интернет по слоям TCP/IP. Представим, что ты набрал в браузере адрес сайта и нажал Enter.

Опустим сейчас DNS (доменные имена), считаем, что браузер уже знает IP-адрес нужного сервера, но обязательно вернемся к этому позже.

Шаг 1. Прикладной слой

Браузер (приложение) формирует HTTP-запрос:

  • метод (например, GET),
  • адрес ресурса (/products),
  • заголовки (какой браузер, язык и т.п.),
  • при необходимости - тело запроса (JSON с данными формы).

Шаг 2. Транспортный слой

Браузер передаёт этот запрос операционной системе и говорит примерно так:

"Открой, пожалуйста, надёжное соединение (TCP) с IP-адресом сервера X на порт 443 (HTTPS). Вот данные, которые нужно отправить".

Операционная система:

  • выбирает клиентский порт на нашей стороне (например, 50123),
    теперь у нас есть сокет: наш_IP:50123;
  • устанавливает TCP-соединение:
    наш_IP:50123 → IP_сервера:443;
  • разбивает данные (HTTP-запрос) на кусочки (TCP-сегменты), каждый сегмент помечает номерами, чтобы на той стороне их можно было собрать и проверить.

Шаг 3. Межсетевой слой

Каждый TCP-сегмент упаковывается в IP-пакет:

  • адрес отправителя: наш IP;
  • адрес получателя: IP сервера;
  • служебные данные.

Операционная система смотрит:

  • находится ли IP сервера в нашей локальной сети?
  • если нет - пакет надо отправить на шлюз по умолчанию.

Шлюз по умолчанию - это IP-адрес нашего маршрутизатора (роутера), к которому подключена наша сеть (офис, дом).

Мы отправляем IP-пакет непосредственно роутеру, а роутер дальше решает, куда его девать.

Шаг 4. Канальный слой

Чтобы доставить IP-пакет роутеру, нам нужно:

  • узнать MAC-адрес роутера (через ARP - "кто у нас в сети с IP 192.168.0.1?"),
  • сформировать кадр Ethernet или Wi-Fi:
    • MAC-адрес отправителя - наш адаптер,
    • MAC-адрес получателя - роутер,
    • внутри - IP-пакет.

Этот кадр отправляется по физической сети: по кабелю до коммутатора и дальше до роутера или по радиоканалу до Wi-Fi-точки, а затем по кабелю до роутера.

Шаг 5. Внутри интернета: цепочка маршрутизаторов

Дальше роутер:

  1. Принимает кадр, достаёт из него IP-пакет.
  2. Смотрит на IP-адрес назначения.
  3. По своей таблице маршрутов решает:
    • "этот IP не в моей сети, надо переслать пакет следующему маршрутизатору".

Дальше всё повторяется:

  • IP-пакет пересылается от маршрутизатора к маршрутизатору;
  • на каждом отрезке между ними он упаковывается в свои кадры (Ethernet, оптика и т.п.);
  • так он путешествует через сети провайдеров, магистральные сети, сеть дата-центра.

В конце:

  • пакет попадает в локальную сеть дата-центра, где находится сервер;
  • там уже маршрутизатор понимает: "IP сервера 10.0.5.12 - это моя локальная сеть, надо отправить пакет ему".

Дальше снова - кадр с MAC-адресом сервера, пересылка по локальной сети.

Шаг 6. Обработка на стороне сервера

На стороне сервера всё идёт вверх в обратном порядке. Надеемся, что суть тут ясна.