TCP/IP

Набор протоколов, на котором работает интернет: IP доставляет пакеты между сетями, а TCP следит, чтобы данные дошли целиком и по порядку.

TCP/IP — семейство сетевых протоколов, на котором построен интернет и почти любая современная сеть. Название дали два главных протокола: IP (Internet Protocol) отвечает за адресацию и доставку пакетов между сетями, а TCP (Transmission Control Protocol) — за то, чтобы данные дошли полностью, без потерь и в правильном порядке. Основы описали Винтон Серф и Роберт Кан в 1974 году, а 1 января 1983 года на TCP/IP перешла сеть ARPANET — этот день считают днем рождения интернета в его нынешнем виде.

Четыре уровня

  • Канальный — передача внутри одной физической сети: Ethernet, Wi-Fi.
  • Сетевой (межсетевой) — IP-адреса и маршруты между сетями. Об адресах — в термине IPv4 / IPv6, о маршрутах — в термине «Маршрутизатор».
  • Транспортный — доставка данных конкретной программе по номеру порта: TCP или UDP.
  • Прикладной — протоколы приложений: HTTP, DNS, почта, SSH.

Это упрощенная версия семиуровневой модели OSI.

IP: доставка пакетов

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

TCP: надежность

TCP строит надежный канал поверх ненадежного IP. Перед обменом стороны устанавливают соединение «тройным рукопожатием»: SYN — «хочу соединиться», SYN-ACK — «согласен», ACK — «начинаем». Затем каждый фрагмент нумеруется, получатель подтверждает принятое, а потерянное отправляется повторно. TCP также подстраивает скорость под пропускную способность сети, чтобы не перегружать ее.

UDP: скорость без гарантий

UDP отправляет данные без соединения и подтверждений. Это быстрее, и для некоторых задач потеря отдельного пакета не страшна: видеозвонки, онлайн-игры, запросы DNS. На UDP построен и протокол QUIC, на котором работает HTTP/3: надежность в нем реализована заново, но быстрее устанавливается соединение.

Порты

На одном сервере работает много программ, и порт указывает, какой из них предназначены данные: 443 — HTTPS, 22 — SSH, 5432 — PostgreSQL. Пара «IP-адрес и порт» однозначно определяет получателя.

Полезные команды

# Командная строка Linux
ping example.ru          # доходят ли пакеты и за сколько миллисекунд
traceroute example.ru    # через какие маршрутизаторы идут пакеты
ss -tlnp                 # какие программы на сервере слушают TCP-порты

Эти команды Linux CLI — первое, что запускают при сетевых проблемах.