Сетевой уровень, или уровень Интернета, является основным элементом архитектуры TCP/IP. Именно этот уровень обеспечивает перемещение пакетов в пределах составной сети, образованной объединением нескольких подсетей. Основным протоколом сетевого уровня является межсетевой протокол (Internet Protocol, IP). В его задачу входит передвижение пакетов данных между сетями – от одного узла к другому до тех пор, пока данные не попадут в сеть назначения.
Задача уровня сетевых интерфейсов достаточно проста – он отвечает только за организацию взаимодействия с подсетями, входящими в составную сеть TCP/IP – это протоколы Ethernet, FDDI, ATM, 802.11 (отвечающий за работу Wi-Fi) и другие.
В рамках TCP/IP для идентификации сетевых интерфейсов используются три типа адресов – локальные (аппаратные) адреса, сетевые адреса (IP-адреса) и символьные (доменные) имена. В большинстве сетевых технологий LAN (таких как Ethernet, FDDI) для однозначной[12] адресации интерфейсов используются MAC-адреса. Локальный в данном случае означает – действующий не во всей составной сети, а лишь в пределах подсети. Для объединения сетей в глобальную сеть технология TCP/IP использует глобальную систему адресации, которая не зависит от способов адресации элементов отдельных сетей. Для ее реализации формируется пара из номера сети и номера узла, которая в совокупности составляет сетевой адрес – IP-адрес, который идентифицирует не отдельный узел сети (компьютер или маршрутизатор), а одно сетевое соединение (сетевой интерфейс). При этом каждый раз, когда пакет данных отправляется адресату через составную сеть (Интернет), в его заголовке указывается IP-адрес узла назначения. Перед тем как отправить пакет в следующую сеть, маршрутизатор должен определить на основании найденного IP-адреса следующего маршрутизатора его локальный адрес. Поскольку между IP-адресом и локальным адресом узла не существует функциональной взаимосвязи, для их соотношения используется протокол разрешения адресов ARP (см. рис. 3).
Рис. 3. Процедура преобразования адресов
При этом для упрощения адресации в сети используются символьные имена соответствующих узлов. Составляющие полного символьного (или доменного) имени разделяются точкой и перечисляются в следующем порядке: простое имя хоста, имя группы хостов, имя более крупной группы (домена) и так до имени домена самого высокого уровня (например, ru, us).
Основы построения сетей в целом и сети Интернет в частности оказали существенное влияние на возникновение и развитие применения технологии блокчейн. Блокчейн-системы в своей работе используют TCP/IP протоколы и могут рассматриваться в качестве приложения прикладного уровня.
Блокчейн представляет собой базу данных, распределенную между всеми включенными в сеть блокчейн (Blockchain Network) устройствами, с использованием которой пользователи осуществляют передачу информации. Блокчейн-технология не является каким-либо единым явлением, именем собственным, – в настоящее время это собирательное название для всевозможных способов реализации идеи, лежащей в блокчейн-технологии. Для того чтобы полноправно относиться к блокчейн-технологии в том смысле, в котором она изначально была отражена в работе Сатоши Накамото, блокчейн-структура должна удовлетворять следующим критериям.
• Иметь децентрализованную технологическую основу, то есть информация должна быть распределенной между всеми узлами сети и должна поддерживаться в актуальном состоянии через процессы репликации и синхронизации.
• Поддерживать неразрывную связь между блоками данных путем формирования в каждом новом блоке ссылки на предыдущий по отношению к нему блок.
• Эффективно кодировать массивы данных в уникальные информационные блоки стандартного размера, т. е. хешировать данные.
• Применять в своей работе стойкие к взлому криптографические алгоритмы для защиты содержащейся в блоках информации.
• Использовать элементы специального подраздела математики – теории игр – для обеспечения соблюдения правил сети и достижения консенсуса при создании новых блоков[13].
Как известно, любая информация, в том числе информация о транзакциях, может быть представлена объемом данных, который в ней содержится. Так и информация о транзакциях в системе блокчейн представляет объем данных, объединенных в своего рода звенья, которые в свою очередь объединены в хронологическом порядке в цепочку блоков, в которой каждый предыдущий блок подтверждает действительность последующего путем включения информации о предыдущих транзакциях в виде особого криптографического ключа в заголовок каждого последующего блока транзакций (см. рис. 4)[14]. При этом каждый из участников сети (так называемые ноды[15]) хранит как минимум часть всей базы данных, что обеспечивает ее устойчивость к противоправным действиям со стороны как третьих лиц, так и самих участников. Под транзакцией в случае с блокчейн-технологией подразумевается любое взаимодействие между участниками блокчейн-системы – будь то передача какого-либо актива (например, криптовалюты) или передача информации – каждое из этих взаимодействий фиксируется в блоке системы.
Каждый блок, содержащий информацию о транзакциях в сети блокчейн, идентифицируется с помощью криптографического ключа – хэша (hash) – который генерируется с использованием криптографических алгоритмов, таких как SHA256 (используется в сети Биткоин)[16], SHA-3 (Ethereum) и другие. Инструмент хэширования информации является неотъемлемой частью технологии блокчейн – оно используется для адресации в блокчейн-сетях, для формирования электронной «подписи» транзакций, а также для создания новых блоков – т. е. «майнинга». Хэширование – это алгоритмический метод преобразования набора данных произвольного размера в стандартизированную строку фиксированной длины. Алгоритм преобразования, используемый в блокчейн-сетях, не допускает повторения одного и того же хэша в различных блоках, который свойственен более простым хэш-таблицам. Использование хэширования позволяет удостовериться в целостности информации, содержащейся в каждом последующем блоке в сети блокчейн, путем так называемой проверки «контрольной суммы», расчет которой основан на алгоритме хеширования. Для реализации этого подхода блокчейн-системы могут использовать, например, распределенные хэш-таблицы[17] или хэш-таблицы с прямым связыванием.
Использование такого механизма позволяет также гарантировать неизменность предыдущих блоков, поскольку хеширование каждого блока делает невозможным изменения содержания каждого предыдущего без изменения содержания каждого последующего блока – такое действие потребует такого количества времени и вычислительных мощностей систем, что делает такое действие нерациональным с экономической точки зрения (даже несмотря на привлекательную стоимость Биткоина в настоящий момент). Безусловно, когда речь идет о «неизменности» информации в сети блокчейн, это, в первую очередь, теоретическое предположение. Чем больше участников в блокчейн-системе, тем сложнее изменить содержание тех блоков, информация в которых возникла раньше, или вмешаться в процесс создания новых блоков. Вместе с тем существует возможность захвата контроля над блокчейн-сетью лицами, обладающих большими вычислительными мощностями – так называемая атака 51 %[18], при которой захват контроля над 51 % вычислительной мощности сети, необходимой для достижения консенсуса, позволит изменять как содержание предыдущих блоков, так и изменять информацию в создаваемых блоках. Такая ситуация произошла 25 апреля с блокчейн-сетью Bitcoin Gold – было похищено 18 миллионов долларов в результате атаки 51 %[19]. Более того, как уже отмечалось, каждый из участников сети хранит как минимум часть всей базы данных – следовательно, единовременно в популярных блокчейн-системах может существовать десятки тысяч копий всей информации, что еще больше усложняет попытки как-то изменить информацию о транзакциях.