Экспресс-курс · No. 14

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

Только суть · Один образ на идею · Выучи слова

§ 01

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

Компьютеры разговаривают, передавая записки

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

Сеть — это просто компьютеры, соединённые так, чтобы слать друг другу данные. Данные едут маленькими пакетами — как записки, разбитые на открытки, каждая с пометкой, откуда и куда. Интернет — это то же в планетарном масштабе: миллиарды машин, любая из которых может передать пакет любой другой. Это весь фундамент; остальное — как сделать это надёжным и осмысленным.

У каждой машины есть адрес — её IP

У каждого здания на Земле уникальный почтовый адрес. Без него почтальону некуда доставить и некуда слать ответ.

Чтобы пакет дошёл, у назначения нужен адрес. Это IP-адрес — число, опознающее машину в сети, вроде 142.250.74.78. У каждого устройства онлайн он есть. Когда твой ноутбук шлёт запрос, он ставит свой IP как обратный адрес, чтобы ответ знал, куда возвращаться. Нет адреса — нет разговора.

Клиент спрашивает, сервер отвечает

Зал ресторана и кухня. Одна сторона делает заказы; другая готовит и отправляет назад. Роли на время обеда фиксированы.

Бо́льшая часть веба работает на модели клиент–сервер. Клиент (твой браузер, твоё приложение) делает запрос; сервер (машина, на которой крутится сайт или сервис) шлёт ответ. Твой телефон — клиент, что просит «дай мне эту страницу»; сервер где-то отвечает страницей. Держи эту пару в уме — каждая идея ниже о том, как заставить этот запрос-и-ответ работать.

Сеть — это машины, передающие адресованные сообщения. Клиент спрашивает, сервер отвечает — всё остальное делает это надёжным.

§ 02

Ты печатаешь имя вроде example.com, но сеть маршрутизирует только к числам. Что-то должно перевести имя, что ты помнишь, в адрес, что нужен машине. Это что-то — DNS.

Имена для людей; числа для машин

Друга ты помнишь по имени, но телефонная система набирает только числа — так что ты держишь список контактов, что превращает одно в другое.

Люди помнят wikipedia.org; сети нужен IP-адрес вроде 198.35.26.96. Доменное имя — это удобная человеку метка; IP — удобный машине адрес. Эти двое надо связать, потому что никто не хочет зубрить числа и ни один роутер не маршрутизирует имя. Перекрыть этот разрыв — целая система, работающая постоянно, незримо, на каждом клике.

DNS — это телефонная книга интернета

Гигантский, всегда открытый справочник: ты даёшь ему имя, он вручает число для набора. Ты никогда не видишь, как он работает, — просто получаешь число.

DNS — Domain Name System — это сервис, что переводит доменное имя в его IP-адрес. Прежде чем браузер сможет достать example.com, он спрашивает у DNS «какой адрес у этого имени?» и получает назад число. Этот поиск (или резолвинг) случается первым, каждый раз, за миллисекунды. Это негламурный шаг, что делает возможными читаемые человеком веб-адреса.

Ответ кэшируется, чтобы в следующий раз было быстро

Ты находишь номер друга раз и записываешь на стикер — в следующий раз просто читаешь стикер, а не открываешь весь справочник.

Искать каждое имя с нуля было бы медленно, так что DNS-ответы кэшируются — запоминаются на время твоим браузером, операционной системой и сетью. Адрес приходит с TTL (time to live), что говорит, сколько его безопасно переиспользовать до новой проверки. Поэтому адрес сайта, что ты уже посещал, грузится мгновенно, и поэтому смена DNS может расходиться не сразу.

DNS — это телефонная книга: превращает имя, что ты помнишь, в IP-адрес, что нужен сети, и кэширует его, чтобы следующий раз был мгновенным.

§ 03

Знать адрес — не то же, что вести разговор. Прежде чем сообщения надёжно потекут, две машины открывают соединение — и договариваются, в какую «дверь» сервера стучать.

TCP — это надёжная, упорядоченная линия

Телефонный звонок с подтверждениями: ты говоришь фразу, собеседник говорит «понял», и ничто не движется дальше, пока каждая часть не подтверждена и по порядку.

TCP (Transmission Control Protocol) — самый частый способ слать данные надёжно. Он открывает соединение быстрым рукопожатием (обе стороны соглашаются говорить), затем гарантирует, что каждый пакет дойдёт, по порядку, а потерянные перешлются. Ты меняешь немного скорости на уверенность, что ничто не потеряно и не перепутано. Веб, почта и большинство приложений едут на TCP именно ради этой надёжности.

UDP меняет надёжность на скорость

Выкрикивать новости через шумную комнату — часть слов теряется, но ты не останавливаешься подтвердить каждое, потому что поспевать важнее, чем поймать каждое слово.

UDP — быстрая, без-гарантий альтернатива: он шлёт пакеты без рукопожатия и без переотправки потерянных. Ты теряешь надёжность, но выигрываешь скорость и малые накладные — верный размен для живого видео, голосовых звонков и игр, где упавший кадр терпим, а ожидание нет. Знать, что есть оба, говорит тебе: у сети всегда есть этот регулятор «скорость против надёжности».

Порты — это пронумерованные двери машины

Одно здание, много дверей, каждая пронумерована под цель — доставки в дверь 80, офис в другую. Один адрес, разные входы.

На одной машине крутится много сервисов, так что одного IP-адреса мало — нужен ещё порт, число, выбирающее, какой сервис достать. Веб-трафик по соглашению использует порт 80 (HTTP) или 443 (HTTPS); база может слушать другой. Адрес приводит тебя к зданию; порт — к нужной двери. Вместе IP плюс порт называют точное назначение.

TCP — надёжная, упорядоченная линия; UDP — быстрый и теряющий. IP находит здание, порт выбирает дверь.

§ 04

Когда линия открыта, двум сторонам нужен общий язык, чтобы спрашивать и отвечать. В вебе этот язык — HTTP, простой, строгий формат каждого запроса и ответа.

HTTP — это запрос и ответ

Обмен официальными письмами: уходит ясно структурированный запрос, и возвращается ясно структурированный ответ, каждый по одной согласованной раскладке.

HTTP (HyperText Transfer Protocol) — язык веба. Клиент шлёт запрос — что он хочет, — а сервер шлёт назад ответ — результат. Каждая страница, картинка и вызов API — это один такой обмен. Он текстовый и структурированный, поэтому на нём говорит столько инструментов. Освой форму одного запроса и ответа — и поймёшь, как движется весь веб.

Метод говорит, что ты хочешь сделать

У стойки библиотеки: можно взять книгу, вернуть или попросить добавить новую. Одна стойка, разное намерение — и персонал относится к каждому иначе.

У каждого запроса есть метод — глагол. GET достаёт данные (загрузить страницу). POST шлёт новые данные (отправить форму). PUT обновляет что-то; DELETE удаляет. Метод сообщает серверу твоё намерение с одного взгляда, и хорошо устроенные системы относятся к ним по-разному — GET не должен ничего менять, а POST как раз ожидаемо меняет. Эти глаголы — хребет того, как проектируют API.

Заголовки несут детали; тело несёт груз

На конверте есть пометки снаружи — кому, что внутри, как обращаться — и само письмо внутри.

У каждого запроса и ответа есть заголовки (headers) — помеченные строки метаданных вроде типа содержимого, языка, кто спрашивает и токенов аутентификации — и опциональное тело (body), сам груз (данные формы наверх, страница или JSON вниз). Заголовки — это как две стороны договариваются о деталях, не трогая груз. Бо́льшая часть «как» обмена живёт в заголовках.

Статус-коды говорят, как всё прошло

Светофор для ответов: зелёный — езжай, редирект указывает в другое место, а красный говорит, что пошло не так — и чья вина.

Каждый ответ несёт статус-код. 2xx — успех (200 OK). 3xx — редирект (смотри вон там). 4xx — ошибся клиент: 404 Not Found, 403 Forbiddenты спросил не так. 5xx — ошибся сервер: 500он сломался. Чтение первой цифры мгновенно говорит, сработало ли, чья вина и куда смотреть. Это самый полезный навык отладки в вебе.

HTTP забывает тебя между запросами

Клерк за стойкой без памяти о прошлом визите — каждый раз, подходя, ты заново представляешься и снова показываешь талон.

HTTP без состояния (stateless): каждый запрос стоит сам по себе, и сервер по умолчанию не помнит ничего с прошлого. Так что чтобы оставаться залогиненным, каждый запрос должен нести доказательство, кто ты, — cookie или токен в заголовках. Отсутствие состояния и позволяет вебу масштабироваться до миллиардов запросов, и понимание этого объясняет, почему твоя личность едет вместе с каждым вызовом.

HTTP — это запрос и ответ: метод для намерения, заголовки для деталей, тело для груза и статус-код, что точно говорит, как всё прошло.

§ 05

Обычный HTTP — это открытка: любой, кто её несёт, может прочитать. HTTPS — тот же разговор, запечатанный в конверт, что откроет только нужный сервер, и подписанный, чтобы ты знал, с кем говоришь.

Шифрование запечатывает сообщение

Замена читаемой открытки на запертый ящик, ключ от которого есть только у получателя, — курьеры несут его, но никто не может прочесть, что внутри.

HTTPS — это HTTP, обёрнутый в шифрование через TLS. Оно перемешивает содержимое так, что любой между тобой и сервером — Wi-Fi кафе, провайдер, атакующий — видит лишь бессмыслицу, а не твой пароль или сообщение. Иконка замка в адресной строке значит, что печать на месте. В современном вебе это по умолчанию, потому что незапечатанный разговор — это разговор, что может прочесть кто угодно.

Сертификаты доказывают, с кем ты говоришь

Паспорт, проверенный доверенной инстанцией, — он доказывает, что человек тот, кем себя называет, а не самозванец под его именем.

Одного шифрования мало; надо ещё знать, что сервер правда yourbank.com, а не подделка. Сертификат — это цифровое удостоверение, подписанное доверенным удостоверяющим центром (certificate authority), что доказывает: сервер владеет именем, что заявляет. Браузер проверяет его автоматически и предупреждает, когда оно отсутствует или неверно. Это и не даёт атакующему выдать себя за сайт даже на зашифрованном соединении.

Почему замок важен

Разница между отправкой запечатанного, проверенного письма и выкрикиванием своих банковских данных через людную комнату.

Без HTTPS любой на пути сети может читать и даже менять твой трафик — человек посередине (man-in-the-middle), тихо сидящий между тобой и сервером. С ним сообщение запечатано, а отправитель проверен. Поэтому страницы входа, платежи и теперь по сути всё используют HTTPS, и поэтому браузеры метят обычный HTTP как «небезопасно». Замок — маленькая иконка, что стоит за большой гарантией.

HTTPS запечатывает сообщение шифрованием и доказывает личность сервера сертификатом — приватность и доверие в одном замке.

§ 06

Веб ощущается мгновенным, но расстояние и физика всегда берут пошлину. Два слова — задержка и пропускная способность — объясняют бо́льшую часть того, почему всё кажется быстрым или медленным.

Задержка — это ожидание; пропускная способность — это ширина

Водопроводная труба: сколько пройдёт до первой капли — одно; сколько может течь в секунду — другое. У широкой трубы всё равно есть задержка, пока вода дойдёт до дальнего конца.

Задержка (latency) — это промедление до того, как начнётся ответ, — время туда-обратно для сообщения. Пропускная способность (bandwidth) — сколько данных можно двигать в секунду. Они независимы: соединение может быть широкополосным и при этом высокой задержки. Большим загрузкам важна пропускная способность; шустрому, отзывчивому сайту важна задержка. Путаница между ними — вот почему «интернет быстрый, а сайт тормозит» озадачивает людей.

Каждый круг туда-обратно стоит, и расстояние реально

Задать вопрос кому-то на другом континенте: даже на скорости света у обмена туда-обратно есть пол, что не побить.

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

Положи ответ ближе с CDN

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

CDN (content delivery network) — это флот серверов, разбросанных по миру, что держат копии твоего контента близко к пользователям. Когда кто-то в Токио грузит твой сайт, его обслуживают из ближнего города, а не с твоего исходного сервера за океаном, — резко срезая задержку. CDN — это кэширование, применённое к географии, и так глобальные сайты ощущаются локальными везде.

Балансировщик нагрузки распределяет работу

Управляющий очередью в банке направляет клиентов к тому окну, что свободно, чтобы ни одно не захлёбывалось, пока другие простаивают.

Когда один сервер не справляется со всем трафиком, перед несколькими ставят балансировщик нагрузки (load balancer), что распределяет запросы между ними. Так большие сайты держат миллионы пользователей — добавь больше серверов за балансировщик — и так они переживают отказ одного сервера, ведь балансировщик просто обходит его. Слово описывает ровно то, что он делает: он балансирует нагрузку.

Задержка — это ожидание; пропускная способность — это ширина. Расстояние всегда берёт пошлину — CDN двигает ответ ближе, балансировщик распределяет работу.

§ 07

Теперь сложи все слова вместе, проследив один клик от адресной строки до отрисованной страницы. Если можешь это пересказать — ты понимаешь, как разговаривает веб.

Что происходит, когда ты грузишь URL

Полный путь одного письма: поиск адреса, открытие линии, запечатывание конверта, вопрос, ответ — всё за заметно меньше секунды.

Ты печатаешь example.com. DNS превращает имя в IP-адрес. Браузер открывает TCP-соединение к этому IP на порт 443, и они делают TLS-рукопожатие, чтобы линия была зашифрована, а сертификат сервера проверен. По этой запечатанной линии браузер шлёт HTTP-запрос с методом GET; сервер отвечает статус-кодом и телом. Страница может прийти с ближнего CDN, чтобы срезать задержку. Браузер читает ответ и рисует страницу. Каждый термин этого курса просто назвал один шаг той единственной, обычной секунды.

Путь, по порядку
  • DNS резолвит доменное имя в IP-адрес. - TCP-соединение открывается к этому IP на порт (443 для HTTPS). - TLS-рукопожатие шифрует линию и проверяет сертификат сервера.
  • Клиент шлёт HTTP-запросметод, заголовки, может быть тело. - Сервер возвращает статус-код, заголовки и тело. - CDN может отдать это из ближнего места; балансировщик может выбрать сервер.
Слова, которыми ты теперь владеешь
  • IP-адрес / пакет — адрес машины и куски, которыми едут данные. - DNS / TTL — поиск имени-в-число и сколько ответ кэшируется. - TCP / UDP / порт — надёжная линия, быстрая линия и какая дверь машины. - HTTP / метод / заголовки / тело / статус-код — язык запроса-ответа. - HTTPS / TLS / сертификат — запечатанный, проверенный конверт. - задержка / пропускная способность / CDN / балансировщик — ожидание, ширина и как масштаб борется с обоими.
Признаки, что веб теперь понятен
  • 404 против 500 мгновенно говорит, чья вина — твоя или сервера. - «Быстрый интернет, а сайт медленный» читается как проблема задержки, не пропускной способности. - Замок значит зашифровано и личность проверена — ты знаешь, что он гарантирует. - Можешь объяснить, почему оставаться залогиненным требует cookie на каждом stateless-запросе. - Смог бы пересказать весь путь URL выше, не подглядывая.

Загрузка страницы — это один быстрый разговор: найти адрес, открыть линию, запечатать, спросить, ответить. Каждое пугающее слово — просто один шаг той секунды.

Конец экспресс-курса · 7 глав · выучи слова

Дальше — практика: открой инструменты разработчика в браузере, перейди на вкладку Network и загрузи любой сайт. Смотри, как появляются реальные запросы — методы, статус-коды, заголовки, тайминги — и сопоставляй каждый со словом из этого курса. Абстракции становятся конкретными в тот миг, как ты видишь, как они происходят. Но держи одну мысль выше прочих: веб не магия. Это машины, что находят адрес, открывают линию, запечатывают её и меняют вопрос на ответ, — и теперь у тебя есть слова для каждого шага.