LO
Первое сообщение ARPANET, отправленное 29 октября 1969 года из Калифорнийского университета (Лос-Анджелес) в Стэнфорд.
Мы уже поговорили о локальных сетевых технологиях, таких как Ethernet и беспроводная связь. Но телефонная система соединяет аппараты по всему миру. Как нам сделать то же самое для компьютеров? Как мы можем увеличить масштаб, чтобы соединить разные локальные сети – допустим, все сети Ethernet в одном здании, или компьютеры в моем и ваших домах, расположенных в соседних городах, или корпоративные сети в Канаде и Европе? Как нам добиться этого, если базовые сети используют не связанные между собой технологии? Как нам устроить так, чтобы соединение элегантно расширялось по мере увеличения количества сетей, пользователей, расстояний и в условиях постоянных изменений в оборудовании и технологиях?
Одним из ответов на эти вопросы стал интернет, и он оказался настолько успешным, что решил большинство задач.
Интернет – не какая-то одна гигантская сеть или исполинский компьютер. Это свободная, неструктурированная, хаотичная, разрозненная совокупность сетей, соединенных по стандартам, которые определяют, как взаимодействуют сами сети и подключенные к ним машины.
Как соединить сети – оптоволоконные, Ethernet, беспроводные, – которые могут находиться вдали друг от друга и обладать разными физическими характеристиками? Нам понадобятся имена и адреса для идентификации сети и компьютеров – эквивалент телефонных номеров и справочников. Нам потребуется способ находить маршруты между сетями, которые не связаны напрямую. Мы должны будем договориться о том, как форматировать информацию для передачи по сети, а также совместно решить огромное количество других, менее очевидных вопросов вроде устранения ошибок, задержек и перегрузок. Без этих соглашений работа средств связи затруднится или даже станет невозможной.
Соглашения по формату данных, о том, кто говорит первым и какой должен последовать ответ, как справляться с ошибками и так далее, реализуются во всех сетях (и особенно в интернете) с помощью протоколов. Термин «протокол» имеет примерно то же значение, что и в обычной речи: это набор правил для взаимодействия с другой стороной. Но сетевые протоколы основываются на технических критериях, а не на социальных обычаях, и они намного более выверенные, чем даже при самом строгом общественном строе.
Возможно, это не совсем очевидно, но для интернета настоятельно требуются такие правила. Каждый должен согласиться с протоколами и стандартами форматирования информации, обмена ею между компьютерами, идентификации и авторизации устройств и действий в случае какого-нибудь сбоя. Согласование протоколов и стандартов бывает сложным процессом, поскольку существует много влиятельных групп: компании, которые производят оборудование или продают услуги, субъекты с патентами или коммерческой тайной, правительство, желающее отслеживать и контролировать то, что передается через государственные границы и между гражданами.
Некоторые ресурсы находятся в дефиците, и один из очевидных примеров – диапазон для беспроводной связи. К тому же нельзя, чтобы названия веб-страницам давали безо всякого порядка. Кто будет распределять такие ограниченные ресурсы и на каком основании? Кто, кому и сколько должен платить за их использование? Кто станет выносить суждения по неизбежным спорам? Какую правовую систему (или системы) применять для их разрешения? В самом деле, кто должен устанавливать правила? Возможно, правительство, фирмы, отраслевые консорциумы, условно незаинтересованные или нейтральные участники вроде Международного союза электросвязи при ООН. Главное, чтобы в итоге все согласились соблюдать нормы.
Очевидно, что эти вопросы решаемы: достаточно вспомнить, что телефонная система работает по всему миру, объединяя разнородное оборудование в разных странах. Интернет, по сути, похожая технология, только он более новый, крупный, гораздо более анархичный и быстро меняющийся. Он общедоступен по сравнению с управляемой средой традиционных телефонных компаний, большинство из которых были либо государственными монополиями, либо жестко регулируемыми фирмами. Но из-за давления власти и бизнеса интернет уже менее фриволен и более стеснен, чем в первые дни своего существования.
9.1. Обзор интернета
Перед тем как перейти к подробностям, рассмотрим общую картину. Интернет зародился в 1960-х годах в результате попыток создать сеть, которая могла бы соединять компьютеры в разных, географически отдаленных точках. Основное финансирование этих работ осуществляло Управление перспективных исследовательских проектов (ARPA) Министерства обороны США, и получившуюся в результате сеть назвали ARPANET. Первое сообщение по ней отправили 29 октября 1969 года с компьютера в Калифорнийском университете в Лос-Анджелесе на машину в Стэнфорде, расположенную на расстоянии около 350 миль (550 км). Эту дату можно считать днем рождения интернета. (Ошибку, что вызвала первоначальный сбой, упомянутый в эпиграфе, быстро исправили, и следующая попытка сработала.)
ARPANET изначально создавалась как система повышенной надежности, способная работать при возникновении неисправности в любом ее компоненте и передавать информацию в обход этих проблем. Ее оригинальные компьютеры и технологии со временем заменили. На первых порах ARPANET объединяла университетские факультеты информатики и исследовательские институты, однако в 1990-х годах проникла в мир коммерции и на одном из этапов превратилась в интернет.
Сегодня интернет состоит из многих миллионов нестрого соединенных независимых сетей. Соседние компьютеры объединены через локальные сети, зачастую беспроводные Ethernet. Сети подключаются одна к другой через шлюзы или маршрутизаторы — специализированные компьютеры, которые прокладывают между сетями маршруты для пакетов информации. (В «Википедии» говорится, что шлюз – более общий вариант подобного устройства, а маршрутизатор – нечто специализированное, но эти определения не универсальны.) Шлюзы обмениваются сведениями о маршрутизации, поэтому они знают (по крайней мере, локально), что в данный момент подключено, а значит, доступно.
Каждая сеть может объединять множество узлов, таких как компьютеры и телефоны в домах, офисах и комнатах общежитий. Отдельные машины в доме, скорее всего, имеют беспроводное соединение с маршрутизатором, который, в свою очередь, по кабелю или DSL подключен к интернет-провайдеру, или ISP. В офисах может использоваться проводное подключение к Ethernet.
Как я упоминал в предыдущей главе, информация передается по сетям порциями, называемыми пакетами. Любой из них – это последовательность байтов с заданным форматом, причем разные устройства используют разные форматы пакетов. Одна часть пакета содержит адресную информацию, которая сообщает, откуда он пришел и куда направляется. В другой части находятся сведения о самом пакете (например, о его длине) и, наконец, переносимые им полезные данные.
По интернету данные передаются в IP-пакетах (IP означает «межсетевой протокол»). Все они имеют одинаковый формат. В какой-либо конкретной сети IP-пакет, вероятно, будут пересылать в виде одного или нескольких физических пакетов. Например, объемный IP-пакет будет разделен на несколько маленьких пакетов Ethernet, потому что даже самый большой из них (около 1500 байт) гораздо меньше наиболее крупного IP-пакета (чуть больше 65 000 байт).
Любой IP-пакет передается через несколько шлюзов, и каждый них отправляет данные следующему, более близкому к месту назначения. Двигаясь в нужную точку, пакеты могут пройти через 20 шлюзов, которые принадлежат десяткам всевозможных компаний или организаций (и управляются ими) – возможно, даже в разных странах. Трафик не обязательно должен следовать по кратчайшему пути: в зависимости от удобства и затрат пакеты иногда направляют по более длинным маршрутам. Многие пакеты, отсылаемые или получаемые за пределами США, передаются по кабелям, проложенным по территории страны, чем пользуется АНБ, чтобы записывать информацию со всего мира81.
Работу всего этого обеспечивают несколько механизмов.
Адреса. Каждому сетевому узлу (хосту-машине) нужен адрес, нечто вроде номера телефона, который уникально определяет его среди всех прочих машин в интернете. Этот идентификатор, или IP-адрес, состоит либо из 32 бит (4 байта), либо из 128 бит (16 байт). Короткие адреса предназначены для четвертой версии межсетевого протокола (IPv4), а более длинные – для шестой версии (IPv6). IPv4 использовалась на протяжении многих лет, и она по-прежнему доминирует. Но все доступные адреса IPv4 уже распределены, поэтому ускоряется переход к IPv6.
IP-адреса аналогичны адресам Ethernet. IPv4^pec обычно записывается в виде значений, полученных из его 4 байт, каждое из которых представлено в виде десятичного числа, разделенного точками. Например, 140.180.223.42 (это у нас https://www.princeton.edu/). Такая странная форма записи называется десятичной с точками, а применяют ее потому, что людям легче запомнить ее, чем десятеричное или шестнадцатеричное число, где все символы шли бы подряд. На рисунке 9.1 показан этот IP-адрес в десятичном с точками, двоичном и шестнадцатеричном виде.
Адреса IPv6 обычно записываются в виде 16 шестнадцатеричных байт с двоеточиями между каждой парой байтов – например, 2620:0:1003:100c:9227:e4ff: fee9:05ec.
Рис. 9.1. Десятичная с точками запись для адресов IPv4
Они еще менее интуитивно понятны, чем десятичные с точками, поэтому для наглядности я буду использовать IPv4. Свой IP-адрес вы можете узнать в System Preferences (системных настройках) на macOS или аналогичном приложении на Windows (или в настройках на вашем телефоне, если он подключен к Wi-Fi).
Какой-либо центральный орган назначает блок последовательных IP-адресов администратору сети, а тот, в свою очередь, назначает отдельные адреса компьютерам, подключенным к ней. Таким образом, каждая хост-машина имеет уникальный адрес, присвоенный локально в соответствии с сетью, в которой он находится. Для стационарных ПК этот адрес, вероятно, окажется постоянным, а для мобильных устройств – динамичным, то есть будет изменяться как минимум при каждом новом подключении к интернету.
Имена. Сетевой узел, к которому люди пробуют подключиться напрямую, должен носить имя, удобное с человеческой точки зрения. Мало кто из нас умеет запоминать произвольные 32-битные числа, даже в десятичной с точками записи. Общепринятые форматы для имен выглядят как www. nyu. edu или ibm. com. Такие сочетания называются доменными именами. Важнейшая часть инфраструктуры интернета – служба доменных имен, или DNS (Domain Name System), которая преобразует их в IP-адреса.
Маршрутизация. Нужен механизм для того, чтобы каждый пакет находил путь от источника к месту назначения. Это обеспечивают уже известные нам шлюзы, которые постоянно обмениваются между собой сведениями по маршрутизации (о том, что к чему подключено) и применяют ее для пересылки каждого входящего пакета по направлению к шлюзу, находящемуся ближе к финальной точке.
Протоколы. Наконец, должны существовать правила и процедуры, которые точно описывают, как все эти и другие компоненты взаимодействуют, чтобы информация успешно копировалась с одного компьютера на другой.
Основной протокол, называющийся IP (Internet Protocol, «межсетевой протокол»), определяет единый механизм передачи и общий формат пересылаемой информации. IP-пакеты передаются различными типами сетевого оборудования, использующими собственные протоколы.
Выше уровнем, чем IP, действует протокол управления передачей, или TCP (Transmission Control Protocol). Он задействует IP, чтобы предоставить надежный механизм пересылки последовательности байтов произвольной длины от источника к месту назначения.
Протоколы, расположенные еще выше, используют TCP для обеспечения работы сервисов, которые мы в целом воспринимаем как интернет: просмотра веб-страниц, почты, переброски файлов и так далее. Существует также множество других протоколов. Например, динамическое изменение IP-адреса выполняется протоколом динамического конфигурирования хост-машины, или DHCP (Dynamic Host Configuration Protocol). Все вместе они определяют работу интернета, и мы еще поговорим о каждом из них подробнее.
9.2. Доменные имена и адреса
Кто устанавливает правила? Кто управляет распределением имен и номеров? Кто здесь главный? В течение многих лет интернетом руководило неофициальное содружество небольших групп технических специалистов.
Большую часть основных технологий интернета разработало неформальное объединение, действующее под названием «Рабочая группа проектирования Интернета» (Internet Engineering Task Force, или IETF). Она готовила инженерные расчеты и документацию с описанием того, как все должно работать. Технические спецификации уточнялись (и тогда, и сейчас) с помощью регулярных совещаний и частых публикаций, которые назывались «Запросы для обсуждения» (Requests for Comments, RFCs) В итоге они становились стандартами. Те запросы, коих насчитывается 9000, доступны в интернете. Не все они смертельно серьезны: взгляните хотя бы на RFC-1149 – «Стандарт для передачи IP-датаграмм на пернатом носителе», опубликованный 1 апреля 1990 года82.
Другими аспектами интернета управляет ICANN (Internet Corporation for Assigned Names and Numbers[69]; icann.org), которая обеспечивает техническую координацию в сети. Она назначает имена и номера, обеспечивая их уникальность в рамках интернета. Это доменные адреса, IP-адреса и некоторые протоколы информации. ICANN также аккредитует регистраторов доменных имен, которые, в свою очередь, присваивают доменные имена частным лицам и организациям. Интернет-корпорация начинала работать как агентство Министерства торговли США, но сейчас стала независимой некоммерческой организацией. Базируется ICANN в Калифорнии, а финансируется в основном за счет сборов с регистраторов и платы за оформление доменных имен.
Неудивительно, что работа интернет-корпорации сопряжена со сложными политическими проблемами. Некоторые страны недовольны тем, что она с момента возникновения и до сих пор располагается в США. Они называют ICANN орудием правительства Соединенных Штатов, а некоторые чиновники хотели бы, чтобы она стала частью ООН или другого международного органа, что облегчило бы контроль над ней.
В начале 2020 года таинственная группа Ethos Capital с частным инвестиционным капиталом пожелала приобрести домен верхнего уровня огд, и ICANN одобрила сделку. Потом стало ясно, что покупатели хотели получить контроль, а затем повышать цены, одновременно сбывая данные о клиентах. К счастью, последовал настолько громкий общественный резонанс, что даже генеральный прокурор Калифорнии пригрозил иском, ICANN отменила решение, и покупка не состоялась.
9.2.1. Система доменных имен
Система доменных имен, или DNS, обеспечивает привычную нам иерархическую схему именования, где возникают такие названия, как berkeley.edu или cnn.com. Имена. com, edu и тому подобное, а также двухбуквенные коды стран вроде. us и. са называются доменами верхнего уровня83. Они делегируют ответственность за администрирование и присвоение последующих имен на более низкий уровень. Например, Принстонский университет несет ответственность за администрирование princeton.edu и может определять поддоменные имена в границах этого диапазона: в частности, classics. princeton.edu для факультета классических дисциплин и cs.princeton.edu для факультета информатики. Те, в свою очередь, могут определять такие доменные имена, как www. cs. princeton. edu и т. д.
Доменные имена вводят логическую структуру, но не обязательно связаны с каким-то заданным местоположением. Например, IBM работает во многих странах, однако все ее компьютеры включены в ibm.com. Одна машина может обслуживать несколько доменов, что вполне привычно для компаний, предоставляющих услуги хостинга. И наоборот, один домен может обслуживаться множеством компьютеров. Это относится к таким крупным сайтам, как Facebook[70] и Amazon.
Отсутствие географических ограничений имеет некоторые интересные последствия. Например, страна Тувалу (население 11 000 человек), расположенная на группе небольших островов в южной части Тихого океана на полпути между Гавайями и Австралией, имеет код страны. tv. Тувалу сдает права на него в аренду коммерческим организациям, которые с радостью продадут вам домен. tv. Если нужное вам имя имеет какое-то потенциальное коммерческое значение – допустим news.tv, – вам, скорее всего, придется здорово раскошелиться. А вот за kernighan. tv плата составляет менее тридцати долларов в год. Есть страны, благословленные лингвистическими случайностями, – например, Республика Молдова, чей. md наверняка понравится докторам, и Италия, посредством которой можно создавать сайты вроде play.it[71]. Обычно доменные имена ограничиваются 26 буквами английского алфавита, цифрами и дефисами, но в 2009 году ICANN одобрила некоторые международные доменные имена верхнего уровня – в частности,
как альтернативу. сп для Китая и
в дополнение к. ед для Египта.
Примерно в 2013 году ICANN начала разрешать новые домены верхнего уровня – например, online и. club. Неясно, насколько успешными они будут в долгосрочной перспективе, но некоторые вроде. info и. io пользуются популярностью. Коммерческие и правительственные домены, такие как. toyota и. parts, тоже можно купить, однако тут встает вопрос о целях ICANN: действительно ли есть нужда в подобных доменах или организация просто хочет повысить свои доходы?
9.2.2. IP-адреса
Чтобы взаимодействовать между собой, все сети и подключенные к ним хост-машины должны обладать IP-адресом. IPV4-адрес – это уникальное 32-битное число, которое в каждый момент времени может использовать только один сетевой узел во всем интернете. Адреса назначает ICANN, выдавая их в виде блоков, которые затем распределяются организациями на более низких уровнях. Например, у Принстона есть два блока, 128.112.ddd.ddd и 140.180.ddd.ddd, где каждое ddd – это десятичное число от 0 до 255. В рамках каждого из блоков можно выдать 65 536 (216) хостов, то есть около 131 000 в сумме.
В числах из этих блоков не скрыт никакой особый смысл, и они никак не привязаны к географическому положению. По аналогии, телефонные коды США 212 и 213 – смежные числа, но они принадлежат Нью-Йорку и Лос-Анджелесу, которые находятся в разных частях континента. Поэтому не стоит ожидать, что соседние блоки IP-адресов соответствуют компьютерам, физически размещенным вблизи друг от друга. Также по самому IP-адресу невозможно определить координаты хоста, хотя зачастую это можно установить по другой информации. Например, DNS поддерживает обратный поиск (от IP-адреса к имени) и сообщает, что 140.180.223.42 – это www.princeton.edu. Разумно предположить, что машина расположена в Принстоне, штат Нью-Джерси, хотя сервер может находиться в совершенно ином месте84.
Иногда подробности того, кто стоит за доменным именем, можно выяснить, используя службу под названием whois, доступную в интернете по адресу lookup. icann. org, или программу командной строки whois в Unix.
Существует всего 232 возможных IPv4-адреса, то есть около 4,3 миллиарда. Это меньше чем по одному на каждого жителя Земли. Если учесть, что люди всё обширнее пользуются услугами связи, однажды запас точно иссякнет. В реальности ситуация даже хуже, поскольку IP-адреса выдаются блоками, которые применяются не так эффективно, как хотелось бы (разве в Принстоне сейчас работает 131 000 компьютеров?). Так или иначе, все IPV4-адреса, за некоторыми исключениями, уже распределены в большинстве частей света.
Немного облегчают положение дел методы прикрепления нескольких хостов к одному IP-адресу. Домашние беспроводные маршрутизаторы обычно применяют трансляцию сетевых адресов, или протокол NAT (Network Access Translation), при котором один внешний IP-адрес может обслуживать несколько внутренних. Если у вас действует NAT, то все ваши домашние устройства при «взгляде снаружи» будут иметь один IP-адрес. При этом ПО и аппаратное обеспечение маршрутизатора преобразует адреса в обоих направлениях. Например, в моем доме есть как минимум десяток компьютеров и других устройств, которым нужен IP-адрес. Они все обслуживаются по NAT-протоколу с одним внешним адресом.
Как только мир перейдет на IPv6, который использует 128-битные адреса, давление спадет: их насчитывается 2128 или около 3 × 1038, так что они закончатся нескоро.
9.2.3. Корневые серверы
Важнейшая служба DNS – преобразование имен в IP-адреса. Домены высокого уровня обрабатываются набором серверов имен корневого домена (корневых серверов), которые знают IP-адреса для них всех – например, для mit.edu. Чтобы определить IP-адрес для www.cs.mit.edu, у корневого сервера запрашивается IP-адрес для mit. edu. Этого достаточно, чтобы попасть в MIT (Массачусетский технологический институт, МТИ), где у сервера имен МТИ запрашивается cs.mit.edu, а далее мы приходим к серверу имен, который знает о www. cs. mit. edu.
Таким образом, DNS использует эффективные алгоритмы поиска: первоначальный запрос с самого верха мгновенно исключает из дальнейшей обработки большинство потенциальных адресов. Это же верно для всех уровней, которые задействуются при продвижении поиска вниз по дереву. Похожую идею мы уже встречали ранее, когда изучали иерархическую файловую систему.
На практике сервера имен поддерживают кэши имен и адресов, которые недавно просматривались или передавались через них, поэтому новый запрос зачастую обрабатывается на основе локальных данных, а не пересылается куда-то далеко. Если мне нужно попасть на kernighan.com, то высока вероятность, что в последнее время больше никто не заходил на этот сайт, и локальный сервер имен может обратиться за IP-адресом к корневому серверу. Если вскоре я снова наберу это имя, то в кэше уже будет находиться нужный IP-адрес, и запрос обработается быстрее. Я проверил это на практике: мой первый запрос обрабатывался четверть секунды, второй через пару мгновений – более чем вдесятеро быстрее, и столько же – третий запрос несколько минут спустя.
Вы можете сами поставить опыты с DNS, применяя такие команды, как nslookup. Попробуйте в Unix выполнить команду:
nslookup a.root-servers.net
В принципе, мы можем представить себе, что есть лишь один корневой сервер – но тогда будет только одна точка отказа, а это плохо для таких критически важных систем. Поэтому существует тринадцать корневых серверов, разбросанных по всему миру, и примерно половина их находится в США. Большинство из них состоят из нескольких компьютеров, расположенных на большом расстоянии друг от друга. Все эти машины работают как одно целое, но применяют протокол, который направляет запросы ближайшему члену группы (то есть маршрутизирует). Поскольку в корневых серверах используются разные программные системы и неоднотипное оборудование, они менее уязвимы для ошибок и вирусов, чем любая монокультура[72]. Впрочем, иногда корневые серверы становятся мишенью скоординированных атак, и вполне возможно, что однажды при определенном стечении обстоятельств все они одновременно выйдут из строя.
9.2.4. Регистрация вашего собственного домена
Если нужное вам имя еще не занято, то оформить свой домен будет просто. ICANN аккредитовала сотни регистраторов по всему миру, так что вы можете обратиться в один из них, выбрать доменное имя, заплатить за него – и оно ваше (хотя права придется ежегодно продлевать). По названиям есть некоторые ограничения, но нет правил, запрещающих матерные слова (это легко проверить, поискав несколько из них) или переход на личности, из-за чего корпорации и общественные организации вынуждены защищать себя сами, превентивно покупая такие домены, как bigcorp-sucks.com[73]. Имена не должны содержать более 63 символов. Обычно это буквы, цифры и дефисы, хотя можно использовать знаки из Unicode. Если символы не относятся к ASCII, то стандартная кодировка, называемая Punycode, преобразует их обратно в подмножество букв, цифр и дефисов.
Для сайта вам понадобится хост[74], то есть компьютер, который хранит и обслуживает содержание, отображаемое вашим сайтом для посетителей. Также вам нужен сервер имен, чтобы отсылать IP-адрес хоста, когда кто-нибудь пробует найти IP-адрес вашего домена. Это все отдельная часть процесса, хотя регистраторы обычно предоставляют такую услугу сами или же помогают вам связаться с тем, кто может помочь.
Конкуренция сдерживает цены: так, регистрация в. сот стоит 10 или 20 долларов в качестве первого взноса, и за год берется абонентская плата в том же размере. Услуги хостинга стоят 5 или 10 долларов в месяц для обычного использования в небольших объемах, а просто «запарковать» домен со стандартной страницей вполне можно и даром. Если вы не собираетесь много всего делать на сайте или просто хотите недолго потестировать его, то некоторые услуги хостинга будут бесплатными или совсем недорогими.
Кому принадлежит доменное имя? Как разрешаются споры? Что я смогу предпринять, если кто-то еще зарегистрирует kernighan. com? Ответ на последний вопрос звучит элементарно: ничего, разве что предложу выкупить его. Что касается имен с коммерческой ценностью (например, mcdonalds.com или apple.com), то суды и ICANN со своей политикой урегулирования споров, как правило, принимают сторону более влиятельных игроков. Даже если ваша фамилия – Макдональд или Эппл, шансы отвоевать соответствующий домен у одной из этих компаний будут невелики. Или же, если вы займете имя первым, у вас возникнут проблемы с его использованием. (В 2003 году канадский старшеклассник Майк Роу создал сайт mikerowesoft. com для своего крошечного бизнеса по программированию. Это вызвало угрозу судебного иска со стороны… несколько более крупной корпорации с похожим по звучанию названием. В итоге дело уладили миром, и господин Роу выбрал другое доменное имя.)
9.3. Маршрутизация
Маршрутизация, то есть поиск пути от источника к месту назначения, – это главная проблема любой крупной сети. В каких-то из них применяются статичные таблицы маршрутизации, которые обеспечивают следующий шаг на пути к всевозможным местам назначения. Проблема с интернетом в том, что он слишком большой и динамичный для статических таблиц. Поэтому межсетевые шлюзы постоянно обновляют свою информацию по маршрутизации, обмениваясь данными с соседними шлюзами. Это гарантирует, что сведения о возможных и предпочитаемых путях всегда относительно актуальны.
Учитывая масштабы интернета, для управления информацией о маршрутах нужна иерархическая организация. На верхнем уровне несколько десятков тысяч автономных систем (АС) предоставляют такие сведения о сетях, которые они содержат. Как правило, АС соответствует крупному интернет-провайдеру. Внутри одной АС происходит локальный обмен маршрутной информацией, но во внешние системы она передает уже сводные данные.
Также существует своего рода физическая иерархия, хотя и не строгая. Человек выходит в интернет через поставщика услуг – компанию или организацию, – которая, в свою очередь, подключается к другим провайдерам. Существуют как крошечные, так и огромные поставщики ин-тернет-услуг (под контролем телефонных или кабельных корпораций, например). Одними из них управляют такие организации, как компании, университеты или правительственные агентства, а другие предлагают доступ к сервису на платной основе. Прежде всего это относится к телефонным и кабельным компаниям. Частные лица подключаются к своему провайдеру по кабелю (распространено как бытовая услуга) или телефону, а фирмы и школы предлагают Ethernet или беспроводные соединения.
Интернет-провайдеры соединяются между собой через шлюзы. Для обмена большим объемом трафика между основными операторами существуют так называемые IXP (Internet exchange Points[75]), где встречаются сетевые соединения многочисленных компаний и осуществляются физические подключения между сетями, поэтому данные из одной могут успешно передаваться в другую. При значительном трафике между такими сетями пропускаются терабиты информации в секунду. Один из самых крупных в мире провайдеров DE-CIX Frankfurt в настоящее время в среднем передает около 6 Тбит/с, а пиковые значения превышали 9 Тбит/с85. На рис. 9.2 показан график пересылки данных за 5 лет. Обратите внимание на стабильный рост трафика, а также на значительный скачок в начале 2020 года, когда кризис из-за COVID-19 вынудил многих людей работать удаленно.
Рис. 9.2. Трафик в DE-CIX Frankfurt IXP (любезно предоставлено DE-CIX)
Некоторые страны имеют сравнительно мало шлюзов для доступа в страну или из нее, и в таком случае правительство способно с их помощью фильтровать трафик, который оно считает нежелательным.
Вы можете изучить маршрутизацию с помощью программы traceroute на системах Unix (включая macOS) или tracert на Windows86. Также существуют веб-версии подобных средств. На рис. 9.3 показан путь из Принстона к компьютеру в Сиднейском университете в Австралии (с пропусками для краткости). В каждой строке прописаны имя, IP-адрес и время на передачу и подтверждение для следующего перехода на маршруте.
Рис. 9.3. Маршрут из Принстона, штат Нью-Джерси, в Сиднейский университет, Австралия
По времени на передачу и подтверждение понятно, как извилисто сигнал путешествует по США. Затем видны два больших перехода через Тихий океан до Австралии.
Кстати, чтобы развлечься, попробуйте выяснить местоположение разных шлюзов по загадочным аббревиатурам в их названиях. Соединение между странами легко может осуществляться через шлюзы другого государства, зачастую США. Возможно, для кого-то это неожиданно и даже неприятно – всё зависит от характера трафика и того, какие страны сообщаются между собой. На карте подводных кабелей на рис. 9.4 показано, где именно оптоволокно достигает берегов США, Европы и Азии.
На изображении не приведены кабели, проложенные по суше.
К сожалению, из соображений безопасности программа traceroute со временем стала менее информативной, поскольку все больше сайтов предпочитают не раскрывать сведения, необходимые для ее работы. Например, некоторые сайты не отображают имена или IP-адреса (они отмечены звездочками на рис. 9.3).
9.4. Протоколы TCP/IP
Протокол определяет правила, которые управляют взаимодействием двух сторон: нужно ли подавать руку для пожатия, как низко кланяться, кто заходит в дверь первым, по какой стороне дороги ехать и так далее. Большинство из тех, которым мы следуем в повседневной жизни, неофициальны, кроме передвижения по определенной стороне дороги: она определяется законом. А вот сетевые протоколы, напротив, заданы очень точно.
Для интернета разработано множество протоколов, два из которых фундаментальны. IP – это межсетевой, или интернет-протокол, который определяет, как форматируются и передаются отдельные пакеты. TCP, протокол управления передачей, определяет, как IP-пакеты можно объединять в потоки данных и направлять к службам. Вместе эта пара протоколов называется TCP/IP.
Шлюзы маршрутизируют IP-пакеты, хотя каждая физическая сеть имеет собственный формат для их передачи. Любому шлюзу нужно преобразовывать сетевые форматы в IP по мере поступления и отправки пакетов.
Выше уровня IP стоит TCP, обеспечивающий надежную коммуникацию. Поэтому пользователи (а на самом деле программисты) не должны думать о пакетах – только о потоках данных. Большинство служб, которые мы называем интернетом, используют TCP.
Рис. 9.4. Карта подводных кабелей на конец 2020 года (любезно предоставлена https://www.submarinecablemap.com/)
Всемирная паутина, почта, передача файлов и тому подобное работают по протоколам прикладного уровня. Они стоят над TCP, и большинство из них основываются на нем. Таким образом, существует несколько уровней протоколов, каждый из которых полагается на службы нижестоящего и предоставляет услуги вышестоящему. Это отличный пример многоярусности ПО, описанной в главе 6. Простая схема такого взаимодействия (рис. 9.5) чем-то похожа на многослойный свадебный торт.
UDP (User Datagram Protocol, протокол пользовательских датаграмм) – это еще один протокол того же уровня, что и TCP. Он намного проще TCP и применяется для обмена данными, при котором не требуется двусторонний поток, а только эффективная доставка пакетов с несколькими дополнительными функциями. Используется UDP в DNS, потоковом видео, IP-телефонии и некоторых онлайн-играх.
Рис. 9.5. Уровни протоколов
9.4.1. Интернет-протокол (IP)
IP – это ненадежная служба доставки несоединенных пакетов. «Несоединенные» означает, что каждый из IP-пакетов автономен и никак не связан с другими. IP не имеет состояния или памяти: протокол не должен ничего помнить о пакете после того, как перешлет его до следующего шлюза.
«Ненадежный» означает нечто большее, чем вы могли подумать. IP – это протокол «максимально возможного качества», который не гарантирует, насколько успешно будут доставлены пакеты. Если что-то пойдет не так, вам не повезло. Пакеты теряются или повреждаются, их доставляют не по порядку, пересылают так быстро, что их не успевают обработать, или так медленно, что они становятся бесполезными. Однако на практике IP очень надежен. Правда, когда пакет сбивается с пути или повреждается, то его не пытаются восстановить. Это как когда вы опускаете открытки в почтовый ящик в каком-нибудь сомнительном месте: скорее всего, их довезут получателю, но могут помять по дороге. Иногда они вообще не приходят, а порой доставка занимает больше времени, чем вы ожидали. (Кстати, у IP есть один вид сбоя, которого нет у открыток: IP-пакет дублируется, и к получателю прибывает больше одной копии.)
Максимальный размер IP-пакетов составляет около 65 Кб. Следовательно, длинное сообщение нужно разделить на менее крупные фрагменты, которые отправляются раздельно, а на дальнем конце собираются заново. Любой IP-пакет, как и пакет Ethernet, имеет определенный формат. На рис. 9.6 показана часть формата IPv4 (формат пакетов IPv6 аналогичен, но адреса источника и места назначения имеют длину 128 бит каждый).
Рис. 9.6. Формат пакета IPv4
Одна интересная часть пакета – время жизни, или TTL (Time to Live). Это однобайтовое поле, для которого источник пакета устанавливает первоначальное значение (обычно около 40), и затем оно уменьшается на единицу каждым шлюзом при прохождении через него. Если счетчик опускается ниже нуля, то данный пакет отбрасывается, а отправителю возвращается пакет с уведомлением об ошибке. При типовом путешествии по интернету встречается от 15 до 20 шлюзов, поэтому у пакета, который совершает 255 переходов, явно возникли проблемы (вероятно, он попал в бесконечное перенаправление). Наличие TTL не устраняет такие ошибки, но благодаря ему отдельные пакеты не могут перемещаться вечно.
Сам IP-протокол не дает никаких гарантий относительно того, как быстро придут данные. Будучи услугой «максимально возможного качества», он даже не обещает, что информация вообще поступит, не говоря уже о том, в какие сроки. Чтобы как-то ускорить процесс, в интернете широко применяют кэширование (мы уже видели это, когда обсуждали серверы имен). Веб-браузеры также кэшируют информацию, поэтому, если вы попробуете открыть страницу или изображение, которые недавно просматривали, то, возможно, программа извлечет данные из локального кэша, а не из сети. Основные интернет-серверы тоже используют кэширование, чтобы быстрее реагировать на вызовы. Такие фирмы, как Akamai[76], предоставляют другим компаниям (например, Yahoo) услуги распространения контента, что сводится к кэшированию контента ближе к получателям. Поисковые системы тоже поддерживают объемные кэши для страниц, которые они нашли во время сканирования интернета, но данную тему мы обсудим в главе 11.
9.4.2. Протокол управления передачей (TCP)
Протоколы более высокого уровня словно бы выплетают надежную связь из ненадежной подложки IP. Самый важный из них – TCP, или протокол управления передачей. Он обеспечивает для своих пользователей стабильный двусторонний поток: введите данные на одном конце, и они выйдут на другом, причем с незначительной задержкой и низкой вероятностью ошибок. Может показаться, что точки отправки и получения связаны прямым проводом.
Я не будут вдаваться в подробности работы TCP, потому что их слишком много. Но основной принцип прост: поток байтов разбивается на части и помещается в ТСР-пакеты, или сегменты. Любой сегмент TCP содержит не только реальные данные, но и «заголовок» с контрольной информацией, включая порядковый номер, чтобы получатель знал, какую часть потока представляет каждый пакет. Таким образом, потеря сегмента не пройдет незамеченной, и его отправят повторно. Помимо того, в сегмент включают сведения для обнаружения ошибок, поэтому, если он будет поврежден, это тоже почти наверняка удастся выявить. Каждый сегмент TCP передается в IP-пакете. На рис. 9.7 показано содержимое заголовка сегмента TCP, который будет отправлен внутри IP-пакета вместе с данными.
Рис. 9.7. Формат заголовка сегмента TCP
Для каждого сегмента от получателя должно прийти подтверждение (или положительное, или отрицательное). То есть для любого сегмента, который я вам отправил, вам нужно прислать подтверждение о получении. Если оно не прибудет ко мне после солидного промежутка времени, мне следует предположить, что сегмент потерян, и я вышлю его еще раз. Аналогично, если вы ожидаете конкретный сегмент, но не получили его, то вам нужно отправить мне отрицательное подтверждение («сегмент 27 не прибыл»). Тогда я сразу пойму, что его нужно отослать заново.
Конечно, если теряются сами подтверждения, ситуация становится еще сложнее. В TCP есть несколько таймеров, определяющих, как предположить, что произошел сбой. Если операция слишком затягивается, можно предпринять попытку восстановления. В конечном счете время ожидания истечет и соединение будет прервано. (Вы, вероятно, сталкивались с этим на вебсайтах, которые не отвечают на запрос.) Все это указывается в протоколе.
У TCP также есть методы для повышения эффективности этой работы. Например, отправитель вправе высылать новые пакеты, не дожидаясь подтверждений того, что доставлены предыдущие. Тогда получатель может отправить одно подтверждение для всей группы пакетов. Если трафик течет плавно, это снижает долю нагрузки, приходящуюся на подтверждения. Однако если интенсивность возрастает и пакеты начинают теряться, отправитель быстро снижает темп, а затем наращивает вновь, но уже постепенно.
Когда между двумя хост-машинами устанавливается TCP-соединение, оно создается не между компьютерами как таковыми, а между определенными портами на них. Каждый порт соответствует отдельному сеансу связи. Порт представлен двухбайтовым (16 бит) номером, то есть существует 65 536 возможных портов, и в принципе хост мог бы выполнять одновременно 65 536 отдельных сеансов связи TCP. Можно провести аналогию с компанией, у которой есть один телефонный номер, а у ее сотрудников – разные добавочные.
Около сотни «хорошо известных» портов зарезервированы для подключения к стандартным службам. Например, веб-серверы используют порт 80, а почтовые серверы – порт 25. Если браузер хочет получить доступ к www.yahoo.com, он установит TCP-соединение с портом 80 на стороне Yahoo, а почтовая программа задействует порт 25 для доступа к почтовому серверу Yahoo. Порты источника и назначения указываются в заголовке TCP, который сопровождает данные.
Есть еще много подробностей, но основные концепции не сложнее тех, что описаны выше. Изначально TCP и IP разработали в 1973-м Винтон Серф и Роберт Кан, удостоившиеся за это премии Тьюринга 2004 года. Хотя протоколы TCP/IP совершенствовались со временем, по существу они не изменились, пусть даже размеры сети и скорости передачи данных выросли на множество порядков. Первоначальная конфигурация оказалась на удивление хорошо продуманной, и сегодня TCP/IP отвечают за большую часть трафика в интернете.
9.5. Протоколы более высокого уровня
TCP обеспечивает надежный двусторонний поток, по которому передаются данные между двумя компьютерами. Службы интернета и приложения используют TCP как транспортный механизм, но у них есть и свои специфичные протоколы для конкретных задач. Например, HTTP (Hypertext Transfer Protocol[77]) – это особенно простой протокол, который применяется браузерами и серверами. Когда я кликаю на какую-нибудь ссылку, мой браузер открывает TCP/IP-соединение с портом 80 на сервере (скажем, amazon.com) и отправляет короткое сообщение, которое запрашивает конкретную страницу. На рис. 9.8 браузер – это клиентское приложение в левом верхнем углу. Сообщение проходит по цепочке протоколов, пересекает интернет (обычно с большим количеством шагов), а затем направляется к соответствующему серверному приложению на дальнем конце.
На стороне Amazon сервер подготавливает страницу, затем отсылает ее мне вместе с небольшим количеством дополнительных данных (возможно, информацией о ее кодировке). Обратный путь не обязательно должен совпадать с исходным. Мой браузер считывает этот ответ и отображает содержимое на основе полученных сведений.
9.5.1. Telnet и SSH: удаленный вход в систему
Учитывая, что интернет – носитель информации, как нам его задействовать? Давайте рассмотрим пару самых ранних приложений TCP/IP, которые применялись еще на заре интернета. Они датируются началом 1970-х, но их по-прежнему используют, отдавая должное их дизайну и полезности.
Рис. 9.8. Соединения TCP/IP и поток информации
Они относятся к программам командной строки и просты в применении, хотя предназначены больше для специалистов, чем для обычных пользователей.
Вы можете обратиться к Amazon, используя Telnet – службу TCP для установления сеанса удаленного входа в систему на другой машине. Обычно Telnet использует порт 23, но его можно нацелить и на другие. Напечатайте в окне командной строки следующее[78]:
$ telnet www.amazon.com 80
GET ⁄ HTTP/1. О
[введите здесь дополнительную пустую строку]
и в ответ придет более 225 000 символов, которые браузер применил бы для того, чтобы отобразить веб-страницу.
GET – это один из нескольких HTTP-запросов, «/» указывает серверу, что нужно выслать файл по умолчанию, a HTTP/1. О – имя и версия протокола. В следующей главе мы подробнее поговорим об HTTP и Всемирной паутине.
Протокол Telnet обеспечивает способ доступа к удаленному компьютеру так, как если бы вы обладали прямым подключением к нему. Telnet принимает нажатия клавиш от клиента и передает их на сервер так, словно вы печатаете там. Кроме того, он перехватывает выходные данные сервера и отправляет их обратно клиенту. В общем, с помощью Telnet и при наличии соответствующих разрешений за любым компьютером в интернете можно работать как за локальным.
В качестве еще одного примера рассмотрим, как использовать эту службу для поиска:
$ telnet www.google.com 80
GET /search?q=что_угодно
[введите здесь дополнительную пустую строку]
В результате мы получим ПО ООО байт выходных данных, в основном JavaScript и изображения. Но если внимательно присмотреться, среди них можно увидеть результаты поиска.
Telnet не обеспечивает никакой безопасности. Если удаленная система принимает логины без пароля, то она ничего не запрашивает. Если для подключения требуется пароль клиента, Telnet отправляет его в явном виде, открытом для любого, кто просматривает поток данных. В том числе из-за полного отсутствия безопасности Telnet в настоящее время применяется редко, за исключением особых обстоятельств, когда защита данных не так важна. Сейчас широко используется его потомок – SSH (Secure Shell, протокол безопасной оболочки), который зашифровывает весь трафик в обоих направлениях. Следовательно, обеспечивается безопасный обмен информацией. Протокол SSH задействует порт 22.
9.5.2. SMTP: простой протокол передачи почты
Второй протокол – SMTP (Simple Mail Transfer Protocol), или простой протокол передачи почты87.
Обычно мы отправляем и получаем почту с помощью браузера или отдельного приложения. Но, как часто бывает в случае интернета, под такой поверхностью скрываются еще несколько уровней, каждый из которых поддерживается программами и протоколами. Работу почты обеспечивают два основных вида последних. Так, SMTP используется для обмена письмами с другой системой. Он устанавливает TCP/IP-соединение с портом 25 на почтовом компьютере получателя и использует свои параметры для идентификации адресата и отправителя, для пересылки сообщения. SMTP основан на тексте – если хотите посмотреть, как он работает, запустите его через Telnet на порту 25. Правда, из-за ограничений безопасности вы можете столкнуться с проблемами, даже если задействуете его на своем компьютере88.
Рис. 9.9. Отправка почты с помощью SMTP[79]
На рис. 9.9 показан пример диалога (отредактированный для компактности) из реального сеанса работы с локальной системой, когда я отправлял себе почту как будто от другого имени (по сути, спамил). Мой ввод набран в таком формате.
Это абсурдное (во всяком случае, маловероятное) послание должным образом пришло мне на почту, как показано на рис. 9.10.
SMTP требует, чтобы почтовые сообщения состояли только из текста в формате ASCII, поэтому также применяется стандарт MIME (Multipurpose Internet Mail Extensions[80], фактически другой протокол). В нем описывается, как преобразовать в текст другие виды данных и как объединить несколько фрагментов в одно послание. Этот механизм используется для прикрепления почтовых вложений (фотографий, видео). Также он задействуется в HTTP.
Рис. 9.10. Письмо пришло в Gmail!
Хотя SMTP – сквозной протокол, TCP/IP-пакеты по пути от источника к месту назначения проходят через 15–20 шлюзов. Любой шлюз на маршруте вполне способен проверить пакеты и сделать копии для неторопливого просмотра. Копии содержимого может создавать и сам SMTP, а содержимое и заголовки отслеживаются почтовыми системами. Поэтому, чтобы сохранить конфиденциальность материалов, их нужно зашифровать в источнике.
Имейте в виду, что шифрование содержимого не скрывает личности отправителя и получателя. Анализ трафика показывает, кто с кем общается, а по таким метаданным зачастую удается определить не меньше, чем по содержимому. Мы поговорим об этом в главе 11.
SMTP только передает письмо от отправителя к получателю – к самому доступу к почте он не имеет никакого отношения. Прибыв на нужный компьютер, сообщение обычно ждет, когда его извлечет адресат. Как правило, здесь применяется уже протокол под названием IMAP (Internet Message Access Protocol[81]).
При использовании IMAP ваша почта хранится на сервере, и вы можете получить к ней доступ из нескольких мест. IMAP гарантирует, что ваш почтовый ящик всегда находится в согласованном состоянии, даже если одновременно выполняется несколько операций чтения и обновления (например, когда вы заходите туда с телефона и через браузер). Не нужно делать несколько копий сообщений или дублировать их для каждого компьютера.
Почта нередко обрабатывается «в облаке» такими системами, как Gmail или Outlook. На скрытом уровне они применяют SMTP для передачи данных, а сами выступают как IMAP для клиентского доступа. Про облачные вычисления я расскажу в главе 11.
9.5.3. Обмен файлами и одноранговые протоколы
В июне 1999 года Шон Фэннинг, первокурсник Северо-Восточного университета[82], выпустил программу Napster, которая чрезвычайно упростила людям обмен музыкой, сжатой в формате MP3. Фэннинг выбрал идеальный момент. Тогда повсеместно пользовались аудиодисками с поп-музыкой, но они дорого стоили. При этом персональным компьютерам уже хватало скорости, чтобы кодировать и декодировать MP3, а алгоритмы стали широко доступными. Как оказалось, и пропускная способность достаточно высока, чтобы сравнительно быстро передавать по сети песни в формате MP3, особенно в случае студентов с Ethernet в общежитиях. Фэннинг хорошо поработал над идеей и реализацией, поэтому Napster разошлась стремительно, как лесной пожар. В середине 1999 года появилась компания, предоставляющая эту услуги. Как утверждала сама фирма, на пике развития у нее насчитывалось 80 миллионов клиентов. Позже в том же году появились первые иски с заявлениями о крупномасштабной краже музыки, защищенной авторским правом, и решение суда вывело Napster из бизнеса к середине 2001-го. Компания, набравшая с нуля 80 миллионов потребителей, а всего через пару лет превратившаяся в ничто, стала яркой иллюстрацией к популярной в ту пору фразе «эпоха интернета».
Для использования Napster требовалось просто загрузить клиентскую программу и установить ее на своем компьютере. Затем клиент создавал локальную папку для файлов, предназначенных к обмену. После этого он авторизовывался на сервере Napster, загружал названия этих доступных композиций, а программа вносила их в центральный каталог имен файлов. Данный каталог постоянно обновлялся. Например, при подключении нового пользователя добавлялись названия его файлов, а если какой-нибудь клиент не отвечал на запрос, его композиции удалялись из списка.
Когда пользователь искал в центральном каталоге название песни или имя исполнителя, Napster показывала список других клиентов, которые находились в сети и могли поделиться этими файлами. Далее пользователь выбирал поставщика, и Napster организовывала им «встречу» (прямо как служба знакомств), предоставляя IP-адрес и номер порта. Тогда клиентская программа на компьютере пользователя могла напрямую контактировать с поставщиком и извлекать файл. Оба участника процесса только сообщали Napster о своем статусе, а в остальном центральный каталог оставался «непричастным», потому что ни на мгновение не содержал самой музыки.
Мы привыкли к модели «клиент – сервер», когда браузер (клиент) запрашивает что-то с веб-сайта (сервера). В Napster реализовывалась иная модель. Программа создавала центральный каталог, где перечислялась музыка, доступная для обмена, но сами файлы хранилась только на машинах пользователей. Во время «встречи» композиции переходили напрямую от одного клиента Napster к другому, а не через центральную систему. Следовательно, такую организацию назвали одноранговой (peer-to-peer, или P2P), то есть все участники находились в равном положении. Компания надеялись обойти вопрос авторских прав, поскольку сами файлы лежали только на компьютерах участников и даже не передавались через центральный сервер, но эта юридическая тонкость не убедила суд.
Протокол Napster использовал TCP/IP, то есть фактически действовал на том же уровне, что HTTP и SMTP. При всем уважении к труду Фэннинга (он отлично постарался), Napster – это простая система, опиравшаяся на уже созданную инфраструктуру интернета, TCP/IP, MP3 и инструменты разработки графического пользовательского интерфейса.
Большинство современных систем обмена файлами – неважно, легальные они или нет, – основываются на одноранговом протоколе BitTorrent, который ввел Брэм Коэн в 2001 году. Такой вариант особенно удобен в случае больших популярных записей вроде фильмов и телепрограмм, поскольку каждый участник, начавший закачивать что-либо с применением BitTorrent, должен и сам загружать для других людей нужные им фрагменты. Сами записи нужно искать в распределенных каталогах, а для идентификации трекера, который ведет учет того, кто отправляет и получает блоки (и какие), используется маленький «торрент-файл». Пользователи BitTorrent уязвимы для обнаружения, поскольку протокол требует, чтобы они не только скачивали, но и загружали. Следовательно, их легко поймать с поличным, когда они распространяют материалы, предположительно защищенные авторским правом.
У одноранговых сетей есть и другие применения, кроме обмена файлами сомнительной законности. Биткоин – цифровая валюта и платежная система, которую мы обсудим в главе 13, – также использует протокол P2P.
9.6. Авторское право в интернете
В 1950-х годах копировать книгу или аудиозапись было непрактично. Однако этот процесс неуклонно дешевел, и к 1990-м годам стало несложно изготавливать цифровые копии текстов или композиций. Кроме того, их получалось делать в большом количестве, а потом быстро и бесплатно отправлять другим людям по интернету.
Если брать индустрию развлечений, то отраслевые группы вроде RIAA[83] и МРАА[84] неустанно пытаются помешать распространению материалов, защищенных авторским правом. Они подавали иски и угрожали судебным разбирательством множеству предполагаемых нарушителей, а также активно лоббировали постановления, объявляющие действия таких субъектов незаконными. Скорее всего, пиратство никуда не денется, однако похоже, что компании способны значительно снизить его влияние, когда взимают разумную плату за гарантированное качество. И при этом они все равно получают прибыль. В качестве примера можно привести музыкальный магазин iTunes от Apple, а также потоковые сервисы Netflix и Spotify.
В США основной нормативной базой для таких вопросов служит DMCA (Digital Millennium Copyright Act[85]), принятый в 1998 году. Он объявляет нелегальными методы обхода защиты авторских прав на цифровых носителях, включая распространение таких материалов в интернете. В других странах приняты аналогичные законы. DMCA – это юридический механизм, с помощью которого индустрия развлечений преследует нарушителей авторских прав.
Данный закон создает «безопасную гавань» для поставщиков интернет-услуг. Например, когда обладатель авторских прав уведомит провайдера о том, что его пользователь распространяет защищенные материалы, сам поставщик не понесет ответственности, если потребует от нарушителя удалить соответствующие файлы. Такая безопасная гавань важна для учебных заведений, поскольку они выполняют функцию интернет-провайдеров для своих студентов и преподавателей. Так, в каждом университете есть сотрудник, который разбирается с обвинениями в нарушениях. На рис. 9.11 показано уведомление DMCA для Принстона.
Чтобы сообщить о нарушениях авторских прав, касающихся информационных технологических ресурсов или услуг Принстонского университета, пожалуйста, свяжитесь с […], сотрудником, назначенным в соответствии с «Законом об авторском праве в цифровую эпоху» (П. З.[86] № 105–304) для обработки уведомлений о предполагаемых нарушениях авторских прав на сайтах Принстонского университета.
Рис. 9.11. Информация об уведомлении согласно закону об авторских правах с веб-страницы
Этот закон также применяется (обеими сторонами) и в судебных спорах между оппонентами с более равными возможностями. В 2007 году Viacom, крупная кино- и телекомпания, потребовала у Google компенсацию размером в 1 миллиард долларов за то, что кто-то выложил на его сервисе YouTube материалы, защищенные авторским правом. Истец заявил, что DMCA создавался не для прикрытия подобных массовых краж интеллектуальной собственности. Защита Google отчасти основывалась на том, что корпорация выполняла все уведомления об удалении, предъявленные должным образом, но Viacom их не представляла. В июне 2010 года решение вынесли в пользу Google, последовала апелляция, вердикт частично отменили, затем другой судья опять оправдал Google – снова на том основании, что YouTube должным образом соблюдал процедуры DMCA. Стороны договорились в 2014 году, но, к сожалению, не обнародовали условия соглашения.
В 2004 году Google начал проект по сканированию большого количества книг, хранящихся в основном в научно-технических библиотеках. В 2005 году на корпорацию подала в суд Гильдия авторов, утверждавшая, что Google извлекает выгоду, нарушая их права. Дело тянулось очень долго, но в решении, вынесенном в 2013 году, говорилось, что Google невиновен, поскольку сохраняет книги, которые иначе могли бы быть утеряны, и делает их доступными в цифровом виде для ученых, а впоследствии это даже способно принести доход писателям и издателям. Апелляционный суд подтвердил это решение в конце 2015 года, частично основываясь на том факте, что Google выкладывал в интернет только отрывки произведений. Гильдия авторов обратилась в Верховный суд, который в 2016 году отказался рассматривать дело, тем самым фактически прекратив тяжбу.
В данном случае тоже заметно, что обе стороны приводили разумные аргументы. Как исследователь, я бы хотел иметь возможность просматривать книги, которые иначе никак бы не увидел (или даже не узнал бы о них), но, как автор, я предпочитаю, чтобы люди легально приобретали экземпляры моих книг, а не скачивали пиратские копии.
Подавать жалобы в соответствии с законом об авторских правах легко. Когда я отправил в Scribd[87] уведомление о нелегально загруженном тексте первого издания этой книги, ее убрали в течение 24 часов. К сожалению, основную часть пиратских копий большинства книг удалить практически невозможно.
Закон об авторских правах иногда используется в конкурентной борьбе, что, надо полагать, не входило в его первоначальные цели. Например, Philips производит «умные» лампочки с сетевым подключением, что позволяет контроллерам регулировать их яркость и цвет. В конце 2015 года компания объявила, что модифицирует прошивку таким образом, чтобы с контроллерами ее торговой марки получалось использовать только ее же источники света. Закон об авторских правах не позволил бы никому иному провести инженерный анализ ПО и затем выпустить патчи для лампочек от других производителей. Начались довольно шумные возражения, и Philips отказался от своей идеи, но другие компании по-прежнему опираются на DMCA для ограничения конкуренции (например, в области сменных картриджей для принтеров и кофемашин89).
9.7. Интернет вещей
Смартфоны – это просто компьютеры, способные использовать стандартную телефонную систему. Также все современные мобильники могут подключаться к интернету – либо через оператора беспроводной связи, либо через Wi-Fi, если есть возможность. Такая доступность стирает различия между телефонной сетью и интернетом, и похоже, что в итоге они совсем исчезнут.
Те же факторы, которые сделали мобильные телефоны таким повсеместным атрибутом нашей реальности, сегодня работают и на другие цифровые устройства. Как я уже говорил, во многие гаджеты и аппараты встроены мощные процессоры, память, часто беспроводное сетевое соединение. Естественно, возникает желание подключить все такие устройства к интернету, к тому же это просто, ведь все необходимые механизмы уже есть, а дополнительных затрат почти не будет. Наши камеры уже загружают фотографии через Wi-Fi или Bluetooth. Машины скачивают развлекательные программы одновременно с тем, как выгружают свои координаты и телеметрию двигателя. Термостаты измеряют условия окружающей среды, контролируют ее и отчитываются хозяину, находящемуся вне дома. Видеомониторы наблюдают за детьми, нянями и теми, кто звонит нам в дверь. У нас есть системы с речевым ответом вроде Alexa[88] и упомянутые выше сетевые лампочки. И все эти технологии основаны на подключении к интернету. Данную концепцию сейчас модно называть интернетом вещей, или IoT (Internet of Things).
Во многих отношениях это отличная идея, и несомненно, что в будущем мы увидим еще немало такого. Но в ней есть и большой недостаток. Эти специализированные устройства более проблемны, чем их аналоги общего назначения. Вполне возможны взломы, незаконные проникновения, урон или ущерб и прочие неприятности. Они становятся еще более вероятными из-за того, что внимание к безопасности и конфиденциальности в интернете вещей значительно отстает от поистине современного уровня защиты персональных компьютеров и телефонов. В частности, удивительное количество устройств «звонят домой», то есть отправляют информацию на серверы в стране, где их произвели90.
Вот один случайный пример из богатой подборки: в январе 2016 года один веб-сайт позволил своим пользователям искать веб-камеры, которые передают видео вообще без какой-либо защиты. Сайт предлагает изображения «плантаций марихуаны, служебных помещений в банках, детских комнат, кухонь, гостиных, гаражей, палисадников, задних дворов, лыжных трасс, плавательных бассейнов, колледжей и школ, лабораторий и камер над кассовыми аппаратами в магазинах». Естественно, так люди могут не только утолить жажду к подглядыванию, но и устроить нечто куда более скверное91.
Некоторые детские игрушки подключены к интернету, и это создает другой набор потенциальных опасностей. Одно исследование показало, что в нескольких таких предметах содержались аналитический код, пригодный для отслеживания координат детей, и ненадежные механизмы, позволяющие использовать игрушку как средство для других атак. (Среди предметов упоминалась бутылка с водой, подключенная к интернету – очевидно, для контроля того, как ребенок восполняет потери жидкости.) Потенциальное отслеживание нарушает и СОРРА[89], и заявленную продавцами игрушек политику конфиденциальности92.
Потребительские продукты – в частности, упомянутые выше веб-камеры, – зачастую уязвимы, потому что производители не обеспечили должной безопасности. Возможно, кто-то посчитал, что возиться с ней слишком дорого или она окажется слишком сложной для покупателя. Наконец, защиту могли просто плохо реализовать. Например, в конце 2019 года хакер опубликовал IP-адреса и пароли Telnet для полумиллиона устройств интернета вещей. Он нашел их, рассылая запросы на подключение к порту 22, а затем попробовал войти, указывая учетные записи по умолчанию и пароли вроде admin и guest, и у него получилось93.
Инфраструктурные системы для электроснабжения, связи, транспорта и многих других вещей раньше подсоединяли к интернету, не уделяя особого внимания их безопасности. Так, в декабре 2015 года сообщалось, что ветровые турбины определенного производителя имеют административный интерфейс с подключением к интернету, который можно атаковать тривиальными способами (просто подправить URL), чтобы отключить выработку энергии94.
9.8. Краткие выводы
В основе интернета лежит всего несколько базовых принципов, и совершенно поразительно, сколь многого можно добиться с помощью такого небольшого количества механизмов (пусть и чрезвычайно глубоко проработанных).
Интернет – это сеть с коммутацией пакетов. Информацию по нему передают отдельными стандартизированными пакетами, которые динамически маршрутизируются через обширную и меняющуюся совокупность сетей. Эта модель отличается от телефонной сети с коммутацией каналов, где для каждого соединения используется выделенный канал (концептуально – частная линия, проложенная между двумя собеседниками).
В интернете каждому подключенному в данный момент хосту присваивается уникальный IP-адрес, причем хостам в одной сети назначается общий префикс IP-адреса. Мобильным хостам, таким как ноутбуки и телефоны, обычно задаются разные IP-адреса при каждом подключении. Кроме того, адрес может меняться при перемещении хоста. Существует система доменных имен (DNS) – большая распределенная база данных, которая преобразует имена в IP-адреса и наоборот.
Сети соединены шлюзами – специальными компьютерами, которые направляют пакеты между сетями, пока те продвигаются к месту назначения. Шлюзы обмениваются нужной информацией через протоколы маршрутизации и поэтому всегда знают, как переслать пакет дальше, чтобы приблизить его к цели, хотя топология сети меняется, а соединения появляются и пропадают.
Интернет живет и дышит протоколами и стандартами. IP – это типовой механизм, всеобщий язык для обмена информацией. Хотя формируются IP-пакеты конкретными аппаратными технологиями, такими как Ethernet и беспроводные системы, детали того, как работает та или иная единица оборудования (и вовлечена ли она в процесс вообще), невидимы на уровне IP. Далее, TCP использует IP для создания надежного потока, подключенного к определенному порту на хосте. Протоколы более высокого уровня используют TCP/IP для создания служб.
Все протоколы делят единую систему на ярусы. Каждый из них пользуется службой, которую предоставляет слой, лежащий ниже, а сам, в свою очередь, обеспечивает функционирование служб для уровня, находящегося сразу над ним. Ни один ярус не пытается выполнить всю работу сам. По сути, интернет держится на таком наслоении протоколов: оно позволяет организовать и контролировать сложность, одновременно скрывая ненужные детали реализации. Каждый уровень делает ровно то, что он умеет: аппаратное обеспечение пересылает байты с одного компьютера в сети на другой, IP переносит отдельные пакеты через интернет, TCP синтезирует из IP надежный поток, а прикладные протоколы отправляют по нему данные туда и обратно. Кстати, программные интерфейсы, представленные на любом слое, – отличные примеры API, о которых мы говорили в главе 5.
У этих протоколов есть общая черта: они перемещают информацию между компьютерными программами, используя интернет как «безмозглую» (или «немую») сеть, которая эффективно копирует байты с одного компьютера на другой, но не пробует их интерпретировать или обработать. Для интернета важно такое свойство, ведь «немой» он в том смысле, что просто молча передает данные. Менее уничижительно эта характеристика обозначается как принцип «от и до». Интеллектуальная обработка ведется в начальных и конечных точках – в программах, которые отправляют и получают данные. В телефонии дела обстояли противоположным образом: вся обработка производилась в сети, а конечные точки (например, старомодные телефоны) были действительно «безмозглыми» – они обеспечивали разве что подключение к сети и ретрансляцию голоса.
Модель «безмозглой сети» оказалась крайне продуктивной. Любой человек, у которого возникнет хорошая идея, может сам создать «умную» конечную точку, а интернет использовать только для переноса байтов. Для сравнения: не стоило бы ждать, что телефонная или кабельная компания внедрит или станет поддерживать его блестящий замысел. Как несложно догадаться, эти операторы желали бы иметь более обширный контроль, особенно в сфере мобильной связи, где большинство инноваций приходят извне. Смартфоны вроде iPhone и Android – это компьютеры, которые в основном общаются по телефонной сети, а не через интернет. Компаниям-операторам хотелось бы зарабатывать на услугах телефонии, но в основном они получают доход только от передачи данных. На заре мобильников за пересылку информации брали фиксированную ежемесячную платау, но, например, в США это давно изменилось, и теперь деньги взимаются за фактическое использование. В случае объемных услуг, таких как загрузка фильмов, вполне обоснованно повышать цены и вводить лимит при откровенной недобросовестности клиента, но, если речь идет об отправке текста, подобные меры сложнее обосновать. Это почти ничего не стоит для оператора, ведь загрузка сети минимальна.
Наконец, обратите внимание, как первые протоколы и программы доверяли своим пользователям. Telnet отправляет пароли в открытом виде. Долгое время SMTP ретранслировал почту от кого угодно к кому угодно, никак не ограничивая отправителя или получателя. Этот сервис «открытой ретрансляции» стал благодатной почвой для спамеров: если вам не нужен прямой ответ, можно дать неверный исходный адрес, чтобы с легкостью совершать мошенничество и атаки типа «отказ в обслуживании» (DDoS). Ранние интернет-протоколы и программы, созданные на их основе, разрабатывались для честного и благонамеренного сообщества, основанного на сотрудничестве и взаимном доверии. Совершенно ничего похожего на современный интернет, где мы играем в догонялки в области информационной безопасности и аутентификации.
Обеспечить конфиденциальность и безопасность в интернете – непростая задача, и мы еще поговорим о ней в последующих главах. Она похожа на гонку вооружений между нападающими и защитниками, причем первые часто выходят победителями. Данные проходят через нерегулируемые и разнообразные носители и сайты общего пользования, разбросанные по всему миру. Сведения в любой момент могут записать, изучить и заблокировать в интересах правительства, бизнеса и преступников. Управлять доступом и защищать информацию «по дороге» сложно. Многие сетевые технологии используют широковещательную рассылку, которая уязвима для прослушивания. Если для атаки на проводной Ethernet и оптоволоконную сеть необходимо найти кабель и физически подключиться к нему, то в случае беспроводной сети лазутчику не нужен физический доступ – достаточно находиться рядом.
Если смотреть более широко, интернет в целом из-за своей структуры и открытости уязвим для правительственного контроля с помощью брандмауэров на уровне страны, которые блокируют или ограничивают потоки информации, как входящий, так и исходящий. Растет давление также на управление интернетом, и есть опасность, что требования бюрократического надзора пересилят технические соображения. Чем больше контроля, тем выше риск того, что всеохватная сеть станет раздробленной – и, следовательно, гораздо менее ценной.