TCP/IP простими словами
Кожен ваш вебзапит проходить через точно сконструйований стек протоколів. TCP/IP — це не магія, а математика, повторні спроби та сигнали перевантаження. Ось як ваш браузер завантажує сторінку менш ніж за 100 мс через тисячі кілометрів.
1. Мережевий стек
Мережі проєктують пошарово — кожен шар розв'язує одну задачу й довіряє шарам під собою. Модель TCP/IP має чотири практичні шари:
Кожен шар обгортає шар над собою під час надсилання й розгортає його під час отримання. Машина-отримувач виконує процес у зворотному порядку. Проміжні маршрутизатори зазирають лише до шару 2 (IP) — вони ніколи не торкаються ваших HTTP-даних.
2. Інкапсуляція
Коли ви надсилаєте HTTP-запит, ядро будує пакет зсередини назовні:
- Шар HTTP створює сирі байти:
GET / HTTP/1.1\r\nHost: example.com\r\n\r\n - Шар TCP додає заголовок: порт джерела (напр., 54321), порт призначення (443), номер послідовності, контрольну суму.
- Шар IP додає заголовок: IP джерела (ваш IP), IP призначення (93.184.216.34), TTL (64), протокол (6 = TCP).
- Шар Ethernet додає заголовок кадру: MAC джерела, MAC призначення (MAC вашого маршрутизатора), EtherType.
Усе це надсилається бітами по проводу. На кожному переході найзовнішніший заголовок споживається, і маршрутизатор ухвалює рішення про пересилання.
3. IP: доставка «за можливістю»
IP є без встановлення з'єднання і працює за можливістю (best-effort) — він намагається доставити пакети, але не дає жодних гарантій щодо порядку, дублювання чи надходження. Маршрутизатори використовують зіставлення за найдовшим префіксом для пересилання пакетів:
Поле TTL (Time To Live, час життя) зменшується на кожному переході маршрутизатора. Коли воно досягає 0, пакет відкидається й повертається повідомлення ICMP «time exceeded» — саме так працює traceroute.
4. TCP: надійний, упорядкований
TCP розташований поверх IP і забезпечує:
- Надійність: підтвердження (ACK) і повторні передачі гарантують надходження кожного байта.
- Упорядкованість: номери послідовності дозволяють отримувачу повторно зібрати пакети, що прийшли не за порядком.
- Виявлення помилок: 16-бітна контрольна сума на кожному сегменті (слабка; TLS забезпечує сильнішу цілісність).
- Керування потоком: отримувач оголошує вікно прийому — скільки байтів він може буферизувати.
- Керування перевантаженням: TCP зондує пропускну здатність мережі й знижує темп при втратах.
UDP — це альтернатива: без з'єднання, без ACK, без упорядкування. Використовується для DNS, відеодзвінків, ігор — застосунків, що віддають перевагу затримці над гарантованою доставкою та самі обробляють повторну передачу.
5. Тристороннє рукостискання
Перш ніж дані потечуть, TCP встановлює з'єднання трьома повідомленнями. Кожна сторона обирає випадковий початковий номер послідовності (ISN), щоб запобігти атакам передбачення послідовності:
← SYN-ACK (ISN=y, ACK=x+1)
ACK (ACK=y+1) →
Після третього повідомлення обидві сторони узгодили номери послідовності й можуть надсилати дані. Розрив з'єднання використовує чотиристоронній обмін FIN/ACK (кожна сторона закривається незалежно) або RST для негайного переривання.
6. Керування потоком і перевантаженням
Ковзне вікно
TCP надсилає кілька сегментів, не чекаючи ACK. Вікно перевантаження (cwnd) обмежує кількість байтів «у польоті». Пропускна здатність ≈ cwnd / RTT.
MSS — максимальний розмір сегмента (~1460 байтів для Ethernet)
RTT — час кругового оберту
loss_rate — імовірність втрати пакета
Керування перевантаженням AIMD
TCP використовує адитивне збільшення, мультиплікативне зменшення (AIMD):
- Повільний старт: cwnd подвоюється щоразу за RTT до порогу. Експоненційне зростання.
- Уникнення перевантаження: cwnd зростає лінійно (+ 1 MSS за RTT).
- Виявлено втрату: cwnd зменшується вдвічі (Reno) або падає до 1 MSS (Tahoe). Тайм-аут → повільний старт.
Сучасні алгоритми (BBR, CUBIC) безпосередньо моделюють пропускну здатність і час кругового оберту замість реагування на втрати, досягаючи у 2–10× кращої пропускної здатності в мережах з високим добутком пропускної здатності на затримку.
7. NAT: один IP на багатьох
Ваш домашній маршрутизатор має одну публічну IP-адресу, але обслуговує десятки пристроїв. Це робиться через трансляцію мережевих адрес (NAT): IP+порт джерела кожного вихідного пакета замінюється публічним IP маршрутизатора + унікальним портом. Відображення зберігається в таблиці NAT.
NAT порушує наскрізний принцип — сервери не можуть ініціювати з'єднання з клієнтами за NAT. Саме тому WebRTC потребує ICE/STUN/TURN, щоб «пробити» NAT для P2P-відеодзвінків.
8. DNS: адресна книга
Ще до того, як TCP стартує, DNS перетворює ім'я хоста на IP:
- Браузер перевіряє локальний кеш (обмежений TTL).
- ОС перевіряє
/etc/hosts. - Звертаються до рекурсивного резолвера (вашого провайдера або 8.8.8.8) → повертає кешовану відповідь або починає ітеративний пошук.
- Ітеративно: запитує кореневі сервери → сервери TLD (напр., .com) → авторитетний сервер → повертає IP.
- Відповідь кешується на TTL секунд (часто 300–3600 с).
DNS використовує UDP-порт 53 (швидкий пошук) або TCP для великих відповідей >512 байтів (передачі зон, DNSSEC). DoH (DNS over HTTPS) і DoT (DNS over TLS) шифрують DNS-запити, щоб запобігти підгляданню з боку провайдерів.