· 6 мин. на чтение.

Что такое TCP/IP

Что такое TCP/IP

Октябрь 1972 года. Вашингтон, отель Hilton

Роберт Кан стоит в конференц-зале и наблюдает, как сорок компьютерных терминалов работают одновременно. Первая публичная демонстрация ARPANET - сети, которую он несколько лет помогал строить.

Всё идёт блестяще. Журналисты и военные чиновники смотрят, как данные мгновенно летят между Бостоном и Лос-Анджелесом. Кан доволен. Но в голове у него уже другой вопрос.

ARPANET - одна сеть. Она работает по одному протоколу, между одинаковыми узлами, по заранее известным правилам. Но что если завтра появится другая сеть - с другой архитектурой, другими скоростями, другим оборудованием? Как они будут разговаривать между собой?

Ответа у Кана нет. Но есть коллега, которому он позвонит несколько месяцев спустя.

Несколько месяцев на салфетках

Весна 1973 года. Пало-Алто. Кан приезжает к Винтону Серфу, молодому профессору Стэнфорда, и объясняет проблему. Они начинают работать.

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

Cerf_Kann

К маю 1973 года идея была готова. В 1974 году они опубликовали статью в журнале IEEE. Назвали протокол TCP - Transmission Control Program.

Позже TCP разделили на два отдельных протокола: TCP и IP.

Один разбивает данные на куски и следит за доставкой.

Другой прокладывает маршрут через сеть. Вместе - TCP/IP.

1 января 1983 года все компьютеры ARPANET одновременно переключились на TCP/IP. Этот день сетевые инженеры называют "День флага" - Flag Day. Кто не перешёл на новый протокол, оказался отрезан от сети.

С этой даты TCP/IP стал официальным языком интернета. Работает до сих пор - без принципиальных изменений.

Почему данные нельзя просто "отправить"

Представьте: вы хотите передать через интернет видеофайл размером один гигабайт.

Нельзя просто "послать" гигабайт единым потоком. Физические каналы связи не безграничны и не персональны. Кабель, по которому в эту секунду идёт ваш файл, одновременно передаёт трафик миллионов других пользователей. Если один займёт линию целиком - остальные встанут.

Решение придумал Пол Бэран ещё в начале 1960-х: нарезать данные на маленькие куски и отправлять их независимо друг от друга. Это называется пакетная коммутация - именно на ней построен ARPANET, а затем весь интернет. Историю Бэрана и его идеи можно прочитать в статье про ARPANET.

Каждый такой кусок называется пакет. Стандартный максимальный размер пакета в сети Ethernet - 1500 байт (это значение называют MTU, Maximum Transmission Unit). Гигабайтный файл превращается примерно в 700 000 таких пакетов. Каждый едет своим маршрутом. Каждый может добраться через разные промежуточные точки.

Задача TCP/IP - сделать так, чтобы на другом конце они собрались в правильном порядке, без потерь и без дублей.

Что делает IP

IP - Internet Protocol - отвечает за адресацию и маршрутизацию.

Каждый пакет - конверт. На конверте написаны два адреса: откуда пришёл и куда идёт. Оба в формате IP-адреса - что это такое и как устроено, подробно объяснено в статье Что такое IP-адрес.

ip

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

Такой подход называют best-effort delivery - доставка на лучших условиях, без гарантий. Это делает IP простым и быстрым: никакой лишней служебной работы по контролю. Просто маршрутизация от точки к точке.

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

Что делает TCP

TCP - Transmission Control Protocol - гарантирует доставку.

Перед передачей данных TCP устанавливает соединение.

Это называют трёхстороннее рукопожатие - three-way handshake.

Компьютер-отправитель посылает сигнал SYN (от synchronize - синхронизировать).

Сервер отвечает SYN-ACK (принял, подтверждаю).

Отправитель посылает финальный ACK (подтверждаю). Соединение установлено - только теперь начинается передача данных.

tcp

Каждый пакет получает порядковый номер. Получатель после приёма каждой порции отправляет подтверждение - ACK - с указанием, что именно получено. Если подтверждение не пришло за отведённое время - отправитель посылает пакет снова.

Если пакеты пришли не по порядку - TCP соберёт их правильно по номерам.

Если пакет потерялся - запросит повтор конкретного.

TCP ещё управляет скоростью передачи: получатель сигнализирует, с каким темпом он готов принимать данные, чтобы отправитель не заваливал его быстрее, чем тот успевает обрабатывать. Это называется управление потоком, flow control.

Есть и управление перегрузкой. TCP "чувствует" нагрузку на сеть по потерям пакетов и сам снижает скорость, когда каналы перегружены. Без этого механизма интернет захлёбывался бы при любом пиковом трафике.

Порты: как один компьютер ведёт тысячи разговоров одновременно

Вы открываете браузер, слушаете музыку, переписываетесь в мессенджере - всё это идёт через один IP-адрес. Как компьютер понимает, какой пакет какому приложению?

Порты. У каждого соединения есть не только IP-адрес, но и номер порта - число от 0 до 65535. Порт - это как номер квартиры в доме: адрес один, квартир много.

Некоторые порты закреплены за конкретными службами.

HTTP работает на порту 80, HTTPS - на 443, DNS - на 53, почта SMTP - на 25.

Когда браузер открывает сайт, он обращается к IP-адресу сервера на порту 443.

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

TCP против UDP: когда гарантия становится помехой

TCP гарантирует доставку. Но гарантия стоит времени: подтверждения, повторные отправки, рукопожатие - всё это задержки.

Для ряда задач они неприемлемы.

Представьте видеозвонок. Вы говорите фразу. Пакет с куском голоса потерялся. TCP запрашивает повтор, ждёт его - и вы слышите собеседника с задержкой в секунду. Гораздо лучше было бы просто пропустить потерянный кусок: потеря 20 миллисекунд речи в разговоре почти незаметна, а секундная пауза ломает общение.

Для таких случаев существует UDP - User Datagram Protocol. Он не устанавливает соединение, не подтверждает доставку, не следит за порядком пакетов. Просто бросает их в сеть - быстро и без оглядки.

UDP используют там, где скорость важнее гарантий:

  • Видеозвонки (Zoom, Teams, FaceTime)
  • Стриминг видео (потерянный кадр перекроется следующим)
  • Онлайн-игры (задержка в 50 мс важнее потери одного пакета с позицией)
  • DNS-запросы (маленькие, быстрые - проще спросить снова, чем ждать подтверждения)

TCP используют там, где каждый байт важен: сайты (HTTP/HTTPS), почта, файлы, банковские операции. Потеря части данных здесь неприемлема.

Есть и третий путь. Современный протокол QUIC - основа HTTP/3 - берёт UDP за фундамент и добавляет поверх свою логику надёжности. Получается быстрее TCP и надёжнее голого UDP. Сейчас Google, YouTube, большинство крупных сервисов уже работают по HTTP/3.

Слои: как TCP/IP делит работу

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

Модель TCP/IP описывает четыре уровня.

Прикладной - протоколы конкретных приложений: HTTP, DNS, SMTP, FTP. Здесь решается, что именно передавать и в каком формате.

Транспортный - TCP или UDP. Здесь решается, как обеспечить (или не обеспечить) надёжную доставку.

Сетевой - IP. Здесь решается, как проложить маршрут от источника к получателю через множество промежуточных узлов.

Уровень сетевого доступа - физическая передача: Ethernet, Wi-Fi, оптоволокно. Здесь решается, как превратить единицы и нули в конкретный физический сигнал.

Когда браузер открывает страницу: HTTP формирует запрос, TCP разбивает его на сегменты, IP упаковывает в пакеты с адресами, Wi-Fi-адаптер переводит в радиоволны. На сервере - в обратном порядке. Каждый уровень добавляет свой заголовок при отправке и снимает его при получении. Это называют инкапсуляцией.

Сетевые инженеры часто используют и семиуровневую модель OSI - она появилась чуть позже и делит работу детальнее. Но TCP/IP появилась раньше и именно она стала стандартом реального интернета. OSI сегодня - скорее учебная модель для объяснения принципов.

Что происходит, когда вы открываете сайт

newscroll.ru_request

Сведём всё вместе на конкретном примере.

Вы вводите newscroll.ru и нажимаете Enter.

DNS. Браузер отправляет UDP-запрос к DNS-серверу: "Какой IP у newscroll.ru?" Через десятки миллисекунд получает ответ с IP-адресом. Как это работает детальнее - в статье Что такое DNS.

TCP-рукопожатие. Браузер открывает TCP-соединение с сервером: SYN - SYN-ACK - ACK. Три пакета туда-обратно.

TLS-рукопожатие. Сайт работает по HTTPS - ещё один обмен: браузер и сервер договариваются о шифровании, проверяют сертификат, обмениваются ключами. После этого весь трафик будет зашифрован.

HTTP-запрос. Браузер просит: "Дай мне главную страницу." Запрос уходит TCP-сегментами, упакованными в IP-пакеты.

Ответ. Сервер формирует HTML страницы, нарезает на пакеты, отправляет. Браузер начинает рендерить ещё до того, как все пакеты дошли - TCP позволяет обрабатывать данные по мере поступления.

Ресурсы. Картинки, шрифты, скрипты - каждый загружается отдельно. HTTP/2 позволяет запрашивать несколько ресурсов в одном TCP-соединении. HTTP/3 делает то же самое поверх QUIC/UDP - быстрее и с меньшими задержками.

Всё это - за сотни миллисекунд. Каждый раз, при открытии любого сайта в любой точке мира.

FAQ

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

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

Пакет - небольшой фрагмент данных, на которые TCP/IP разбивает любую передачу. Стандартный максимальный размер в сети Ethernet - 1500 байт. Файл, страница, видео - всё режется на такие фрагменты, которые едут по сети независимо, возможно разными маршрутами, и собираются в правильном порядке у получателя.

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

Порт - число от 0 до 65535, которое уточняет, какому приложению предназначен пакет. IP-адрес - это адрес компьютера, порт - адрес конкретного приложения или службы на этом компьютере. HTTP работает на порту 80, HTTPS - на 443, DNS - на 53. Благодаря портам один компьютер может одновременно поддерживать тысячи соединений для разных приложений.

Основу протокола Винтон Серф и Роберт Кан разработали в 1973 году, опубликовали статью в 1974-м. Финальные спецификации TCP (RFC 793) и IP (RFC 791) вышли в сентябре 1981 года. 1 января 1983 года все компьютеры ARPANET одновременно перешли на TCP/IP - этот день называют "Flag Day". С этой даты TCP/IP стал официальным стандартом интернета.

IP (Internet Protocol) - протокол маршрутизации. Он присваивает каждому пакету адреса источника и назначения и доставляет его по сети "на лучших условиях" - без гарантий. TCP (Transmission Control Protocol) - протокол надёжной передачи. Он работает поверх IP и добавляет гарантию: нумерует пакеты, отслеживает доставку, запрашивает повтор потерянных. IP - это дорога, TCP - курьер с трекингом.

HTTP/3 - современная версия протокола, по которому браузеры загружают сайты. В отличие от HTTP/1.1 и HTTP/2, которые работают поверх TCP, HTTP/3 использует QUIC - протокол поверх UDP. QUIC берёт скорость UDP и добавляет свою логику надёжности. Результат - меньше задержек при нестабильном соединении и быстрее восстановление после потери пакетов. Сейчас HTTP/3 используют Google, YouTube, Cloudflare и большинство крупных платформ.