Виталий Лещенко

HTTP/1.1, HTTP/2 и HTTP/3: чем отличаются, как работают и как включить в Traefik

На этой неделе я включил HTTP/3 на Traefik в своём кластере, и по дороге пришлось заново разложить в голове, чем три живущие одновременно версии HTTP отличаются друг от друга и зачем вообще нужна третья, если вторая появилась десять лет назад. Это та самая раскладка: как устроена каждая версия, какую проблему предыдущей она решает, когда одна быстрее другой, как всё это настраивается в Traefik и на какие грабли я наступил или успел заметить заранее.

Статья самостоятельная, но опирается на две части серии «Сети для самых маленьких»: про UDP и про TCP. Там подробно про соединения, потери и окна; здесь будем на них ссылаться.


Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 10: TCP

В девятой части UDP добавил к IP только порты и ничего больше: пакет либо дошёл, либо нет. Для большинства приложений этого мало. Файл должен прийти целиком, байты — в том порядке, в котором отправлены, и отправитель не должен заваливать получателя и сеть быстрее, чем они справляются. Всё это делает TCP, Transmission Control Protocol, RFC 793 (сейчас — RFC 9293), и делает поверх того же ненадёжного IP, который теряет, дублирует и переставляет пакеты.

Разговор будет долгим, потому что TCP — это не формат, а алгоритм: набор правил, по которым две стороны договариваются, нумеруют байты, подтверждают, повторяют и притормаживают. Пойдём по жизни соединения: заголовок, установление, передача, надёжность, скорость, закрытие — и в конце посмотрим на всё это в одном захвате.


Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 9: UDP

За восемь частей мы научились доставлять пакет от машины к машине: Ethernet до соседа, IP через роутеры, ARP для перевода адресов и ICMP для сообщений об ошибках. Пакет пришёл на машину с нужным IP-адресом. А дальше кому? На машине десятки программ, и IP ничего о них не знает: в его заголовке есть поле Protocol, но оно скажет только «внутри UDP» или «внутри TCP».

Транспортный уровень решает ровно эту задачу — доставить данные не машине, а процессу на ней, — и, если нужно, добавляет то, чего у IP нет: надёжность, порядок, управление скоростью. В интернете два транспорта. Начнём с того, который добавляет к IP самый минимум: UDP, User Datagram Protocol, RFC 768. Весь стандарт — две страницы 1980 года.


Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 8: ICMP

В шестой части роутер несколько раз выбрасывал пакет и сообщал об этом отправителю: когда TTL дошёл до нуля, когда не нашлось маршрута, когда пакет с флагом DF не влез в MTU. IP сам по себе ничего сообщить не может: в его заголовке нет места для ошибок, а роутер не хранит состояния. Для этого рядом с IP с самого начала живёт второй протокол — ICMP, Internet Control Message Protocol (RFC 792). Он же под капотом у двух самых известных сетевых команд, ping и traceroute, и он же — причина половины загадочных проблем вида «пинг ходит, а сайт не открывается».


Что такое ICMP

Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 7: ARP

В пятой части хост решал, сосед перед ним или нужен шлюз, а в шестой роутер на каждом хопе упаковывал пакет в новый кадр с MAC-адресом следующего роутера. В обоих случаях мы молча предполагали, что MAC-адрес соседа откуда-то известен. Но в пакете есть только IP-адрес назначения, а кадру Ethernet нужен MAC. Кто-то должен перевести одно в другое. Это делает ARP — Address Resolution Protocol, RFC 826, один из самых старых и самых простых протоколов стека, и при этом один из самых важных: без него ни один пакет не покинет машину.


Задача

Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 6: IPv4 — заголовок, маршрутизация и NAT

В пятой части мы разобрали адреса и маски и дошли до момента, когда хост решает: сосед или шлюз. Если шлюз — пакет уезжает роутеру, и дальше начинается то, ради чего сетевой уровень существует: маршрутизация, передача пакета от сети к сети, пока он не окажется в сегменте получателя. Сегодня — что роутер при этом читает в пакете, как выбирает путь и что меняет, что происходит с пакетом, который не влезает в кадр, и как домашний роутер прячет всю квартиру за одним адресом.


Заголовок IPv4

Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 5: IPv4 — адреса, маски и подсети

Четыре предыдущие части были про канальный уровень: Ethernet, Wi-Fi и PPPoE умеют доставить кадр соседу — устройству на том же кабеле, в той же радиосети, на другом конце той же линии. Дальше соседа канальный уровень не видит: MAC-адрес ничего не говорит о том, где машина находится, и коммутатор с миллиардом адресов в таблице не построить.

Сетевой уровень добавляет две вещи: адрес, по которому можно понять, где машина, и маршрутизацию — передачу пакета от сети к сети через цепочку роутеров. Протокол сетевого уровня в интернете — IP, Internet Protocol, и его четвёртая версия, IPv4 (RFC 791, 1981 год), до сих пор несёт большую часть трафика. Сегодня — только про адреса: как они устроены, как считаются подсети и как машина по адресу принимает своё первое решение. Заголовок пакета, маршрутизация и NAT — в следующей части.


Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 4: PPPoE

В первой части канальный уровень был просто «доставить соседу», во второй и третьей мы увидели, как это делают Ethernet и Wi-Fi. Сегодня — протокол, который сидит между Ethernet и IP и встречается почти в каждом домашнем роутере: PPPoE, Point-to-Point Protocol over Ethernet. В настройках роутера это тот самый пункт «Тип подключения: PPPoE», рядом с которым вводят логин и пароль от провайдера.

Чтобы понять PPPoE, нужно понять две вещи: что такое PPP и зачем его понадобилось заворачивать в Ethernet.


Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 3: Wi-Fi

Во второй части мы разобрали Ethernet: кадр, MAC-адреса, коммутатор. Для операционной системы Wi-Fi выглядит так же: интерфейс wlan0 с MAC-адресом, те же IP-пакеты внутри, тот же MTU 1500. Точка доступа — это коммутатор, у которого часть портов радио. Но внутри Wi-Fi устроен совсем иначе, и почти все его странности — «иногда тормозит», «один сосед кладёт всю сеть», «ноутбук держится за дальнюю точку» — следуют из физики радио. Разберём, как семейство стандартов IEEE 802.11 с этой физикой справляется.


Чем радио отличается от кабеля

Читать дальше
Виталий Лещенко

Сети для самых маленьких. Часть 2: Ethernet

В первой части мы разобрали, что сетевой стек — матрёшка из заголовков, и что самый внешний слой в ней, канальный, доставляет данные соседу по кабелю. Сегодня — о самом распространённом канальном протоколе: Ethernet. По нему работают и домашняя розетка, и порт коммутатора в стойке, и 400-гигабитные линки между дата-центрами, и даже Wi-Fi притворяется им перед операционной системой.

Ethernet придумал Роберт Меткалф в Xerox PARC в 1973 году для сети из одного толстого коаксиального кабеля, к которому подключались все машины офиса. С тех пор сменилось всё: кабель, скорость, топология, электроника. Не изменился только формат кадра, и это самое поучительное в его истории.


Читать дальше