Теоретический минимум по Computer Science. Сети, криптография и data science
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Теоретический минимум по Computer Science. Сети, криптография и data science

 

Владстон Феррейра Фило, Мото Пиктет
Теоретический минимум по Computer Science. Сети, криптография и data science
2022

Перевод Черников С., Чикин Р.

 

Владстон Феррейра Фило, Мото Пиктет

Теоретический минимум по Computer Science. Сети, криптография и data science. — СПб.: Питер, 2022.

 

ISBN 978-5-4461-2945-4

© ООО Издательство "Питер", 2022

 

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

 

Нашим друзьям Кристофу и Матеусу — один из них поспорил, что мы закончим эту книгу к концу года.

Computer science имеет много общего с физикой. Обе науки о том, как мир устроен на довольно фундаментальном уровне.

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

Линус Торвальдс, из объяснения, откуда пошла его любовь к компьютерам

Предисловие

Мне никогда не нравился термин computer science‚ и главная причина состоит в том, что ничего подобного не существует. Computer science — это сборная солянка слабо связанных между собой областей, по воле случая оказавшихся рядом, прямо как Югославия.

Пол Грэм

Большинство технологических прорывов нашей эпохи происходят в новом цифровом мире, создаваемом программистами. Ученые-компьютерщики объединяют различные области исследований и расширяют возможности этого нового мира. В книге мы рассмотрим основы некоторых из этих областей, включая сетевые технологии, криптографию и науку о данных.

Начнем с истории о том, как можно связать два компьютера для обмена информацией, а потом обсудим все, что происходило до эпохи расцвета

 

Рис. П.1. «Данные — это новая нефть», Амит Дангле и Ивано Нардаччионе

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

Надеемся, что через эти истории вы познакомитесь с важными концепциями, которые принесут пользу как программистам, так и техническим энтузиастам. Мы хотели бы рассказать все, что нужно знать новичкам, чтобы быстрее освоить работу в Сети, разобраться в безопасности и науке о данных, без излишней академической строгости‚ которая иногда делает эти темы попросту невыносимыми.

Эта книга появилась на свет благодаря всем тем‚ кто поддерживал предыдущую — Computer Science Distilled1. Мы написали свою первую книгу, чтобы разъяснить фундаментальные принципы computer science. Многие читатели с таким энтузиазмом просили еще, что мы вернулись к работе. Так что теперь изучим новые миры, которые computer science позволила создать.

Так для кого эта книга

Если вы начинающий программист, эта книга для вас. Опыта программирования не требуется, здесь объясняются идеи и механизмы: мы хотим, чтобы вы узнали, как работают всякие классные штуки. Если вы хотите понять, как устроен интернет, как хакеры атакуют компьютерные системы или почему данные — это золото XXI века, смело читайте дальше. А тем, кто уже изучал computer science, эта книга позволит закрепить знания и опыт.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Благодарности

Мы очень благодарны всем за поддержку. Хотели бы поблагодарить Абнера Марчиано, Андре Ламберта, Кайо Магно, Карлотту Фабрис, Дамиана Хирша, Даниэля Стори, Эдуардо Барбозу, Габриэля Пикте, Гильерме Маттара, Жаклин Уилсон, Леонардо Конегундеса, Ллойда Кларка, Майкла Уллмана, Рафаэля Алмейду, Рафаэля Виотти и Руана Бидарта. Наконец, спасибо Клэр Мартин, нашему корректору, и Педро Нетто, иллюстратору, за то, что они помогли сделать книгу лучше.

 

Да создадите вы многие миры, Влад и Мото

1Фило В.Ф. Теоретический минимум по Computer Science. Все, что нужно программисту и разработчику. — СПб.: Питер, 2020.

Эта книга появилась на свет благодаря всем тем‚ кто поддерживал предыдущую — Computer Science Distilled1. Мы написали свою первую книгу, чтобы разъяснить фундаментальные принципы computer science. Многие читатели с таким энтузиазмом просили еще, что мы вернулись к работе. Так что теперь изучим новые миры, которые computer science позволила создать.

Фило В.Ф. Теоретический минимум по Computer Science. Все, что нужно программисту и разработчику. — СПб.: Питер, 2020.

Глава 1. Связи

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

Винт Серф2

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

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

соединять компьютеры в сеть;

объединять сети, используя интернет-протокол;

  

находить получателя по его интернет-адресу;

находить маршрут к нему через интернет;

передавать данные между удаленными приложениями.

До появления интернета связь между двумя сторонами требовала прямого физического подключения. В 1950-х годах у каждого телефона был провод, ведущий прямо к центральной станции. Чтобы звонок прошел, оператору нужно было физически соединить провода двух телефонов. Для междугородных звонков между удаленными станциями прокладывались провода и нескольким операторам в разных местах приходилось физически формировать цепочку проводов, соединяющую два телефона.

Всему этому интернет положил конец. Теперь мы не формируем физические соединения из проводов‚ связываясь напрямую. Информация передается шаг за шагом по цепочке связанных устройств, пока не достигнет места назначения. Это устраняет необходимость в операторах связи и централизованной координации. Провода больше не ограничены обслуживанием единственного соединения — множество одновременных соединений могут использовать один и тот же провод. Это делает глобальную связь мгновенной, дешевой и доступной.

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

1.1. Канальный уровень

Прямое соединение между двумя компьютерами достигается посредством среды передачи: физического канала, по которому проходят сигналы. Это может быть медный провод, по которому проходит электрический ток, оптоволоконный кабель, направляющий свет, или воздух, переносящий радиоволны. У каждого подключенного компьютера имеется сетевой интерфейс позволяющий отправлять и получать сигналы в среде передачи. Например, в мобильных телефонах есть радиочип и антенна для обработки радиосигналов, распространяющихся по воздуху (рис. 1.1).

 

Рис. 1.1. Соединение устанавливается между двумя сетевыми интерфейсами, если они совместно используют среду передачи и согласованные правила связи

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

Когда среда соединяет два компьютера исключительно, мы говорим, что они поддерживают соединение «точка — точка», а их канальный уровень основан на самом базовом наборе правил: Point-to-Point-Protocol (PPP). Он просто гарантирует, что два компьютера могут идентифицировать друг друга и без потерь обмениваться данными.

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

Общие связи

Один из способов связать компьютеры в офисе — подключить каждый из них проводом к сетевому концентратору, или хабу. Концентратор физически соединяет все идущие к нему провода, поэтому сигнал, отправленный одним компьютером, будет обнаружен всеми остальными! Это происходит и с вашим домашним Wi-Fi, поскольку одна и та же радиочастота используется всеми подключенными устройствами (рис. 1.2). Связь может стать запутанной, если все они начнут использовать среду одновременно.

 

Рис. 1.2. Сообщение, отправленное по общей связи, получат все

Канальный уровень содержит набор правил, определяющих то, как компьютеры должны совместно использовать свои средства связи, и назван «управление доступом к среде» (Medium Access Control‚ MAC). Эти правила решают две основные проблемы.

КОЛЛИЗИИ Если два компьютера одновременно отправляют сигнал через одну и ту же среду, возникающие в результате помехи искажают обе передачи. Такие ситуации называются коллизиями. Аналогичная проблема возникает, когда группа людей одновременно разговаривает друг с другом, так что невозможно понять‚ что именно говорит каждый (рис. 1.3, 1.4).

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

У этих методов есть некоторые ограничения. Если будет делаться слишком много попыток передачи через среду, коллизии будут происходить безостановочно. Мы говорим, что соединение нарушено (saturated), когда чрезмерное количество коллизий нарушает связь. У вас было такое‚ что на многолюдном мероприятии ваш телефон вдруг переставал отправлять сообщения или дозваниваться? Такое происходит, когда слишком много телефонов пытаются установить связь одновременно и сотовая связь становится перегруженной.

 

Рис. 1.3. Коллизия между Адой и Эндрю

 

Рис. 1.4. Ада и Эндрю отправляют сигнал повторно через случайное время

ФИЗИЧЕСКИЙ АДРЕС У Ады и Чарльза имеется прямая связь между их компьютерами. Ада хочет поговорить с Чарльзом, поэтому передает сигнал со своим сообщением через среду. Тем не менее среда является общей, поэтому все, кто подключен с ней, получают сообщение (рис. 1.5). Как другие компьютеры узнают, что принятый сигнал предназначен не им?

 

Рис. 1.5. Сетевой интерфейс Эндрю отклоняет сообщение

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

Это работает только в том случае, если физические адреса уникальны: если два компьютера используют my_netinterface, мы оказываемся в исходной ситуации. По этой причине практически все сетевые интерфейсы следуют схеме именования, определенной в правилах управления доступом к среде (MAC). Эти стандартные физические адреса называются MAC-адресами.

MAC-адресация

Компьютеры, смартфоны, смарт-часы и умные телевизоры могут иметь сетевые интерфейсы Wi-Fi, Bluetooth и Ethernet. Каждый сетевой интерфейс имеет собственный уникальный MAC-адрес, присвоенный оборудованию на этапе производства. Вам не стоит беспокоиться о присвоении вашему компьютеру MAC-адреса: вы всегда можете использовать тот, который был в комплекте с его сетевым интерфейсом.

Поскольку MAC-адреса — это просто большие случайные числа, производители сетевых интерфейсов по всему миру должны согласовывать свои действия, дабы избежать случайного присвоения одного и того же адреса двум разным устройствам. В этом они полагаются на Институт инженеров по электротехнике и электронике (Institute of Electrical and Electronics Engineers‚ IEEE), который назначает каждому из них свой диапазон MAC-адресов.

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

60:8B:0E:C0:62:DE

Здесь 608B0E — это номер производителя. Этот конкретный номер IEEE присвоил компании Apple, поэтому такой MAC-адрес должен принадлежать устройству Apple4. MAC-адрес устройства часто пишется на этикетке, приклеенной к упаковке, или на самом устройстве, рядом с серийным номером (рис. 1.6).

Для передачи на все компьютеры в среде зарезервирован специальный адрес. Он называется широковещательным адресом и выглядит как FF:FF:FF:FF:FF. Его используют при попытке подключиться к неизвестному устройству. Например, когда Wi-Fi вашего смартфона не отключен, он постоянно транслирует на FF:FF:FF:FF:FF в поисках точки доступа. Обнаруживаемые точки доступа возвращают в ответ свой собственный MAC-адрес, чтобы вы могли установить с ними связь.

Подобные широковещательные сообщения с целью обнаружения, как и все другие передачи, содержат MAC-адрес отправителя. Поэтому прогулку со смартфоном можно сравнить с прогулкой с громкоговорителем, из которого постоянно доносится ваше имя, только с помощью радиоволн вместо звука и MAC-адреса вместо имени. В 2013 году Эдвард Сноуден сообщил, что АНБ5 отслеживали передвижения людей, прослушивая передачи Wi-Fi в больших городах и сохраняя записи о том, где был обнаружен каждый MAC-адрес.

 

Рис. 1.6. Каждый MAC-адрес уникален

Вы также можете перевести свой собственный сетевой интерфейс в неизбирательный режим, и он начнет принимать все передачи независимо от их предполагаемого получателя. Это позволяет обнаруживать скрытые сети Wi-Fi, составлять перечень MAC-адресов вокруг вас, а иногда даже читать содержимое сообщений других людей. Поэтому интернет-серфинг через незащищенную сеть Wi-Fi может быть небезопасным: связь транслируется всем, кто находится в пределах досягаемости. Вот почему для канального уровня Wi-Fi так важно шифрование6.

Будьте осторожны: сетевой интерфейс можно настроить так, чтобы передача начиналась как с MAC-адреса получателя, так и с адреса отправителя. Ничто не мешает злоумышленнику выдавать себя за вас, используя ваш физический адрес в своих передачах. Такой тип атаки известен как подмена MAC (MAC-спуфинг). Когда канальный уровень только ­изобрели, о безопасности еще не нужно было заботиться. Протоколы постоянно развиваются, делаясь более безопасными‚ что нейтрализует такие атаки, но этому процессу не видно конца.

Кадры

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

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

 

Рис. 1.7. Кадр Ethernet. Как только он передается по медному проводу, он превращается в серию электрических сигналов, которые кодируют число. Протокол Ethernet указывает, как интерпретировать это число. Например, первые 12 шестнадцатеричных цифр кодируют MAC-адрес назначения

Каждая независимая передача называется кадром. Стандартные протоколы Wi-Fi ограничивают размер кадра 2346 байтами. Тридцать четыре байта необходимы для MAC-адресов и кодов обнаружения ошибок. Таким образом, кадр Wi-Fi в итоге может нести до 2312 байт данных, называемых полезной информацией7. В проводных сетях максимальный размер кадра обычно составляет 1526 байт, где полезной информации — 1500 байт.

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

FCS Последняя часть кадра, FCS (Frame Check Sequence‚ последовательность проверки кадра), гарантирует, что информация была передана точно. FCS не добавляет новую информацию к передаче: это просто результат вычисления с использованием содержимого всех остальных полей. Изменение любого содержимого до FCS должно приводить к изменению самого FCS.

Получив кадр, компьютер вычисляет ожидаемый FCS из полученной информации и сравнивает его с полученным FCS. Если они не совпадают, кадр отбрасывается. Если же совпадают, то мы понимаем, что сообщение не было искажено‚ а принятая полезная информация не содержит ошибок.

ТИП Кадр, показанный на рис. 1.7, содержит еще одно поле, о котором мы пока не говорили: тип полезной информации. Оно сообщает получателю, каким правилам следовать для интерпретации данных в кадре. В следующем разделе мы рассмотрим наиболее распространенный набор таких правил.

1.2. Межсетевой уровень

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

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

ЛОКАЛЬНЫЕ СЕТИ Мы можем попросить маршрутизатор, с которым мы связаны, переслать сообщение на компьютер, с которым мы не связаны. Предположим, у вас дома есть проводная сеть, соединяющая маршрутизатор и настольный компьютер. Предположим, маршрутизатор также напрямую подключен к смартфону в другой‚ беспроводной сети.

Несмотря на то что настольный компьютер и смартфон напрямую не подключены к одной и той же сети, они могут отправлять сообщения друг другу, используя маршрутизатор в качестве ретранслятора. Компьютеры из разных сетей в непосредственной близости, способные общаться друг с другом через маршрутизаторы, образуют большую сеть, называемую локальной (Local Area Network‚ LAN).

В доме или небольшом офисе одного маршрутизатора будет достаточно, чтобы связать все компьютерные сети на данной территории. При сборке локальной сети, охватывающей большую организацию, такую как университет или больница, может потребоваться множество маршрутизаторов для соединения всех компьютерных сетей в единую систему (рис. 1.8).

 

Рис. 1.8. В этой небольшой локальной сети Ада и Эндрю могут отправлять сообщения друг другу через свой маршрутизатор «Чарльз»

ГЛОБАЛЬНЫЕ СЕТИ Но зачем останавливаться на достигнутом? Если ваш маршрутизатор подключен к маршрутизатору за пределами вашего дома, который, в свою очередь, связан с маршрутизатором в университете, вы можете запросить пересылку вашего сообщения на компьютеры в локальной сети университета. Когда удаленные локальные сети соединяются друг с другом, они формируют глобальную сеть (Wide Area Network‚ WAN) (рис. 1.9).

 

Рис. 1.9. Чарльз подключен к удаленному маршрутизатору Мари, и они оба пересылают сообщения по этой глобальной сети

Глобальная сеть может расти по мере того, как к ней подключается все больше локальных сетей. Различные глобальные сети также могут быть подключены друг к другу, формируя сеть еще большего размера. Самая большая глобальная сеть в мире — это собрание тысяч взаимосвязанных сетей, которое мы называем интернетом. Это сеть, которую мы используем каждый день для отправки электронных писем и просмотра веб-страниц. В 2020 году в нее входило более миллиарда компьютеров. Узнаем, каким образом все они связаны.

Межсетевое взаимодействие

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

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

Маршрутизация

Любой компьютер, подключенный к маршрутизатору в интернете, может запросить пересылку его сообщений другим маршрутизаторам (рис. 1.10). Так сообщения могут передаваться на большие расстояния. Например, во многих прибрежных городах есть система подводных кабелей, соединяющих маршрутизаторы.

Прямого соединения между маршрутизаторами в Майами и Буэнос-Айресе нет. Однако Майами связан с Пуэрто-Рико, который связан с Форталезой, которая связана с Рио-де-Жанейро, который связан с Буэнос-Айресом. Майами и Буэнос-Айрес могут обмениваться сообщениями через эти кабели, если маршрутизаторы по пути пересылают сообщения туда и обратно. Сегодня подводные кабели соединяют сотни прибрежных городских маршрутизаторов по всему миру (рис. 1.11).

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

 

Рис. 1.10. Система SAm-1 связывает маршрутизаторы в 16 городах из 11 разных стран, используя более 15 тысяч миль подводных кабелей

 

Рис. 1.11. В настоящее время используются подводные оптоволоконные кабели

Адресация местоположения

На канальном уровне компьютеры идентифицируются по физическому адресу. Физические адреса однозначно идентифицируют компьютеры, но не дают никаких подсказок о том‚ где именно компьютер подключен и как до него добраться. Если компьютер перевезти на другой конец света, он сохранит свой физический адрес!

 

Рис. 1.12. Ада хочет отправить пакет Луи, поэтому просит свой маршрутизатор (у Чарльза) переслать его. Она пишет на пакете иерархический адрес Луи. В итоге Чарльз знает, что должен отправить пакет во Францию, поэтому отправляет его французскому маршрутизатору, с которым он связан: Мари

Предположим, вы отправили Луи по почте пакет‚ где вместо его адреса только его фотография. Этот пакет имеет определенное место назначения; однако международная почтовая служба не имеет возможности узнать, куда именно следует отправить пакет, чтобы доставить его Луи.

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

Чтобы такой механизм работал в глобальном масштабе, все задействованные компьютеры должны следовать одному и тому же набору правил для создания и обработки запросов на пересылку сообщений (рис. 1.13). Компьютер в Китае должен понимать запрос от компьютера в Нигерии, даже если они используют разные языки, операционные системы и оборудование.

 

Рис. 1.13. «До интернета». Любезно предоставлено http://xkcd.com

Интернет-протокол

Мы видели, что для установки соединения с другим компьютером необходимо следовать правилам Medium Access Control. Точно так же нужно следовать интернет-протоколу, или IP8, чтобы просить маршрутизаторы пересылать сообщения на другие компьютеры в вашей локальной сети или в интернете.

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

 

Рис. 1.14. Ада отправляет своему маршрутизатору (у Чарльза) кадр Ethernet, содержащий IP-пакет для Луи. Таким образом, кадр Ethernet содержит физический адрес Чарльза, а пакет — адрес Луи. После этого Чарльз перешлет пакет в новом собственном кадре, содержащем некий физический адрес во Франции

IP-пакет содержит адреса местоположения отправителя и получателя, после чего следуют любые данные, которые они хотят передать. Чтобы отправить IP-пакет, мы передаем кадр, в котором полезной информацией является IP-пакет, а тип такого кадра — 86DD. Когда маршрутизатор получает кадр этого типа, IP-пакет повторно передается в другом кадре на следующий компьютер по пути к месту назначения пакета (рис. 1.14).

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

1.3. IP-адресация

Интернет-протокол устанавливает правила работы с адресами местоположения — поэтому они и называются IP-адресами. Компьютеры способны отправлять или получать IP-пакеты только после получения IP-адреса. Разрешение на использование группы IP-адресов в первую очередь предоставляется организации. Эти адреса затем назначаются компьютерам, которые прямо или косвенно связаны с этой самой организацией.

Чтобы понять суть процесса, определим, что такое IP-адреса и как они записываются9. IP-адрес — это число длиной 128 бит10. Обычно они записываются в шестнадцатеричном формате с двоеточиями, разделяющими восемь групп по четыре цифры. Это IP-адрес сервера Facebook:

2a03:2880:f003:0c07:face:b00c:0000:0002

IP-адреса можно сокращать, опуская ведущие нули в любом четырехзначном блоке:

2a03:2880:f003:c07:face:b00c::2

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

 

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

Например, мы знаем, что все адреса, начинающиеся с префикса 2a03:2880, принадлежат компьютерам в сети Facebook. Те, которые начинаются с 2c0f:fb50:4002, находятся в сети Google в Кении. Для своего центра обработки данных в Сингапуре Google получил префикс 2404:6800.

Для целей маршрутизации локальные и глобальные сети с одним и тем же префиксом организованы в небольшие сети, называемые подсетями. Между префиксом маршрутизации и серединой IP-адреса указано, в какой именно подсети находится компьютер.

 

Это означает, что в Facebook есть сеть, где все компьютеры имеют IP-адреса, начинающиеся с 2a03:2880:f003:c07. Префикс маршрутизации и подсеть вместе образуют идентификатор сети IP-адреса. Идентификатор сети всегда состоит из 16 цифр (включая опущенные нули). Это означает, что в организации с более длинным префиксом маршрутизации может быть меньше подсетей.

Наконец, следующие 16 цифр IP-адреса называются идентификатором интерфейса, поскольку они указывают на конкретный сетевой интерфейс в подсети. Многие сетевые администраторы попросту заполняют эту часть IP-адреса MAC-адресом устройства. Эти цифры могут быть любыми, если они используются только один раз для каждой подсети.

 

Чтобы эта система адресации работала повсеместно, необходим механизм, гарантирующий, что никакие две организации не используют один и тот же префикс маршрутизации (рис. 1.15). Как и в случае с MAC-адресами, инженеры решили эту проблему посредством международной координации.

 

Рис. 1.15. Не спрашивайте начальницу, где она живет!

IANA

Инженеры всего мира согласились с тем, что американская некоммерческая организация Internet Assigned Numbers Authority (IANA) решает, кто и над каким префиксом IP-маршрутизации получает контроль. На практике IANA делегирует большую часть своих полномочий пяти некоммерческим организациям, которые называются Regional Internet Registries или RIR. Для этого он выделяет каждой RIR короткие шестнадцатеричные комбинации, которые они могут использовать в качестве первых цифр назначаемых ими префиксов маршрутизации (рис. 1.16, 1.17).

Чтобы получить префикс маршрутизации для вашей организации, придется сделать запрос в RIR того региона, где будут находиться ваши маршрутизаторы. Затем этот RIR назначит вам префикс, начинающийся с одной из своих комбинаций шестнадцатеричных цифр, которые им присвоила IANA.

 

Рис. 1.16. Примеры распределения по каждой RIR

 

Рис. 1.17. IANA делегирует полномочия по IP-адресации по географическому принципу: каждая RIR отвечает за свой регион

Например, Facebook, штаб-квартира которого находится в Ирландии, префикс маршрутизации получил от RIPE NCC. Точно так же швейцарский банк Credit Suisse имеет филиал в Латинской Америке, и префикс маршрутизации ему предоставила LACNIC (рис. 1.18).

Это означает, что компьютерам в филиалах Credit Suisse в Латинской Америке могут быть назначены следующие IP-адреса:

2801:80:1380::___:___:___:___

 

Рис. 1.18. Цепочка распределения IP-адресов для двух компаний

Сетевые администраторы в банке присваивают уникальную комбинацию шестнадцатеричных цифр каждой из своих подсетей, чтобы они умещались в оставшемся пространстве сетевой части . Поскольку каждая шестнадцатеричная цифра может иметь 16 различных значений, у банка достаточно места для 164 = 65 536 разных подсетей. Facebook, как более крупной организации, был предоставлен префикс с местом более чем на 4 миллиарда подсетей!

Мы уже видели, что сетевые администраторы могут сами выбирать, как им заполнять 16 свободных символов идентификатора интерфейса для отдельных устройств. Такие устройства могут затем отправлять и получать IP-пакеты в интернет и из интернета, пока их маршрутизатор подключен.

Провайдеры интернет-услуг

Большинство частных лиц и небольших организаций не имеют непосредственного отношения к RIR и не поддерживают пиринговые связи с другими компьютерными сетями. Вместо этого они покупают подключение к интернету у специализированных компаний, которые называются интернет-провайдерами (ISP, Internet Service Providers). Провайдеры устанавливают маршрутизаторы неподалеку от своих клиентов. Таким образом, они могут легко подключить один из своих маршрутизаторов к маршрутизатору в помещении любого клиента. Они же назначают и префикс маршрутизации для каждого из своих клиентов.

Посмотрим, как это работает на практике. В Великобритании интернет-провайдер Sky получил префикс маршрутизации 2a02:0c7f. Sky работает во многих британских городах, поэтому префикс делится между их региональными базами. Например, они назначают 2a02:c7f:48 своей сети в Милтон-Кинсе и 2a02:c7f:7e той, что в Ромфорде11. Предположим, Ада живет в Ромфорде и хочет создать сеть у себя дома. У нее имеются настольный компьютер и принтер, которые она хочет подключить с помощью кабеля Ethernet. Ей также нужна собственная сеть Wi-Fi для подключения смартфона, планшета и ноутбука.

Ада нанимает Sky, и они подключают свой маршрутизатор Romford к маршрутизатору в ее доме. Sky назначает маршрутизатору Ады 14-значный префикс маршрутизации на основе префикса из своей ромфордской базы. Каждой сети в доме Ады (проводной и беспроводной) назначается подсеть на основе префикса маршрутизации Sky, назначенного Аде. Рисунок 1.19 показывает полный процесс выделения IP-адресов от IANA к каждому из устройств Ada. Маршрутизатор Ады принимает IP-пакеты от нескольких компьютеров, но ее маршрутизатор способен с легкостью решить, по какому каналу пересылать каждый полученный пакет. Пакеты, адресованные компьютеру в одной из подсетей Ada, доставляются напрямую. Все остальные получаемые IP-пакеты пересылаются провайдеру.

Для маршрутизаторов, которые не полагаются на интернет-провайдера, это не так просто: с ними связываются несколько маршрутизаторов из нескольких компьютерных сетей. Но как же они решают, по какому каналу следует пересылать IP-пакет? И как они могут быть уверены, что пересылают его на маршрутизатор‚ расположенный ближе к конечному пункту назначения?

 

Рис. 1.19. Выделение IP-адресов от IANA устройствам Ada. Ее маршрутизатор использует разные подсети для проводных и беспроводных сетей и, следовательно, имеет разные IP-адреса для каждой из них

1.4. IP-маршрутизация

Предположим, Ада хочет отправить сообщение в Facebook со своего ноутбука. Она будет использовать интернет-протокол, поэтому начинает с создания IP-пакета, который содержит ее собственный IP-адрес, IP-адрес Facebook и ее сообщение в качестве полезной информации. Затем она передает пакет в составе кадра Wi-Fi со своего ноутбука на домашний маршрутизатор (рис. 1.20).

...