Что такое TCP/IP
Октябрь 1972 года. Вашингтон, отель Hilton
Роберт Кан стоит в конференц-зале и наблюдает, как сорок компьютерных терминалов работают одновременно. Первая публичная демонстрация ARPANET - сети, которую он несколько лет помогал строить.
Всё идёт блестяще. Журналисты и военные чиновники смотрят, как данные мгновенно летят между Бостоном и Лос-Анджелесом. Кан доволен. Но в голове у него уже другой вопрос.
ARPANET - одна сеть. Она работает по одному протоколу, между одинаковыми узлами, по заранее известным правилам. Но что если завтра появится другая сеть - с другой архитектурой, другими скоростями, другим оборудованием? Как они будут разговаривать между собой?
Ответа у Кана нет. Но есть коллега, которому он позвонит несколько месяцев спустя.
Несколько месяцев на салфетках
Весна 1973 года. Пало-Алто. Кан приезжает к Винтону Серфу, молодому профессору Стэнфорда, и объясняет проблему. Они начинают работать.
"Мы провели несколько месяцев, буквально рисуя схемы на салфетках и листах бумаги," - вспоминал Серф позже. "Мы искали архитектуру, которая позволила бы любым сетям говорить друг с другом - независимо от того, как они устроены внутри."

К маю 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 не гарантирует доставку. Это принципиально важно понять. Протокол отправляет пакет в сеть и делает всё возможное, чтобы он дошёл - но никаких обещаний не даёт. Пакет может потеряться на перегруженном маршрутизаторе. Прийти с опозданием. Прийти раньше соседнего, хотя был отправлен позже. Задвоиться.
Такой подход называют best-effort delivery - доставка на лучших условиях, без гарантий. Это делает IP простым и быстрым: никакой лишней служебной работы по контролю. Просто маршрутизация от точки к точке.
Маршрутизаторы на пути читают адрес назначения в заголовке пакета и решают, куда передать его дальше - как почтовые сортировочные центры, каждый из которых смотрит на индекс и отправляет конверт следующему звену.
Что делает TCP
TCP - Transmission Control Protocol - гарантирует доставку.
Перед передачей данных TCP устанавливает соединение.
Это называют трёхстороннее рукопожатие - three-way handshake.
Компьютер-отправитель посылает сигнал SYN (от synchronize - синхронизировать).
Сервер отвечает SYN-ACK (принял, подтверждаю).
Отправитель посылает финальный ACK (подтверждаю). Соединение установлено - только теперь начинается передача данных.

Каждый пакет получает порядковый номер. Получатель после приёма каждой порции отправляет подтверждение - 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 и нажимаете 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 - быстрее и с меньшими задержками.
Всё это - за сотни миллисекунд. Каждый раз, при открытии любого сайта в любой точке мира.