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 — первое, что запускают при сетевых проблемах.