TCP/IP

Материал из llmdocs — справочник разработчика
TCP/IP
Полное названиеInternet Protocol Suite
АвторыВинтон Серф, Роберт Кан
Первая публикация1974
Внедрение в ARPANET1 января 1983
Уровниканальный, межсетевой, транспортный, прикладной
Основные протоколыIP (v4, v6), TCP, UDP, ICMP
СтандартизацияIETF (документы RFC)

TCP/IP (англ. Internet Protocol Suite — «набор протоколов интернета») — семейство сетевых протоколов, на котором работает интернет и почти все локальные сети. Название составлено из двух главных протоколов: IP (Internet Protocol) отвечает за адресацию и доставку пакетов между сетями, а TCP (Transmission Control Protocol) — за надёжную передачу потока данных между программами. Рядом с ними работают UDP, ICMP и множество прикладных протоколов — HTTP, DNS, SSH.

Также TCP/IP называют четырёхуровневую модель, которая описывает этот стек и служит практической альтернативой модели OSI.

История

В начале 1970-х в США работала сеть ARPANET, но она не умела соединяться с другими сетями — радио- и спутниковыми. В 1974 году Винтон Серф и Роберт Кан опубликовали статью «Протокол для межсетевого взаимодействия пакетных сетей» с идеей единого протокола поверх разнородных сетей.[1] Позже монолитный протокол разделили на два: IP для маршрутизации и TCP для надёжной доставки; так стало возможным добавить UDP для задач, которым надёжность не нужна.

Спецификации IP и TCP вышли как RFC 791 и RFC 793 в 1981 году.[2] 1 января 1983 года ARPANET полностью перешла на TCP/IP — эту дату часто называют днём рождения интернета. Реализация стека в BSD Unix, свободно распространявшаяся университетам, сделала TCP/IP стандартом де-факто. В 2004 году Серф и Кан получили премию Тьюринга. Спецификация TCP в 2022 году была собрана заново в RFC 9293.[3]

Уровни

Уровень Задача Протоколы Аналог в OSI
Прикладной обмен данными приложений HTTP, DNS, TLS, SMTP, SSH 5–7
Транспортный доставка между процессами (порты) TCP, UDP, QUIC (поверх UDP) 4
Межсетевой адресация и маршрутизация пакетов IPv4, IPv6, ICMP 3
Канальный передача в пределах одной сети Ethernet, Wi-Fi, ARP 1–2

Описание модели с этими четырьмя уровнями дано в RFC 1122.[5]

IP

IP доставляет пакеты — порции данных с заголовком, где указаны адрес отправителя и получателя. Каждый маршрутизатор по пути смотрит на адрес назначения и решает, куда переслать пакет дальше. IP работает по принципу «наилучшей попытки» (best effort): пакеты могут теряться, дублироваться и приходить не по порядку, и протокол этого не исправляет.

Используются две версии: IPv4 с 32-битными адресами (около 4,3 млрд) и IPv6 со 128-битными.[6] Адреса IPv4 давно исчерпаны, и нехватку компенсирует NAT — трансляция многих внутренних адресов в один внешний. Адресация и разбиение на подсети описаны в статье IP-адрес и подсети (CIDR).

TCP и UDP

Программы на одном компьютере различаются портами — числами от 0 до 65535. Пара «IP-адрес и порт» с обеих сторон однозначно определяет соединение: веб-сервер слушает порт 443, а браузер подключается со случайного порта.

TCP UDP
Соединение устанавливается тройным рукопожатием нет
Надёжность подтверждения, повторная передача, порядок нет
Управление потоком и перегрузкой есть нет
Единица поток байтов отдельные датаграммы
Применение веб, почта, SSH, базы данных DNS, видеозвонки, игры, QUIC

TCP устанавливает соединение обменом SYN — SYN-ACK — ACK, нумерует байты, подтверждает полученное, повторяет потерянное и регулирует скорость, чтобы не перегрузить сеть.[3] UDP просто отправляет датаграммы — быстро и без гарантий.[4] На UDP построен QUIC, основа HTTP/3: он переносит надёжность и шифрование в пространство пользователя и избавляется от задержек TCP.

Путь запроса

Когда браузер открывает https://example.com:

  1. DNS превращает имя в IP-адрес.
  2. TCP устанавливает соединение с портом 443 (или QUIC — по UDP).
  3. TLS шифрует канал.
  4. HTTP-запрос делится на сегменты, сегменты упаковываются в IP-пакеты, пакеты — в Ethernet- или Wi-Fi-кадры.
  5. Маршрутизаторы пересылают пакеты от сети к сети до сервера, где всё распаковывается в обратном порядке.

Инструменты

ip addr                       # адреса интерфейсов (Linux)
ip route                      # таблица маршрутизации
ping -c 4 example.com         # доступность по ICMP
traceroute example.com        # путь пакетов через маршрутизаторы
ss -tlnp                      # какие процессы слушают TCP-порты
nc -vz example.com 443        # открыт ли порт
sudo tcpdump -i any port 53   # перехват пакетов DNS

Для анализа трафика с графическим интерфейсом используют Wireshark, а для HTTP-уровня — curl.

См. также

Источники

  1. V. Cerf, R. Kahn — A Protocol for Packet Network Intercommunication (IEEE, 1974)
  2. RFC 791 — Internet Protocol
  3. RFC 9293 — Transmission Control Protocol (TCP)
  4. RFC 768 — User Datagram Protocol
  5. RFC 1122 — Requirements for Internet Hosts: Communication Layers
  6. RFC 8200 — Internet Protocol, Version 6 (IPv6) Specification