1.4. TCP/IP
Теперь рассмотрим модель TCP/IP.
TCP/IP — это стандартный стек протоколов, используемый для каждой сети. Он обеспечивает адресацию приложений и маршрутизацию в сети.
В чём отличие от OSI? OSI — это эталонная модель, а не протокол. OSI стандартизирует, как должен разделяться труд при передаче данных в разных программных обеспечениях. Она важна для понимания и проектирования архитектуры системы.
TCP/IP
Смысл технологии — объединить самые разные сети: локальные, городские, глобальные. Работает поверх этих сетей, всё это склеивает и позволяет взаимодействовать друг с другом.
Важная задачи стека — обеспечить продвижение пакетов данных через сеть. Естественно, для такого продвижения нужно адресовать узлы, и для этого используется IP.
Как расшифровывается TCP/IP? TCP — протокол управления передачей (Transmission Control Protocol). IP — интернет-протокол (Interner Protocol).
Модель состоит не только из протоколов TCP и IP, но они основные, поэтому за ней закрепили такое название.
Протокол TCP обеспечивает надёжность соединения между компьютерами. Он отвечает за доставку сообщений, а IP — за поиск компьютеров в сети.
Компьютеры отличаются друг от друга по производителю, типу операционной системы, программной начинке. Чтобы они понимали друг друга, процесс коммуникации должен следовать правилам. Например, есть правила для передачи файлов и для передачи сообщений между почтовыми ящиками. В компьютерных сетях их определяют протоколы передачи данных.
IP
Internet Protocol (IP) является одним из основных протоколов слоёв интернета, как можно догадаться из его названия. Он применяется во всех интернет-коммуникациях.
Формально говоря, протокол описывает использование IP-адресов для идентификации подключённых к интернету устройств. Если проще: домам нужны почтовые адреса для получения почты, а устройствам, подключённым к интернету, нужны IP-адреса для получения сообщений.
Когда один компьютер отправляет сообщение на другой, он должен указать IP-адрес получателя, а также свой собственный IP-адрес, чтобы второй компьютер мог ответить.

IP-адрес пользователя может быть сегодня одним, а завтра — другим. Адрес задаёт интернет-провайдер. У каждого интернет-провайдера есть диапазон адресов, которые они могут назначить. И они могут давать вам другой из этих адресов каждый раз, когда видят, что компьютер появляется в сети. Это называется динамическим IP-адресом.
Переключение на другую сеть Wi-Fi обязательно даст новый IP-адрес, так как интернет-провайдер уже другой.
Компьютеры, которые действуют как серверы, часто имеют статические IP-адреса. Например, компьютеры, на которых работает Google.com. Это упрощает быструю отправку поисковых запросов на серверы Google.
IPv4 и IPv6-адреса
На начало 2022 года используются две версии интернет-протокола:
- IPv4 — первая версия, когда-либо использовавшаяся в интернете;
- IPv6 — обратно совместимый преемник.
В протоколе IPv4 IP-адреса выглядят так: 74.125.20.113. Попробуйте посетить этот IP-адрес в своём браузере. На какой сайт вы попали?
Каждый IP-адрес разделён на четыре числа, каждое из которых может варьироваться от нуля до 255. Это два в 32 степени или 4 294 967 296 возможных адресов IPv4. И это количество уже в 1990-х начало заканчиваться. Создатели интернета не рассчитывали на такую популярность, поэтому создали IPv6-адреса с гораздо более длинной схемой адресации.
Вот так выглядит IPv6-адрес: 2001: 0db8: 0000: 0042: 0000: 8a2e: 0370: 7334.
В нём присутствуют шестнадцатеричные числа, поэтому IPv6-адрес
намного длиннее, чем кажется. Какое же количество адресов теперь
доступно? 340 282 366 920 938 000 000 000 000 000 000 000 000.
Представьте себе мир, в котором есть столько устройств, подключённых к интернету!
IP-пакеты
Как мы уже говорили, сообщения передаются пакетами. Каждый IP-пакет содержит заголовок и данные. Заголовок включает IP-адреса источника и назначения, а также другие поля, которые помогают маршрутизировать пакет. Данные — это фактическое содержимое, например, строка букв или часть веб-страницы.
Сообщение может представлять собой крошечный пинг, чтобы проверить, подключено ли другое устройство к сети, или быть целой веб-страницей. Но есть предел тому, насколько большим может быть сообщение, поскольку есть ограничение по количеству данных, передаваемых за один раз с помощью физических сетевых подключений между устройствами. Вот почему многие сетевые протоколы разбивают каждое сообщение на несколько небольших пакетов.
Протокол IP описывает структуру пакетов, перемещающихся по интернету. Вы можете представить IP-пакеты как почтовые письма: заголовок — это конверт со всей информацией о маршрутизации, необходимой почтовому отделению, а полезная нагрузка — это письмо, которое читает только получатель.
Подобно тому, как почтовая система направляет почтовые письма по всему миру, интернет-протокол направляет IP-пакеты по интернету. Давайте рассмотрим процесс маршрутизации пакета от источника к месту назначения.
Компьютеры отправляют первый пакет ближайшему маршрутизатору. Когда он получает пакет, то смотрит на IP-заголовок. Наиболее важным полем является IP-адрес назначения, который сообщает маршрутизатору, куда должен попасть пакет.
У маршрутизатора есть несколько путей, по которым он может отправить пакет, и его цель — отправить пакет ближайшему к его конечному пункту назначения маршрутизатору. Как это решается? У маршрутизатора есть таблица пересылки, которая помогает ему выбрать следующий путь на основе IP-адреса назначения. Как только маршрутизатор находит наиболее подходящий, он отправляет пакет по этому пути. Если всё идёт хорошо, пакет прибывает на ближайший к получателю маршрутизатор, который точно знает, куда его отправить.

Что произойдёт, если сетевой путь больше не доступен, например, из-за того, что его захватил киберпреступник или уничтожило стихийное бедствие?

К счастью, существует множество возможных путей, по которым пакет может пройти, чтобы достичь того же пункта назначения:

Наличие нескольких путей называется избыточностью сети. Избыточность путей увеличивает количество возможных способов, которыми пакет может достичь пункта назначения.
Отказоустойчивая система сети является такой, в которой может возникнуть сбой или несколько отказов в его компонентах, но она по-прежнему продолжит передавать данные. Всё же интернет — это массивная и сложная система с миллионами компонентов, которые могут выйти из строя в любой момент, и многие из этих компонентов действительно ломаются.
Большой вклад в отказоустойчивость интернета вносит избыточность путей сетевой маршрутизации. Посмотрим пример подводной сети через Атлантический океан:

Карта подводных кабелей, TeleGeography
Даже если один из этих кабелей повреждён — есть другие кабели, которые могут передавать интернет-трафик через Атлантический океан.
Где-то такой избыточности нет. Посмотрим на Камчатку:
Карта подводных кабелей у Камчатки, TeleGeography
Отсутствие избыточности может привести к проблемам, ведь кабель может прийти в негодность. Например, в 2011 году бабушка случайно повредила лопатой кабель, в результате чего вся Армения и часть Грузии потеряли доступ в интернет на день. А в 2019 году корабль оборвал единственный кабель к полинезийскому Тонге, и остров остался без интернета на 11 дней.
Создание избыточности сети — дорогостоящая задача. Например, Google потратил 300 миллионов долларов на установку оптоволоконного кабеля между США и Токио.
Вернёмся к IP. Протокол IP описывает, как разделить сообщения на несколько IP-пакетов и направить пакеты к месту назначения путём переключения от маршрутизатора к маршрутизатору. Однако IP не обрабатывает все последствия пакетов. Например, потерянные пакеты, неупорядоченные, повторяющиеся, повреждённые, случайные дубли.
Надёжную передачу пакетов обеспечивает протокол TCP, который работает поверх IP. Он включает стратегии для упорядочивания пакетов, повторной передачи и целостности данных.
Если вы скачиваете, например, Discord к себе на компьютер, то потеря даже одного байта не запустит приложение. Поэтому TCP используют многие протоколы уровня приложений.
TCP
Протокол управления передачей (TCP) — это транспортный протокол, который используется поверх IP и обеспечивает надёжную передачу пакетов.
Как TCP передаёт пакеты?
Убеждается, что адресат существует.
Представим, что два компьютера хотят отправить данные друг другу. Сначала TCP убеждается, что адресат существует, слушает порт и готов принимать. Для этого он устанавливает соединение через механизм тройного «рукопожатия» (three-way handshake). Первый компьютер отправляет пакет с битом SYN (SYN = «Синхронизировать?»). Второй компьютер отправляет обратно пакет с битом ASK (ASK = «Подтвердить!») Плюс бит SYN. Первый компьютер отвечает ASK:

Три пакета, участвующие в тройном «рукопожатии», обычно не содержат никаких данных. После того как компьютеры завершили рукопожатие, они готовы принимать пакеты, содержащие фактические данные.
Обеспечивает надёжность передачи данных.
Затем пакеты на отправляющем узле маркируются порядковым номером и отправляются. После этого отправляющий узел запрашивает подтверждение от получающего по каждому сегменту. Если какой-то из них не дошёл, то сегмент отправляет повторно. Если адресат не отвечает после нескольких попыток, то сессия разрывается. То есть этот протокол точно доставит верные данные, если сессия не разорвалась.
TCP доставляет сегменты в отправленном порядке.
Сегменты упаковываются каждый в свой пакет. Поэтому промежуточные узлы ничего не знают о содержимом этих пакетов. Также пакеты могут идти с разной скоростью и разными путями. TCP склеивает их по порядковым номерам и передаёт дальше.
Контролирует скорость передачи данных.
Если данные передаются с быстрого сервера на медленный, они не будут передаваться быстрее, чем доступно для медленного сервера.
Важные моменты стека TCP/IP
Подведём итог. Сама технология ничего не передаёт, а использует ту технологию, поверх которой находится.
- Контролирует, чтобы данные шли дальше.
- Фрагментирует пакеты данных под технологию передачи.
- Передаёт трафик разного вида.
- Может разобраться с требованиями надёжности, скорости передачи, безопасности.
- Может осуществить логическое соединение.
- Предоставляет в рамках сеанса относительно равномерную скорость.
Таким образом, стек протоколов TCP/IP — это команда надёжной передачи данных. В следующей статье рассмотрим архитектуру слоёв стека TCP/IP и сравним с OSI.